[*] Binary protection state of libsqlcipher.so.0.8.6

  
  	Full RELRO     Canary found      NX enabled   DSO          No RPATH     No RUNPATH   No Symbols


[*] Function mmap tear down of libsqlcipher.so.0.8.6

    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x4 */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) fcn.00000004 ()                              | void fcn_00000004 (int32_t arg2) {
                                                         |     int32_t var_4h;
                                                         |     r1 = arg2;
                                                         |     if (? != ?) {
    0x00000004 andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
                                                         |     if (? != ?) {
    0x00000008 andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
                                                         |     if (? != ?) {
    0x0000000c andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
                                                         |     if (? != ?) {
    0x00000010 andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
                                                         |     if (? != ?) {
    0x00000014 andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
                                                         |     if (? != ?) {
    0x00000018 andeq r0, r1, r0                          |         r0 = r1 & r0;
                                                         |     }
                                                         |     if (? != ?) {
    0x0000001c andeq r0, r0, r1                          |         r0 &= r1;
                                                         |     }
                                                         |     if (? != ?) {
    0x00000020 andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
                                                         |     if (? != ?) {
    0x00000024 andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
                                                         |     if (? != ?) {
    0x00000028 andeq r0, r0, r1                          |         r0 &= r1;
                                                         |     }
                                                         |     if (? != ?) {
    0x0000002c andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
                                                         |     if (? != ?) {
    0x00000030 andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
                                                         |     if (? != ?) {
    0x00000034 andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
                                                         |     if (? != ?) {
    0x00000038 andeq r0, r0, r3, lsr 1                   |         r0 &= (r3 >> 1);
                                                         |     }
    0x0000003c ldcllt p13, c0, [r2, 0]!                  |     __asm ("ldcllt p13, c0, [r2, 0]!");
                                                         |     if (? != ?) {
    0x00000040 andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
                                                         |     if (? != ?) {
    0x00000044 andeq r0, r0, r0, lsl 2                   |         r0 &= (r0 << 2);
                                                         |     }
                                                         |     if (? != ?) {
    0x00000048 andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
                                                         |     if (? < ?) {
    0x0000004c eorge sl, sb, r2, lsl 12                  |         sl = sb ^ (r2 << 12);
                                                         |     }
                                                         |     if (? != ?) {
    0x00000050 andeq r0, r0, r3                          |         r0 &= r3;
                                                         |     }
    0x00000054 invalid                                   |     
                                                         |     if (? != ?) {
    0x00000058 andeq r0, r0, r0, lsr 32                  |         r0 &= (r0 >> 32);
                                                         |     }
                                                         |     if (? != ?) {
    0x0000005c andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
                                                         |     if (? != ?) {
    0x00000060 andeq r0, r0, r2                          |         r0 &= r2;
                                                         |     }
                                                         |     if (? >= ?) {
    0x00000064 strlt r0, [r0], -2                        |         *(r0) = r0;
                                                         |         r0 += -2;
                                                         |     }
                                                         |     if (? != ?) {
    0x00000068 andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
                                                         |     if (? != ?) {
    0x0000006c andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
    0x00000070 smlabbeq r0, r0, r0, r0                   |     __asm ("smlabbeq r0, r0, r0, r0");
                                                         |     if (? != ?) {
    0x00000074 andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
                                                         |     if (? != ?) {
    0x00000078 andeq r0, r0, r0, asr 32                  |         r0 &= (r0 >> 32);
                                                         |     }
    0x0000007c ldcllt p13, c0, [r2, 0x28c]!              |     __asm ("ldcllt p13, c0, aav.0x000000ff!");
                                                         |     if (? != ?) {
    0x00000080 andeq r0, r0, r1                          |         r0 &= r1;
                                                         |     }
                                                         |     if (? != ?) {
    0x00000084 andeq r0, r0, r4, lsl r0                  |         r0 &= (r4 << r0);
                                                         |     }
                                                         |     if (? != ?) {
    0x00000088 andeq r0, r0, r8, asr 32                  |         r0 &= (r8 >> 32);
                                                         |     }
    0x0000008c invalid                                   |     
    0x00000090 invalid                                   |     
                                                         |     if (? != ?) {
    0x00000094 andeq r0, r0, r0, lsl 4                   |         r0 &= (r0 << 4);
                                                         |     }
                                                         |     if (? != ?) {
    0x00000098 andeq r2, r0, 0                           |         r2 = 0;
                                                         |     }
    0x0000009c invalid                                   |     
    0x000000a0 rscseq pc, pc, r0, lsl 28                 |     __asm ("rscseq pc, pc, r0, lsl 28");
                                                         |     if (? != ?) {
    0x000000a4 andeq r1, r6, r8, ror 23                  |         r1 = r6 & (r8 >>> 23);
                                                         |     }
    0x000000a8 invalid                                   |     
                                                         |     if (? != ?) {
    0x000000ac andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
                                                         |     if (? != ?) {
    0x000000b0 andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
                                                         |     if (? != ?) {
    0x000000b4 andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
                                                         |     if (? != ?) {
    0x000000b8 andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
                                                         |     if (? != ?) {
    0x000000bc andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
                                                         |     if (? != ?) {
    0x000000c0 andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
                                                         |     if (? != ?) {
    0x000000c4 andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
                                                         |     if (? != ?) {
    0x000000c8 andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
                                                         |     if (? != ?) {
    0x000000cc andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
                                                         |     if (? != ?) {
    0x000000d0 andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
                                                         |     if (? != ?) {
    0x000000d4 andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
                                                         |     if (? != ?) {
    0x000000d8 andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
                                                         |     if (? != ?) {
    0x000000dc andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
                                                         |     if (? != ?) {
    0x000000e0 andeq r0, r0, r1                          |         r0 &= r1;
                                                         |     }
    0x000000e4 rsbseq r0, r4, r0                         |     __asm ("rsbseq r0, r4, r0");
    0x000000e8 invalid                                   |     
                                                         |     if (? != ?) {
    0x000000ec andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
                                                         |     if (? != ?) {
    0x000000f0 andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
    0x000000f4 ldrbtvs lr, [r4], -0x56d                  |     __asm ("ldrbtvs lr, [r4], -aav.0x000000ff");
    0x000000f8 ldrbtvs lr, [r4], -0x570                  |     __asm ("ldrbtvs lr, [r4], -aav.0x000000ff");
    0x000000fc stmdavc r0, {r0, r1, r2, r4, r6, r8}      |     __asm ("stmdavc r0, {r0, r1, r2, r4, r6, r8}");
                                                         |     if (? != ?) {
    0x00000100 andeq r0, r0, r2                          |         r0 &= r2;
                                                         |     }
                                                         |     if (? != ?) {
    0x00000104 andeq r0, r1, r3, lsl 2                   |         r0 = r1 & (r3 << 2);
                                                         |     }
                                                         |     if (? != ?) {
    0x00000108 andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
                                                         |     if (? != ?) {
    0x0000010c andeq r0, r0, lr, lsr 32                  |         r0 &= (lr >> 32);
                                                         |     }
                                                         |     if (? != ?) {
    0x00000110 andeq r0, r0, r0, lsl 2                   |         r0 &= (r0 << 2);
                                                         |     }
                                                         |     if (? != ?) {
                                                         |         /* [01] -r-- section size 36 named .note.gnu.build-id */
    0x00000114 andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
                                                         |     if (? != ?) {
    0x00000118 andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
                                                         |     if (? != ?) {
    0x0000011c andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
                                                         |     if (? != ?) {
    0x00000120 andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
                                                         |     if (? != ?) {
    0x00000124 andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
                                                         |     if (? != ?) {
    0x00000128 andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
    0x0000012c invalid                                   |     
    0x00000130 eorseq r0, lr, r2                         |     __asm ("eorseq r0, lr, r2");
    0x00000134 invalid                                   |     
                                                         |     /* [02] -r-- section size 3276 named .gnu.hash */
    0x00000138 invalid                                   |     
    0x0000013c invalid                                   |     
                                                         |     if (? != ?) {
    0x00000140 andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
                                                         |     if (? != ?) {
    0x00000144 andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
                                                         |     if (? < ?) {
    0x00000148 subge r0, r5, r0                          |         r0 = r5 - r0;
                                                         |     }
    0x0000014c subseq r4, r6, r0, lsl 30                 |     __asm ("subseq r4, r6, r0, lsl 30");
                                                         |     if (? != ?) {
    0x00000150 andeq r0, r0, r1                          |         r0 &= r1;
                                                         |     }
    0x00000154 andvs r0, r0, 2                           |     __asm ("andvs r0, r0, 2");
    0x00000158 invalid                                   |     
    0x0000015c invalid                                   |     
    0x00000160 stmdaeq r0, {sl}                          |     __asm ("stmdaeq r0, {sl}");
                                                         |     if (? <= ?) {
    0x00000164 ldrhi r2, [r0, -0x102]                    |         r2 = *((r0 - 0x102));
                                                         |     }
                                                         |     if (? == ?) {
    0x00000168 andne r0, r0, 8, 8                        |         r0 &= (8 8);
                                                         |     }
    0x0000016c blne 0x882414                             |     __asm ("blne aav.0x000000ff");
    0x00000170 invalid                                   |     
                                                         |     if (? != ?) {
    0x00000174 andeq r0, r0, r6                          |         r0 &= r6;
                                                         |     }
                                                         |     if (? != ?) {
    0x00000178 andeq r0, r0, r1, lsl r0                  |         r0 &= (r1 << r0);
                                                         |     }
                                                         |     if (? != ?) {
    0x0000017c andeq r0, r2, r0, lsl 2                   |         r0 = r2 & (r0 << 2);
                                                         |     }
                                                         |     if (? < ?) {
    0x00000180 andhs r0, r2, 0x40000000                  |         r0 = r2 & 0x40000000;
                                                         |     }
                                                         |     if (? != ?) {
    0x00000184 andeq r0, r1, r2, lsl 2                   |         r0 = r1 & (r2 << 2);
                                                         |     }
    0x00000188 mrseq r8, spsr                            |     __asm ("mrseq r8, spsr");
                                                         |     if (? != ?) {
    0x0000018c andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
                                                         |     if (? != ?) {
    0x00000190 andeq r0, r0, r0                          |         r0 &= r0;
                                                         |     }
    0x00000194 invalid                                   |     
                                                         |     if (? >= ?) {
    0x00000198 addmi r0, r1, r0, asr 32                  |         r0 = r1 + (r0 >> 32);
                                                         |     }
    0x0000019c invalid                                   |     
                                                         | }
    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x6a00 */
                                                 | #include <stdint.h>
                                                 |  
                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                 |  
    ; (fcn) fcn.00006a00 ()                      | void fcn_00006a00 (int16_t arg1) {
                                                 |     r0 = arg1;
    0x00006a00 invalid                           |     
    0x00006a04 movs r0, r0                       |     
    0x00006a06 movs r0, r0                       |     
    0x00006a08 ldrb r0, [r2]                     |     r0 = *(r2);
    0x00006a0a cmp r0, 0xbf                      |     
                                                 |     if (r0 < 0xbf) {
    0x00006a0c bls 0x6a66                        |         goto label_0;
                                                 |     }
    0x00006a0e ldr r1, [pc, 0x64]                |     
    0x00006a10 movs r0, r0                       |     
    0x00006a12 movs r0, r0                       |     
    0x00006a14 b 0x6a1a                          |     goto label_1;
    0x00006a16 add r1, pc                        |     r1 = 0xd490;
    0x00006a18 mov r2, r1                        |     r2 = r1;
                                                 | label_1:
    0x00006a1a and r1, lr, 0xc0                  |     r1 = lr & 0xc0;
    0x00006a1e add r2, r0                        |     r2 += r0;
    0x00006a20 cmp r1, 0x80                      |     
    0x00006a22 ldrb r0, [r2, -0xc0]              |     r0 = *((r2 - 0xc0));
                                                 |     if (r1 != 0x80) {
    0x00006a26 bne 0x6a68                        |         goto label_2;
                                                 |     }
                                                 |     do {
    0x00006a28 adds r3, 1                        |         r3++;
    0x00006a2a str.w r3, [ip]                    |         __asm ("str.w r3, [ip]");
    0x00006a2e ldrb r2, [r3]                     |         r2 = *(r3);
    0x00006a30 ldrb r1, [r3, -0x1]               |         r1 = *((r3 - 0x1));
    0x00006a34 and r2, r2, 0xc0                  |         r2 &= 0xc0;
    0x00006a38 cmp r2, 0x80                      |         
    0x00006a3a and r1, r1, 0x3f                  |         r1 &= 0x3f;
    0x00006a3e add.w r0, r1, r0, lsl 6           |         r0 = r1 + (r0 << 6);
    0x00006a42 beq 0x6a28                        |         
                                                 |     } while (r2 == 0x80);
    0x00006a44 cmp r0, 0x7f                      |     
                                                 |     if (r0 < 0x7f) {
    0x00006a46 bls 0x6a6c                        |         goto label_3;
                                                 |     }
    0x00006a48 bic r3, r0, 0x7f8                 |     r3 = BIT_MASK (r0, 0x7f8);
    0x00006a4c bic r3, r3, 7                     |     r3 = BIT_MASK (r3, 7);
    0x00006a50 cmp.w r3, 0xd800                  |     
                                                 |     if (r3 == 0xd800) {
    0x00006a54 beq 0x6a6c                        |         goto label_3;
                                                 |     }
    0x00006a56 bic r2, r0, 1                     |     r2 = BIT_MASK (r0, 1);
    0x00006a5a movw r3, 0xfffe                   |     r3 = 0xfffe;
    0x00006a5e cmp r2, r3                        |     
                                                 |     if (r2 == r3) {
    0x00006a60 beq 0x6a6c                        |         goto label_3;
                                                 |     }
                                                 |     do {
    0x00006a62 ldr pc, [sp], 4                   |         pc = *(sp);
                                                 |         sp += 4;
                                                 | label_0:
    0x00006a66 bx lr                             |         return;
                                                 | label_2:
    0x00006a68 cmp r0, 0x7f                      |         
    0x00006a6a bhi 0x6a62                        |         
                                                 |     } while (r0 > 0x7f);
                                                 | label_3:
    0x00006a6c movw r0, 0xfffd                   |     r0 = 0xfffd;
    0x00006a70 ldr pc, [sp], 4                   |     pc = *(sp);
                                                 |     sp += 4;
                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x6a78 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00006a78 ()                                      | void fcn_00006a78 (int16_t arg1, int16_t arg2, uint32_t arg3, uint32_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;
    0x00006a78 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00006a7c cmp r3, 1                                         |     
    0x00006a7e sub sp, 0x14                                      |     
    0x00006a80 mov r4, r1                                        |     r4 = r1;
    0x00006a82 mov ip, r0                                        |     
    0x00006a84 mov.w r0, 0                                       |     r0 = 0;
    0x00006a88 str r1, [sp]                                      |     *(sp) = r1;
    0x00006a8a mov.w r1, 0                                       |     r1 = 0;
    0x00006a8e strd r0, r1, [r4]                                 |     __asm ("strd r0, r1, [r4]");
                                                                 |     if (r3 == 1) {
    0x00006a92 beq.w 0x6d30                                      |         goto label_22;
                                                                 |     }
    0x00006a96 rsb.w r1, r3, 3                                   |     r1 = 3 - r3;
    0x00006a9a cmp r2, r1                                        |     
                                                                 |     if (r2 > r1) {
    0x00006a9c bgt 0x6aa6                                        |         goto label_23;
                                                                 |     }
    0x00006a9e b 0x6aae                                          |     goto label_24;
                                                                 |     do {
    0x00006aa0 adds r1, 2                                        |         r1 += 2;
    0x00006aa2 cmp r2, r1                                        |         
                                                                 |         if (r2 <= r1) {
    0x00006aa4 ble 0x6aae                                        |             goto label_24;
                                                                 |         }
                                                                 | label_23:
    0x00006aa6 ldrb.w r0, [ip, r1]                               |         r0 = *((ip + r1));
    0x00006aaa cmp r0, 0                                         |         
    0x00006aac beq 0x6aa0                                        |         
                                                                 |     } while (r0 == 0);
                                                                 | label_24:
    0x00006aae cmp r2, r1                                        |     
    0x00006ab0 mov.w r5, 2                                       |     r5 = 2;
    0x00006ab4 ite le                                            |     
                                                                 |     if (r2 > r1) {
    0x00006ab6 movle r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (r2 <= r1) {
    0x00006ab8 movgt r2, 1                                       |         r2 = 1;
                                                                 |     }
    0x00006aba str r2, [sp, 8]                                   |     var_8h = r2;
    0x00006abc subs r2, r3, 3                                    |     r2 = r3 - 3;
    0x00006abe add r2, r1                                        |     r2 += r1;
    0x00006ac0 and r3, r3, 1                                     |     r3 &= 1;
    0x00006ac4 add r2, ip                                        |     r2 += ip;
    0x00006ac6 add ip, r3                                        |     
                                                                 | label_6:
    0x00006ac8 cmp ip, r2                                        |     
                                                                 |     if (ip >= r2) {
    0x00006aca bhs.w 0x6cb6                                      |         goto label_1;
                                                                 |     }
    0x00006ace ldr.w r0, [pc, 0x478]                             |     r0 = *(0x00006f48);
    0x00006ad2 add r0, pc                                        |     r0 += pc;
    0x00006ad4 b 0x6ade                                          |     
                                                                 |     while (r7 < r1) {
    0x00006ad6 add ip, r5                                        |         
    0x00006ad8 cmp ip, r2                                        |         
                                                                 |         if (ip >= r2) {
    0x00006ada bhs.w 0x6cb6                                      |             goto label_1;
                                                                 |         }
    0x00006ade ldrb.w r3, [ip]                                   |         r3 = *(ip);
    0x00006ae2 adds r1, r0, r3                                   |         r1 = r0 + r3;
    0x00006ae4 ldrb.w r1, [r1, 0x40]                             |         r1 = *((r1 + 0x40));
    0x00006ae8 lsls r7, r1, 0x1f                                 |         r7 = r1 << 0x1f;
    0x00006aea bmi 0x6ad6                                        |         
                                                                 |     }
    0x00006aec cmp r2, ip                                        |     
                                                                 |     if (r2 < ip) {
    0x00006aee bls.w 0x6cb6                                      |         goto label_1;
                                                                 |     }
    0x00006af2 cmp r3, 0x2d                                      |     
    0x00006af4 ittt eq                                           |     
                                                                 |     if (r3 != 0x2d) {
    0x00006af6 moveq r3, -1                                      |         r3 = -1;
                                                                 |     }
                                                                 |     if (r3 != 0x2d) {
    0x00006afa addeq ip, r5                                      |         
                                                                 |     }
                                                                 |     if (r3 == 0x2d) {
    0x00006afc str r3, [sp, 0xc]                                 |         var_ch = r3;
                                                                 |     }
                                                                 |     if (r3 == 0x2d) {
    0x00006afe beq.w 0x6cbe                                      |         goto label_25;
                                                                 |     }
    0x00006b02 cmp r3, 0x2b                                      |     
    0x00006b04 ittt eq                                           |     
                                                                 |     if (r3 != 0x2b) {
    0x00006b06 moveq r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r3 != 0x2b) {
    0x00006b08 addeq ip, r5                                      |         
                                                                 |     }
                                                                 |     if (r3 != 0x2b) {
    0x00006b0a streq r3, [sp, 0xc]                               |         var_ch = r3;
                                                                 |     }
                                                                 |     if (r3 == 0x2b) {
    0x00006b0c beq.w 0x6cbe                                      |         goto label_25;
                                                                 |     }
    0x00006b10 movs r4, 1                                        |     r4 = 1;
    0x00006b12 str r3, [sp, 0xc]                                 |     var_ch = r3;
                                                                 | label_0:
    0x00006b14 adds r3, 0                                        |     r3 += 0;
    0x00006b16 b 0x6b22                                          |     
                                                                 |     while (r0 == r0) {
    0x00006b18 add ip, r5                                        |         
    0x00006b1a adds r3, 1                                        |         r3++;
    0x00006b1c cmp ip, r2                                        |         
                                                                 |         if (ip >= r2) {
    0x00006b1e bhs.w 0x6c9a                                      |             goto label_26;
                                                                 |         }
    0x00006b22 pld [ip, 0x900]                                   |         __asm ("pld aav.0x000000ff");
    0x00006b26 lsls r7, r5, 5                                    |         r7 = r5 << 5;
    0x00006b28 lsrs r0, r0, 0x1c                                 |         r0 >>= 0x1c;
    0x00006b2a beq 0x6b18                                        |         
                                                                 |     }
    0x00006b2c cmp r2, ip                                        |     
                                                                 |     if (r2 < ip) {
    0x00006b2e bls.w 0x7090                                      |         goto label_27;
                                                                 |     }
    0x00006b32 ldr.w r1, [pc, 0x418]                             |     
    0x00006b36 mov r6, lr                                        |     r6 = lr;
    0x00006b38 add r1, pc                                        |     r1 = 0xda8a;
    0x00006b3a add r1, lr                                        |     r1 += lr;
    0x00006b3c ldrb.w r4, [r1, 0x40]                             |     r4 = *((r1 + 0x40));
    0x00006b40 ands r4, r4, 4                                    |     r4 &= 4;
    0x00006b44 itt eq                                            |     
                                                                 |     if (r4 != r4) {
    0x00006b46 moveq r0, r4                                      |         r0 = r4;
                                                                 |     }
                                                                 |     if (r4 == r4) {
    0x00006b48 asreq r1, r4, 0x14                                |         __asm ("asreq r1, r4, 0x14");
                                                                 |     }
    0x00006b4a movs r0, r0                                       |     
    0x00006b4c strh r0, [r0]                                     |     *(r0) = r0;
    0x00006b4e ldr.w sl, [pc, 0x400]                             |     
    0x00006b52 movs r0, 0                                        |     r0 = 0;
    0x00006b54 movw sb, 0xcccb                                   |     
    0x00006b58 movw r8, 0xcccc                                   |     
    0x00006b5c movt sb, 0xcccc                                   |     sb = 0xcccccccb;
    0x00006b60 movt r8, 0xccc                                    |     r8 = 0xccccccc;
    0x00006b64 add sl, pc                                        |     sl = 0xdaba;
    0x00006b66 mov r1, r0                                        |     r1 = r0;
                                                                 |     do {
    0x00006b68 lsls r7, r1, 2                                    |         r7 = r1 << 2;
    0x00006b6a lsls r4, r0, 2                                    |         r4 = r0 << 2;
    0x00006b6c orr.w r7, r7, r0, lsr 30                          |         r7 |= (r0 >> 30);
    0x00006b70 adds r0, r4, r0                                   |         r0 = r4 + r0;
    0x00006b72 sub.w r6, r6, 0x30                                |         r6 -= 0x30;
    0x00006b76 adc.w r7, r1, r7                                  |         __asm ("adc.w r7, r1, r7");
    0x00006b7a adds r0, r0, r0                                   |         r0 += r0;
    0x00006b7c adcs r7, r7                                       |         __asm ("adcs r7, r7");
    0x00006b7e add ip, r5                                        |         
    0x00006b80 adds r0, r6, r0                                   |         r0 = r6 + r0;
    0x00006b82 add.w r3, r3, 1                                   |         r3++;
    0x00006b86 adc.w r1, r7, r6, asr 31                          |         __asm ("adc.w r1, r7, r6, asr 31");
    0x00006b8a cmp ip, r2                                        |         
                                                                 |         if (ip >= r2) {
    0x00006b8c bhs.w 0x6d3a                                      |             goto label_28;
                                                                 |         }
    0x00006b90 ldrb.w lr, [ip]                                   |         
    0x00006b94 cmp r0, sb                                        |         
    0x00006b96 sbcs.w r4, r1, r8                                 |         __asm ("sbcs.w r4, r1, r8");
    0x00006b9a ite lt                                            |         
                                                                 |         if (r0 >= sb) {
    0x00006b9c movlt r4, 1                                       |             r4 = 1;
                                                                 |         }
                                                                 |         if (r0 < sb) {
    0x00006b9e movge r4, 0                                       |             r4 = 0;
                                                                 |         }
    0x00006ba0 add.w r7, sl, lr                                  |         r7 = sl + lr;
    0x00006ba4 mov r6, lr                                        |         r6 = lr;
    0x00006ba6 ldrb.w r7, [r7, 0x40]                             |         r7 = *((r7 + 0x40));
    0x00006baa ands.w r4, r4, r7, lsr 2                          |         r4 &= (r7 >> 2);
    0x00006bae bne 0x6b68                                        |         
                                                                 |     } while (r4 != r4);
    0x00006bb0 ldr.w r8, [pc, 0x3a0]                             |     
    0x00006bb4 add r8, pc                                        |     r8 = 0xdb0c;
    0x00006bb6 b 0x6bc4                                          |     
                                                                 |     while (ip <= r2) {
    0x00006bb8 ldrb.w lr, [ip]                                   |         
    0x00006bbc add.w r6, r8, lr                                  |         r6 = r8 + lr;
    0x00006bc0 ldrb.w r7, [r6, 0x40]                             |         r7 = *((r6 + 0x40));
    0x00006bc4 lsls r6, r7, 0x1d                                 |         r6 = r7 << 0x1d;
                                                                 |         if (r6 >= r7) {
    0x00006bc6 bpl 0x6cc6                                        |             goto label_29;
                                                                 |         }
    0x00006bc8 add ip, r5                                        |         
    0x00006bca adds r3, 1                                        |         r3++;
    0x00006bcc cmp ip, r2                                        |         
    0x00006bce add.w r4, r4, 1                                   |         r4++;
    0x00006bd2 blo 0x6bb8                                        |         
                                                                 |     }
                                                                 | label_2:
    0x00006bd4 mov.w r8, 1                                       |     r8 = 1;
    0x00006bd8 mov r6, r8                                        |     r6 = r8;
                                                                 | label_3:
    0x00006bda orrs.w r2, r0, r1                                 |     r2 = r0 | r1;
                                                                 |     if (r2 == r0) {
    0x00006bde beq.w 0x6d1c                                      |         goto label_21;
                                                                 |     }
    0x00006be2 movw r5, 0xcccc                                   |     
    0x00006be6 cmp.w r0, -0x33333334                             |     
    0x00006bea movt r5, 0xccc                                    |     r5 = 0xccccccc;
    0x00006bee b 0x6c0a                                          |     
                                                                 |     while (r3 != 0) {
    0x00006bf0 lsls r3, r1, 2                                    |         r3 = r1 << 2;
    0x00006bf2 lsls r2, r0, 2                                    |         r2 = r0 << 2;
    0x00006bf4 orr.w r3, r3, r0, lsr 30                          |         r3 |= (r0 >> 30);
    0x00006bf8 adds r0, r2, r0                                   |         r0 = r2 + r0;
    0x00006bfa add.w r4, r4, -1                                  |         r4 += -1;
    0x00006bfe adc.w r1, r1, r3                                  |         __asm ("adc.w r1, r1, r3");
    0x00006c02 adds r0, r0, r0                                   |         r0 += r0;
    0x00006c04 adcs r1, r1                                       |         __asm ("adcs r1, r1");
    0x00006c06 cmp.w r0, -0x33333334                             |         
    0x00006c0a sbcs.w r3, r1, r5                                 |         __asm ("sbcs.w r3, r1, r5");
    0x00006c0e ite lt                                            |         
                                                                 |         if (r0 >= -0x33333334) {
    0x00006c10 movlt r3, 1                                       |             r3 = 1;
                                                                 |         }
                                                                 |         if (r0 < -0x33333334) {
    0x00006c12 movge r3, 0                                       |             r3 = 0;
                                                                 |         }
    0x00006c14 cmp r4, 0                                         |         
    0x00006c16 ite le                                            |         
                                                                 |         if (r4 > 0) {
    0x00006c18 movle r3, 0                                       |             r3 = 0;
                                                                 |         }
                                                                 |         if (r4 <= 0) {
    0x00006c1a andgt r3, r3, 1                                   |             r3 &= 1;
                                                                 |         }
    0x00006c1e cmp r3, 0                                         |         
    0x00006c20 bne 0x6bf0                                        |         
                                                                 |     }
    0x00006c22 movs r5, 1                                        |     r5 = 1;
                                                                 | label_18:
    0x00006c24 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00006c26 adds r3, 1                                        |     r3++;
                                                                 |     if (r3 == 1) {
    0x00006c28 beq.w 0x6d96                                      |         goto label_30;
                                                                 |     }
                                                                 | label_8:
    0x00006c2c cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00006c2e beq.w 0x6e16                                      |         goto label_19;
                                                                 |     }
                                                                 | label_7:
    0x00006c32 bl 0x5e4a4                                        |     fcn_0005e4a4 (r0, r1, r2);
    0x00006c36 sub.w r3, r4, 0x134                               |     r3 = r4 - 0x134;
    0x00006c3a vmov d18, r0, r1                                  |     __asm ("vmov d18, r0, r1");
    0x00006c3e cmp r3, 0x21                                      |     
                                                                 |     if (r3 > 0x21) {
    0x00006c40 bhi.w 0x6ffe                                      |         goto label_31;
                                                                 |     }
    0x00006c44 movw r2, 0x3885                                   |     
    0x00006c48 movw r3, 0xc77b                                   |     
    0x00006c4c movt r2, 0x3f2b                                   |     r2 = 0x3f2b3885;
    0x00006c50 movt r3, 0xd4                                     |     r3 = 0xd4c77b;
    0x00006c54 mul r1, r2, r4                                    |     r1 = r2 * r4;
    0x00006c58 vmov.f64 d16, 1.000000e+00                        |     __asm ("vmov.f64 d16, 1");
    0x00006c5c cmp.w r3, r1, ror 2                               |     
                                                                 |     if (r3 >= r1) {
    0x00006c60 bhs 0x6c86                                        |         goto label_32;
                                                                 |     }
    0x00006c62 movw r0, 0x8ef4                                   |     
    0x00006c66 movw r1, 0xc77a                                   |     
    0x00006c6a vmov.f64 d17, 1.000000e+01                        |     __asm ("vmov.f64 d17, 1");
    0x00006c6c subs r4, r0, r4                                   |     r4 = r0 - r4;
    0x00006c6e movt r0, 0x1a9                                    |     r0 = 0x1a98ef4;
    0x00006c72 movt r1, 0xd4                                     |     r1 = 0xd4c77a;
                                                                 |     do {
    0x00006c76 subs r4, 1                                        |         r4--;
    0x00006c78 vmul.f64 d16, d16, d17                            |         __asm ("vmul.f64 d16, d16, d17");
    0x00006c7c mla r3, r2, r4, r0                                |         __asm ("mla r3, r2, r4, r0");
    0x00006c80 cmp.w r1, r3, ror 2                               |         
    0x00006c84 blo 0x6c76                                        |         
                                                                 |     } while (r1 <= r3);
                                                                 | label_32:
    0x00006c86 adds r5, 1                                        |     r5++;
                                                                 |     if (r5 == 1) {
    0x00006c88 beq.w 0x7078                                      |         goto label_33;
                                                                 |     }
    0x00006c8c vmul.f64 d16, d16, d18                            |     __asm ("vmul.f64 d16, d16, d18");
    0x00006c90 vldr d17, [pc, 0x2a4]                             |     __asm ("vldr d17, aav.0x000000ff");
    0x00006c94 vmul.f64 d16, d16, d17                            |     __asm ("vmul.f64 d16, d16, d17");
    0x00006c98 b 0x6caa                                          |     goto label_5;
                                                                 | label_26:
    0x00006c9a ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00006c9c cmp r3, 0                                         |     
                                                                 |     if (r3 < 0) {
    0x00006c9e blt 0x6d3e                                        |         goto label_34;
                                                                 |     }
    0x00006ca0 mov.w r8, 1                                       |     r8 = 1;
    0x00006ca4 mov r6, r8                                        |     r6 = r8;
                                                                 | label_4:
    0x00006ca6 vmov.i64 d16, 0                                   |     __asm ("vmov.i64 d16, 0");
                                                                 | label_5:
    0x00006caa ldr r3, [sp]                                      |     r3 = *(sp);
    0x00006cac vstr d16, [r3]                                    |     __asm ("vstr d16, [r3]");
    0x00006cb0 cmp.w r8, 0                                       |     
                                                                 |     if (r8 != 0) {
    0x00006cb4 bne 0x6d4c                                        |         goto label_35;
                                                                 |     }
                                                                 | label_1:
    0x00006cb6 movs r0, 0                                        |     r0 = 0;
    0x00006cb8 add sp, 0x14                                      |     
    0x00006cba pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_25:
    0x00006cbe cmp r2, ip                                        |     
                                                                 |     if (r2 > ip) {
    0x00006cc0 bhi.w 0x6b14                                      |         goto label_0;
                                                                 |     }
    0x00006cc4 b 0x6cb6                                          |     goto label_1;
                                                                 | label_29:
    0x00006cc6 cmp r2, ip                                        |     
                                                                 |     if (r2 < ip) {
    0x00006cc8 bls 0x6bd4                                        |         goto label_2;
                                                                 |     }
    0x00006cca cmp.w lr, 0x2e                                    |     
                                                                 |     if (lr == 0x2e) {
    0x00006cce beq.w 0x6e20                                      |         goto label_36;
                                                                 |     }
                                                                 | label_14:
    0x00006cd2 and r6, lr, 0xdf                                  |     r6 = lr & 0xdf;
    0x00006cd6 cmp r6, 0x45                                      |     
                                                                 |     if (r6 == 0x45) {
    0x00006cd8 beq 0x6d5c                                        |         goto label_37;
                                                                 |     }
                                                                 |     if (r3 == 0) {
    0x00006cda cbz r3, 0x6cf8                                    |         goto label_11;
                                                                 |     }
                                                                 | label_10:
    0x00006cdc ldr r7, [pc, 0x278]                               |     
    0x00006cde mov r6, lr                                        |     r6 = lr;
    0x00006ce0 add r7, pc                                        |     r7 = 0xdc3c;
    0x00006ce2 b 0x6cee                                          |     
                                                                 |     while (r6 < r6) {
    0x00006ce4 add ip, r5                                        |         
    0x00006ce6 cmp ip, r2                                        |         
                                                                 |         if (ip >= r2) {
    0x00006ce8 bhs 0x6cf8                                        |             goto label_11;
                                                                 |         }
    0x00006cea ldrb.w r6, [ip]                                   |         r6 = *(ip);
    0x00006cee add r6, r7                                        |         r6 += r7;
    0x00006cf0 ldrb.w r6, [r6, 0x40]                             |         r6 = *((r6 + 0x40));
    0x00006cf4 lsls r6, r6, 0x1f                                 |         r6 <<= 0x1f;
    0x00006cf6 bmi 0x6ce4                                        |         
                                                                 |     }
                                                                 | label_11:
    0x00006cf8 movs r6, 1                                        |     r6 = 1;
                                                                 | label_9:
    0x00006cfa cmp ip, r2                                        |     
    0x00006cfc ite lo                                            |     
                                                                 |     if (ip >= r2) {
    0x00006cfe movlo r8, 0                                       |         r8 = 0;
                                                                 |     }
                                                                 |     if (ip >= r2) {
    0x00006d02 mov.w r8, 1                                       |         r8 = 1;
                                                                 |     }
    0x00006d06 cmp r3, 0                                         |     
    0x00006d08 it le                                             |     
                                                                 |     if (r3 > 0) {
    0x00006d0a movle r8, 0                                       |         r8 = 0;
                                                                 |     }
    0x00006d0e cmp r4, 0                                         |     
                                                                 |     if (r4 >= 0) {
    0x00006d10 bge.w 0x6bda                                      |         goto label_3;
                                                                 |     }
    0x00006d14 orrs.w r2, r0, r1                                 |     r2 = r0 | r1;
                                                                 |     if (r2 != r0) {
    0x00006d18 bne.w 0x6ee2                                      |         goto label_38;
                                                                 |     }
                                                                 | label_21:
    0x00006d1c ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x00006d1e subs r3, 0                                        |     
    0x00006d20 it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x00006d22 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x00006d24 ands.w r3, r3, r2, lsr 31                         |     r3 &= (r2 >> 31);
                                                                 |     if (r3 == r3) {
    0x00006d28 beq 0x6ca6                                        |         goto label_4;
                                                                 |     }
    0x00006d2a vldr d16, [pc, 0x214]                             |     __asm ("vldr d16, aav.0x000000ff");
    0x00006d2e b 0x6caa                                          |     goto label_5;
                                                                 | label_22:
    0x00006d30 movs r1, 0                                        |     r1 = 0;
    0x00006d32 add r2, ip                                        |     r2 += ip;
    0x00006d34 mov r5, r3                                        |     r5 = r3;
    0x00006d36 str r1, [sp, 8]                                   |     var_8h = r1;
    0x00006d38 b 0x6ac8                                          |     goto label_6;
                                                                 | label_28:
    0x00006d3a movs r4, 0                                        |     r4 = 0;
    0x00006d3c b 0x6bd4                                          |     goto label_2;
                                                                 | label_34:
    0x00006d3e ldr r1, [sp]                                      |     r1 = *(sp);
    0x00006d40 movs r6, 1                                        |     r6 = 1;
    0x00006d42 movs r2, 0                                        |     r2 = 0;
    0x00006d44 mov.w r3, -0x80000000                             |     r3 = -0x80000000;
    0x00006d48 strd r2, r3, [r1]                                 |     __asm ("strd r2, r3, [r1]");
                                                                 | label_35:
    0x00006d4c ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x00006d4e eor r0, r3, 1                                     |     r0 = r3 ^ 1;
    0x00006d52 ands r0, r6                                       |     r0 &= r6;
                                                                 |     if (r0 == r6) {
    0x00006d54 beq 0x6cb6                                        |         goto label_1;
                                                                 |     }
    0x00006d56 add sp, 0x14                                      |     
    0x00006d58 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_37:
    0x00006d5c add ip, r5                                        |     
    0x00006d5e cmp ip, r2                                        |     
                                                                 |     if (ip >= r2) {
    0x00006d60 bhs 0x6e0a                                        |         goto label_39;
                                                                 |     }
    0x00006d62 ldrb.w r7, [ip]                                   |     r7 = *(ip);
    0x00006d66 cmp r7, 0x2d                                      |     
    0x00006d68 strh r2, [r0, 0x28]                               |     *((r0 + 0x28)) = r2;
    0x00006d6a mov.w r0, 0xff00ff                                |     r0 = 0xff00ff;
    0x00006d6e add ip, r5                                        |     
    0x00006d70 vqadd.u8 d13, d1, d4                              |     __asm ("vqadd.u8 d13, d1, d4");
    0x00006d74 movs r3, r5                                       |     r3 = r5;
    0x00006d76 ittt eq                                           |     
                                                                 |     if (r3 != r5) {
    0x00006d78 addeq r6, 0x63                                    |         r6 += 0x63;
                                                                 |     }
                                                                 |     if (r3 != r5) {
    0x00006d7a moveq r0, r0                                      |         
                                                                 |     }
                                                                 |     if (r3 == r5) {
    0x00006d7c vhaddeq d0, d0, d0                                |         __asm ("vhaddeq d0, d0, d0");
                                                                 |     }
    0x00006d80 movs r6, 1                                        |     r6 = 1;
    0x00006d82 str r6, [sp, 4]                                   |     var_4h = r6;
    0x00006d84 b 0x6da6                                          |     goto label_40;
                                                                 | label_15:
    0x00006d86 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00006d88 adds r3, 1                                        |     r3++;
    0x00006d8a it ne                                             |     
                                                                 |     if (r3 != 1) {
    0x00006d8c movne r5, -1                                      |         r5 = -1;
                                                                 |         goto label_41;
                                                                 |     }
                                                                 |     if (r3 != 1) {
                                                                 | label_41:
    0x00006d90 bne.w 0x6c32                                      |         goto label_7;
                                                                 |     }
    0x00006d94 ldr r5, [sp, 0xc]                                 |     r5 = var_ch;
                                                                 | label_30:
    0x00006d96 rsbs r0, r0, 0                                    |     r0 -= ;
    0x00006d98 sbc.w r1, r1, r1, lsl 1                           |     __asm ("sbc.w r1, r1, r1, lsl 1");
    0x00006d9c b 0x6c2c                                          |     goto label_8;
    0x00006d9e cmp r2, ip                                        |     
    0x00006da0 lsls r7, r4, 2                                    |     r7 = r4 << 2;
    0x00006da2 movs r0, r0                                       |     
    0x00006da4 strb r0, [r0]                                     |     *(r0) = r0;
                                                                 | label_40:
    0x00006da6 ldr.w sl, [pc, 0x1b4]                             |     sl = *(0x00006f5c);
    0x00006daa movs r6, 0                                        |     r6 = 0;
    0x00006dac mov lr, r6                                        |     lr = r6;
    0x00006dae movw fp, 0x270f                                   |     fp = 0x270f;
    0x00006db2 add sl, pc                                        |     sl += pc;
    0x00006db4 b 0x6dd0                                          |     
                                                                 |     while ((r8 & 4) != 0) {
    0x00006db6 cmp lr, fp                                        |         
    0x00006db8 add ip, r5                                        |         
    0x00006dba add.w r1, r7, r0, asr 24                          |         r1 = r7 + (r0 >> 24);
    0x00006dbe movs r0, r0                                       |         
    0x00006dc0 movw lr, 0x2710                                   |         lr = 0x2710;
    0x00006dc4 cmp ip, r2                                        |         
                                                                 |         if (ip >= r2) {
    0x00006dc6 bhs.w 0x7070                                      |             goto label_42;
                                                                 |         }
    0x00006dca ldrb.w r7, [ip]                                   |         r7 = *(ip);
    0x00006dce movs r6, 1                                        |         r6 = 1;
    0x00006dd0 add.w r8, sl, r7                                  |         r8 = sl + r7;
    0x00006dd4 add.w sb, lr, lr, lsl 2                           |         sb = lr + (lr << 2);
    0x00006dd8 ldrb.w r8, [r8, 0x40]                             |         r8 = *((r8 + 0x40));
    0x00006ddc subs r7, 0x30                                     |         r7 -= 0x30;
    0x00006dde tst.w r8, 4                                       |         
    0x00006de2 bne 0x6db6                                        |         
                                                                 |     }
    0x00006de4 mov r8, r6                                        |     r8 = r6;
                                                                 | label_20:
    0x00006de6 ldr r7, [sp, 4]                                   |     r7 = var_4h;
    0x00006de8 mla r4, r7, lr, r4                                |     __asm ("mla r4, r7, lr, r4");
    0x00006dec cmp r3, 0                                         |     
    0x00006dee ite eq                                            |     
                                                                 |     if (r3 != 0) {
    0x00006df0 moveq r7, 0                                       |         r7 = 0;
                                                                 |     }
                                                                 |     if (r3 == 0) {
    0x00006df2 andne r7, r8, 1                                   |         r7 = r8 & 1;
                                                                 |     }
    0x00006df6 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x00006df8 beq.w 0x6cfa                                      |         goto label_9;
                                                                 |     }
    0x00006dfc cmp ip, r2                                        |     
    0x00006dfe it lo                                             |     
                                                                 |     if (ip < r2) {
    0x00006e00 ldrblo lr, [ip]                                   |         goto label_43;
                                                                 |     }
                                                                 |     if (ip <= r2) {
                                                                 | label_43:
    0x00006e04 blo.w 0x6cdc                                      |         goto label_10;
                                                                 |     }
    0x00006e08 b 0x6cf8                                          |     goto label_11;
                                                                 | label_39:
    0x00006e0a movs r6, 0                                        |     r6 = 0;
    0x00006e0c b 0x6cfa                                          |     goto label_9;
                                                                 | label_16:
    0x00006e0e ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00006e10 adds r3, 1                                        |     r3++;
                                                                 |     if (r3 == 1) {
    0x00006e12 beq.w 0x7068                                      |         goto label_44;
                                                                 |     }
                                                                 | label_19:
    0x00006e16 bl 0x5e4a4                                        |     r0 = fcn_0005e4a4 (r0, r1, r2);
    0x00006e1a vmov d16, r0, r1                                  |     __asm ("vmov d16, r0, r1");
    0x00006e1e b 0x6caa                                          |     goto label_5;
                                                                 | label_36:
    0x00006e20 add ip, r5                                        |     
    0x00006e22 cmp ip, r2                                        |     
                                                                 |     if (ip >= r2) {
    0x00006e24 bhs.w 0x6cf8                                      |         goto label_11;
                                                                 |     }
    0x00006e28 ldr r7, [pc, 0x134]                               |     
    0x00006e2a movw sb, 0xcccb                                   |     
    0x00006e2e ldrb.w r6, [ip]                                   |     r6 = *(ip);
    0x00006e32 movt sb, 0xcccc                                   |     sb = 0xcccccccb;
    0x00006e36 movw sl, 0xcccc                                   |     
    0x00006e3a cmp r0, sb                                        |     
    0x00006e3c add r7, pc                                        |     r7 = 0xdda0;
    0x00006e3e movt sl, 0xccc                                    |     sl = 0xccccccc;
    0x00006e42 add r7, r6                                        |     r7 += r6;
    0x00006e44 sbcs.w lr, r1, sl                                 |     __asm ("sbcs.w lr, r1, sl");
    0x00006e48 ldrb.w r7, [r7, 0x40]                             |     r7 = *((r7 + 0x40));
    0x00006e4c ite lt                                            |     
                                                                 |     if (r0 >= sb) {
    0x00006e4e movlt r8, 1                                       |         r8 = 1;
                                                                 |     }
                                                                 |     if (r0 >= sb) {
    0x00006e52 mov.w r8, 0                                       |         r8 = 0;
                                                                 |     }
    0x00006e56 mov lr, r6                                        |     lr = r6;
    0x00006e58 ands.w r8, r8, r7, lsr 2                          |     r8 &= (r7 >> 2);
                                                                 |     if (r8 == r8) {
    0x00006e5c beq 0x6eb8                                        |         goto label_45;
                                                                 |     }
    0x00006e5e add.w fp, r4, r3                                  |     
    0x00006e62 ldr r4, [pc, 0x100]                               |     
    0x00006e64 add r4, pc                                        |     r4 = 0xddce;
    0x00006e66 str r4, [sp, 4]                                   |     var_4h = r4;
                                                                 | label_12:
    0x00006e68 lsls r7, r1, 2                                    |     r7 = r1 << 2;
    0x00006e6a lsls r4, r0, 2                                    |     r4 = r0 << 2;
    0x00006e6c orr.w r7, r7, r0, lsr 30                          |     r7 |= (r0 >> 30);
    0x00006e6e strb r0, [r2, 0x1e]                               |     *((r2 + 0x1e)) = r0;
    0x00006e70 adds r0, r4, r0                                   |     r0 = r4 + r0;
    0x00006e72 sub.w r6, r6, 0x30                                |     r6 -= 0x30;
    0x00006e76 adc.w r7, r1, r7                                  |     __asm ("adc.w r7, r1, r7");
    0x00006e78 lsls r7, r0, 0x1c                                 |     r7 = r0 << 0x1c;
    0x00006e7a adds r0, r0, r0                                   |     r0 += r0;
    0x00006e7c adcs r7, r7                                       |     __asm ("adcs r7, r7");
    0x00006e7e add ip, r5                                        |     
    0x00006e80 adds r0, r6, r0                                   |     r0 = r6 + r0;
    0x00006e82 add.w r3, r3, 1                                   |     r3++;
    0x00006e86 adc.w r1, r7, r6, asr 31                          |     __asm ("adc.w r1, r7, r6, asr 31");
    0x00006e8a cmp ip, r2                                        |     
    0x00006e8c sub.w r4, fp, r3                                  |     r4 = fp - r3;
                                                                 |     if (ip >= r2) {
    0x00006e90 bhs.w 0x6cf8                                      |         goto label_11;
                                                                 |     }
    0x00006e94 cmp r0, sb                                        |     
    0x00006e96 ldr r7, [sp, 4]                                   |     r7 = var_4h;
    0x00006e98 sbcs.w r6, r1, sl                                 |     __asm ("sbcs.w r6, r1, sl");
    0x00006e9c ldrb.w r6, [ip]                                   |     r6 = *(ip);
    0x00006ea0 ite lt                                            |     
                                                                 |     if (r0 >= sb) {
    0x00006ea2 movlt r8, 1                                       |         r8 = 1;
                                                                 |     }
                                                                 |     if (r0 >= sb) {
    0x00006ea6 mov.w r8, 0                                       |         r8 = 0;
                                                                 |     }
    0x00006eaa add r7, r6                                        |     r7 += r6;
    0x00006eac mov lr, r6                                        |     lr = r6;
    0x00006eae ldrb.w r7, [r7, 0x40]                             |     r7 = *((r7 + 0x40));
    0x00006eb2 ands.w r8, r8, r7, lsr 2                          |     r8 &= (r7 >> 2);
                                                                 |     if (r8 != r8) {
    0x00006eb6 bne 0x6e68                                        |         goto label_12;
                                                                 |     }
                                                                 | label_45:
    0x00006eb8 ldr.w r8, [pc, 0xac]                              |     
    0x00006ebc add r8, pc                                        |     r8 = 0xde28;
    0x00006ebe b 0x6ed6                                          |     goto label_46;
                                                                 | label_13:
    0x00006ec0 add ip, r5                                        |     
    0x00006ec2 adds r3, 1                                        |     r3++;
    0x00006ec4 cmp ip, r2                                        |     
                                                                 |     if (ip >= r2) {
    0x00006ec6 bhs.w 0x6cf8                                      |         goto label_11;
                                                                 |     }
    0x00006eca ldrb.w lr, [ip]                                   |     
    0x00006ece add.w r6, r8, lr                                  |     r6 = r8 + lr;
    0x00006ed2 ldrb.w r7, [r6, 0x40]                             |     r7 = *((r6 + 0x40));
                                                                 | label_46:
    0x00006ed6 lsls r7, r7, 0x1d                                 |     r7 <<= 0x1d;
                                                                 |     if (r7 < r7) {
    0x00006ed8 bmi 0x6ec0                                        |         goto label_13;
                                                                 |     }
    0x00006eda cmp r2, ip                                        |     
                                                                 |     if (r2 > ip) {
    0x00006edc bhi.w 0x6cd2                                      |         goto label_14;
                                                                 |     }
    0x00006ee0 b 0x6cf8                                          |     goto label_11;
                                                                 | label_38:
    0x00006ee2 mov.w sl, -0x33333334                             |     sl = -0x33333334;
    0x00006ee6 movw ip, 0xcccd                                   |     
    0x00006eea mul r5, sl, r0                                    |     r5 = sl * r0;
    0x00006eee movt ip, 0xcccc                                   |     ip = 0xcccccccd;
    0x00006ef2 movw lr, 0x9998                                   |     
    0x00006ef6 movw sb, 0x9999                                   |     
    0x00006ef8 adds r1, r3, r6                                   |     r1 = r3 + r6;
    0x00006efa umull r2, r3, r0, ip                              |     r2:r3 = r0 * ip;
    0x00006efe movt lr, 0x9999                                   |     lr = 0x99999998;
    0x00006f02 movt sb, 0x1999                                   |     sb = 0x19999999;
    0x00006f06 rsbs r4, r4, 0                                    |     r4 -= ;
    0x00006f08 mla r5, ip, r1, r5                                |     __asm ("mla r5, ip, r1, r5");
    0x00006f0c adds.w r2, r2, lr                                 |     r2 += lr;
    0x00006f10 add r3, r5                                        |     r3 += r5;
    0x00006f12 lsr.w r5, r2, 1                                   |     r5 = r2 >> 1;
    0x00006f16 adc.w r3, r3, sb                                  |     __asm ("adc.w r3, r3, sb");
    0x00006f1a orr.w r5, r5, r3, lsl 31                          |     r5 |= (r3 << 31);
    0x00006f1e lsrs r3, r3, 1                                    |     r3 >>= 1;
    0x00006f20 orr.w r3, r3, r2, lsl 31                          |     r3 |= (r2 << 31);
    0x00006f24 cmp.w r5, -0x66666667                             |     
    0x00006f28 sbcs.w r3, r3, sb                                 |     __asm ("sbcs.w r3, r3, sb");
                                                                 |     if (r5 >= -0x66666667) {
    0x00006f2c bhs.w 0x6d86                                      |         goto label_15;
                                                                 |     }
    0x00006f30 mov r2, ip                                        |     r2 = ip;
    0x00006f32 b 0x6f72                                          |     goto label_47;
                                                                 | label_17:
    0x00006f6c cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00006f6e beq.w 0x6e0e                                      |         goto label_16;
                                                                 |     }
                                                                 | label_47:
    0x00006f72 lsrs r3, r0, 0x1c                                 |     r3 = r0 >> 0x1c;
    0x00006f74 asrs r5, r1, 0x1f                                 |     r5 = r1 >> 0x1f;
    0x00006f76 orr.w r3, r3, r1, lsl 4                           |     r3 |= (r1 << 4);
    0x00006f7a and r7, r5, 3                                     |     r7 = r5 & 3;
    0x00006f7e bic r5, r5, 3                                     |     r5 = BIT_MASK (r5, 3);
    0x00006f82 bic fp, r3, 0xf0000000                            |     fp = BIT_MASK (r3, 0xf0000000);
    0x00006f86 bic r3, r0, 0xf0000000                            |     r3 = BIT_MASK (r0, 0xf0000000);
    0x00006f8a add r3, fp                                        |     r3 += fp;
    0x00006f8c subs r4, 1                                        |     r4--;
    0x00006f8e add.w r3, r3, r1, lsr 24                          |     r3 += (r1 >> 24);
    0x00006f92 add r3, r7                                        |     r3 += r7;
    0x00006f94 umull r7, fp, ip, r3                              |     r7:fp = ip * r3;
    0x00006f98 bic r7, fp, 3                                     |     r7 = BIT_MASK (fp, 3);
    0x00006f9c add.w r7, r7, fp, lsr 2                           |     r7 += (fp >> 2);
    0x00006fa0 subs r3, r3, r7                                   |     r3 -= r7;
    0x00006fa2 add r3, r5                                        |     r3 += r5;
    0x00006fa4 subs r0, r0, r3                                   |     r0 -= r3;
    0x00006fa6 mul r5, sl, r0                                    |     r5 = sl * r0;
    0x00006faa sbc.w r3, r1, r3, asr 31                          |     __asm ("sbc.w r3, r1, r3, asr 31");
    0x00006fae umull r0, r1, r0, r2                              |     r0:r1 = r0 * r2;
    0x00006fb2 mla r3, ip, r3, r5                                |     __asm ("mla r3, ip, r3, r5");
    0x00006fb6 add r3, r1                                        |     r3 += r1;
    0x00006fb8 lsrs r1, r3, 0x1f                                 |     r1 = r3 >> 0x1f;
    0x00006fba adds r1, r1, r0                                   |     r1 += r0;
    0x00006fbc lsr.w r0, r1, 1                                   |     r0 = r1 >> 1;
    0x00006fc0 adc r3, r3, 0                                     |     __asm ("adc r3, r3, 0");
    0x00006fc4 asrs r1, r3, 1                                    |     r1 = r3 >> 1;
    0x00006fc6 orr.w r0, r0, r3, lsl 31                          |     r0 |= (r3 << 31);
    0x00006fca mul r3, sl, r0                                    |     r3 = sl * r0;
    0x00006fce umull r7, r5, r0, r2                              |     r7:r5 = r0 * r2;
    0x00006fd2 mla r3, ip, r1, r3                                |     __asm ("mla r3, ip, r1, r3");
    0x00006fd6 adds.w r7, r7, lr                                 |     r7 += lr;
    0x00006fda add r3, r5                                        |     r3 += r5;
    0x00006fdc lsr.w r5, r7, 1                                   |     r5 = r7 >> 1;
    0x00006fe0 adc.w r3, r3, sb                                  |     __asm ("adc.w r3, r3, sb");
    0x00006fe4 orr.w r5, r5, r3, lsl 31                          |     r5 |= (r3 << 31);
    0x00006fe8 lsrs r3, r3, 1                                    |     r3 >>= 1;
    0x00006fea orr.w r3, r3, r7, lsl 31                          |     r3 |= (r7 << 31);
    0x00006fee cmp.w r5, -0x66666667                             |     
    0x00006ff2 sbcs.w r3, r3, sb                                 |     __asm ("sbcs.w r3, r3, sb");
                                                                 |     if (r5 <= -0x66666667) {
    0x00006ff6 blo 0x6f6c                                        |         goto label_17;
                                                                 |     }
    0x00006ff8 mov.w r5, -1                                      |     r5 = -1;
    0x00006ffc b 0x6c24                                          |     goto label_18;
                                                                 | label_31:
    0x00006ffe cmp.w r4, 0x156                                   |     
                                                                 |     if (r4 >= 0x156) {
    0x00007002 blt 0x7016                                        |         
    0x00007004 adds r5, 1                                        |         r5++;
                                                                 |         if (r5 == 1) {
    0x00007006 beq 0x7086                                        |             goto label_48;
                                                                 |         }
    0x00007008 vldr d16, [pc, 0x9c]                              |         __asm ("vldr d16, aav.0x000000ff");
    0x0000700c vmul.f64 d16, d16, d16                            |         __asm ("vmul.f64 d16, d16, d16");
    0x00007010 vmul.f64 d16, d16, d18                            |         __asm ("vmul.f64 d16, d16, d18");
    0x00007014 b 0x6caa                                          |         goto label_5;
                                                                 |     }
    0x00007016 movw r1, 0x8ba3                                   |     
    0x0000701a movw r3, 0xe8ba                                   |     
                                                                 |     /* if there is a right shift of 3, then it's a division by 1/11 */
    0x0000701e movt r1, 0xba2e                                   |     r1 = 0xba2e8ba3;
    0x00007022 movt r3, 0xba2                                    |     r3 = 0xba2e8ba;
    0x00007026 mul r2, r1, r4                                    |     r2 = r1 * r4;
    0x0000702a vmov.f64 d17, 1.000000e+00                        |     __asm ("vmov.f64 d17, 1");
    0x0000702e vmov.f64 d16, 1.000000e+01                        |     __asm ("vmov.f64 d16, 1");
    0x00007032 cmp.w r3, r2, ror 1                               |     
                                                                 |     if (r3 >= r2) {
    0x00007036 bhs 0x704c                                        |         goto label_49;
                                                                 |     }
                                                                 |     do {
    0x00007038 subs r4, 1                                        |         r4--;
    0x0000703a vmul.f64 d17, d17, d16                            |         __asm ("vmul.f64 d17, d17, d16");
    0x0000703e mla r2, r1, r4, r3                                |         __asm ("mla r2, r1, r4, r3");
    0x00007042 cmp.w r3, r2, ror 1                               |         
    0x00007046 blo 0x7038                                        |         
                                                                 |     } while (r3 <= r2);
    0x00007048 cmp r4, 0                                         |     
                                                                 |     if (r4 <= 0) {
    0x0000704a ble 0x705a                                        |         goto label_50;
                                                                 |     }
                                                                 | label_49:
    0x0000704c vldr d16, [pc, 0x60]                              |     __asm ("vldr d16, aav.0x000000ff");
                                                                 |     do {
    0x00007050 subs r4, 0x16                                     |         r4 -= 0x16;
    0x00007052 vmul.f64 d17, d17, d16                            |         __asm ("vmul.f64 d17, d17, d16");
    0x00007056 cmp r4, 0                                         |         
    0x00007058 bgt 0x7050                                        |         
                                                                 |     } while (r4 > 0);
                                                                 | label_50:
    0x0000705a adds r5, 1                                        |     r5++;
    0x0000705c ite eq                                            |     
                                                                 |     if (r5 == 1) {
    0x0000705e vdiveq d16, d18, d17                              |         __asm ("vdiveq d16, d18, d17");
                                                                 |     }
                                                                 |     if (r5 != 1) {
    0x00007062 vmul.f64 d16, d17, d18                            |         __asm ("vmul.f64 d16, d17, d18");
                                                                 |     }
    0x00007066 b 0x6caa                                          |     goto label_5;
                                                                 | label_44:
    0x00007068 rsbs r0, r0, 0                                    |     r0 -= ;
    0x0000706a sbc.w r1, r1, r1, lsl 1                           |     __asm ("sbc.w r1, r1, r1, lsl 1");
    0x0000706e b 0x6e16                                          |     goto label_19;
                                                                 | label_42:
    0x00007070 mov.w r8, 1                                       |     r8 = 1;
    0x00007074 mov r6, r8                                        |     r6 = r8;
    0x00007076 b 0x6de6                                          |     goto label_20;
                                                                 | label_33:
    0x00007078 vdiv.f64 d19, d18, d16                            |     __asm ("vdiv.f64 d19, d18, d16");
    0x0000707c vldr d17, [pc, 0x28]                              |     __asm ("vldr d17, aav.0x000000ff");
    0x00007080 vdiv.f64 d16, d19, d17                            |     __asm ("vdiv.f64 d16, d19, d17");
    0x00007084 b 0x6caa                                          |     goto label_5;
                                                                 | label_48:
    0x00007086 vmov.i64 d16, 0                                   |     __asm ("vmov.i64 d16, 0");
    0x0000708a vmul.f64 d16, d18, d16                            |     __asm ("vmul.f64 d16, d18, d16");
    0x0000708e b 0x6caa                                          |     goto label_5;
                                                                 | label_27:
    0x00007090 cmp r3, 0                                         |     
    0x00007092 mov.w r6, 1                                       |     r6 = 1;
    0x00007096 ite le                                            |     
                                                                 |     if (r3 > 0) {
    0x00007098 movle r8, 0                                       |         r8 = 0;
                                                                 |     }
                                                                 |     if (r3 > 0) {
    0x0000709c mov.w r8, 1                                       |         r8 = 1;
                                                                 |     }
    0x000070a0 b 0x6d1c                                          |     goto label_21;
                                                                 | }


r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x70b8).
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-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x73ac */
                                             | #include <stdint.h>
                                             |  
    ; (fcn) fcn.000073ac ()                  | uint32_t fcn_000073ac (uint32_t arg1, int16_t arg2) {
                                             |     r0 = arg1;
                                             |     r1 = arg2;
    0x000073ac cmp r0, 8                     |     
    0x000073ae sbcs r3, r1, 0                |     __asm ("sbcs r3, r1, 0");
                                             |     if (r0 <= 8) {
    0x000073b2 blo 0x7406                    |         goto label_2;
                                             |     }
    0x000073b4 cmp.w r0, 0x100               |     
    0x000073b8 sbcs r3, r1, 0                |     __asm ("sbcs r3, r1, 0");
    0x000073bc it hs                         |     
                                             |     if (r0 < 0x100) {
    0x000073be movhs r3, 0x28                |         r3 = 0x28;
                                             |     }
                                             |     if (r0 <= 0x100) {
    0x000073c0 blo 0x7430                    |         goto label_3;
                                             |     }
                                             |     do {
    0x000073c2 lsrs r0, r0, 4                |         r0 >>= 4;
    0x000073c4 adds r3, 0x28                 |         r3 += 0x28;
    0x000073c6 sxth r3, r3                   |         __asm ("sxth r3, r3");
    0x000073c8 orr.w r0, r0, r1, lsl 28      |         r0 |= (r1 << 28);
    0x000073cc lsrs r1, r1, 4                |         r1 >>= 4;
    0x000073ce cmp.w r0, 0x100               |         
    0x000073d2 sbcs r2, r1, 0                |         __asm ("sbcs r2, r1, 0");
    0x000073d6 bhs 0x73c2                    |         
                                             |     } while (r0 >= 0x100);
                                             |     do {
                                             | label_1:
    0x000073d8 lsrs r0, r0, 1                |         r0 >>= 1;
    0x000073da uxth r2, r3                   |         r2 = (int16_t) r3;
    0x000073dc orr.w r0, r0, r1, lsl 31      |         r0 |= (r1 << 31);
    0x000073e0 lsrs r1, r1, 1                |         r1 >>= 1;
    0x000073e2 cmp r0, 0x10                  |         
    0x000073e4 add.w r3, r2, 0xa             |         r3 = r2 + 0xa;
    0x000073e8 sbcs ip, r1, 0                |         __asm ("sbcs ip, r1, 0");
    0x000073ec sxth r3, r3                   |         __asm ("sxth r3, r3");
    0x000073ee bhs 0x73d8                    |         
                                             |     } while (r0 >= 0x10);
                                             | label_0:
    0x000073f0 ldr r3, [pc, 0x4c]            |     
    0x000073f2 and r0, r0, 7                 |     r0 &= 7;
    0x000073f4 movs r7, r0                   |     r7 = r0;
    0x000073f6 add r3, pc                    |     r3 = 0xe83a;
    0x000073f8 add.w r3, r3, r0, lsl 1       |     r3 += (r0 << 1);
    0x000073fc ldrh.w r3, [r3, 0x140]        |     r3 = *((r3 + 0x140));
    0x00007400 adds r0, r2, r3               |     r0 = r2 + r3;
    0x00007402 sxth r0, r0                   |     __asm ("sxth r0, r0");
    0x00007404 bx lr                         |     return r0;
                                             | label_2:
    0x00007406 cmp r0, 2                     |     
    0x00007408 sbcs r3, r1, 0                |     __asm ("sbcs r3, r1, 0");
                                             |     if (r0 <= 2) {
    0x0000740c blo 0x742c                    |         goto label_4;
                                             |     }
    0x0000740e movs r3, 0x1e                 |     r3 = 0x1e;
                                             |     do {
    0x00007410 adds r0, r0, r0               |         r0 += r0;
    0x00007412 sub.w ip, r3, 0xa             |         
    0x00007416 adcs r1, r1                   |         __asm ("adcs r1, r1");
    0x00007418 cmp r0, 8                     |         
    0x0000741a mov r2, r3                    |         r2 = r3;
    0x0000741c uxth.w r3, ip                 |         r3 = (int16_t) ip;
    0x00007420 sbcs ip, r1, 0                |         __asm ("sbcs ip, r1, 0");
    0x00007424 blo 0x7410                    |         
                                             |     } while (r0 <= 8);
    0x00007426 subs r2, 0xa                  |     r2 -= 0xa;
    0x00007428 uxth r2, r2                   |     r2 = (int16_t) r2;
    0x0000742a b 0x73f0                      |     goto label_0;
                                             | label_4:
    0x0000742c movs r0, 0                    |     r0 = 0;
    0x0000742e bx lr                         |     return r0;
                                             | label_3:
    0x00007430 cmp r0, 0x10                  |     
    0x00007432 sbcs r3, r1, 0                |     __asm ("sbcs r3, r1, 0");
    0x00007436 it lo                         |     
                                             |     if (r0 < 0x10) {
    0x00007438 movlo r2, 0x1e                |         r2 = 0x1e;
                                             |         goto label_5;
                                             |     }
                                             |     if (r0 <= 0x10) {
                                             | label_5:
    0x0000743a blo 0x73f0                    |         goto label_0;
                                             |     }
    0x0000743c movs r3, 0x28                 |     r3 = 0x28;
    0x0000743e b 0x73d8                      |     goto label_1;
                                             | }
    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x8024 */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) fcn.00008024 ()                      | void fcn_00008024 (int16_t arg1, int16_t arg2) {
                                                 |     r0 = arg1;
                                                 |     r1 = arg2;
                                                 |     if (r1 == 0) {
    0x00008024 cbz r1, 0x8062                    |         goto label_0;
                                                 |     }
    0x00008026 push {r3, r4, r5, r6, r7, lr}     |     
    0x00008028 mov r4, r1                        |     r4 = r1;
    0x0000802a ldr r3, [r4], 8                   |     r3 = *(r4);
                                                 |     r4 += 8;
    0x0000802e mov r7, r1                        |     r7 = r1;
    0x00008030 cmp r3, 0                         |     
                                                 |     if (r3 <= 0) {
    0x00008032 ble 0x8060                        |         goto label_1;
                                                 |     }
    0x00008034 mov r5, r0                        |     r5 = r0;
    0x00008036 movs r6, 0                        |     r6 = 0;
                                                 |     do {
    0x00008038 ldr r3, [r4, 0x28]                |         r3 = *((r4 + 0x28));
    0x0000803a adds r6, 1                        |         r6++;
    0x0000803c mov r0, r5                        |         r0 = r5;
    0x0000803e cmp r3, 0                         |         
                                                 |         if (r3 >= 0) {
    0x00008040 bge 0x8060                        |             goto label_1;
                                                 |         }
    0x00008042 ldr r3, [r5, 0x44]                |         r3 = *((r5 + 0x44));
    0x00008044 adds r4, 0x48                     |         r4 += 0x48;
    0x00008046 ldr r2, [r4, -0x34]               |         r2 = *((r4 - 0x34));
    0x0000804a adds r1, r3, 1                    |         r1 = r3 + 1;
    0x0000804c str r1, [r5, 0x44]                |         *((r5 + 0x44)) = r1;
    0x0000804e str r3, [r4, -0x20]               |         *((r4 - 0x20)) = r3;
                                                 |         if (r2 != 0) {
    0x00008052 cbz r2, 0x805a                    |             
    0x00008054 ldr r1, [r2, 0x20]                |             r1 = *((r2 + 0x20));
    0x00008056 bl 0x8024                         |             fcn_00008024 (r0, r1);
                                                 |         }
    0x0000805a ldr r3, [r7]                      |         r3 = *(r7);
    0x0000805c cmp r3, r6                        |         
    0x0000805e bgt 0x8038                        |         
                                                 |     } while (r3 > r6);
                                                 | label_1:
    0x00008060 pop {r3, r4, r5, r6, r7, pc}      |     
                                                 | label_0:
    0x00008062 bx lr                             |     return;
                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x8064 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00008064 ()                                      | void fcn_00008064 (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;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00008064 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00008068 mov sl, r3                                        |     sl = r3;
    0x0000806a ldrb r3, [r2, 3]                                  |     r3 = *((r2 + 3));
    0x0000806c sub sp, 0x24                                      |     
    0x0000806e movs r4, 0                                        |     r4 = 0;
    0x00008070 add r5, sp, 0x1c                                  |     r5 += var_1ch;
    0x00008072 ldrb r6, [r2, 1]                                  |     r6 = *((r2 + 1));
    0x00008074 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00008076 ldr r3, [pc, 0x2fc]                               |     
    0x00008078 ldrb.w fp, [r2]                                   |     fp = *(r2);
    0x0000807c ldrb.w sb, [r2, 2]                                |     sb = *((r2 + 2));
    0x00008080 add r3, pc                                        |     r3 = 0x103fa;
    0x00008082 str r2, [sp, 0x14]                                |     var_14h = r2;
    0x00008084 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00008086 ldr r3, [pc, 0x2f0]                               |     
    0x00008088 strd r1, r0, [sp, 0x18]                           |     __asm ("strd r1, r0, [var_1ch]");
    0x0000808c add r3, pc                                        |     r3 = 0x1040a;
    0x0000808e str r3, [sp, 0x10]                                |     var_10h = r3;
                                                                 | label_4:
    0x00008090 mov r0, r5                                        |     r0 = r5;
    0x00008092 bl 0x6a00                                         |     r0 = fcn_00006a00 (r0);
    0x00008096 mov r8, r0                                        |     r8 = r0;
    0x00008098 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0000809a beq.w 0x8270                                      |         goto label_19;
                                                                 |     }
    0x0000809e eor r3, r4, 1                                     |     r3 = r4 ^ 1;
    0x000080a2 cmp fp, r8                                        |     
    0x000080a4 ite ne                                            |     
                                                                 |     if (fp == r8) {
    0x000080a6 movne r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (fp != r8) {
    0x000080a8 andeq r2, r3, 1                                   |         r2 = r3 & 1;
                                                                 |     }
    0x000080ac cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x000080ae bne.w 0x8236                                      |         goto label_20;
                                                                 |     }
    0x000080b2 cmp r8, r6                                        |     
                                                                 |     if (r8 == r6) {
    0x000080b4 beq.w 0x8266                                      |         goto label_21;
                                                                 |     }
                                                                 |     do {
                                                                 | label_0:
    0x000080b8 cmp sb, r8                                        |         
                                                                 |         if (sb == r8) {
    0x000080ba beq 0x815a                                        |             goto label_10;
                                                                 |         }
                                                                 | label_1:
    0x000080bc eor r4, r4, 1                                     |         r4 ^= 1;
    0x000080c0 cmp sl, r8                                        |         
    0x000080c2 ite ne                                            |         
                                                                 |         if (sl == r8) {
    0x000080c4 movne r4, 0                                       |             r4 = 0;
                                                                 |         }
                                                                 |         if (sl != r8) {
    0x000080c6 andeq r4, r4, 1                                   |             r4 &= 1;
                                                                 |         }
                                                                 |         if (r4 == 0) {
    0x000080ca cbz r4, 0x80ea                                    |             goto label_22;
                                                                 |         }
    0x000080cc mov r0, r5                                        |         r0 = r5;
    0x000080ce bl 0x6a00                                         |         r0 = fcn_00006a00 (r0);
    0x000080d2 mov r8, r0                                        |         r8 = r0;
    0x000080d4 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x000080d6 beq.w 0x8270                                      |             goto label_19;
                                                                 |         }
    0x000080da cmp r8, r6                                        |         
    0x000080dc mov.w r4, 1                                       |         r4 = 1;
    0x000080e0 bne 0x80b8                                        |         
                                                                 |     } while (r8 != r6);
                                                                 | label_8:
    0x000080e2 cmp sb, r6                                        |     
                                                                 |     if (sb == r6) {
    0x000080e4 beq.w 0x8280                                      |         goto label_23;
                                                                 |     }
    0x000080e8 mov r8, r6                                        |     r8 = r6;
                                                                 | label_22:
    0x000080ea add r7, sp, 0x18                                  |     r7 += var_18h;
    0x000080ec mov r0, r7                                        |     r0 = r7;
    0x000080ee bl 0x6a00                                         |     fcn_00006a00 (r0);
    0x000080f2 ldr r3, [sp, 4]                                   |     r3 = var_4h;
                                                                 |     if (r3 != 0) {
    0x000080f4 cbz r3, 0x8112                                    |         
    0x000080f6 bics r3, r8, 0x7f                                 |         __asm ("bics r3, r8, 0x7f");
    0x000080fa ittt eq                                           |         
                                                                 |         if (r3 != 0) {
    0x000080fc ldreq r3, [sp, 0x10]                              |             r3 = var_10h;
                                                                 |         }
                                                                 |         if (r3 != 0) {
    0x000080fe addeq r8, r3                                      |             r8 += r3;
                                                                 |         }
                                                                 |         if (r3 != 0) {
    0x00008100 ldrbeq r8, [r8, 0x150]                            |             r8 = *((r8 + 0x150));
                                                                 |         }
    0x00008104 bics r3, r0, 0x7f                                 |         __asm ("bics r3, r0, 0x7f");
    0x00008108 ittt eq                                           |         
                                                                 |         if (r3 != 0) {
    0x0000810a ldreq r3, [sp, 0xc]                               |             r3 = var_ch;
                                                                 |         }
                                                                 |         if (r3 != 0) {
    0x0000810c addeq r0, r0, r3                                  |             r0 += r3;
                                                                 |         }
                                                                 |         if (r3 == 0) {
    0x0000810e ldrbeq r0, [r0, 0x150]                            |             r0 = *((r0 + 0x150));
                                                                 |             goto label_24;
                                                                 |         }
                                                                 |     }
                                                                 | label_24:
    0x00008112 cmp r8, r0                                        |     
                                                                 |     if (r8 != r0) {
    0x00008114 bne.w 0x822e                                      |         goto label_12;
                                                                 |     }
    0x00008118 mov r0, r5                                        |     r0 = r5;
    0x0000811a bl 0x6a00                                         |     r0 = fcn_00006a00 (r0);
    0x0000811e mov r8, r0                                        |     r8 = r0;
    0x00008120 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00008122 beq.w 0x8270                                      |         goto label_19;
                                                                 |     }
    0x00008126 cmp fp, r0                                        |     
                                                                 |     if (fp == r0) {
    0x00008128 beq.w 0x8236                                      |         goto label_20;
                                                                 |     }
    0x0000812c cmp r8, r6                                        |     
    0x0000812e mov.w r4, 0                                       |     r4 = 0;
                                                                 |     if (r8 != r6) {
    0x00008132 bne 0x80b8                                        |         goto label_0;
                                                                 |     }
                                                                 |     do {
                                                                 | label_9:
    0x00008134 mov r0, r7                                        |         r0 = r7;
    0x00008136 bl 0x6a00                                         |         r0 = fcn_00006a00 (r0);
    0x0000813a cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x0000813c beq 0x822e                                        |             goto label_12;
                                                                 |         }
    0x0000813e mov r0, r5                                        |         r0 = r5;
    0x00008140 bl 0x6a00                                         |         r0 = fcn_00006a00 (r0);
    0x00008144 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00008146 beq.w 0x8270                                      |             goto label_19;
                                                                 |         }
    0x0000814a cmp fp, r0                                        |         
                                                                 |         if (fp == r0) {
    0x0000814c beq 0x8236                                        |             goto label_20;
                                                                 |         }
    0x0000814e cmp r0, r6                                        |         
    0x00008150 beq 0x8134                                        |         
                                                                 |     } while (r0 == r6);
    0x00008152 mov r8, r0                                        |     r8 = r0;
    0x00008154 movs r4, 0                                        |     r4 = 0;
    0x00008156 cmp sb, r8                                        |     
                                                                 |     if (sb != r8) {
    0x00008158 bne 0x80bc                                        |         goto label_1;
                                                                 |     }
                                                                 | label_10:
    0x0000815a add r0, sp, 0x18                                  |     r0 += var_18h;
    0x0000815c bl 0x6a00                                         |     r0 = fcn_00006a00 (r0);
    0x00008160 mov r7, r0                                        |     r7 = r0;
    0x00008162 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00008164 beq 0x822e                                        |         goto label_12;
                                                                 |     }
    0x00008166 mov r0, r5                                        |     r0 = r5;
    0x00008168 bl 0x6a00                                         |     r0 = fcn_00006a00 (r0);
    0x0000816c cmp r0, 0x5e                                      |     
    0x0000816e asrs r0, r0, 0x1c                                 |     r0 >>= 0x1c;
    0x00008170 movs r4, 0x80                                     |     r4 = 0x80;
    0x00008172 str r3, [sp, 8]                                   |     var_8h = r3;
                                                                 |     if (r4 == 0x80) {
    0x00008174 beq.w 0x8284                                      |         goto label_25;
                                                                 |     }
                                                                 | label_11:
    0x00008178 cmp r0, 0x5d                                      |     
    0x0000817a itt ne                                            |     
                                                                 |     if (r0 == 0x5d) {
    0x0000817c movne r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r0 == 0x5d) {
    0x0000817e strne r3, [sp]                                    |         *(sp) = r3;
                                                                 |     }
                                                                 |     if (r0 == 0x5d) {
    0x00008180 bne 0x8194                                        |         
    0x00008182 mov r0, r5                                        |         r0 = r5;
    0x00008184 bl 0x6a00                                         |         fcn_00006a00 (r0);
    0x00008188 sub.w r3, r7, 0x5d                                |         r3 = r7 - 0x5d;
    0x0000818c clz r3, r3                                        |         r3 &= r3;
    0x00008190 lsrs r3, r3, 5                                    |         r3 >>= 5;
    0x00008192 str r3, [sp]                                      |         *(sp) = r3;
                                                                 |     }
    0x00008194 cmp r0, 0                                         |     
    0x00008196 it ne                                             |     
                                                                 |     if (r0 != 0) {
    0x00008198 cmpne r0, 0x5d                                    |         __asm ("cmpne r0, 0x5d");
                                                                 |     }
    0x0000819a itttt ne                                          |     
                                                                 |     if (r0 == 0) {
    0x0000819c movne r3, r5                                      |         r3 = r5;
                                                                 |     }
                                                                 |     if (r0 == 0) {
    0x0000819e movne r8, 0                                       |         r8 = 0;
                                                                 |     }
                                                                 |     if (r0 == 0) {
    0x000081a2 movne r5, r4                                      |         r5 = r4;
                                                                 |     }
                                                                 |     if (r0 != 0) {
    0x000081a4 mov r4, r3                                        |         r4 = r3;
                                                                 |     }
                                                                 |     if (r0 != 0) {
    0x000081a6 bne 0x81c6                                        |         goto label_3;
                                                                 |     }
    0x000081a8 b 0x8220                                          |     goto label_26;
                                                                 |     do {
                                                                 | label_2:
    0x000081aa cmp r7, r0                                        |         
    0x000081ac mov r8, r0                                        |         r8 = r0;
    0x000081ae it eq                                             |         
                                                                 |         if (r7 != r0) {
    0x000081b0 moveq r3, 1                                       |             r3 = 1;
                                                                 |         }
    0x000081b2 mov r0, r4                                        |         r0 = r4;
    0x000081b4 itt eq                                            |         
                                                                 |         if (r7 != r0) {
    0x000081b6 moveq r8, r7                                      |             r8 = r7;
                                                                 |         }
                                                                 |         if (r7 != r0) {
    0x000081b8 streq r3, [sp]                                    |             *(sp) = r3;
                                                                 |         }
    0x000081ba bl 0x6a00                                         |         r0 = fcn_00006a00 (r0);
    0x000081be cmp r0, 0                                         |         
    0x000081c0 it ne                                             |         
                                                                 |         if (r0 != 0) {
    0x000081c2 cmpne r0, 0x5d                                    |             __asm ("cmpne r0, 0x5d");
                                                                 |         }
                                                                 |         if (r0 == 0) {
    0x000081c4 beq 0x821a                                        |             goto label_27;
                                                                 |         }
                                                                 | label_3:
    0x000081c6 cmp r0, 0x2d                                      |         
    0x000081c8 bne 0x81aa                                        |         
                                                                 |     } while (r0 != 0x2d);
    0x000081ca ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x000081cc ldrb r2, [r2]                                     |     r2 = *(r2);
    0x000081ce cmp r2, 0                                         |     
    0x000081d0 it ne                                             |     
                                                                 |     if (r2 != 0) {
    0x000081d2 cmpne r2, 0x5d                                    |         __asm ("cmpne r2, 0x5d");
                                                                 |     }
    0x000081d4 ite ne                                            |     
                                                                 |     if (r2 == 0) {
    0x000081d6 movne r2, 1                                       |         r2 = 1;
                                                                 |     }
                                                                 |     if (r2 != 0) {
    0x000081d8 moveq r2, 0                                       |         r2 = 0;
                                                                 |     }
    0x000081da cmp.w r8, 0                                       |     
    0x000081de ite eq                                            |     
                                                                 |     if (r8 != 0) {
    0x000081e0 moveq r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (r8 == 0) {
    0x000081e2 andne r2, r2, 1                                   |         r2 &= 1;
                                                                 |     }
    0x000081e6 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000081e8 beq 0x81aa                                        |         goto label_2;
                                                                 |     }
    0x000081ea mov r0, r4                                        |     r0 = r4;
    0x000081ec bl 0x6a00                                         |     fcn_00006a00 (r0);
    0x000081f0 cmp r7, r8                                        |     
    0x000081f2 ldr r3, [sp]                                      |     r3 = *(sp);
    0x000081f4 ite lo                                            |     
                                                                 |     if (r7 >= r8) {
    0x000081f6 movlo r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (r7 < r8) {
    0x000081f8 movhs r2, 1                                       |         r2 = 1;
                                                                 |     }
    0x000081fa cmp r7, r0                                        |     
    0x000081fc mov.w r8, 0                                       |     r8 = 0;
    0x00008200 it hi                                             |     
                                                                 |     if (r7 <= r0) {
    0x00008202 movhi r2, 0                                       |         r2 = 0;
                                                                 |     }
    0x00008204 mov r0, r4                                        |     r0 = r4;
    0x00008206 cmp r2, r8                                        |     
    0x00008208 it ne                                             |     
                                                                 |     if (r2 == r8) {
    0x0000820a movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x0000820c str r3, [sp]                                      |     *(sp) = r3;
    0x0000820e bl 0x6a00                                         |     r0 = fcn_00006a00 (r0);
    0x00008212 cmp r0, 0                                         |     
    0x00008214 it ne                                             |     
                                                                 |     if (r0 == 0) {
    0x00008216 cmpne r0, 0x5d                                    |         __asm ("cmpne r0, 0x5d");
                                                                 |         goto label_28;
                                                                 |     }
                                                                 |     if (r0 != 0) {
                                                                 | label_28:
    0x00008218 bne 0x81c6                                        |         goto label_3;
                                                                 |     }
                                                                 | label_27:
    0x0000821a mov r3, r4                                        |     r3 = r4;
    0x0000821c mov r4, r5                                        |     r4 = r5;
    0x0000821e mov r5, r3                                        |     r5 = r3;
                                                                 | label_26:
    0x00008220 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x00008222 ldr r2, [sp]                                      |     r2 = *(sp);
    0x00008224 cmp r3, r2                                        |     
    0x00008226 it ne                                             |     
                                                                 |     if (r3 == r2) {
    0x00008228 cmpne r0, 0                                       |         __asm ("cmpne r0, 0");
                                                                 |         goto label_29;
                                                                 |     }
                                                                 |     if (r3 != r2) {
                                                                 | label_29:
    0x0000822a bne.w 0x8090                                      |         goto label_4;
                                                                 |     }
                                                                 |     do {
                                                                 | label_12:
    0x0000822e movs r0, 0                                        |         r0 = 0;
    0x00008230 add sp, 0x24                                      |         
    0x00008232 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_20:
    0x00008236 add r7, sp, 0x18                                  |         r7 += var_18h;
                                                                 | label_6:
    0x00008238 mov r0, r5                                        |         r0 = r5;
    0x0000823a bl 0x6a00                                         |         r0 = fcn_00006a00 (r0);
    0x0000823e mov r4, r0                                        |         r4 = r0;
    0x00008240 mov r0, r7                                        |         r0 = r7;
    0x00008242 cmp fp, r4                                        |         
                                                                 |         if (fp == r4) {
    0x00008244 beq 0x8260                                        |             goto label_30;
                                                                 |         }
                                                                 | label_5:
    0x00008246 cmp r4, r6                                        |         
                                                                 |         if (r4 != r6) {
    0x00008248 bne 0x8290                                        |             goto label_31;
                                                                 |         }
                                                                 | label_7:
    0x0000824a bl 0x6a00                                         |         r0 = fcn_00006a00 (r0);
    0x0000824e cmp r0, 0                                         |         
    0x00008250 beq 0x822e                                        |         
                                                                 |     } while (r0 == 0);
    0x00008252 mov r0, r5                                        |     r0 = r5;
    0x00008254 bl 0x6a00                                         |     r0 = fcn_00006a00 (r0);
    0x00008258 mov r4, r0                                        |     r4 = r0;
    0x0000825a mov r0, r7                                        |     r0 = r7;
    0x0000825c cmp fp, r4                                        |     
                                                                 |     if (fp != r4) {
    0x0000825e bne 0x8246                                        |         goto label_5;
                                                                 |     }
                                                                 | label_30:
    0x00008260 cmp fp, r6                                        |     
                                                                 |     if (fp != r6) {
    0x00008262 bne 0x8238                                        |         goto label_6;
                                                                 |     }
    0x00008264 b 0x824a                                          |     goto label_7;
                                                                 | label_21:
    0x00008266 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00008268 beq.w 0x80e2                                      |         goto label_8;
                                                                 |     }
    0x0000826c add r7, sp, 0x18                                  |     r7 += var_18h;
    0x0000826e b 0x8134                                          |     goto label_9;
                                                                 | label_19:
    0x00008270 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00008272 ldrb r0, [r3]                                     |     r0 = *(r3);
    0x00008274 clz r0, r0                                        |     r0 &= r0;
    0x00008278 lsrs r0, r0, 5                                    |     r0 >>= 5;
                                                                 | label_14:
    0x0000827a add sp, 0x24                                      |     
    0x0000827c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_23:
    0x00008280 movs r4, 1                                        |     r4 = 1;
    0x00008282 b 0x815a                                          |     goto label_10;
                                                                 | label_25:
    0x00008284 mov r0, r5                                        |     r0 = r5;
    0x00008286 bl 0x6a00                                         |     fcn_00006a00 (r0);
    0x0000828a movs r3, 1                                        |     r3 = 1;
    0x0000828c str r3, [sp, 8]                                   |     var_8h = r3;
    0x0000828e b 0x8178                                          |     goto label_11;
                                                                 |     if (r4 == 0) {
                                                                 | label_31:
    0x00008290 cbz r4, 0x82de                                    |         goto label_17;
                                                                 |     }
    0x00008292 cmp r4, sl                                        |     
                                                                 |     if (r4 == sl) {
    0x00008294 beq 0x831e                                        |         goto label_32;
                                                                 |     }
    0x00008296 cmp sb, r4                                        |     
                                                                 |     if (sb == r4) {
    0x00008298 beq 0x832c                                        |         goto label_33;
                                                                 |     }
                                                                 | label_16:
    0x0000829a ldr r7, [pc, 0xe0]                                |     
    0x0000829c add r5, sp, 0x18                                  |     r5 += var_18h;
    0x0000829e ldr r6, [pc, 0xe0]                                |     
    0x000082a0 ldr.w r8, [sp, 0x14]                              |     r8 = var_14h;
    0x000082a4 add r7, pc                                        |     r7 = 0x10626;
    0x000082a6 mov sb, r7                                        |     sb = r7;
    0x000082a8 ldr r7, [sp, 4]                                   |     r7 = var_4h;
    0x000082aa add r6, pc                                        |     r6 = 0x10630;
                                                                 | label_13:
    0x000082ac mov r0, r5                                        |     r0 = r5;
    0x000082ae bl 0x6a00                                         |     r0 = fcn_00006a00 (r0);
    0x000082b2 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000082b4 beq 0x822e                                        |         goto label_12;
                                                                 |     }
                                                                 |     if (r7 != 0) {
    0x000082b6 cbnz r7, 0x82e2                                   |         goto label_34;
                                                                 |     }
    0x000082b8 cmp r4, r0                                        |     
                                                                 |     if (r4 == r0) {
    0x000082ba beq 0x82ce                                        |         goto label_35;
                                                                 |     }
                                                                 |     do {
    0x000082bc mov r0, r5                                        |         r0 = r5;
    0x000082be bl 0x6a00                                         |         r0 = fcn_00006a00 (r0);
    0x000082c2 cmp r0, 0                                         |         
    0x000082c4 it ne                                             |         
                                                                 |         if (r0 != 0) {
    0x000082c6 cmpne r4, r0                                      |             __asm ("cmpne r4, r0");
                                                                 |         }
    0x000082c8 bne 0x82bc                                        |         
                                                                 |     } while (r0 != 0);
                                                                 | label_15:
    0x000082ca cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000082cc beq 0x822e                                        |         goto label_12;
                                                                 |     }
                                                                 | label_35:
    0x000082ce ldrd r1, r0, [sp, 0x18]                           |     __asm ("ldrd r1, r0, [var_1ch]");
    0x000082d2 mov r3, sl                                        |     r3 = sl;
    0x000082d4 mov r2, r8                                        |     r2 = r8;
    0x000082d6 bl 0x8064                                         |     r0 = fcn_00008064 (r0, r1, r2, r3);
    0x000082da cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000082dc beq 0x82ac                                        |         goto label_13;
                                                                 |     }
                                                                 | label_17:
    0x000082de movs r0, 1                                        |     r0 = 1;
    0x000082e0 b 0x827a                                          |     goto label_14;
                                                                 | label_34:
    0x000082e2 bics r3, r0, 0x7f                                 |     __asm ("bics r3, r0, 0x7f");
                                                                 |     if (r0 == 1) {
    0x000082e6 bne 0x82f2                                        |         
    0x000082e8 ldr r3, [pc, 0x98]                                |         
    0x000082ea add r3, pc                                        |         r3 = 0x10672;
    0x000082ec add r3, r0                                        |         r3 += r0;
    0x000082ee ldrb.w r0, [r3, 0x150]                            |         r0 = *((r3 + 0x150));
                                                                 |     }
    0x000082f2 bics r3, r4, 0x7f                                 |     __asm ("bics r3, r4, 0x7f");
                                                                 |     if (r0 != 1) {
    0x000082f6 bne 0x8314                                        |         goto label_36;
                                                                 |     }
    0x000082f8 add r4, sb                                        |     r4 += sb;
    0x000082fa ldrb.w r4, [r4, 0x150]                            |     r4 = *((r4 + 0x150));
    0x000082fe b 0x8314                                          |     
                                                                 |     while (r0 != 0) {
    0x00008300 mov r0, r5                                        |         r0 = r5;
    0x00008302 bl 0x6a00                                         |         r0 = fcn_00006a00 (r0);
    0x00008306 bics r3, r0, 0x7f                                 |         __asm ("bics r3, r0, 0x7f");
    0x0000830a add.w r3, r6, r0                                  |         r3 = r6 + r0;
    0x0000830e it eq                                             |         
                                                                 |         if (r0 != 1) {
    0x00008310 ldrbeq r0, [r3, 0x150]                            |             r0 = *((r3 + 0x150));
                                                                 |         }
                                                                 | label_36:
    0x00008314 cmp r0, 0                                         |         
    0x00008316 it ne                                             |         
                                                                 |         if (r0 != 0) {
    0x00008318 cmpne r0, r4                                      |             __asm ("cmpne r0, r4");
                                                                 |         }
    0x0000831a bne 0x8300                                        |         
                                                                 |     }
    0x0000831c b 0x82ca                                          |     goto label_15;
                                                                 | label_32:
    0x0000831e mov r0, r5                                        |     r0 = r5;
    0x00008320 bl 0x6a00                                         |     r0 = fcn_00006a00 (r0);
    0x00008324 mov r4, r0                                        |     r4 = r0;
    0x00008326 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00008328 bne 0x829a                                        |         goto label_16;
                                                                 |     }
    0x0000832a b 0x822e                                          |     goto label_12;
                                                                 | label_33:
    0x0000832c ldr r5, [sp, 0x18]                                |     r5 = var_18h;
    0x0000832e ldr r6, [sp, 0x14]                                |     r6 = var_14h;
    0x00008330 ldrb r4, [r5]                                     |     r4 = *(r5);
                                                                 | label_18:
    0x00008332 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00008334 beq.w 0x822e                                      |         goto label_12;
                                                                 |     }
    0x00008338 ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x0000833a mov r3, sl                                        |     r3 = sl;
    0x0000833c mov r2, r6                                        |     r2 = r6;
    0x0000833e mov r1, r5                                        |     r1 = r5;
    0x00008340 subs r0, 1                                        |     r0--;
    0x00008342 bl 0x8064                                         |     r0 = fcn_00008064 (r0, r1, r2, r3);
    0x00008346 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00008348 bne 0x82de                                        |         goto label_17;
                                                                 |     }
    0x0000834a cmp r4, 0xbf                                      |     
    0x0000834c add.w r5, r5, 1                                   |     r5++;
    0x00008350 str r5, [sp, 0x18]                                |     var_18h = r5;
    0x00008352 ldrb r2, [r5]                                     |     r2 = *(r5);
    0x00008354 bhi 0x835a                                        |     
                                                                 |     while (r3 != 0x80) {
    0x00008356 mov r4, r2                                        |         r4 = r2;
    0x00008358 b 0x8332                                          |         goto label_18;
    0x0000835a and r3, r2, 0xc0                                  |         r3 = r2 & 0xc0;
    0x0000835e cmp r3, 0x80                                      |         
    0x00008360 bne 0x8356                                        |         
                                                                 |     }
                                                                 |     do {
    0x00008362 ldrb r4, [r5, 1]!                                 |         r4 = *((r5 += 1));
    0x00008366 and r3, r4, 0xc0                                  |         r3 = r4 & 0xc0;
    0x0000836a cmp r3, 0x80                                      |         
    0x0000836c beq 0x8362                                        |         
                                                                 |     } while (r3 == 0x80);
    0x0000836e str r5, [sp, 0x18]                                |     var_18h = r5;
    0x00008370 b 0x8332                                          |     goto label_18;
                                                                 | }
    ; assembly                               | /* r2dec pseudo code output */
                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x83a0 */
                                             | #include <stdint.h>
                                             |  
    ; (fcn) fcn.000083a0 ()                  | void fcn_000083a0 (int16_t arg1, uint32_t arg2) {
                                             |     int16_t var_0h;
                                             |     r0 = arg1;
                                             |     r1 = arg2;
    0x000083a0 cmp r1, 0                     |     
                                             |     if (r1 == 0) {
    0x000083a2 beq 0x840c                    |         goto label_1;
                                             |     }
    0x000083a4 ldrb r3, [r1, 0x14]           |     r3 = *((r1 + 0x14));
    0x000083a6 lsls r2, r3, 0x1d             |     r2 = r3 << 0x1d;
    0x000083a8 orr ip, r3, 4                 |     
                                             |     if (r2 < r3) {
    0x000083ac bmi 0x840c                    |         goto label_1;
                                             |     }
    0x000083ae ldr r3, [r0]                  |     r3 = *(r0);
                                             |     if (r3 != 0) {
    0x000083b0 cbz r3, 0x83ba                |         
    0x000083b2 ldr r3, [r1]                  |         r3 = *(r1);
    0x000083b4 ldr r3, [r3, 4]               |         r3 = *((r3 + 4));
    0x000083b6 lsls r3, r3, 0x1f             |         r3 <<= 0x1f;
                                             |         if (r3 >= r3) {
    0x000083b8 bpl 0x840c                    |             goto label_1;
                                             |         }
                                             |     }
    0x000083ba push {r4}                     |     
                                             |     do {
                                             | label_0:
    0x000083bc ldrd r3, r2, [r0, 0x40]       |         __asm ("ldrd r3, r2, [r0, 0x40]");
    0x000083c0 ldr r4, [r1, 0x28]            |         r4 = *((r1 + 0x28));
    0x000083c2 ands r3, r4                   |         r3 &= r4;
    0x000083c4 ldr r4, [r1, 0x2c]            |         r4 = *((r1 + 0x2c));
    0x000083c6 ands r2, r4                   |         r2 &= r4;
    0x000083c8 orrs r3, r2                   |         r3 |= r2;
                                             |         if (r3 != r2) {
    0x000083ca bne 0x8406                    |             goto label_2;
                                             |         }
    0x000083cc ldr r3, [r1, 4]               |         r3 = *((r1 + 4));
    0x000083ce strb.w ip, [r1, 0x14]         |         *((r1 + 0x14)) = ip;
    0x000083d2 cmp r3, 0                     |         
    0x000083d4 add.w r3, r3, r3, lsl 1       |         r3 += (r3 << 1);
                                             |         if (r3 < 0) {
    0x000083d8 blt 0x8406                    |             goto label_2;
                                             |         }
    0x000083da ldr r2, [r1, 0x18]            |         r2 = *((r1 + 0x18));
    0x000083dc ldr r1, [r2, 0x14]            |         r1 = *((r2 + 0x14));
    0x000083de add.w r1, r1, r3, lsl 4       |         r1 += (r3 << 4);
    0x000083e2 ldrb r3, [r1, 0x15]           |         r3 = *((r1 + 0x15));
    0x000083e4 subs r3, 1                    |         r3--;
    0x000083e6 uxtb r3, r3                   |         r3 = (int8_t) r3;
    0x000083e8 strb r3, [r1, 0x15]           |         *((r1 + 0x15)) = r3;
                                             |         if (r3 != 0) {
    0x000083ea cbnz r3, 0x8406               |             goto label_2;
                                             |         }
                                             |         if (r1 == 0) {
    0x000083ec cbz r1, 0x8406                |             goto label_2;
                                             |         }
    0x000083ee ldrb r3, [r1, 0x14]           |         r3 = *((r1 + 0x14));
    0x000083f0 orr ip, r3, 4                 |         
    0x000083f4 lsls r3, r3, 0x1d             |         r3 <<= 0x1d;
                                             |         if (r3 < r3) {
    0x000083f6 bmi 0x8406                    |             goto label_2;
                                             |         }
    0x000083f8 ldr r3, [r0]                  |         r3 = *(r0);
    0x000083fa cmp r3, 0                     |         
    0x000083fc beq 0x83bc                    |         
                                             |     } while (r3 == 0);
    0x000083fe ldr r3, [r1]                  |     r3 = *(r1);
    0x00008400 ldr r3, [r3, 4]               |     r3 = *((r3 + 4));
    0x00008402 lsls r4, r3, 0x1f             |     r4 = r3 << 0x1f;
                                             |     if (r4 < r3) {
    0x00008404 bmi 0x83bc                    |         goto label_0;
                                             |     }
                                             | label_2:
    0x00008406 ldr r4, [sp], 4               |     r4 = *(sp);
                                             |     sp += 4;
    0x0000840a bx lr                         |     return;
                                             | label_1:
    0x0000840c bx lr                         |     return;
                                             | }
    ; assembly                               | /* r2dec pseudo code output */
                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x864c */
                                             | #include <stdint.h>
                                             |  
    ; (fcn) fcn.0000864c ()                  | void fcn_0000864c (uint32_t arg1, int16_t arg2) {
                                             |     r0 = arg1;
                                             |     r1 = arg2;
    0x0000864c push {r4, r5, r6, lr}         |     
    0x0000864e ldrb.w ip, [r0]               |     ip = *(r0);
    0x00008652 cmp.w ip, 0x2d                |     
                                             |     if (ip == 0x2d) {
    0x00008656 beq 0x86c8                    |         goto label_3;
                                             |     }
    0x00008658 cmp.w ip, 0x2b                |     
                                             |     if (ip == 0x2b) {
    0x0000865c beq 0x86a4                    |         goto label_4;
                                             |     }
    0x0000865e cmp.w ip, 0x30                |     
                                             |     if (ip == 0x30) {
    0x00008662 beq 0x86d2                    |         goto label_5;
                                             |     }
                                             | label_1:
    0x00008664 movs r5, 0                    |     r5 = 0;
                                             | label_0:
    0x00008666 movs r4, 0                    |     r4 = 0;
    0x00008668 add.w r6, r0, 0xa             |     r6 = r0 + 0xa;
    0x0000866c mov r2, r4                    |     r2 = r4;
    0x0000866e b 0x8674                      |     
                                             |     while (r6 != r0) {
    0x00008670 ldrb ip, [r0, 1]!             |         ip = *((r0 += 1));
    0x00008674 sub.w ip, ip, 0x30            |         
    0x00008678 lsl.w lr, r2, 2               |         lr = r2 << 2;
    0x0000867c cmp.w ip, 9                   |         
    0x00008680 lsl.w r3, r4, 2               |         r3 = r4 << 2;
    0x00008684 orr.w lr, lr, r4, lsr 30      |         lr |= (r4 >> 30);
                                             |         if (ip > 9) {
    0x00008688 bhi 0x86ae                    |             goto label_6;
                                             |         }
    0x0000868a adds r3, r3, r4               |         r3 += r4;
    0x0000868c adc.w r2, r2, lr              |         __asm ("adc.w r2, r2, lr");
    0x00008690 adds r3, r3, r3               |         r3 += r3;
    0x00008692 adcs r2, r2                   |         __asm ("adcs r2, r2");
    0x00008694 adds.w r4, ip, r3             |         r4 = ip + r3;
    0x00008698 adc.w r2, r2, ip, asr 31      |         __asm ("adc.w r2, r2, ip, asr 31");
    0x0000869c cmp r6, r0                    |         
    0x0000869e bne 0x8670                    |         
                                             |     }
                                             |     do {
                                             | label_2:
    0x000086a0 movs r0, 0                    |         r0 = 0;
    0x000086a2 pop {r4, r5, r6, pc}          |         
                                             | label_4:
    0x000086a4 ldrb.w ip, [r0, 1]            |         ip = *((r0 + 1));
    0x000086a8 movs r5, 0                    |         r5 = 0;
    0x000086aa adds r0, 1                    |         r0++;
    0x000086ac b 0x8666                      |         goto label_0;
                                             | label_6:
    0x000086ae subs r3, r4, r5               |         r3 = r4 - r5;
    0x000086b0 sbc r2, r2, 0                 |         __asm ("sbc r2, r2, 0");
    0x000086b4 cmp.w r3, -0x80000000         |         
    0x000086b8 sbcs r2, r2, 0                |         __asm ("sbcs r2, r2, 0");
    0x000086bc bge 0x86a0                    |         
                                             |     } while (r3 >= -0x80000000);
                                             |     if (r5 != 0) {
    0x000086be cbz r5, 0x86c2                |         
    0x000086c0 rsbs r4, r4, 0                |         r4 -= ;
                                             |     }
    0x000086c2 movs r0, 1                    |     r0 = 1;
    0x000086c4 str r4, [r1]                  |     *(r1) = r4;
    0x000086c6 pop {r4, r5, r6, pc}          |     
                                             | label_3:
    0x000086c8 movs r5, 1                    |     r5 = 1;
    0x000086ca ldrb.w ip, [r0, 1]            |     ip = *((r0 + 1));
    0x000086ce add r0, r5                    |     r0 += r5;
    0x000086d0 b 0x8666                      |     goto label_0;
                                             | label_5:
    0x000086d2 ldrb r3, [r0, 1]              |     r3 = *((r0 + 1));
    0x000086d4 and r3, r3, 0xdf              |     r3 &= 0xdf;
    0x000086d8 cmp r3, 0x58                  |     
                                             |     if (r3 != 0x58) {
    0x000086da bne 0x8664                    |         goto label_1;
                                             |     }
    0x000086dc ldr r3, [pc, 0x74]            |     
    0x000086de ldrb r2, [r0, 2]              |     r2 = *((r0 + 2));
    0x000086e0 add r3, pc                    |     r3 = 0x10e38;
    0x000086e2 add r3, r2                    |     r3 += r2;
    0x000086e4 ldrb.w r3, [r3, 0x40]         |     r3 = *((r3 + 0x40));
    0x000086e8 ands r5, r3, 8                |     r5 = r3 & 8;
                                             |     if (r5 == r3) {
    0x000086ec beq 0x8666                    |         goto label_0;
                                             |     }
    0x000086ee cmp r2, 0x30                  |     
    0x000086f0 add.w r0, r0, 2               |     r0 += 2;
                                             |     if (r2 != 0x30) {
    0x000086f4 bne 0x870e                    |         goto label_7;
                                             |     }
                                             |     do {
    0x000086f6 ldrb r2, [r0, 1]!             |         r2 = *((r0 += 1));
    0x000086fa cmp r2, 0x30                  |         
    0x000086fc beq 0x86f6                    |         
                                             |     } while (r2 == 0x30);
    0x000086fe ldr r3, [pc, 0x58]            |     
    0x00008700 add r3, pc                    |     r3 = 0x10e5e;
    0x00008702 add r3, r2                    |     r3 += r2;
    0x00008704 ldrb.w r3, [r3, 0x40]         |     r3 = *((r3 + 0x40));
    0x00008708 ands r3, r3, 8                |     r3 &= 8;
                                             |     if (r3 == r3) {
    0x0000870c beq 0x874e                    |         goto label_8;
                                             |     }
                                             | label_7:
    0x0000870e ldr r5, [pc, 0x4c]            |     
    0x00008710 movs r4, 0                    |     r4 = 0;
    0x00008712 add.w r6, r0, 8               |     r6 = r0 + 8;
    0x00008716 add r5, pc                    |     r5 = 0x10e78;
                                             |     do {
    0x00008718 ubfx r3, r2, 6, 1             |         r3 = (r2 >> 6) & ((1 << 1) - 1);
    0x0000871c add.w r3, r3, r3, lsl 3       |         r3 += (r3 << 3);
    0x00008720 add r3, r2                    |         r3 += r2;
    0x00008722 ldrb r2, [r0, 1]!             |         r2 = *((r0 += 1));
    0x00008726 and r3, r3, 0xf               |         r3 &= 0xf;
    0x0000872a add.w r4, r3, r4, lsl 4       |         r4 = r3 + (r4 << 4);
    0x0000872e adds r3, r5, r2               |         r3 = r5 + r2;
    0x00008730 ldrb.w r3, [r3, 0x40]         |         r3 = *((r3 + 0x40));
    0x00008734 ands r3, r3, 8                |         r3 &= 8;
                                             |         if (r3 == r3) {
    0x00008738 beq 0x8740                    |             goto label_9;
                                             |         }
    0x0000873a cmp r6, r0                    |         
    0x0000873c bne 0x8718                    |         
                                             |     } while (r6 != r0);
    0x0000873e b 0x86a0                      |     goto label_2;
                                             | label_9:
    0x00008740 cmp r4, 0                     |     
    0x00008742 blt 0x874a                    |     
                                             |     while (1) {
    0x00008744 movs r0, 1                    |         r0 = 1;
    0x00008746 str r4, [r1]                  |         *(r1) = r4;
    0x00008748 pop {r4, r5, r6, pc}          |         
    0x0000874a mov r0, r3                    |         r0 = r3;
    0x0000874c pop {r4, r5, r6, pc}          |         
                                             | label_8:
    0x0000874e mov r4, r3                    |         r4 = r3;
    0x00008750 b 0x8744                      |         
                                             |     }
                                             | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x8934 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00008934 ()                                      | void fcn_00008934 (int16_t arg_5h, int16_t arg_eh, int16_t arg_10h, int16_t arg_34h, int16_t arg_40h, 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;
    0x00008934 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00008938 mov fp, r0                                        |     
    0x0000893a sub sp, 0x14                                      |     
    0x0000893c mov r0, r1                                        |     r0 = r1;
    0x0000893e lsl.w sl, r0, 1                                   |     sl = r0 << 1;
    0x00008942 str r1, [sp, 8]                                   |     var_8h = r1;
    0x00008944 ldrd r1, sb, [fp, 0x34]                           |     __asm ("ldrd r1, sb, [arg_34h]");
    0x00008948 ldr.w r4, [fp, 0x40]                              |     r4 = *(arg_40h);
    0x0000894c ldr r5, [r1, 0x24]                                |     r5 = *((r1 + 0x24));
    0x0000894e mov r1, r0                                        |     r1 = r0;
    0x00008950 ldrb.w r0, [fp, 5]                                |     r0 = *(arg_5h);
    0x00008954 cmp r1, 0                                         |     
    0x00008956 add r4, sl                                        |     r4 += sl;
    0x00008958 str r5, [sp]                                      |     *(sp) = r5;
    0x0000895a str r0, [sp, 4]                                   |     var_4h = r0;
                                                                 |     if (r1 <= 0) {
    0x0000895c ble 0x89d4                                        |         goto label_0;
                                                                 |     }
    0x0000895e add.w r6, r3, sl                                  |     r6 = r3 + sl;
    0x00008962 add.w r7, r2, r1, lsl 2                           |     r7 = r2 + (r1 << 2);
    0x00008966 sub.w r3, r4, sl                                  |     r3 = r4 - sl;
    0x0000896a str.w fp, [sp, 0xc]                               |     __asm ("str.w fp, [var_ch]");
    0x0000896e mov r8, r3                                        |     r8 = r3;
                                                                 |     do {
    0x00008970 ldrh r2, [r6, -0x2]!                              |         r2 = *((r6 -= 0x2));
    0x00008974 subs r4, 2                                        |         r4 -= 2;
    0x00008976 subs r5, r5, r2                                   |         r5 -= r2;
    0x00008978 uxtb.w fp, r5                                     |         fp = (int8_t) r5;
    0x0000897c ubfx sl, r5, 8, 8                                 |         sl = (r5 >> 8) & ((1 << 8) - 1);
    0x00008980 strb.w sl, [r4]                                   |         *(r4) = sl;
    0x00008984 add.w r0, sb, r5                                  |         r0 = sb + r5;
    0x00008988 strb.w fp, [r4, 1]                                |         *((r4 + 1)) = fp;
    0x0000898c ldr r1, [r7, -0x4]!                               |         r1 = *((r7 -= 0x4));
    0x00008990 blx 0x6214                                        |         fcn_00006214 ();
    0x00008994 cmp r8, r4                                        |         
    0x00008996 bne 0x8970                                        |         
                                                                 |     } while (r8 != r4);
    0x00008998 mov r8, fp                                        |     r8 = fp;
    0x0000899a ldr.w fp, [sp, 0xc]                               |     fp = var_ch;
                                                                 |     do {
    0x0000899e ldr r1, [sp, 8]                                   |         r1 = var_8h;
    0x000089a0 ldr r3, [sp, 4]                                   |         r3 = var_4h;
    0x000089a2 add sb, r3                                        |         sb += r3;
    0x000089a4 asrs r3, r1, 8                                    |         r3 = r1 >> 8;
    0x000089a6 strb.w sl, [sb, 5]                                |         *((sb + 5)) = sl;
    0x000089aa strb.w r3, [sb, 3]                                |         *((sb + 3)) = r3;
    0x000089ae uxth r3, r1                                       |         r3 = (int16_t) r1;
    0x000089b0 strb.w r8, [sb, 6]                                |         *((sb + 6)) = r8;
    0x000089b4 strb.w r1, [sb, 4]                                |         *((sb + 4)) = r1;
    0x000089b8 ldrh.w r2, [fp, 0xe]                              |         r2 = *(arg_eh);
    0x000089bc strh.w r3, [fp, 0x10]                             |         *(arg_10h) = r3;
    0x000089c0 sub.w r3, r2, r3, lsl 1                           |         r3 = r2 - (r3 << 1);
    0x000089c4 ldr r2, [sp]                                      |         r2 = *(sp);
    0x000089c6 subs r3, r3, r2                                   |         r3 -= r2;
    0x000089c8 add r3, r5                                        |         r3 += r5;
    0x000089ca strh.w r3, [fp, 0xe]                              |         *(arg_eh) = r3;
    0x000089ce add sp, 0x14                                      |         
    0x000089d0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_0:
    0x000089d4 ldr r3, [sp]                                      |         r3 = *(sp);
    0x000089d6 ubfx sl, r3, 8, 8                                 |         sl = (r3 >> 8) & ((1 << 8) - 1);
    0x000089da uxtb.w r8, r3                                     |         r8 = (int8_t) r3;
    0x000089de b 0x899e                                          |         
                                                                 |     } while (1);
                                                                 | }
    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x89e0 */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) fcn.000089e0 ()                              | void fcn_000089e0 (int16_t arg1, int16_t arg2, uint32_t arg3) {
                                                         |     int32_t var_0h;
                                                         |     int32_t var_0h_2;
                                                         |     r0 = arg1;
                                                         |     r1 = arg2;
                                                         |     r2 = arg3;
    0x000089e0 push.w {r4, r5, r6, r7, r8, sb, lr}       |     
    0x000089e4 subs r6, r2, 0                            |     r6 = r2 - 0;
    0x000089e6 sub sp, 0xc                               |     
    0x000089e8 ittt gt                                   |     
                                                         |     if (r6 <= r2) {
    0x000089ea movgt r4, r0                              |         r4 = r0;
                                                         |     }
                                                         |     if (r6 <= r2) {
    0x000089ec movgt r7, r1                              |         r7 = r1;
                                                         |     }
                                                         |     if (r6 <= r2) {
    0x000089ee movgt r5, r6                              |         r5 = r6;
                                                         |     }
                                                         |     if (r6 > r2) {
    0x000089f0 bgt 0x8a58                                |         goto label_0;
                                                         |     }
    0x000089f2 b 0x8a66                                  |     goto label_1;
                                                         |     do {
    0x000089f4 ldrd r3, r2, [r4, 4]                      |         __asm ("ldrd r3, r2, [r4, 4]");
    0x000089f8 ldr r0, [r4, 0x10]                        |         r0 = *((r4 + 0x10));
    0x000089fa subs r2, r2, r0                           |         r2 -= r0;
    0x000089fc add r0, r3                                |         r0 += r3;
    0x000089fe cmp r2, r5                                |         
    0x00008a00 it ge                                     |         
                                                         |         if (r2 < r5) {
    0x00008a02 movge r2, r5                              |             r2 = r5;
                                                         |         }
    0x00008a04 mov sb, r2                                |         sb = r2;
    0x00008a06 subs r5, r5, r2                           |         r5 -= r2;
    0x00008a08 blx 0x6214                                |         fcn_00006214 ();
    0x00008a0c ldr r2, [r4, 0x10]                        |         r2 = *((r4 + 0x10));
    0x00008a0e ldr r3, [r4, 8]                           |         r3 = *((r4 + 8));
    0x00008a10 add r2, sb                                |         r2 += sb;
    0x00008a12 cmp r2, r3                                |         
    0x00008a14 str r2, [r4, 0x10]                        |         *((r4 + 0x10)) = r2;
                                                         |         if (r2 == r3) {
    0x00008a16 bne 0x8a54                                |             
    0x00008a18 ldr r1, [r4, 0xc]                         |             r1 = *((r4 + 0xc));
    0x00008a1a ldr r0, [r4, 0x18]                        |             r0 = *((r4 + 0x18));
    0x00008a1c ldrd r3, lr, [r4, 0x1c]                   |             __asm ("ldrd r3, lr, [r4, 0x1c]");
    0x00008a20 subs r2, r2, r1                           |             r2 -= r1;
    0x00008a22 adds.w ip, r1, r0                         |             
    0x00008a26 ldr r0, [r4, 4]                           |             r0 = *((r4 + 4));
    0x00008a28 adc.w r3, r3, r1, asr 31                  |             __asm ("adc.w r3, r3, r1, asr 31");
    0x00008a2c add r1, r0                                |             r1 += r0;
    0x00008a2e mov r0, lr                                |             r0 = lr;
    0x00008a30 ldr.w lr, [lr]                            |             
    0x00008a34 strd ip, r3, [sp]                         |             __asm ("strd ip, r3, [sp]");
    0x00008a38 ldr.w r3, [lr, 0xc]                       |             r3 = *((lr + 0xc));
    0x00008a3c blx r3                                    |             uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00008a3e ldrd r3, r2, [r4, 0x18]                   |             __asm ("ldrd r3, r2, [r4, 0x18]");
    0x00008a42 ldr r1, [r4, 8]                           |             r1 = *((r4 + 8));
    0x00008a44 str r0, [r4]                              |             *(r4) = r0;
    0x00008a46 strd r8, r8, [r4, 0xc]                    |             __asm ("strd r8, r8, [r4, 0xc]");
    0x00008a4a adds r3, r3, r1                           |             r3 += r1;
    0x00008a4c adc.w r2, r2, r1, asr 31                  |             __asm ("adc.w r2, r2, r1, asr 31");
    0x00008a50 str r3, [r4, 0x18]                        |             *((r4 + 0x18)) = r3;
    0x00008a52 str r2, [r4, 0x1c]                        |             *((r4 + 0x1c)) = r2;
                                                         |         }
    0x00008a54 cmp r5, 0                                 |         
                                                         |         if (r5 <= 0) {
    0x00008a56 ble 0x8a66                                |             goto label_1;
                                                         |         }
                                                         | label_0:
    0x00008a58 ldr.w r8, [r4]                            |         r8 = *(r4);
    0x00008a5c subs r1, r6, r5                           |         r1 = r6 - r5;
    0x00008a5e add r1, r7                                |         r1 += r7;
    0x00008a60 cmp.w r8, 0                               |         
    0x00008a64 beq 0x89f4                                |         
                                                         |     } while (r8 == 0);
                                                         | label_1:
    0x00008a66 add sp, 0xc                               |     
    0x00008a68 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-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x8cf4 */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) fcn.00008cf4 ()                              | void fcn_00008cf4 (int16_t arg1, int16_t arg2, uint32_t arg3, int16_t arg4) {
                                                         |     int16_t var_4h;
                                                         |     r0 = arg1;
                                                         |     r1 = arg2;
                                                         |     r2 = arg3;
                                                         |     r3 = arg4;
    0x00008cf4 push.w {r4, r5, r6, r7, r8, sb, lr}       |     
    0x00008cf8 mov r4, r0                                |     r4 = r0;
    0x00008cfa ldr r5, [r0, 0x28]                        |     r5 = *((r0 + 0x28));
    0x00008cfc sub sp, 0xc                               |     
    0x00008cfe mov r6, r1                                |     r6 = r1;
    0x00008d00 mov r7, r3                                |     r7 = r3;
                                                         |     if (r5 != 0) {
    0x00008d02 cbz r5, 0x8d52                            |         
    0x00008d04 ldr r0, [pc, 0x174]                       |         
    0x00008d06 add r0, pc                                |         r0 = 0x11b86;
    0x00008d08 ldr.w r8, [r0, 0x84]                      |         r8 = *(0x11c0a);
    0x00008d0c cmp r2, 0                                 |         
                                                         |         if (r2 != 0) {
    0x00008d0e bne 0x8d9c                                |             goto label_4;
                                                         |         }
    0x00008d10 mov r0, r5                                |         r0 = r5;
    0x00008d12 blx r8                                    |         r0 = uint32_t (*r8)(uint32_t) (r0);
    0x00008d14 mov r5, r0                                |         r5 = r0;
    0x00008d16 cmp r0, 0                                 |         
                                                         |         if (r0 == 0) {
    0x00008d18 beq.w 0x8e54                              |             goto label_5;
                                                         |         }
                                                         | label_1:
    0x00008d1c ldr.w sb, [r5, 4]                         |         sb = *((r5 + 4));
    0x00008d20 ldr.w r1, [sb]                            |         r1 = *(sb);
    0x00008d24 cmp r1, 0                                 |         
                                                         |         if (r1 == 0) {
    0x00008d26 beq 0x8e1c                                |             goto label_6;
                                                         |         }
    0x00008d28 ldrsh.w r2, [sb, 0x1a]                    |         r2 = *((sb + 0x1a));
    0x00008d2c adds r3, r2, 1                            |         r3 = r2 + 1;
    0x00008d2e sxth r3, r3                               |         __asm ("sxth r3, r3");
    0x00008d30 cmp r2, 0                                 |         
                                                         |         if (r2 == 0) {
    0x00008d32 beq.w 0x8e4c                              |             goto label_7;
                                                         |         }
                                                         | label_2:
    0x00008d36 mov.w r8, 0                               |         r8 = 0;
    0x00008d3a strh.w r3, [sb, 0x1a]                     |         *((sb + 0x1a)) = r3;
    0x00008d3e cmp r6, 1                                 |         
    0x00008d40 it eq                                     |         
                                                         |         if (r6 != 1) {
    0x00008d42 streq sb, [r4, 0x2c]                      |             *((r4 + 0x2c)) = sb;
                                                         |         }
    0x00008d46 str.w sb, [r7]                            |         __asm ("str.w sb, [r7]");
                                                         | label_0:
    0x00008d4a mov r0, r8                                |         r0 = r8;
    0x00008d4c add sp, 0xc                               |         
    0x00008d4e pop.w {r4, r5, r6, r7, r8, sb, pc}        |         
                                                         |     }
    0x00008d52 cmp r2, 0                                 |     
                                                         |     if (r2 == 0) {
    0x00008d54 beq 0x8e54                                |         goto label_5;
                                                         |     }
    0x00008d56 ldr.w r8, [pc, 0x128]                     |     r8 = *(0x00008e80);
    0x00008d5a ldr r1, [r0, 0x18]                        |     r1 = *((r0 + 0x18));
    0x00008d5c ldrb r2, [r0, 0x1c]                       |     r2 = *((r0 + 0x1c));
    0x00008d5e add r8, pc                                |     r8 += pc;
    0x00008d60 ldr r0, [r0, 0x14]                        |     r0 = *((r0 + 0x14));
    0x00008d62 ldr.w r3, [r8, 0x78]                      |     r3 = *((r8 + 0x78));
    0x00008d66 adds r1, 0x28                             |     r1 += 0x28;
    0x00008d68 blx r3                                    |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00008d6a mov r5, r0                                |     r5 = r0;
    0x00008d6c cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x00008d6e beq.w 0x8e76                              |         goto label_8;
                                                         |     }
    0x00008d72 ldr r1, [r4, 0x10]                        |     r1 = *((r4 + 0x10));
    0x00008d74 ldr.w r8, [r8, 0x7c]                      |     r8 = *((r8 + 0x7c));
    0x00008d78 cmp r1, 0                                 |     
                                                         |     if (r1 < 0) {
    0x00008d7a bge 0x8d96                                |         
    0x00008d7c ldrd r2, r3, [r4, 0x14]                   |         __asm ("ldrd r2, r3, [r4, 0x14]");
    0x00008d80 mov.w r0, 0xfc00                          |         
    0x00008d84 movt r0, 0xffff                           |         r0 = 0x-400;
    0x00008d88 smull r0, r1, r1, r0                      |         r0:r1 = r1 * r0;
    0x00008d8c add r2, r3                                |         r2 += r3;
    0x00008d8e asrs r3, r2, 0x1f                         |         r3 = r2 >> 0x1f;
    0x00008d90 bl 0x5e500                                |         r0 = fcn_0005e500 (r0, r1, r2, r3);
    0x00008d94 mov r1, r0                                |         r1 = r0;
                                                         |     }
    0x00008d96 mov r0, r5                                |     r0 = r5;
    0x00008d98 blx r8                                    |     uint32_t (*r8)(uint32_t, uint32_t) (r0, r1);
    0x00008d9a str r5, [r4, 0x28]                        |     *((r4 + 0x28)) = r5;
                                                         | label_4:
    0x00008d9c ldr r3, [pc, 0xe4]                        |     
    0x00008d9e mov r0, r5                                |     r0 = r5;
    0x00008da0 ldrb.w r8, [r4, 0x1d]                     |     r8 = *((r4 + 0x1d));
    0x00008da4 mov r1, r6                                |     r1 = r6;
    0x00008da6 add r3, pc                                |     
    0x00008da8 ldr.w r3, [r3, 0x84]                      |     r3 = *(0x11cb2);
    0x00008dac mov r2, r8                                |     r2 = r8;
    0x00008dae blx r3                                    |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00008db0 cmp r0, 0                                 |     
    0x00008db2 it eq                                     |     
                                                         |     if (r0 == 0) {
    0x00008db4 cmpeq r8, 1                               |         __asm ("cmpeq r8, 1");
                                                         |     }
    0x00008db8 mov r5, r0                                |     r5 = r0;
                                                         |     if (r0 != 0) {
    0x00008dba bne 0x8e66                                |         goto label_9;
                                                         |     }
    0x00008dbc ldr r1, [r4, 8]                           |     r1 = *((r4 + 8));
                                                         |     if (r1 == 0) {
    0x00008dbe cbz r1, 0x8dd2                            |         goto label_10;
                                                         |     }
                                                         |     do {
    0x00008dc0 ldrsh.w r2, [r1, 0x1a]                    |         r2 = *((r1 + 0x1a));
                                                         |         if (r2 == 0) {
    0x00008dc4 cbnz r2, 0x8dcc                           |             
    0x00008dc6 ldrh r3, [r1, 0x18]                       |             r3 = *((r1 + 0x18));
    0x00008dc8 lsls r3, r3, 0x1d                         |             r3 <<= 0x1d;
                                                         |             if (r3 >= r3) {
    0x00008dca bpl 0x8e62                                |                 goto label_11;
                                                         |             }
                                                         |         }
    0x00008dcc ldr r1, [r1, 0x24]                        |         r1 = *((r1 + 0x24));
    0x00008dce cmp r1, 0                                 |         
    0x00008dd0 bne 0x8dc0                                |         
                                                         |     } while (r1 != 0);
                                                         | label_10:
    0x00008dd2 ldr r1, [r4, 4]                           |     r1 = *((r4 + 4));
    0x00008dd4 movs r3, 0                                |     r3 = 0;
    0x00008dd6 str r3, [r4, 8]                           |     *((r4 + 8)) = r3;
                                                         |     if (r1 != 0) {
    0x00008dd8 cbnz r1, 0x8de0                           |         goto label_12;
                                                         |     }
    0x00008dda b 0x8df8                                  |     goto label_13;
                                                         |     do {
    0x00008ddc ldr r1, [r1, 0x24]                        |         r1 = *((r1 + 0x24));
                                                         |         if (r1 == 0) {
    0x00008dde cbz r1, 0x8df8                            |             goto label_13;
                                                         |         }
                                                         | label_12:
    0x00008de0 ldrsh.w r3, [r1, 0x1a]                    |         r3 = *((r1 + 0x1a));
    0x00008de4 cmp r3, 0                                 |         
    0x00008de6 bne 0x8ddc                                |         
                                                         |     } while (r3 != 0);
                                                         | label_3:
    0x00008de8 ldrd r3, r0, [r4, 0x20]                   |     __asm ("ldrd r3, r0, [r4, 0x20]");
    0x00008dec blx r3                                    |     r0 = uint32_t (*r3)(uint32_t) (r3);
    0x00008dee cmp r0, 0                                 |     
    0x00008df0 it ne                                     |     
                                                         |     if (r0 != 0) {
    0x00008df2 cmpne r0, 5                               |         __asm ("cmpne r0, 5");
                                                         |     }
    0x00008df4 mov r8, r0                                |     r8 = r0;
                                                         |     if (r0 != 0) {
    0x00008df6 bne 0x8d4a                                |         goto label_0;
                                                         |     }
                                                         | label_13:
    0x00008df8 ldr r3, [pc, 0x8c]                        |     
    0x00008dfa movs r2, 2                                |     r2 = 2;
    0x00008dfc ldr r0, [r4, 0x28]                        |     r0 = *((r4 + 0x28));
    0x00008dfe mov r1, r6                                |     r1 = r6;
    0x00008e00 add r3, pc                                |     
    0x00008e02 ldr.w r3, [r3, 0x84]                      |     r3 = *(0x11d10);
    0x00008e06 blx r3                                    |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00008e08 mov r5, r0                                |     r5 = r0;
    0x00008e0a cmp r0, 0                                 |     
                                                         |     if (r0 != 0) {
    0x00008e0c bne 0x8d1c                                |         goto label_1;
                                                         |     }
    0x00008e0e mov.w r8, 7                               |     r8 = 7;
    0x00008e12 str r0, [r7]                              |     *(r7) = r0;
    0x00008e14 mov r0, r8                                |     r0 = r8;
    0x00008e16 add sp, 0xc                               |     
    0x00008e18 pop.w {r4, r5, r6, r7, r8, sb, pc}        |     
                                                         | label_6:
    0x00008e1c movs r2, 0x24                             |     r2 = 0x24;
    0x00008e1e add.w r0, sb, 4                           |     r0 = sb + 4;
    0x00008e22 str r1, [sp, 4]                           |     var_4h = r1;
    0x00008e24 blx 0x5fcc                                |     fcn_00005fcc ();
    0x00008e28 ldr r3, [r5]                              |     r3 = *(r5);
    0x00008e2a add.w r0, sb, 0x28                        |     r0 = sb + 0x28;
    0x00008e2e ldr r1, [sp, 4]                           |     r1 = var_4h;
    0x00008e30 ldr r2, [r4, 0x18]                        |     r2 = *((r4 + 0x18));
    0x00008e32 str.w r3, [sb, 4]                         |     __asm ("str.w r3, [sb, 4]");
    0x00008e36 str.w r5, [sb]                            |     __asm ("str.w r5, [sb]");
    0x00008e3a str.w r0, [sb, 8]                         |     __asm ("str.w r0, [sb, 8]");
    0x00008e3e blx 0x5fcc                                |     fcn_00005fcc ();
    0x00008e42 movs r3, 1                                |     r3 = 1;
    0x00008e44 str.w r4, [sb, 0x1c]                      |     __asm ("str.w r4, [sb, 0x1c]");
    0x00008e48 str.w r6, [sb, 0x14]                      |     __asm ("str.w r6, [sb, 0x14]");
                                                         | label_7:
    0x00008e4c ldr r2, [r4, 0xc]                         |     r2 = *((r4 + 0xc));
    0x00008e4e adds r2, 1                                |     r2++;
    0x00008e50 str r2, [r4, 0xc]                         |     *((r4 + 0xc)) = r2;
    0x00008e52 b 0x8d36                                  |     goto label_2;
                                                         | label_5:
    0x00008e54 movs r3, 0                                |     r3 = 0;
    0x00008e56 mov r8, r3                                |     r8 = r3;
    0x00008e58 str r3, [r7]                              |     *(r7) = r3;
    0x00008e5a mov r0, r8                                |     r0 = r8;
    0x00008e5c add sp, 0xc                               |     
    0x00008e5e pop.w {r4, r5, r6, r7, r8, sb, pc}        |     
                                                         | label_11:
    0x00008e62 str r1, [r4, 8]                           |     *((r4 + 8)) = r1;
    0x00008e64 b 0x8de8                                  |     goto label_3;
                                                         | label_9:
    0x00008e66 cmp r0, 0                                 |     
                                                         |     if (r0 != 0) {
    0x00008e68 bne.w 0x8d1c                              |         goto label_1;
                                                         |     }
    0x00008e6c str r0, [r7]                              |     *(r7) = r0;
    0x00008e6e cmp.w r8, 0                               |     
                                                         |     if (r8 == 0) {
    0x00008e72 beq.w 0x8d4a                              |         goto label_0;
                                                         |     }
                                                         | label_8:
    0x00008e76 mov.w r8, 7                               |     r8 = 7;
    0x00008e7a b 0x8d4a                                  |     goto label_0;
                                                         | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x8edc */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00008edc ()                                      | void fcn_00008edc (uint32_t arg1, int16_t arg2) {
                                                                 |     int32_t var_0h;
                                                                 |     int32_t var_0h_2;
                                                                 |     int16_t var_8h;
                                                                 |     int32_t var_8h_2;
                                                                 |     int16_t var_14h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x00008edc push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00008ee0 mov r5, r0                                        |     r5 = r0;
    0x00008ee2 ldr r2, [pc, 0xc0]                                |     
    0x00008ee4 sub sp, 0x1c                                      |     
    0x00008ee6 ldr r0, [r0, 0x3c]                                |     r0 = *((r0 + 0x3c));
    0x00008ee8 ldr r3, [pc, 0xbc]                                |     r3 = *(0x8fa8);
    0x00008eea add r2, pc                                        |     r2 = 0x11e94;
    0x00008eec ldr r4, [r0]                                      |     r4 = *(r0);
    0x00008eee ldr r3, [r2, r3]                                  |     
    0x00008ef0 ldr r3, [r3]                                      |     r3 = *(0x11e94);
    0x00008ef2 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00008ef4 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r4 == 0) {
    0x00008ef8 cbz r4, 0x8f06                                    |         goto label_0;
                                                                 |     }
    0x00008efa ldrb r3, [r5, 0x10]                               |     r3 = *((r5 + 0x10));
    0x00008efc subs r3, 1                                        |     r3--;
    0x00008efe cmp r3, 2                                         |     
    0x00008f00 it ls                                             |     
                                                                 |     if (r3 > 2) {
    0x00008f02 movls r4, 0                                       |         r4 = 0;
                                                                 |     }
    0x00008f04 bhi 0x8f22                                        |     
                                                                 |     while (r0 != 0) {
                                                                 | label_0:
    0x00008f06 ldr r2, [pc, 0xa4]                                |         
    0x00008f08 ldr r3, [pc, 0x9c]                                |         r3 = *(0x8fa8);
    0x00008f0a add r2, pc                                        |         r2 = 0x11ebc;
    0x00008f0c ldr r3, [r2, r3]                                  |         r3 = *(0x11ebc);
    0x00008f0e ldr r2, [r3]                                      |         r2 = *(0x11ebc);
    0x00008f10 ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x00008f12 eors r2, r3                                       |         r2 ^= r3;
    0x00008f14 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00008f18 bne 0x8fa0                                        |             goto label_2;
                                                                 |         }
    0x00008f1a mov r0, r4                                        |         r0 = r4;
    0x00008f1c add sp, 0x1c                                      |         
    0x00008f1e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
    0x00008f22 ldr r3, [r4, 0x18]                                |         r3 = *((r4 + 0x18));
    0x00008f24 mov r6, r1                                        |         r6 = r1;
    0x00008f26 add r1, sp, 8                                     |         r1 += var_8h;
    0x00008f28 ldr.w r7, [r5, 0x98]                              |         r7 = *((r5 + 0x98));
    0x00008f2c blx r3                                            |         r0 = uint32_t (*r3)(uint32_t, uint32_t) (r1, r3);
    0x00008f2e mov r4, r0                                        |         r4 = r0;
    0x00008f30 cmp r0, 0                                         |         
    0x00008f32 bne 0x8f06                                        |         
                                                                 |     }
    0x00008f34 umull sb, r8, r6, r7                              |     sb:r8 = r6 * r7;
    0x00008f38 asr.w sl, r7, 0x1f                                |     sl = r7 >> 0x1f;
    0x00008f3c ldrd r2, r3, [sp, 8]                              |     __asm ("ldrd r2, r3, [var_8h]");
    0x00008f40 mla r8, r6, sl, r8                                |     __asm ("mla r8, r6, sl, r8");
    0x00008f44 cmp r3, r8                                        |     
    0x00008f46 it eq                                             |     
                                                                 |     if (r3 != r8) {
    0x00008f48 cmpeq r2, sb                                      |         __asm ("cmpeq r2, sb");
                                                                 |         goto label_3;
                                                                 |     }
                                                                 |     if (r3 == r8) {
                                                                 | label_3:
    0x00008f4a beq 0x8f06                                        |         goto label_0;
                                                                 |     }
    0x00008f4c cmp sb, r2                                        |     
    0x00008f4e sbcs.w r1, r8, r3                                 |     __asm ("sbcs.w r1, r8, r3");
                                                                 |     if (sb >= r2) {
    0x00008f52 bge 0x8f66                                        |         goto label_4;
                                                                 |     }
    0x00008f54 ldr r0, [r5, 0x3c]                                |     r0 = *((r5 + 0x3c));
    0x00008f56 mov r2, sb                                        |     r2 = sb;
    0x00008f58 mov r3, r8                                        |     r3 = r8;
    0x00008f5a ldr r1, [r0]                                      |     r1 = *(r0);
    0x00008f5c ldr r1, [r1, 0x10]                                |     r1 = *((r1 + 0x10));
    0x00008f5e blx r1                                            |     r0 = uint32_t (*r1)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
                                                                 |     do {
                                                                 |         if (r0 != 0) {
    0x00008f60 cbz r0, 0x8f74                                    |             
    0x00008f62 mov r4, r0                                        |             r4 = r0;
    0x00008f64 b 0x8f06                                          |             goto label_0;
                                                                 | label_4:
    0x00008f66 adds r2, r7, r2                                   |             r2 = r7 + r2;
    0x00008f68 adc.w r3, sl, r3                                  |             __asm ("adc.w r3, sl, r3");
    0x00008f6c cmp sb, r2                                        |             
    0x00008f6e sbcs.w r3, r8, r3                                 |             __asm ("sbcs.w r3, r8, r3");
                                                                 |             if (sb >= r2) {
    0x00008f72 bge 0x8f78                                        |                 goto label_5;
                                                                 |             }
                                                                 |         }
    0x00008f74 str r6, [r5, 0x20]                                |         *((r5 + 0x20)) = r6;
    0x00008f76 b 0x8f06                                          |         goto label_0;
                                                                 | label_5:
    0x00008f78 ldr.w fp, [r5, 0xd8]                              |         fp = *((r5 + 0xd8));
    0x00008f7c mov r2, r7                                        |         r2 = r7;
    0x00008f7e mov r1, r0                                        |         r1 = r0;
    0x00008f80 mov r0, fp                                        |         r0 = fp;
    0x00008f82 blx 0x5fcc                                        |         fcn_00005fcc ();
    0x00008f86 ldr r0, [r5, 0x3c]                                |         r0 = *((r5 + 0x3c));
    0x00008f88 subs.w r3, sb, r7                                 |         r3 = sb - r7;
    0x00008f8c mov r2, r7                                        |         r2 = r7;
    0x00008f8e sbc.w r8, r8, sl                                  |         __asm ("sbc.w r8, r8, sl");
    0x00008f92 mov r1, fp                                        |         r1 = fp;
    0x00008f94 ldr r7, [r0]                                      |         r7 = *(r0);
    0x00008f96 strd r3, r8, [sp]                                 |         __asm ("strd r3, r8, [sp]");
    0x00008f9a ldr r3, [r7, 0xc]                                 |         r3 = *((r7 + 0xc));
    0x00008f9c blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00008f9e b 0x8f60                                          |         
                                                                 |     } while (1);
                                                                 | label_2:
    0x00008fa0 blx 0x6498                                        |     fcn_00006498 ();
    0x00008fa4 stcl p0, c0, [lr, -0x18]!                         |     __asm ("stcl p0, c0, [lr, -0x18]!");
    0x00008fa8 lsls r0, r1, 0xe                                  |     r0 = r1 << 0xe;
    0x00008faa movs r0, r0                                       |     
    0x00008fac stcl p0, c0, [lr, -0x18]                          |     __asm ("stcl p0, c0, [lr, -0x18]");
    0x00008fb0 push {r3, r4, r5, r6, r7, lr}                     |     
    0x00008fb2 mov r6, r1                                        |     r6 = r1;
                                                                 |     if (r1 == 0) {
    0x00008fb4 cbz r1, 0x9004                                    |         goto label_6;
                                                                 |     }
    0x00008fb6 movs r5, 0                                        |     r5 = 0;
    0x00008fb8 ldr r7, [pc, 0x4c]                                |     
    0x00008fba mov r4, r5                                        |     r4 = r5;
    0x00008fbc add r7, pc                                        |     r7 = 0x11fc8;
    0x00008fbe b 0x8fc4                                          |     
                                                                 |     while (r0 != 0) {
    0x00008fc0 cmp r4, 0x18                                      |         
                                                                 |         if (r4 == 0x18) {
    0x00008fc2 beq 0x9000                                        |             goto label_7;
                                                                 |         }
    0x00008fc4 ldr.w r1, [r7, r5, lsl 2]                         |         offset_0 = r5 << 2;
                                                                 |         r1 = *((r7 + offset_0));
    0x00008fc8 mov r0, r6                                        |         r0 = r6;
    0x00008fca adds r5, 3                                        |         r5 += 3;
    0x00008fcc adds r4, 1                                        |         r4++;
    0x00008fce blx 0x67b8                                        |         r0 = fcn_000067b8 ();
    0x00008fd2 cmp r0, 0                                         |         
    0x00008fd4 bne 0x8fc0                                        |         
                                                                 |     }
                                                                 | label_1:
    0x00008fd6 ldr r3, [pc, 0x34]                                |     
    0x00008fd8 add.w r2, r4, r4, lsl 1                           |     r2 = r4 + (r4 << 1);
    0x00008fdc add r3, pc                                        |     r3 = 0x11fee;
    0x00008fde add.w r3, r3, r2, lsl 2                           |     r3 += (r2 << 2);
    0x00008fe2 b 0x8fea                                          |     
                                                                 |     while (r0 == 0) {
    0x00008fe4 adds r4, 1                                        |         r4++;
    0x00008fe6 cmp r4, 0x19                                      |         
                                                                 |         if (r4 == 0x19) {
    0x00008fe8 beq 0x8ffe                                        |             goto label_8;
                                                                 |         }
    0x00008fea ldr r0, [r3, 4]                                   |         r0 = *((r3 + 4));
    0x00008fec adds r3, 0xc                                      |         r3 += 0xc;
    0x00008fee cmp r0, 0                                         |         
    0x00008ff0 beq 0x8fe4                                        |         
                                                                 |     }
    0x00008ff2 ldr r3, [pc, 0x1c]                                |     
    0x00008ff4 add.w r4, r4, r4, lsl 1                           |     r4 += (r4 << 1);
    0x00008ff8 add r3, pc                                        |     r3 = 0x1200e;
    0x00008ffa ldr.w r0, [r3, r4, lsl 2]                         |     r0 = *(0x1200e);
                                                                 | label_8:
    0x00008ffe pop {r3, r4, r5, r6, r7, pc}                      |     
                                                                 | label_7:
    0x00009000 movs r0, 0                                        |     r0 = 0;
    0x00009002 pop {r3, r4, r5, r6, r7, pc}                      |     
                                                                 | label_6:
    0x00009004 mov r4, r1                                        |     r4 = r1;
    0x00009006 b 0x8fd6                                          |     goto label_1;
                                                                 | }
    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x904c */
                                                     | #include <stdint.h>
                                                     |  
    ; (fcn) fcn.0000904c ()                          | void fcn_0000904c (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_1ch;
                                                     |     int16_t var_20h;
                                                     |     int16_t var_24h;
                                                     |     r0 = arg1;
                                                     |     r1 = arg2;
                                                     |     r2 = arg3;
    0x0000904c push.w {r4, r5, r6, r7, r8, lr}       |     
    0x00009050 mov r7, r1                            |     r7 = r1;
    0x00009052 ldr r4, [pc, 0x110]                   |     
    0x00009054 sub sp, 0x28                          |     
    0x00009056 movs r3, 0                            |     r3 = 0;
    0x00009058 mov r6, r0                            |     r6 = r0;
    0x0000905a ldr r1, [pc, 0x10c]                   |     r1 = *(0x916a);
    0x0000905c mov r8, r2                            |     r8 = r2;
    0x0000905e add r4, pc                            |     r4 = 0x121c8;
    0x00009060 ldr r1, [r4, r1]                      |     
    0x00009062 ldr r1, [r1]                          |     r1 = *(0x121c8);
    0x00009064 str r1, [sp, 0x24]                    |     var_24h = r1;
    0x00009066 mov.w r1, 0                           |     r1 = 0;
    0x0000906a strb r3, [r7]                         |     *(r7) = r3;
    0x0000906c ldr r3, [r0]                          |     r3 = *(r0);
    0x0000906e add r1, sp, 0x10                      |     r1 += var_10h;
    0x00009070 ldr r3, [r3, 0x18]                    |     r3 = *((r3 + 0x18));
    0x00009072 blx r3                                |     r0 = uint32_t (*r3)(uint32_t) (r3);
    0x00009074 mov r4, r0                            |     r4 = r0;
                                                     |     if (r0 != 0) {
    0x00009076 cbnz r0, 0x9084                       |         goto label_0;
                                                     |     }
    0x00009078 ldrd r5, r3, [sp, 0x10]               |     __asm ("ldrd r5, r3, [var_10h]");
    0x0000907c cmp r5, 0x10                          |     
    0x0000907e sbcs r2, r3, 0                        |     __asm ("sbcs r2, r3, 0");
    0x00009082 bge 0x90a0                            |     
                                                     |     while (r5 >= 0) {
                                                     | label_0:
    0x00009084 ldr r2, [pc, 0xe4]                    |         
    0x00009086 ldr r3, [pc, 0xe0]                    |         r3 = *(0x916a);
    0x00009088 add r2, pc                            |         r2 = 0x121f8;
    0x0000908a ldr r3, [r2, r3]                      |         r3 = *(0x121f8);
    0x0000908c ldr r2, [r3]                          |         r2 = *(0x121f8);
    0x0000908e ldr r3, [sp, 0x24]                    |         r3 = var_24h;
    0x00009090 eors r2, r3                           |         r2 ^= r3;
    0x00009092 mov.w r3, 0                           |         r3 = 0;
                                                     |         if (r2 != r3) {
    0x00009096 bne 0x915e                            |             goto label_1;
                                                     |         }
    0x00009098 mov r0, r4                            |         r0 = r4;
    0x0000909a add sp, 0x28                          |         
    0x0000909c pop.w {r4, r5, r6, r7, r8, pc}        |         
    0x000090a0 subs.w r2, r5, 0x10                   |         r2 = r5 - 0x10;
    0x000090a4 add r1, sp, 8                         |         r1 += var_8h;
    0x000090a6 sbc r3, r3, 0                         |         __asm ("sbc r3, r3, 0");
    0x000090aa mov r0, r6                            |         r0 = r6;
    0x000090ac str r1, [sp]                          |         *(sp) = r1;
    0x000090ae bl 0x7898                             |         r0 = fcn_00007898 (r0, r1, r2, r3);
    0x000090b2 cmp r0, 0                             |         
                                                     |         if (r0 != 0) {
    0x000090b4 bne 0x915a                            |             goto label_2;
                                                     |         }
    0x000090b6 ldr r5, [sp, 8]                       |         r5 = var_8h;
    0x000090b8 cmp r5, 0                             |         
    0x000090ba it ne                                 |         
                                                     |         if (r5 != 0) {
    0x000090bc cmpne r5, r8                          |             __asm ("cmpne r5, r8");
                                                     |         }
    0x000090be bhs 0x9084                            |         
                                                     |     }
    0x000090c0 ldr r2, [sp, 0x10]                    |     r2 = var_10h;
    0x000090c2 add r1, sp, 0xc                       |     r1 += var_ch;
    0x000090c4 ldr r3, [sp, 0x14]                    |     r3 = var_14h;
    0x000090c6 mov r0, r6                            |     r0 = r6;
    0x000090c8 str r1, [sp]                          |     *(sp) = r1;
    0x000090ca subs r2, 0xc                          |     r2 -= 0xc;
    0x000090cc sbc r3, r3, 0                         |     __asm ("sbc r3, r3, 0");
    0x000090d0 bl 0x7898                             |     r0 = fcn_00007898 (r0, r1, r2, r3);
    0x000090d4 cmp r0, 0                             |     
                                                     |     if (r0 != 0) {
    0x000090d6 bne 0x915a                            |         goto label_2;
                                                     |     }
    0x000090d8 ldr r3, [sp, 0x10]                    |     r3 = var_10h;
    0x000090da add.w r8, sp, 0x1c                    |     r8 += var_1ch;
    0x000090de movs r2, 8                            |     r2 = 8;
    0x000090e0 mov r1, r8                            |     r1 = r8;
    0x000090e2 mov r0, r6                            |     r0 = r6;
    0x000090e4 subs r3, 8                            |     r3 -= 8;
    0x000090e6 str r3, [sp]                          |     *(sp) = r3;
    0x000090e8 ldr r3, [sp, 0x14]                    |     r3 = var_14h;
    0x000090ea adc r3, r3, -1                        |     __asm ("adc r3, r3, -1");
    0x000090ee str r3, [sp, 4]                       |     var_4h = r3;
    0x000090f0 ldr r3, [r6]                          |     r3 = *(r6);
    0x000090f2 ldr r3, [r3, 8]                       |     r3 = *((r3 + 8));
    0x000090f4 blx r3                                |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
                                                     |     if (r0 != 0) {
    0x000090f6 cbnz r0, 0x915a                       |         goto label_2;
                                                     |     }
    0x000090f8 ldr r2, [sp, 0x1c]                    |     r2 = var_1ch;
    0x000090fa movw r3, 0xd5d9                       |     
    0x000090fe movt r3, 0xf905                       |     r3 = 0xf905d5d9;
    0x00009102 cmp r2, r3                            |     
                                                     |     if (r2 != r3) {
    0x00009104 bne 0x9084                            |         goto label_0;
                                                     |     }
    0x00009106 ldr r2, [sp, 0x20]                    |     r2 = var_20h;
    0x00009108 movw r3, 0xa120                       |     
    0x0000910c movt r3, 0xd763                       |     r3 = 0xd763a120;
    0x00009110 cmp r2, r3                            |     
                                                     |     if (r2 != r3) {
    0x00009112 bne 0x9084                            |         goto label_0;
                                                     |     }
    0x00009114 ldrd r3, r2, [sp, 0x10]               |     __asm ("ldrd r3, r2, [var_10h]");
    0x00009118 mov r0, r6                            |     r0 = r6;
    0x0000911a ldr r1, [r6]                          |     r1 = *(r6);
    0x0000911c subs r3, 0x10                         |     r3 -= 0x10;
    0x0000911e adc r2, r2, -1                        |     __asm ("adc r2, r2, -1");
    0x00009122 subs r3, r3, r5                       |     r3 -= r5;
    0x00009124 sbc r2, r2, 0                         |     __asm ("sbc r2, r2, 0");
    0x00009128 str r3, [sp]                          |     *(sp) = r3;
    0x0000912a str r2, [sp, 4]                       |     var_4h = r2;
    0x0000912c mov r2, r5                            |     r2 = r5;
    0x0000912e ldr r3, [r1, 8]                       |     r3 = *((r1 + 8));
    0x00009130 mov r1, r7                            |     r1 = r7;
    0x00009132 blx r3                                |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00009134 mov r4, r0                            |     r4 = r0;
    0x00009136 cmp r0, 0                             |     
                                                     |     if (r0 != 0) {
    0x00009138 bne 0x9084                            |         goto label_0;
                                                     |     }
    0x0000913a ldr r1, [sp, 0xc]                     |     r1 = var_ch;
    0x0000913c subs r2, r7, 1                        |     r2 = r7 - 1;
                                                     |     do {
    0x0000913e mov r3, r2                            |         r3 = r2;
    0x00009140 ldrb r0, [r2, 1]!                     |         r0 = *((r2 += 1));
    0x00009144 adds r3, 2                            |         r3 += 2;
    0x00009146 subs r3, r3, r7                       |         r3 -= r7;
    0x00009148 cmp r5, r3                            |         
    0x0000914a sub.w r1, r1, r0                      |         r1 -= r0;
    0x0000914e bhi 0x913e                            |         
                                                     |     } while (r5 > r3);
                                                     |     if (r1 == 0) {
    0x00009150 cbnz r1, 0x9154                       |         
    0x00009152 add r7, r5                            |         r7 += r5;
                                                     |     }
    0x00009154 movs r3, 0                            |     r3 = 0;
    0x00009156 strb r3, [r7]                         |     *(r7) = r3;
    0x00009158 b 0x9084                              |     goto label_0;
                                                     | label_2:
    0x0000915a mov r4, r0                            |     r4 = r0;
    0x0000915c b 0x9084                              |     goto label_0;
                                                     | label_1:
    0x0000915e blx 0x6498                            |     fcn_00006498 ();
    0x00009162 nop                                   |     
    0x00009164 invalid                               |     
                                                     | }
    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x91d8 */
                                                     | #include <stdint.h>
                                                     |  
                                                     | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                     |  
    ; (fcn) fcn.000091d8 ()                          | void fcn_000091d8 (int16_t arg_38h) {
                                                     |     int16_t var_8h;
                                                     |     int16_t var_0h;
                                                     |     int16_t var_4h;
                                                     |     int16_t var_20h;
                                                     |     int16_t var_4h_2;
                                                     |     int32_t var_14h;
                                                     |     int32_t var_ch;
                                                     |     if (? < ?) {
    0x000091d8 andhs fp, r0, pc, lsl 8               |         
                                                     |     }
    0x000091dc push.w {r4, r5, r6, r7, r8, lr}       |     
    0x000091e0 sub sp, 8                             |     
    0x000091e2 add r3, sp, 0x20                      |     r3 += var_20h;
    0x000091e4 add r5, sp, 0x38                      |     r5 += arg_38h;
    0x000091e6 ldr r6, [pc, 0xa0]                    |     
    0x000091e8 ldr r2, [pc, 0xa0]                    |     r2 = *(0x928c);
    0x000091ea ldr r4, [pc, 0xa4]                    |     
    0x000091ec add r6, pc                            |     r6 = 0x1247a;
    0x000091ee ldr r1, [r3], 4                       |     r1 = *(r3);
                                                     |     r3 += 4;
    0x000091f2 ldr r2, [r6, r2]                      |     
    0x000091f4 add r4, pc                            |     r4 = 0x1248a;
    0x000091f6 ldr r2, [r2]                          |     r2 = *(0x1247a);
    0x000091f8 str r2, [sp, 4]                       |     var_4h = r2;
    0x000091fa mov.w r2, 0                           |     r2 = 0;
    0x000091fe str r3, [sp]                          |     *(sp) = r3;
                                                     | label_1:
    0x00009200 ldrd r2, r8, [r5, -0x14]              |     __asm ("ldrd r2, r8, [var_4h_2]");
    0x00009204 ldrd r6, r7, [r5, -0xc]               |     __asm ("ldrd r6, r7, [var_ch]");
                                                     |     if (r2 == 0) {
    0x00009208 cbz r2, 0x9252                        |         goto label_2;
                                                     |     }
    0x0000920a mov ip, r1                            |     
    0x0000920c movs r3, 0                            |     r3 = 0;
    0x0000920e add.w lr, r1, r2                      |     lr = r1 + r2;
    0x00009212 b 0x9226                              |     
                                                     |     while (r1 < r1) {
    0x00009214 ldr r3, [r0, 0x60]                    |         r3 = *((r0 + 0x60));
    0x00009216 lsls r3, r0, 0xe                      |         r3 = r0 << 0xe;
    0x00009218 strb r6, [r4, 7]                      |         *((r4 + 7)) = r6;
    0x0000921a mov r1, ip                            |         r1 = ip;
    0x0000921c strb r2, [r0, 4]                      |         *((r0 + 4)) = r2;
    0x0000921e lsls r3, r0, 9                        |         r3 = r0 << 9;
    0x00009220 lsls r1, r6, 0x1d                     |         r1 = r6 << 0x1d;
    0x00009222 movs r2, r4                           |         r2 = r4;
                                                     |         if (r2 == r4) {
    0x00009224 beq 0x9254                            |             goto label_3;
                                                     |         }
    0x00009226 ldrb r2, [ip], 1                      |         r2 = *(ip);
                                                     |         ip++;
    0x0000922a adds r1, r4, r2                       |         r1 = r4 + r2;
    0x0000922c ldrb.w r1, [r1, 0x40]                 |         r1 = *((r1 + 0x40));
    0x00009230 lsls r1, r1, 0x1d                     |         r1 <<= 0x1d;
    0x00009232 bmi 0x9214                            |         
                                                     |     }
                                                     |     do {
                                                     | label_0:
    0x00009234 ldr r2, [pc, 0x5c]                    |         
    0x00009236 ldr r3, [pc, 0x54]                    |         r3 = *(0x928e);
    0x00009238 add r2, pc                            |         r2 = 0x124d0;
    0x0000923a ldr r3, [r2, r3]                      |         r3 = *(0x124d0);
    0x0000923c ldr r2, [r3]                          |         r2 = *(0x124d0);
    0x0000923e ldr r3, [sp, 4]                       |         r3 = var_4h;
    0x00009240 eors r2, r3                           |         r2 ^= r3;
    0x00009242 mov.w r3, 0                           |         r3 = 0;
                                                     |         if (r2 != r3) {
    0x00009246 bne 0x9284                            |             goto label_4;
                                                     |         }
    0x00009248 add sp, 8                             |         
    0x0000924a pop.w {r4, r5, r6, r7, r8, lr}        |         
    0x0000924e add sp, 0x10                          |         
    0x00009250 bx lr                                 |         return;
                                                     | label_2:
    0x00009252 mov r3, r2                            |         r3 = r2;
                                                     | label_3:
    0x00009254 cmp r3, r6                            |         
    0x00009256 ite le                                |         
                                                     |         if (r3 > r6) {
    0x00009258 movle r6, 0                           |             r6 = 0;
                                                     |         }
                                                     |         if (r3 <= r6) {
    0x0000925a movgt r6, 1                           |             r6 = 1;
                                                     |         }
    0x0000925c cmp r3, r8                            |         
    0x0000925e it lt                                 |         
                                                     |         if (r3 >= r8) {
    0x00009260 lsllt r1, r6, 0x1d                    |             r1 = r6 << 0x1d;
                                                     |         }
    0x00009262 movs r2, r4                           |         r2 = r4;
    0x00009264 cmp r6, 0                             |         
    0x00009266 bne 0x9234                            |         
                                                     |     } while (r6 != 0);
    0x00009268 ldr r2, [r5, -0x4]                    |     r2 = *((r5 - 0x4));
                                                     |     if (r7 == 0) {
    0x0000926c cbz r7, 0x927e                        |         goto label_5;
                                                     |     }
    0x0000926e ldrb r6, [r1]                         |     r6 = *(r1);
    0x00009270 adds r5, 0x14                         |     r5 += 0x14;
    0x00009272 cmp r6, r7                            |     
                                                     |     if (r6 != r7) {
    0x00009274 bne 0x9234                            |         goto label_0;
                                                     |     }
    0x00009276 adds r1, 1                            |     r1++;
    0x00009278 adds r0, 1                            |     r0++;
    0x0000927a str r3, [r2]                          |     *(r2) = r3;
    0x0000927c b 0x9200                              |     goto label_1;
                                                     | label_5:
    0x0000927e adds r0, 1                            |     r0++;
    0x00009280 str r3, [r2]                          |     *(r2) = r3;
    0x00009282 b 0x9234                              |     goto label_0;
                                                     | label_4:
    0x00009284 blx 0x6498                            |     fcn_00006498 ();
    0x00009288 orn r0, ip, r6                        |     r0 = ip | r6;
                                                     |     r0 = ~r0;
    0x0000928c lsls r0, r1, 0xe                      |     r0 = r1 << 0xe;
    0x0000928e movs r0, r0                           |     
    0x00009290 adr r7, 0x20                          |     r7 = 0x20;
    0x00009292 movs r5, r0                           |     r5 = r0;
    0x00009294 bic.w r0, r0, r6                      |     r0 = BIT_MASK (r0, r6);
    0x00009298 push {r4, r5, lr}                     |     
    0x0000929a mov r4, r0                            |     r4 = r0;
    0x0000929c sub sp, 0x14                          |     
                                                     |     if (r0 != 0) {
    0x0000929e cbz r0, 0x92c8                        |         
    0x000092a0 mov r5, r1                            |         r5 = r1;
    0x000092a2 mov r0, r2                            |         r0 = r2;
    0x000092a4 mov r1, r3                            |         r1 = r3;
    0x000092a6 str r5, [sp, 8]                       |         var_8h = r5;
    0x000092a8 bl 0x5e494                            |         fcn_0005e494 (r0, r1, r2);
    0x000092ac vldr d17, [pc, 0x20]                  |         __asm ("vldr d17, aav.0x000000ff");
    0x000092b0 vmov d16, r0, r1                      |         __asm ("vmov d16, r0, r1");
    0x000092b4 movs r1, 1                            |         r1 = 1;
    0x000092b6 ldr r2, [pc, 0x20]                    |         
    0x000092b8 mov r0, r4                            |         r0 = r4;
    0x000092ba vdiv.f64 d16, d16, d17                |         __asm ("vdiv.f64 d16, d16, d17");
    0x000092be add r2, pc                            |         r2 = 0x1259c;
    0x000092c0 vstr d16, [sp]                        |         __asm ("vstr d16, [sp]");
    0x000092c4 blx 0x64c8                            |         fcn_000064c8 ();
                                                     |     }
    0x000092c8 add sp, 0x14                          |     
    0x000092ca pop {r4, r5, pc}                      |     
                                                     | }


r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x97d4).
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-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x9cd4 */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) fcn.00009cd4 ()                      | void fcn_00009cd4 (int16_t arg1, int16_t arg3, int16_t arg4) {
                                                 |     int16_t var_ch_2;
                                                 |     int16_t var_0h;
                                                 |     int16_t var_0h_2;
                                                 |     int16_t var_ch;
                                                 |     r0 = arg1;
                                                 |     r2 = arg3;
                                                 |     r3 = arg4;
    0x00009cd4 push {r4, r5, lr}                 |     
    0x00009cd6 sub sp, 0x14                      |     
    0x00009cd8 ldr r4, [pc, 0x9c]                |     
    0x00009cda ldr r1, [pc, 0xa0]                |     r1 = *(0x9d7e);
    0x00009cdc add r4, pc                        |     r4 = 0x13a58;
    0x00009cde ldr r1, [r4, r1]                  |     
    0x00009ce0 mov r4, r0                        |     r4 = r0;
    0x00009ce2 ands r0, r3, 0xff000000           |     r0 = r3 & 0xff000000;
    0x00009ce6 ldr r1, [r1]                      |     r1 = *(0x13a58);
    0x00009ce8 str r1, [sp, 0xc]                 |     var_ch = r1;
    0x00009cea mov.w r1, 0                       |     r1 = 0;
    0x00009cee itt eq                            |     
                                                 |     if (r0 != r3) {
    0x00009cf0 moveq r1, sp                      |         r1 = sp;
                                                 |     }
                                                 |     if (r0 != r3) {
    0x00009cf2 moveq ip, r1                      |         
                                                 |     }
                                                 |     if (r0 != r3) {
    0x00009cf4 bne 0x9d4c                        |         goto label_1;
                                                 |     }
                                                 |     do {
    0x00009cf6 lsr.w lr, r2, 7                   |         lr = r2 >> 7;
    0x00009cfa orn r2, r2, 0x7f                  |         r2 |= 0x7f;
                                                 |         r2 = ~r2;
    0x00009cfe strb r2, [ip], 1                  |         *(ip) = r2;
                                                 |         ip++;
    0x00009d02 mov r5, r0                        |         r5 = r0;
    0x00009d04 orr.w r2, lr, r3, lsl 25          |         r2 = lr | (r3 << 25);
    0x00009d08 lsrs r3, r3, 7                    |         r3 >>= 7;
    0x00009d0a orrs.w lr, r2, r3                 |         lr = r2 | r3;
    0x00009d0e add.w r0, r0, 1                   |         r0++;
    0x00009d12 bne 0x9cf6                        |         
                                                 |     } while (lr != r2);
    0x00009d14 ldrb.w r3, [sp]                   |     r3 = *(sp);
    0x00009d18 adds r2, r1, r0                   |     r2 = r1 + r0;
    0x00009d1a add.w ip, r4, r5                  |     
    0x00009d1e and r3, r3, 0x7f                  |     r3 &= 0x7f;
    0x00009d22 strb.w r3, [sp]                   |     *(sp) = r3;
    0x00009d26 subs r3, r4, 1                    |     r3 = r4 - 1;
                                                 |     do {
    0x00009d28 ldrb r1, [r2, -0x1]!              |         r1 = *((r2 -= 0x1));
    0x00009d2c strb r1, [r3, 1]!                 |         *((r3 += 1)) = r1;
    0x00009d30 cmp r3, ip                        |         
    0x00009d32 bne 0x9d28                        |         
                                                 |     } while (r3 != ip);
                                                 | label_0:
    0x00009d34 ldr r2, [pc, 0x48]                |     
    0x00009d36 ldr r3, [pc, 0x44]                |     r3 = *(0x9d7e);
    0x00009d38 add r2, pc                        |     r2 = 0x13abc;
    0x00009d3a ldr r3, [r2, r3]                  |     r3 = *(0x13abc);
    0x00009d3c ldr r2, [r3]                      |     r2 = *(0x13abc);
    0x00009d3e ldr r3, [sp, 0xc]                 |     r3 = var_ch;
    0x00009d40 eors r2, r3                       |     r2 ^= r3;
    0x00009d42 mov.w r3, 0                       |     r3 = 0;
                                                 |     if (r2 != r3) {
    0x00009d46 bne 0x9d74                        |         goto label_2;
                                                 |     }
    0x00009d48 add sp, 0x14                      |     
    0x00009d4a pop {r4, r5, pc}                  |     
                                                 | label_1:
    0x00009d4c lsrs r1, r2, 8                    |     r1 = r2 >> 8;
    0x00009d4e lsrs r5, r3, 8                    |     r5 = r3 >> 8;
    0x00009d50 orr.w r1, r1, r3, lsl 24          |     r1 |= (r3 << 24);
    0x00009d54 mov r0, r4                        |     r0 = r4;
    0x00009d56 strb r2, [r0, 8]!                 |     *((r0 += 8)) = r2;
                                                 |     do {
    0x00009d5a lsrs r3, r1, 7                    |         r3 = r1 >> 7;
    0x00009d5c orn r1, r1, 0x7f                  |         r1 |= 0x7f;
                                                 |         r1 = ~r1;
    0x00009d60 strb r1, [r0, -0x1]!              |         *((r0 -= 0x1)) = r1;
    0x00009d64 cmp r0, r4                        |         
    0x00009d66 orr.w r1, r3, r5, lsl 25          |         r1 = r3 | (r5 << 25);
    0x00009d6a lsr.w r5, r5, 7                   |         r5 >>= 7;
    0x00009d6e bne 0x9d5a                        |         
                                                 |     } while (r0 != r4);
    0x00009d70 movs r0, 9                        |     r0 = 9;
    0x00009d72 b 0x9d34                          |     goto label_0;
                                                 | label_2:
    0x00009d74 blx 0x6498                        |     fcn_00006498 ();
    0x00009d78 svc 0x7c                          |     __asm ("svc 0x7c");
    0x00009d7a movs r6, r0                       |     r6 = r0;
    0x00009d7c lsls r0, r1, 0xe                  |     r0 = r1 << 0xe;
    0x00009d7e movs r0, r0                       |     
    0x00009d80 svc 0x20                          |     __asm ("svc 0x20");
    0x00009d82 movs r6, r0                       |     r6 = r0;
                                                 | }
    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x9e14 */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) fcn.00009e14 ()                      | void fcn_00009e14 (int16_t arg1, int16_t arg2, int16_t arg3) {
                                                 |     int16_t var_0h;
                                                 |     int16_t var_4h;
                                                 |     r0 = arg1;
                                                 |     r1 = arg2;
                                                 |     r2 = arg3;
    0x00009e14 mvnsmi lr, sp, lsr 18             |     __asm ("mvnsmi lr, sp, lsr 18");
    0x00009e18 mov r8, r1                        |     r8 = r1;
    0x00009e1a str r1, [r2, 8]                   |     *((r2 + 8)) = r1;
    0x00009e1c mov r5, r2                        |     r5 = r2;
    0x00009e1e sub sp, 8                         |     
    0x00009e20 mov r6, r0                        |     r6 = r0;
    0x00009e22 ldr r1, [pc, 0xe4]                |     
    0x00009e24 ldr r2, [pc, 0xe4]                |     r2 = *(0x9f0c);
    0x00009e26 ldrb r3, [r0, 6]                  |     r3 = *((r0 + 6));
    0x00009e28 add r1, pc                        |     r1 = 0x13d36;
    0x00009e2a ldr r2, [r1, r2]                  |     
    0x00009e2c uxth r4, r3                       |     r4 = (int16_t) r3;
    0x00009e2e ldr r2, [r2]                      |     r2 = *(0x13d36);
    0x00009e30 str r2, [sp, 4]                   |     var_4h = r2;
    0x00009e32 mov.w r2, 0                       |     r2 = 0;
    0x00009e36 ldrb r2, [r0, 2]                  |     r2 = *((r0 + 2));
                                                 |     if (r2 == 0) {
    0x00009e38 cbz r2, 0x9e82                    |         goto label_2;
                                                 |     }
    0x00009e3a ldrb r7, [r0, 4]                  |     r7 = *((r0 + 4));
    0x00009e3c cmp r7, 0                         |     
                                                 |     if (r7 != 0) {
    0x00009e3e bne 0x9ed8                        |         goto label_3;
                                                 |     }
    0x00009e40 str r7, [sp]                      |     *(sp) = r7;
                                                 | label_0:
    0x00009e42 add.w r0, r8, r3                  |     r0 = r8 + r3;
    0x00009e46 mov r1, r5                        |     r1 = r5;
    0x00009e48 bl 0x72a4                         |     fcn_000072a4 (r0, r1);
    0x00009e4c ldrh.w r8, [r6, 8]                |     r8 = *((r6 + 8));
    0x00009e50 add r0, r4                        |     r0 += r4;
    0x00009e52 uxth r4, r0                       |     r4 = (int16_t) r0;
    0x00009e54 str r7, [r5, 0xc]                 |     *((r5 + 0xc)) = r7;
    0x00009e56 str r7, [r5, 0x10]                |     *((r5 + 0x10)) = r7;
    0x00009e58 cmp r8, r7                        |     
    0x00009e5a strh r4, [r5, 0x14]               |     *((r5 + 0x14)) = r4;
                                                 |     if (r8 >= r7) {
    0x00009e5c bhs 0x9eaa                        |         goto label_4;
                                                 |     }
                                                 |     do {
    0x00009e5e ldr r3, [r6, 0x34]                |         r3 = *((r6 + 0x34));
    0x00009e60 ldrh r6, [r6, 0xa]                |         r6 = *((r6 + 0xa));
    0x00009e62 ldr r1, [r3, 0x24]                |         r1 = *((r3 + 0x24));
    0x00009e64 subs r0, r7, r6                   |         r0 = r7 - r6;
    0x00009e66 subs r1, 4                        |         r1 -= 4;
    0x00009e68 bl 0x5debc                        |         fcn_0005debc (r0, r1, r2);
    0x00009e6c add r1, r6                        |         r1 += r6;
    0x00009e6e cmp r8, r1                        |         
    0x00009e70 it ge                             |         
                                                 |         if (r8 >= r1) {
    0x00009e72 uxthge r6, r1                     |             __asm ("uxthge r6, r1");
                                                 |         }
    0x00009e74 add r4, r6                        |         r4 += r6;
    0x00009e76 strh r6, [r5, 0x16]               |         *((r5 + 0x16)) = r6;
    0x00009e78 uxth r4, r4                       |         r4 = (int16_t) r4;
    0x00009e7a adds r3, r4, 4                    |         r3 = r4 + 4;
    0x00009e7c strh r4, [r5, 0x18]               |         *((r5 + 0x18)) = r4;
    0x00009e7e strh r3, [r5, 0x1a]               |         *((r5 + 0x1a)) = r3;
    0x00009e80 b 0x9ebe                          |         goto label_5;
                                                 | label_2:
    0x00009e82 str r2, [r5, 0xc]                 |         *((r5 + 0xc)) = r2;
    0x00009e84 add.w r0, r8, r3                  |         r0 = r8 + r3;
    0x00009e88 ldrb.w r7, [r8, r3]               |         r7 = *((r8 + r3));
    0x00009e8c lsls r3, r7, 0x18                 |         r3 = r7 << 0x18;
                                                 |         if (r3 < r7) {
    0x00009e8e bmi 0x9ee8                        |             goto label_6;
                                                 |         }
    0x00009e90 movs r0, 1                        |         r0 = 1;
    0x00009e92 str r7, [sp]                      |         *(sp) = r7;
                                                 | label_1:
    0x00009e94 ldrh.w r8, [r6, 8]                |         r8 = *((r6 + 8));
    0x00009e98 add r4, r0                        |         r4 += r0;
    0x00009e9a uxth r4, r4                       |         r4 = (int16_t) r4;
    0x00009e9c movs r3, 0                        |         r3 = 0;
    0x00009e9e strd r7, r3, [r5]                 |         __asm ("strd r7, r3, [r5]");
    0x00009ea2 cmp r8, r7                        |         
    0x00009ea4 str r7, [r5, 0x10]                |         *((r5 + 0x10)) = r7;
    0x00009ea6 strh r4, [r5, 0x14]               |         *((r5 + 0x14)) = r4;
    0x00009ea8 blo 0x9e5e                        |         
                                                 |     } while (r8 <= r7);
                                                 | label_4:
    0x00009eaa uxth r7, r7                       |     r7 = (int16_t) r7;
    0x00009eac movs r3, 0                        |     r3 = 0;
    0x00009eae strh r3, [r5, 0x18]               |     *((r5 + 0x18)) = r3;
    0x00009eb0 add r4, r7                        |     r4 += r7;
    0x00009eb2 strh r7, [r5, 0x16]               |     *((r5 + 0x16)) = r7;
    0x00009eb4 uxth r4, r4                       |     r4 = (int16_t) r4;
    0x00009eb6 cmp r4, 4                         |     
    0x00009eb8 it lo                             |     
                                                 |     if (r4 >= 4) {
    0x00009eba movlo r4, 4                       |         r4 = 4;
                                                 |     }
    0x00009ebc strh r4, [r5, 0x1a]               |     *((r5 + 0x1a)) = r4;
                                                 | label_5:
    0x00009ebe ldr r2, [pc, 0x50]                |     
    0x00009ec0 ldr r3, [pc, 0x48]                |     r3 = *(0x9f0c);
    0x00009ec2 add r2, pc                        |     r2 = 0x13dd8;
    0x00009ec4 ldr r3, [r2, r3]                  |     r3 = *(0x13dd8);
    0x00009ec6 ldr r2, [r3]                      |     r2 = *(0x13dd8);
    0x00009ec8 ldr r3, [sp, 4]                   |     r3 = var_4h;
    0x00009eca eors r2, r3                       |     r2 ^= r3;
    0x00009ecc mov.w r3, 0                       |     r3 = 0;
                                                 |     if (r2 == r3) {
    0x00009ed0 bne 0x9f04                        |         
    0x00009ed2 add sp, 8                         |         
    0x00009ed4 pop.w {r4, r5, r6, r7, r8, pc}    |         
                                                 | label_3:
    0x00009ed8 ldrb.w r7, [r8]                   |         r7 = *(r8);
    0x00009edc lsls r2, r7, 0x18                 |         r2 = r7 << 0x18;
                                                 |         if (r2 >= r7) {
    0x00009ede bmi 0x9ef4                        |             
    0x00009ee0 movs r3, 1                        |             r3 = 1;
    0x00009ee2 str r7, [sp]                      |             *(sp) = r7;
    0x00009ee4 mov r4, r3                        |             r4 = r3;
    0x00009ee6 b 0x9e42                          |             goto label_0;
                                                 | label_6:
    0x00009ee8 mov r1, sp                        |             r1 = sp;
    0x00009eea bl 0x9d84                         |             fcn_00009d84 (r0, r1);
    0x00009eee ldr r7, [sp]                      |             r7 = *(sp);
    0x00009ef0 uxth r0, r0                       |             r0 = (int16_t) r0;
    0x00009ef2 b 0x9e94                          |             goto label_1;
                                                 |         }
    0x00009ef4 mov r1, sp                        |         r1 = sp;
    0x00009ef6 mov r0, r8                        |         r0 = r8;
    0x00009ef8 bl 0x9d84                         |         fcn_00009d84 (r0, r1);
    0x00009efc ldr r7, [sp]                      |         r7 = *(sp);
    0x00009efe uxth r4, r0                       |         r4 = (int16_t) r0;
    0x00009f00 mov r3, r0                        |         r3 = r0;
    0x00009f02 b 0x9e42                          |         goto label_0;
                                                 |     }
    0x00009f04 blx 0x6498                        |     fcn_00006498 ();
    0x00009f08 udf 0x30                          |     __asm ("udf 0x30");
                                                 | }


r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0xa0d4).
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-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0xa44c */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) fcn.0000a44c ()                      | void fcn_0000a44c (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                 |     r0 = arg1;
                                                 |     r1 = arg2;
                                                 |     r2 = arg3;
                                                 |     r3 = arg4;
    0x0000a44c push {r4, r5, r6, lr}             |     
    0x0000a44e ldr r4, [r0]                      |     r4 = *(r0);
    0x0000a450 ldrh r4, [r4, 0x3c]               |     r4 = *((r4 + 0x3c));
    0x0000a452 lsls r5, r4, 0x1e                 |     r5 = r4 << 0x1e;
                                                 |     if (r5 < r4) {
    0x0000a454 bmi 0xa49a                        |         goto label_0;
                                                 |     }
    0x0000a456 add.w lr, r0, 0x74                |     lr = r0 + 0x74;
    0x0000a45a add.w r5, r0, 0x13c               |     r5 = r0 + 0x13c;
    0x0000a45e mov ip, lr                        |     
                                                 |     do {
    0x0000a460 ldr.w r4, [ip, 0xc]               |         r4 = *((ip + 0xc));
                                                 |         if (r4 == 0) {
    0x0000a464 cbz r4, 0xa49c                    |             goto label_1;
                                                 |         }
    0x0000a466 add.w ip, ip, 0x14                |         
    0x0000a46a cmp ip, r5                        |         
    0x0000a46c bne 0xa460                        |         
                                                 |     } while (ip != r5);
    0x0000a46e mov.w r6, -1                      |     r6 = -1;
    0x0000a472 mov.w ip, 0                       |     
    0x0000a476 mvn r4, 0x80000000                |     r4 = ~0x80000000;
                                                 |     do {
    0x0000a47a ldr.w r5, [lr, 0x10]              |         r5 = *((lr + 0x10));
    0x0000a47e add.w lr, lr, 0x14                |         lr += 0x14;
    0x0000a482 cmp r5, r4                        |         
    0x0000a484 it lt                             |         
                                                 |         if (r5 >= r4) {
    0x0000a486 movlt r6, ip                      |             r6 = ip;
                                                 |         }
    0x0000a488 add.w ip, ip, 1                   |         
    0x0000a48c it lt                             |         
                                                 |         if (r5 >= r4) {
    0x0000a48e movlt r4, r5                      |             r4 = r5;
                                                 |         }
    0x0000a490 cmp.w ip, 0xa                     |         
    0x0000a494 bne 0xa47a                        |         
                                                 |     } while (ip != 0xa);
    0x0000a496 adds r4, r6, 1                    |     r4 = r6 + 1;
                                                 |     if (r4 == r6) {
    0x0000a498 bne 0xa4be                        |         
                                                 | label_0:
    0x0000a49a pop {r4, r5, r6, pc}              |         
                                                 | label_1:
    0x0000a49c ldr r5, [r0, 0x64]                |         r5 = *((r0 + 0x64));
    0x0000a49e strb.w r4, [ip, 6]                |         *((ip + 6)) = r4;
    0x0000a4a2 str.w r1, [ip]                    |         __asm ("str.w r1, [ip]");
    0x0000a4a6 ldr r1, [r0, 0x68]                |         r1 = *((r0 + 0x68));
    0x0000a4a8 str.w r3, [ip, 0xc]               |         __asm ("str.w r3, [ip, 0xc]");
    0x0000a4ac str.w r5, [ip, 8]                 |         __asm ("str.w r5, [ip, 8]");
    0x0000a4b0 adds r3, r1, 1                    |         r3 = r1 + 1;
    0x0000a4b2 strh.w r2, [ip, 4]                |         *((ip + 4)) = r2;
    0x0000a4b6 str r3, [r0, 0x68]                |         *((r0 + 0x68)) = r3;
    0x0000a4b8 str.w r1, [ip, 0x10]              |         __asm ("str.w r1, [ip, 0x10]");
    0x0000a4bc pop {r4, r5, r6, pc}              |         
                                                 |     }
    0x0000a4be add.w r6, r6, r6, lsl 2           |     r6 += (r6 << 2);
    0x0000a4c2 ldr r4, [r0, 0x64]                |     r4 = *((r0 + 0x64));
    0x0000a4c4 add.w r6, r0, r6, lsl 2           |     r6 = r0 + (r6 << 2);
    0x0000a4c8 str r1, [r6, 0x74]                |     *((r6 + 0x74)) = r1;
    0x0000a4ca movs r1, 0                        |     r1 = 0;
    0x0000a4cc strh.w r2, [r6, 0x78]             |     *((r6 + 0x78)) = r2;
    0x0000a4d0 str r4, [r6, 0x7c]                |     *((r6 + 0x7c)) = r4;
    0x0000a4d2 str.w r3, [r6, 0x80]              |     __asm ("str.w r3, [r6, 0x80]");
    0x0000a4d6 strb.w r1, [r6, 0x7a]             |     *((r6 + 0x7a)) = r1;
    0x0000a4da ldr r3, [r0, 0x68]                |     r3 = *((r0 + 0x68));
    0x0000a4dc adds r2, r3, 1                    |     r2 = r3 + 1;
    0x0000a4de str r2, [r0, 0x68]                |     *((r0 + 0x68)) = r2;
    0x0000a4e0 str.w r3, [r6, 0x84]              |     __asm ("str.w r3, [r6, 0x84]");
    0x0000a4e4 pop {r4, r5, r6, pc}              |     
                                                 | }


r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0xa86c).
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-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0xabcc */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) fcn.0000abcc ()                              | void fcn_0000abcc (int16_t arg1, int16_t arg2) {
                                                         |     int16_t var_0h;
                                                         |     int16_t var_4h;
                                                         |     r0 = arg1;
                                                         |     r1 = arg2;
    0x0000abcc push.w {r4, r5, r6, r7, r8, lr}           |     
    0x0000abd0 mov r5, r0                                |     r5 = r0;
    0x0000abd2 ldrd r7, r8, [r0, 0x10]                   |     __asm ("ldrd r7, r8, [r0, 0x10]");
    0x0000abd6 sub sp, 8                                 |     
    0x0000abd8 mov r4, r1                                |     r4 = r1;
    0x0000abda ldr r3, [r0, 4]                           |     r3 = *((r0 + 4));
    0x0000abdc ldr.w r2, [r7, 0x98]                      |     r2 = *((r7 + 0x98));
                                                         |     if (r1 != 0) {
    0x0000abe0 cbnz r1, 0xac54                           |         goto label_2;
                                                         |     }
    0x0000abe2 add.w r6, r8, -1                          |     r6 = r8 + -1;
    0x0000abe6 mov r1, r3                                |     r1 = r3;
    0x0000abe8 umull r3, ip, r6, r2                      |     r3:ip = r6 * r2;
    0x0000abec ldr r0, [r7, 0x3c]                        |     r0 = *((r7 + 0x3c));
    0x0000abee asr.w lr, r2, 0x1f                        |     lr = r2 >> 0x1f;
    0x0000abf2 mla r6, r6, lr, ip                        |     __asm ("mla r6, r6, lr, ip");
    0x0000abf6 ldr.w ip, [r0]                            |     ip = *(r0);
    0x0000abfa strd r3, r6, [sp]                         |     __asm ("strd r3, r6, [sp]");
    0x0000abfe ldr.w r3, [ip, 8]                         |     r3 = *((ip + 8));
    0x0000ac02 blx r3                                    |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x0000ac04 movw r3, 0x20a                            |     r3 = 0x20a;
    0x0000ac08 mov r6, r0                                |     r6 = r0;
    0x0000ac0a cmp r0, r3                                |     
                                                         |     if (r0 == r3) {
    0x0000ac0c beq 0xac34                                |         goto label_3;
                                                         |     }
    0x0000ac0e cmp.w r8, 1                               |     
                                                         |     if (r8 == 1) {
    0x0000ac12 beq 0xac96                                |         goto label_4;
                                                         |     }
                                                         |     do {
                                                         | label_0:
    0x0000ac14 ldr.w r4, [r7, 0xc8]                      |         r4 = *((r7 + 0xc8));
                                                         |         if (r4 != 0) {
    0x0000ac18 cbz r4, 0xac2c                            |             
    0x0000ac1a ldr r1, [r5, 4]                           |             r1 = *((r5 + 4));
    0x0000ac1c mov r2, r8                                |             r2 = r8;
    0x0000ac1e ldr.w r0, [r7, 0xd4]                      |             r0 = *((r7 + 0xd4));
    0x0000ac22 movs r3, 3                                |             r3 = 3;
    0x0000ac24 blx r4                                    |             r0 = uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0000ac26 cmp r0, 0                                 |             
    0x0000ac28 it eq                                     |             
                                                         |             if (r0 == 0) {
    0x0000ac2a moveq r6, 7                               |                 r6 = 7;
                                                         |                 goto label_5;
                                                         |             }
                                                         |         }
                                                         | label_5:
    0x0000ac2c mov r0, r6                                |         r0 = r6;
    0x0000ac2e add sp, 8                                 |         
    0x0000ac30 pop.w {r4, r5, r6, r7, r8, pc}            |         
                                                         | label_3:
    0x0000ac34 cmp.w r8, 1                               |         
    0x0000ac38 it ne                                     |         
                                                         |         if (r8 == 1) {
    0x0000ac3a movne r6, r4                              |             r6 = r4;
                                                         |         }
    0x0000ac3c bne 0xac14                                |         
                                                         |     } while (r8 != 1);
                                                         | label_1:
    0x0000ac3e ldr r3, [r5, 4]                           |     r3 = *((r5 + 4));
    0x0000ac40 movs r6, 0                                |     r6 = 0;
    0x0000ac42 ldr r0, [r3, 0x18]                        |     r0 = *((r3 + 0x18));
    0x0000ac44 ldr r1, [r3, 0x1c]                        |     r1 = *((r3 + 0x1c));
    0x0000ac46 ldr r2, [r3, 0x20]                        |     r2 = *((r3 + 0x20));
    0x0000ac48 ldr r3, [r3, 0x24]                        |     r3 = *((r3 + 0x24));
    0x0000ac4a str r0, [r7, 0x64]                        |     *((r7 + 0x64)) = r0;
    0x0000ac4c str r1, [r7, 0x68]                        |     *((r7 + 0x68)) = r1;
    0x0000ac4e str r2, [r7, 0x6c]                        |     *((r7 + 0x6c)) = r2;
    0x0000ac50 str r3, [r7, 0x70]                        |     *((r7 + 0x70)) = r3;
    0x0000ac52 b 0xac14                                  |     goto label_0;
                                                         | label_2:
    0x0000ac54 ldr.w r0, [r7, 0xe0]                      |     r0 = *((r7 + 0xe0));
    0x0000ac58 subs r4, r1, 1                            |     r4 = r1 - 1;
    0x0000ac5a mov r1, r3                                |     r1 = r3;
    0x0000ac5c ldrh.w r3, [r0, 0x42]                     |     r3 = *((r0 + 0x42));
    0x0000ac60 ldr r0, [r0, 8]                           |     r0 = *((r0 + 8));
    0x0000ac62 and ip, r3, 0xfe00                        |     
    0x0000ac66 lsls r3, r3, 0x10                         |     r3 <<= 0x10;
    0x0000ac68 ldr r6, [r0]                              |     r6 = *(r0);
    0x0000ac6a and r3, r3, 0x10000                       |     r3 &= 0x10000;
    0x0000ac6e orr.w ip, ip, r3                          |     
    0x0000ac72 add.w r3, ip, 0x18                        |     r3 = ip + 0x18;
    0x0000ac76 umull r4, r3, r4, r3                      |     r4:r3 = r4 * r3;
    0x0000ac7a adds r4, 0x38                             |     r4 += 0x38;
    0x0000ac7c adc r3, r3, 0                             |     __asm ("adc r3, r3, 0");
    0x0000ac80 cmp r2, ip                                |     
    0x0000ac82 it ge                                     |     
                                                         |     if (r2 < ip) {
    0x0000ac84 movge r2, ip                              |         r2 = ip;
                                                         |     }
    0x0000ac86 str r4, [sp]                              |     *(sp) = r4;
    0x0000ac88 str r3, [sp, 4]                           |     var_4h = r3;
    0x0000ac8a ldr r3, [r6, 8]                           |     r3 = *((r6 + 8));
    0x0000ac8c blx r3                                    |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0000ac8e cmp.w r8, 1                               |     
    0x0000ac92 mov r6, r0                                |     r6 = r0;
                                                         |     if (r8 != 1) {
    0x0000ac94 bne 0xac14                                |         goto label_0;
                                                         |     }
                                                         | label_4:
    0x0000ac96 cmp r6, 0                                 |     
                                                         |     if (r6 == 0) {
    0x0000ac98 beq 0xac3e                                |         goto label_1;
                                                         |     }
    0x0000ac9a mov.w r3, -1                              |     r3 = -1;
    0x0000ac9e str r3, [r7, 0x64]                        |     *((r7 + 0x64)) = r3;
    0x0000aca0 str r3, [r7, 0x68]                        |     *((r7 + 0x68)) = r3;
    0x0000aca2 str r3, [r7, 0x6c]                        |     *((r7 + 0x6c)) = r3;
    0x0000aca4 str r3, [r7, 0x70]                        |     *((r7 + 0x70)) = r3;
    0x0000aca6 b 0xac14                                  |     goto label_0;
                                                         | }
    ; assembly                               | /* r2dec pseudo code output */
                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0xaea0 */
                                             | #include <stdint.h>
                                             |  
    ; (fcn) fcn.0000aea0 ()                  | void fcn_0000aea0 (int16_t arg1, int16_t arg2, int16_t arg3) {
                                             |     r0 = arg1;
                                             |     r1 = arg2;
                                             |     r2 = arg3;
    0x0000aea0 push {r4, r5, r6, lr}         |     
    0x0000aea2 add.w r3, r0, 0x74            |     r3 = r0 + 0x74;
    0x0000aea6 add.w ip, r1, r2              |     
    0x0000aeaa add.w lr, r0, 0x13c           |     lr = r0 + 0x13c;
    0x0000aeae movs r5, 0                    |     r5 = 0;
                                             | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0xb3e8 */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) fcn.0000b3e8 ()                                  | void fcn_0000b3e8 (int16_t arg1, int16_t arg2) {
                                                             |     int16_t var_4h;
                                                             |     int32_t var_4h_2;
                                                             |     int32_t var_8h;
                                                             |     int16_t var_10h;
                                                             |     int16_t var_0h;
                                                             |     int16_t var_24h;
                                                             |     int16_t var_2ch;
                                                             |     int16_t var_30h;
                                                             |     int16_t var_34h;
                                                             |     int16_t var_0h_2;
                                                             |     int16_t var_64h;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
    0x0000b3e8 push.w {r4, r5, r6, r7, r8, sb, lr}           |     
    0x0000b3ec mov r7, r1                                    |     r7 = r1;
    0x0000b3ee ldr r1, [pc, 0x120]                           |     
    0x0000b3f0 sub sp, 0x6c                                  |     
    0x0000b3f2 add r6, sp, 4                                 |     r6 += var_4h;
    0x0000b3f4 mov r5, r0                                    |     r5 = r0;
    0x0000b3f6 ldr r3, [r0, 0x20]                            |     r3 = *((r0 + 0x20));
    0x0000b3f8 mov sb, r6                                    |     sb = r6;
    0x0000b3fa ldr r2, [pc, 0x118]                           |     r2 = *(0xb516);
    0x0000b3fc add r1, pc                                    |     r1 = 0x16912;
    0x0000b3fe ldr.w r8, [r3]                                |     r8 = *(r3);
    0x0000b402 ldr r2, [r1, r2]                              |     
    0x0000b404 mov ip, r8                                    |     
    0x0000b406 add.w r4, r8, 0x30                            |     r4 = r8 + 0x30;
    0x0000b40a ldr r2, [r2]                                  |     r2 = *(0x16912);
    0x0000b40c str r2, [sp, 0x64]                            |     var_64h = r2;
    0x0000b40e mov.w r2, 0                                   |     r2 = 0;
                                                             |     do {
    0x0000b412 ldr.w r0, [ip]                                |         r0 = *(ip);
    0x0000b416 add.w ip, ip, 0x10                            |         
    0x0000b41a ldr r1, [ip, -0xc]                            |         r1 = *((ip - 0xc));
    0x0000b41e mov lr, sb                                    |         lr = sb;
    0x0000b420 ldr r2, [ip, -0x8]                            |         r2 = *((ip - 0x8));
    0x0000b424 ldr r3, [ip, -0x4]                            |         r3 = *((ip - 0x4));
    0x0000b428 cmp ip, r4                                    |         
    0x0000b42a stm.w lr!, {r0, r1, r2, r3}                   |         *(lr!) = r0;
                                                             |         *((lr! + 4)) = r1;
                                                             |         *((lr! + 8)) = r2;
                                                             |         *((lr! + 12)) = r3;
    0x0000b42e mov sb, lr                                    |         sb = lr;
    0x0000b430 bne 0xb412                                    |         
                                                             |     } while (ip != r4);
    0x0000b432 ldrb.w r3, [r5, 0x2b]                         |     r3 = *((r5 + 0x2b));
    0x0000b436 cmp r3, 2                                     |     
                                                             |     if (r3 != 2) {
    0x0000b438 beq 0xb442                                    |         
    0x0000b43a ldr r0, [r5, 4]                               |         r0 = *((r5 + 4));
    0x0000b43c ldr r3, [r0]                                  |         r3 = *(r0);
    0x0000b43e ldr r3, [r3, 0x3c]                            |         r3 = *((r3 + 0x3c));
    0x0000b440 blx r3                                        |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
                                                             |     }
    0x0000b442 add.w sb, r8, 0x60                            |     sb = r8 + 0x60;
    0x0000b446 add.w r8, sp, 0x34                            |     r8 += var_34h;
    0x0000b44a mov ip, r4                                    |     
    0x0000b44c mov lr, r8                                    |     lr = r8;
                                                             |     do {
    0x0000b44e ldr.w r0, [ip]                                |         r0 = *(ip);
    0x0000b452 add.w ip, ip, 0x10                            |         
    0x0000b456 ldr r1, [ip, -0xc]                            |         r1 = *((ip - 0xc));
    0x0000b45a mov r4, lr                                    |         r4 = lr;
    0x0000b45c ldr r2, [ip, -0x8]                            |         r2 = *((ip - 0x8));
    0x0000b460 ldr r3, [ip, -0x4]                            |         r3 = *((ip - 0x4));
    0x0000b464 cmp ip, sb                                    |         
    0x0000b466 stm r4!, {r0, r1, r2, r3}                     |         *(r4!) = r0;
                                                             |         *((r4! + 4)) = r1;
                                                             |         *((r4! + 8)) = r2;
                                                             |         *((r4! + 12)) = r3;
    0x0000b468 mov lr, r4                                    |         lr = r4;
    0x0000b46a bne 0xb44e                                    |         
                                                             |     } while (ip != sb);
    0x0000b46c movs r2, 0x30                                 |     r2 = 0x30;
    0x0000b46e mov r1, r8                                    |     r1 = r8;
    0x0000b470 mov r0, r6                                    |     r0 = r6;
    0x0000b472 blx 0x5e6c                                    |     r0 = fcn_00005e6c ();
                                                             |     if (r0 != 0) {
    0x0000b476 cbnz r0, 0xb4a8                               |         goto label_1;
                                                             |     }
    0x0000b478 ldrb.w r3, [sp, 0x10]                         |     r3 = var_10h;
                                                             |     if (r3 == 0) {
    0x0000b47c cbz r3, 0xb4a8                                |         goto label_1;
                                                             |     }
    0x0000b47e ldrd r4, r0, [sp, 4]                          |     __asm ("ldrd r4, r0, [var_4h]");
    0x0000b482 mov r3, r6                                    |     r3 = r6;
    0x0000b484 add.w ip, sp, 0x24                            |     
    0x0000b488 add r0, r4                                    |     r0 += r4;
                                                             |     do {
    0x0000b48a ldrd r1, r2, [r3, 8]                          |         __asm ("ldrd r1, r2, [var_10h]");
    0x0000b48e adds r3, 8                                    |         r3 += 8;
    0x0000b490 cmp ip, r3                                    |         
    0x0000b492 add r1, r0                                    |         r1 += r0;
    0x0000b494 add r4, r1                                    |         r4 += r1;
    0x0000b496 add r2, r4                                    |         r2 += r4;
    0x0000b498 add r0, r2                                    |         r0 += r2;
    0x0000b49a bne 0xb48a                                    |         
                                                             |     } while (ip != r3);
    0x0000b49c ldr r3, [sp, 0x2c]                            |     r3 = var_2ch;
    0x0000b49e cmp r3, r4                                    |     
                                                             |     if (r3 == r4) {
    0x0000b4a0 bne 0xb4a8                                    |         
    0x0000b4a2 ldr r3, [sp, 0x30]                            |         r3 = var_30h;
    0x0000b4a4 cmp r3, r0                                    |         
                                                             |         if (r3 == r0) {
    0x0000b4a6 beq 0xb4c4                                    |             goto label_2;
                                                             |         }
                                                             |     }
                                                             | label_1:
    0x0000b4a8 movs r0, 1                                    |     r0 = 1;
                                                             |     do {
                                                             | label_0:
    0x0000b4aa ldr r2, [pc, 0x6c]                            |         
    0x0000b4ac ldr r3, [pc, 0x64]                            |         r3 = *(0xb514);
    0x0000b4ae add r2, pc                                    |         r2 = 0x169cc;
    0x0000b4b0 ldr r3, [r2, r3]                              |         r3 = *(0x169cc);
    0x0000b4b2 ldr r2, [r3]                                  |         r2 = *(0x169cc);
    0x0000b4b4 ldr r3, [sp, 0x64]                            |         r3 = var_64h;
    0x0000b4b6 eors r2, r3                                   |         r2 ^= r3;
    0x0000b4b8 mov.w r3, 0                                   |         r3 = 0;
                                                             |         if (r2 != r3) {
    0x0000b4bc bne 0xb50c                                    |             goto label_3;
                                                             |         }
    0x0000b4be add sp, 0x6c                                  |         
    0x0000b4c0 pop.w {r4, r5, r6, r7, r8, sb, pc}            |         
                                                             | label_2:
    0x0000b4c4 add.w r4, r5, 0x34                            |         r4 = r5 + 0x34;
    0x0000b4c8 movs r2, 0x30                                 |         r2 = 0x30;
    0x0000b4ca mov r1, r6                                    |         r1 = r6;
    0x0000b4cc mov r0, r4                                    |         r0 = r4;
    0x0000b4ce blx 0x5e6c                                    |         r0 = fcn_00005e6c ();
    0x0000b4d2 cmp r0, 0                                     |         
    0x0000b4d4 beq 0xb4aa                                    |         
                                                             |     } while (r0 == 0);
    0x0000b4d6 movs r3, 1                                    |     r3 = 1;
    0x0000b4d8 str r3, [r7]                                  |     *(r7) = r3;
                                                             |     do {
    0x0000b4da mov r7, r6                                    |         r7 = r6;
    0x0000b4dc adds r4, 0x10                                 |         r4 += 0x10;
    0x0000b4de ldm r7!, {r0, r1, r2, r3}                     |         r0 = *(r7!);
                                                             |         r1 = *((r7! + 4));
                                                             |         r2 = *((r7! + 8));
                                                             |         r3 = *((r7! + 12));
    0x0000b4e0 adds r6, 0x10                                 |         r6 += 0x10;
    0x0000b4e2 cmp r7, r8                                    |         
    0x0000b4e4 str r0, [r4, -0x10]                           |         *((r4 - 0x10)) = r0;
    0x0000b4e8 str r1, [r4, -0xc]                            |         *((r4 - 0xc)) = r1;
    0x0000b4ec str r2, [r4, -0x8]                            |         *((r4 - 0x8)) = r2;
    0x0000b4f0 str r3, [r4, -0x4]                            |         *((r4 - 0x4)) = r3;
    0x0000b4f4 bne 0xb4da                                    |         
                                                             |     } while (r7 != r8);
    0x0000b4f6 ldrh.w r3, [r5, 0x42]                         |     r3 = *((r5 + 0x42));
    0x0000b4fa movs r0, 0                                    |     r0 = 0;
    0x0000b4fc and r2, r3, 0xfe00                            |     r2 = r3 & 0xfe00;
    0x0000b500 lsls r3, r3, 0x10                             |     r3 <<= 0x10;
    0x0000b502 and r3, r3, 0x10000                           |     r3 &= 0x10000;
    0x0000b506 orrs r3, r2                                   |     r3 |= r2;
    0x0000b508 str r3, [r5, 0x24]                            |     *((r5 + 0x24)) = r3;
    0x0000b50a b 0xb4aa                                      |     goto label_0;
                                                             | label_3:
    0x0000b50c blx 0x6498                                    |     fcn_00006498 ();
    0x0000b510 ldm r0!, {r2, r3, r4, r6}                     |     r2 = *(r0!);
                                                             |     r3 = *((r0! + 4));
                                                             |     r4 = *((r0! + 8));
                                                             |     r6 = *((r0! + 12));
    0x0000b512 movs r6, r0                                   |     r6 = r0;
    0x0000b514 lsls r0, r1, 0xe                              |     r0 = r1 << 0xe;
    0x0000b516 movs r0, r0                                   |     
    0x0000b518 stm r7!, {r1, r3, r5, r7}                     |     *(r7!) = r1;
                                                             |     *((r7! + 4)) = r3;
                                                             |     *((r7! + 8)) = r5;
                                                             |     *((r7! + 12)) = r7;
    0x0000b51a movs r6, r0                                   |     r6 = r0;
                                                             | }
    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0xc228 */
                                                 | #include <stdint.h>
                                                 |  
                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                 |  
    ; (fcn) fcn.0000c228 ()                      | void fcn_0000c228 (int16_t arg1, int16_t arg2) {
                                                 |     r0 = arg1;
                                                 |     r1 = arg2;
    0x0000c228 bhs 0xc2a238                      |     
                                                 |     if (? != ?) {
    0x0000c22c bne 0xc2c8                        |         goto label_2;
                                                 |     }
    0x0000c22e ldrb r3, [r0, 1]                  |     r3 = *((r0 + 1));
    0x0000c230 and r2, r3, 0xdf                  |     r2 = r3 & 0xdf;
    0x0000c234 cmp r2, 0x58                      |     
                                                 |     if (r2 != 0x58) {
    0x0000c236 bne 0xc2cc                        |         goto label_3;
                                                 |     }
    0x0000c238 push {r4, r5, r6, r7, lr}         |     
    0x0000c23a ldr r4, [pc, 0xd0]                |     
    0x0000c23c ldrb r2, [r0, 2]                  |     r2 = *((r0 + 2));
    0x0000c23e add r4, pc                        |     r4 = 0x18550;
    0x0000c240 add r4, r2                        |     r4 += r2;
    0x0000c242 ldrb.w r4, [r4, 0x40]             |     r4 = *((r4 + 0x40));
    0x0000c246 lsls r4, r4, 0x1c                 |     r4 <<= 0x1c;
                                                 |     if (r4 >= r4) {
    0x0000c248 bpl 0xc2e4                        |         goto label_4;
                                                 |     }
    0x0000c24a cmp r2, 0x30                      |     
                                                 |     if (r2 != 0x30) {
    0x0000c24c bne 0xc2ac                        |         goto label_5;
                                                 |     }
    0x0000c24e adds r3, r0, 3                    |     r3 = r0 + 3;
    0x0000c250 movs r4, 2                        |     r4 = 2;
                                                 |     do {
    0x0000c252 ldrb r2, [r3]                     |         r2 = *(r3);
    0x0000c254 mov lr, r3                        |         lr = r3;
    0x0000c256 adds r4, 1                        |         r4++;
    0x0000c258 adds r3, 1                        |         r3++;
    0x0000c25a cmp r2, 0x30                      |         
    0x0000c25c beq 0xc252                        |         
                                                 |     } while (r2 == 0x30);
    0x0000c25e ldr r3, [pc, 0xb0]                |     
    0x0000c260 add r3, pc                        |     r3 = 0x18576;
    0x0000c262 add r3, r2                        |     r3 += r2;
    0x0000c264 ldrb.w r3, [r3, 0x40]             |     r3 = *((r3 + 0x40));
    0x0000c268 ands r3, r3, 8                    |     r3 &= 8;
                                                 |     if (r3 == r3) {
    0x0000c26c beq 0xc304                        |         goto label_6;
                                                 |     }
                                                 | label_0:
    0x0000c26e ldr r7, [pc, 0xa4]                |     
    0x0000c270 adds r5, r4, 1                    |     r5 = r4 + 1;
    0x0000c272 add r5, r0                        |     r5 += r0;
    0x0000c274 movs r0, 0                        |     r0 = 0;
    0x0000c276 mov r6, r4                        |     r6 = r4;
    0x0000c278 mov ip, r0                        |     
    0x0000c27a add r7, pc                        |     r7 = 0x18594;
                                                 |     do {
    0x0000c27c ubfx r3, r2, 6, 1                 |         r3 = (r2 >> 6) & ((1 << 1) - 1);
    0x0000c280 mov lr, r5                        |         lr = r5;
    0x0000c282 add.w r3, r3, r3, lsl 3           |         r3 += (r3 << 3);
    0x0000c286 lsl.w ip, ip, 4                   |         
    0x0000c28a add r3, r2                        |         r3 += r2;
    0x0000c28c cmp lr, r3                        |         
    0x0000c28e movs r0, 0                        |         r0 = 0;
    0x0000c290 movs r0, 0x4c                     |         r0 = 0x4c;
    0x0000c292 ldrb r0, [r2, 0x10]               |         r0 = *((r2 + 0x10));
    0x0000c294 lsls r0, r0, 4                    |         r0 <<= 4;
    0x0000c296 and r3, r3, 0xf                   |         r3 &= 0xf;
    0x0000c29a adds r6, 1                        |         r6++;
    0x0000c29c adds r0, r3, r0                   |         r0 = r3 + r0;
    0x0000c29e add.w r3, r7, r2                  |         r3 = r7 + r2;
    0x0000c2a2 ldrb.w r3, [r3, 0x40]             |         r3 = *((r3 + 0x40));
    0x0000c2a6 adc ip, ip, 0                     |         __asm ("adc ip, ip, 0");
    0x0000c2aa adds r5, 1                        |         r5++;
                                                 | label_5:
    0x0000c2ac lsls r3, r3, 0x1c                 |         r3 <<= 0x1c;
    0x0000c2ae bmi 0xc27c                        |         
                                                 |     } while (r3 < r3);
                                                 | label_1:
    0x0000c2b0 strd r0, ip, [r1]                 |     __asm ("strd r0, ip, [r1]");
    0x0000c2b4 movs r0, 1                        |     r0 = 1;
    0x0000c2b6 ldrb.w r3, [lr]                   |     r3 = *(lr);
                                                 |     if (r3 == 0) {
    0x0000c2ba cbnz r3, 0xc2c6                   |         
    0x0000c2bc subs r0, r6, r4                   |         r0 = r6 - r4;
    0x0000c2be cmp r0, 0x10                      |         
    0x0000c2c0 ite le                            |         
                                                 |         if (r0 > 0x10) {
    0x0000c2c2 movle r0, 0                       |             r0 = 0;
                                                 |         }
                                                 |         if (r0 <= 0x10) {
    0x0000c2c4 cbnzgt r1, 0xc308                 |             __asm ("cbnzgt r1, aav.0x000000ff");
                                                 |             goto label_7;
                                                 |         }
                                                 |     }
                                                 | label_7:
    0x0000c2c6 invalid                           |     
                                                 |     if (r7 == 0) {
                                                 | label_2:
    0x0000c2c8 cbz r7, 0xc30a                    |         goto label_8;
                                                 |     }
    0x0000c2ca ldrb r3, [r0, 1]                  |     r3 = *((r0 + 1));
                                                 | label_3:
    0x0000c2cc adds r2, r0, 1                    |     r2 = r0 + 1;
                                                 |     if (r3 == 0) {
    0x0000c2ce cbz r3, 0xc2d8                    |         goto label_9;
                                                 |     }
                                                 |     do {
    0x0000c2d0 ldrb r3, [r2, 1]!                 |         r3 = *((r2 += 1));
    0x0000c2d4 cmp r3, 0                         |         
    0x0000c2d6 bne 0xc2d0                        |         
                                                 |     } while (r3 != 0);
                                                 | label_9:
    0x0000c2d8 subs r2, r2, r0                   |     r2 -= r0;
    0x0000c2da bic r2, r2, 0xc0000000            |     r2 = BIT_MASK (r2, 0xc0000000);
    0x0000c2de movs r3, 1                        |     r3 = 1;
    0x0000c2e0 b.w 0x70b8                        |     void (*0x70b8)() ();
                                                 | label_4:
    0x0000c2e4 adds r2, r0, 1                    |     r2 = r0 + 1;
                                                 |     if (r3 == 0) {
    0x0000c2e6 cbz r3, 0xc2f0                    |         goto label_10;
                                                 |     }
                                                 |     do {
    0x0000c2e8 ldrb r3, [r2, 1]!                 |         r3 = *((r2 += 1));
    0x0000c2ec cmp r3, 0                         |         
    0x0000c2ee bne 0xc2e8                        |         
                                                 |     } while (r3 != 0);
                                                 | label_10:
    0x0000c2f0 subs r2, r2, r0                   |     r2 -= r0;
    0x0000c2f2 pop.w {r4, r5, r6, r7, lr}        |     
                                                 |     if (r2 == r2) {
    0x0000c2f6 beq.w 0xee37a                     |         void (*0xee37a)() ();
                                                 |     }
    0x0000c2fa movs r0, r0                       |     
    0x0000c2fc b.w 0xfff0d0b8                    |     void (*0xfff0d0b8)() ();
    0x0000c300 movs r4, 2                        |     r4 = 2;
    0x0000c302 b 0xc26e                          |     goto label_0;
                                                 | label_6:
    0x0000c304 mov r0, r3                        |     r0 = r3;
    0x0000c306 mov r6, r4                        |     r6 = r4;
    0x0000c308 mov ip, r3                        |     
                                                 | label_8:
    0x0000c30a b 0xc2b0                          |     goto label_1;
                                                 | }
    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0xc474 */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) fcn.0000c474 ()                      | void fcn_0000c474 (int16_t arg1, int16_t arg2) {
                                                 |     r0 = arg1;
                                                 |     r1 = arg2;
    0x0000c474 push {r3, r4, r5, lr}             |     
    0x0000c476 ldr r4, [r0, 8]                   |     r4 = *((r0 + 8));
    0x0000c478 ldr r5, [r1, 0x28]                |     r5 = *((r1 + 0x28));
    0x0000c47a cmp r4, r5                        |     
                                                 |     if (r4 == r5) {
    0x0000c47c bne 0xc4b6                        |         
    0x0000c47e ldrh.w ip, [r0, 0x12]             |         ip = *((r0 + 0x12));
    0x0000c482 ands ip, ip, 2                    |         
                                                 |         if (ip == ip) {
    0x0000c486 beq 0xc4b6                        |             goto label_0;
                                                 |         }
    0x0000c488 ldr r4, [r0, 0x20]                |         r4 = *((r0 + 0x20));
    0x0000c48a ands r2, r4                       |         r2 &= r4;
    0x0000c48c ldr r4, [r0, 0x24]                |         r4 = *((r0 + 0x24));
    0x0000c48e ands r3, r4                       |         r3 &= r4;
    0x0000c490 orrs r2, r3                       |         r2 |= r3;
                                                 |         if (r2 != r3) {
    0x0000c492 bne 0xc4b6                        |             goto label_0;
                                                 |         }
    0x0000c494 ldr r3, [r0, 0xc]                 |         r3 = *((r0 + 0xc));
    0x0000c496 cmp r3, 0                         |         
                                                 |         if (r3 < 0) {
    0x0000c498 blt 0xc4b6                        |             goto label_0;
                                                 |         }
    0x0000c49a ldr r2, [r1, 0x10]                |         r2 = *((r1 + 0x10));
    0x0000c49c add.w r3, r3, r3, lsl 1           |         r3 += (r3 << 1);
    0x0000c4a0 ldr r0, [r0]                      |         r0 = *(r0);
    0x0000c4a2 ldr r2, [r2, 4]                   |         r2 = *((r2 + 4));
    0x0000c4a4 add.w r3, r2, r3, lsl 3           |         r3 = r2 + (r3 << 3);
    0x0000c4a8 ldrb r1, [r3, 0x15]               |         r1 = *((r3 + 0x15));
    0x0000c4aa bl 0xc3ec                         |         fcn_0000c3ec (r0, r1);
    0x0000c4ae subs r0, 0                        |         
    0x0000c4b0 it ne                             |         
                                                 |         if (r0 == 0) {
    0x0000c4b2 movne r0, 1                       |             r0 = 1;
                                                 |         }
    0x0000c4b4 pop {r3, r4, r5, pc}              |         
                                                 |     }
                                                 | label_0:
    0x0000c4b6 movs r0, 0                        |     r0 = 0;
    0x0000c4b8 pop {r3, r4, r5, pc}              |     
                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0xc4bc */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.0000c4bc ()                                      | void fcn_0000c4bc (int16_t arg_60h, int16_t arg_64h, int16_t arg1, uint32_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_fh;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_3ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x0000c4bc push.w {r4, r5, r6, r7, r8, sb, sl, lr}           |     
    0x0000c4c0 mov r4, r2                                        |     r4 = r2;
    0x0000c4c2 ldr r2, [pc, 0x1d8]                               |     
    0x0000c4c4 mov r5, r3                                        |     r5 = r3;
    0x0000c4c6 sub sp, 0x40                                      |     
    0x0000c4c8 mov sb, r1                                        |     sb = r1;
    0x0000c4ca ldr r3, [pc, 0x1d4]                               |     r3 = *(0xc6a2);
    0x0000c4cc add r2, pc                                        |     r2 = 0x18b6e;
    0x0000c4ce ldr r7, [sp, 0x60]                                |     r7 = *(arg_60h);
    0x0000c4d0 ldr r6, [sp, 0x64]                                |     r6 = *(arg_64h);
    0x0000c4d2 ldr r3, [r2, r3]                                  |     
    0x0000c4d4 movs r2, 1                                        |     r2 = 1;
    0x0000c4d6 ldr r3, [r3]                                      |     r3 = *(0x18b6e);
    0x0000c4d8 str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x0000c4da mov.w r3, 0                                       |     r3 = 0;
    0x0000c4de movs r3, 0                                        |     r3 = 0;
    0x0000c4e0 strd r3, r3, [sp, 0x10]                           |     __asm ("strd r3, r3, [var_10h]");
    0x0000c4e4 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x0000c4e6 strb.w r2, [sp, 0xf]                              |     var_fh = r2;
    0x0000c4ea cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0000c4ec beq.w 0xc61e                                      |         goto label_8;
                                                                 |     }
    0x0000c4f0 mov r8, r0                                        |     r8 = r0;
    0x0000c4f2 ldr r0, [r0, 4]                                   |     r0 = *((r0 + 4));
                                                                 |     if (r0 != 0) {
    0x0000c4f4 cbz r0, 0xc51e                                    |         
    0x0000c4f6 ldrb r2, [r1]                                     |         r2 = *(r1);
    0x0000c4f8 add.w sl, r2, 0x66                                |         sl = r2 + 0x66;
    0x0000c4fc ands sl, sl, 0xfd                                 |         sl &= 0xfd;
                                                                 |         if (sl == sl) {
    0x0000c500 beq 0xc55e                                        |             goto label_9;
                                                                 |         }
    0x0000c502 cmp r2, 0x77                                      |         
                                                                 |         if (r2 == 0x77) {
    0x0000c504 beq 0xc5ec                                        |             goto label_10;
                                                                 |         }
                                                                 | label_2:
    0x0000c506 mov r0, r3                                        |         r0 = r3;
                                                                 |         if (r4 != 0) {
                                                                 | label_3:
    0x0000c508 cbz r4, 0xc516                                    |             
    0x0000c50a ldr r3, [sp, 0x10]                                |             r3 = var_10h;
    0x0000c50c str r3, [r4]                                      |             *(r4) = r3;
    0x0000c50e ldr r3, [sp, 0x14]                                |             r3 = var_14h;
    0x0000c510 str r3, [r5]                                      |             *(r5) = r3;
    0x0000c512 ldr r3, [sp, 0x18]                                |             r3 = var_18h;
    0x0000c514 str r3, [r7]                                      |             *(r7) = r3;
                                                                 |         }
                                                                 |         if (r6 == 0) {
    0x0000c516 cbz r6, 0xc51e                                    |             goto label_4;
                                                                 |         }
    0x0000c518 ldrb.w r3, [sp, 0xf]                              |         r3 = var_fh;
    0x0000c51c strb r3, [r6]                                     |         *(r6) = r3;
                                                                 |     }
                                                                 | label_4:
    0x0000c51e ldr r2, [pc, 0x184]                               |     
    0x0000c520 ldr r3, [pc, 0x17c]                               |     r3 = *(0xc6a0);
    0x0000c522 add r2, pc                                        |     r2 = 0x18bcc;
    0x0000c524 ldr r3, [r2, r3]                                  |     r3 = *(0x18bcc);
    0x0000c526 ldr r2, [r3]                                      |     r2 = *(0x18bcc);
    0x0000c528 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x0000c52a eors r2, r3                                       |     r2 ^= r3;
    0x0000c52c mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x0000c530 bne.w 0xc698                                      |         goto label_11;
                                                                 |     }
    0x0000c534 add sp, 0x40                                      |     
    0x0000c536 pop.w {r4, r5, r6, r7, r8, sb, sl, pc}            |     
                                                                 | label_0:
    0x0000c53a add.w ip, ip, ip, lsl 3                           |     
    0x0000c53e add.w ip, r0, ip, lsl 3                           |     
    0x0000c542 ldrd r3, sl, [ip, 0x18]                           |     __asm ("ldrd r3, sl, [ip, 0x18]");
    0x0000c546 clz r0, r3                                        |     r0 &= r3;
    0x0000c54a lsrs r0, r0, 5                                    |     r0 >>= 5;
    0x0000c54c cmp.w r8, 0                                       |     
    0x0000c550 ite eq                                            |     
                                                                 |     if (r8 != 0) {
    0x0000c552 moveq r0, 0                                       |         r0 = 0;
                                                                 |     }
                                                                 |     if (r8 == 0) {
    0x0000c554 andne r0, r0, 1                                   |         r0 &= 1;
                                                                 |     }
                                                                 |     if (r0 == 0) {
    0x0000c558 cbz r0, 0xc59e                                    |         goto label_12;
                                                                 |     }
                                                                 | label_1:
    0x0000c55a ldr.w r0, [r8, 4]                                 |     r0 = *((r8 + 4));
                                                                 | label_9:
    0x0000c55e ldr r2, [r0]                                      |     r2 = *(r0);
    0x0000c560 cmp r2, 0                                         |     
                                                                 |     if (r2 <= 0) {
    0x0000c562 ble 0xc586                                        |         goto label_13;
                                                                 |     }
    0x0000c564 ldr.w r1, [sb, 0x1c]                              |     r1 = *((sb + 0x1c));
    0x0000c568 mov lr, r0                                        |     lr = r0;
    0x0000c56a mov.w ip, 0                                       |     
    0x0000c56e b 0xc57c                                          |     
                                                                 |     while (r3 != r1) {
    0x0000c570 add.w ip, ip, 1                                   |         
    0x0000c574 add.w lr, lr, 0x48                                |         lr += 0x48;
    0x0000c578 cmp r2, ip                                        |         
                                                                 |         if (r2 == ip) {
    0x0000c57a beq 0xc586                                        |             goto label_13;
                                                                 |         }
    0x0000c57c ldr.w r3, [lr, 0x30]                              |         r3 = *((lr + 0x30));
    0x0000c580 cmp r3, r1                                        |         
    0x0000c582 bne 0xc570                                        |         
                                                                 |     }
    0x0000c584 b 0xc53a                                          |     goto label_0;
                                                                 | label_13:
    0x0000c586 ldr.w r8, [r8, 0x10]                              |     r8 = *((r8 + 0x10));
    0x0000c58a movs r0, 1                                        |     r0 = 1;
    0x0000c58c movs r3, 0                                        |     r3 = 0;
    0x0000c58e cmp.w r8, 0                                       |     
    0x0000c592 ite eq                                            |     
                                                                 |     if (r8 != 0) {
    0x0000c594 moveq r0, 0                                       |         r0 = 0;
                                                                 |     }
                                                                 |     if (r8 == 0) {
    0x0000c596 andne r0, r0, 1                                   |         r0 &= 1;
                                                                 |     }
    0x0000c59a cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0000c59c bne 0xc55a                                        |         goto label_1;
                                                                 |     }
                                                                 | label_12:
    0x0000c59e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0000c5a0 beq 0xc506                                        |         goto label_2;
                                                                 |     }
    0x0000c5a2 ldrsh.w r2, [sb, 0x20]                            |     r2 = *((sb + 0x20));
    0x0000c5a6 mov r1, r2                                        |     r1 = r2;
    0x0000c5a8 cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x0000c5ac beq 0xc622                                        |         goto label_14;
                                                                 |     }
    0x0000c5ae cmp r2, 0                                         |     
                                                                 |     if (r2 < 0) {
    0x0000c5b0 blt 0xc508                                        |         goto label_3;
                                                                 |     }
    0x0000c5b2 ldr.w r1, [sl]                                    |     r1 = *(sl);
    0x0000c5b6 ldr r3, [r1]                                      |     r3 = *(r1);
    0x0000c5b8 cmp r3, r2                                        |     
                                                                 |     if (r3 <= r2) {
    0x0000c5ba ble 0xc508                                        |         goto label_3;
                                                                 |     }
    0x0000c5bc ldr r3, [r1, 4]                                   |     r3 = *((r1 + 4));
    0x0000c5be add.w r2, r2, r2, lsl 2                           |     r2 += (r2 << 2);
    0x0000c5c2 add r0, sp, 0x1c                                  |     r0 += var_1ch;
    0x0000c5c4 ldr.w r1, [r3, r2, lsl 2]                         |     offset_0 = r2 << 2;
                                                                 |     r1 = *((r3 + offset_0));
    0x0000c5c8 add r2, sp, 0x10                                  |     r2 += var_10h;
    0x0000c5ca ldr.w r3, [sl, 0x20]                              |     r3 = *((sl + 0x20));
    0x0000c5ce str.w r8, [sp, 0x2c]                              |     __asm ("str.w r8, [var_2ch]");
    0x0000c5d2 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x0000c5d4 ldr.w r3, [r8]                                    |     r3 = *(r8);
    0x0000c5d8 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x0000c5da add.w r3, sp, 0xf                                 |     r3 += var_fh;
    0x0000c5de str r3, [sp, 4]                                   |     var_4h = r3;
    0x0000c5e0 add r3, sp, 0x18                                  |     r3 += var_18h;
    0x0000c5e2 str r3, [sp]                                      |     *(sp) = r3;
    0x0000c5e4 add r3, sp, 0x14                                  |     r3 += var_14h;
    0x0000c5e6 bl 0xc4bc                                         |     fcn_0000c4bc (r0, r1, r2, r3, r4, r5);
    0x0000c5ea b 0xc508                                          |     goto label_3;
                                                                 | label_10:
    0x0000c5ec ldr r1, [r1, 0x14]                                |     r1 = *((r1 + 0x14));
    0x0000c5ee add r3, sp, 0x14                                  |     r3 += var_14h;
    0x0000c5f0 ldr.w ip, [r8]                                    |     ip = *(r8);
    0x0000c5f4 add r2, sp, 0x10                                  |     r2 += var_10h;
    0x0000c5f6 ldr r0, [r1]                                      |     r0 = *(r1);
    0x0000c5f8 ldr.w lr, [r1, 0x20]                              |     
    0x0000c5fc ldr r1, [r0, 4]                                   |     r1 = *((r0 + 4));
    0x0000c5fe add.w r0, sp, 0xf                                 |     r0 += var_fh;
    0x0000c602 ldr r1, [r1]                                      |     r1 = *(r1);
    0x0000c604 str r0, [sp, 4]                                   |     var_4h = r0;
    0x0000c606 add r0, sp, 0x18                                  |     r0 += var_18h;
    0x0000c608 str r0, [sp]                                      |     *(sp) = r0;
    0x0000c60a add r0, sp, 0x1c                                  |     r0 += var_1ch;
    0x0000c60c str.w lr, [sp, 0x20]                              |     __asm ("str.w lr, [var_20h]");
    0x0000c610 str.w r8, [sp, 0x2c]                              |     __asm ("str.w r8, [var_2ch]");
    0x0000c614 str.w ip, [sp, 0x1c]                              |     __asm ("str.w ip, [var_1ch]");
    0x0000c618 bl 0xc4bc                                         |     fcn_0000c4bc (r0, r1, r2, r3, r4, r5);
    0x0000c61c b 0xc508                                          |     goto label_3;
                                                                 | label_8:
    0x0000c61e mov r0, r1                                        |     r0 = r1;
    0x0000c620 b 0xc51e                                          |     goto label_4;
                                                                 | label_14:
    0x0000c622 ldr.w ip, [r3, 0x44]                              |     ip = *((r3 + 0x44));
    0x0000c626 mov r0, sl                                        |     r0 = sl;
    0x0000c628 cmp.w ip, 0                                       |     
                                                                 |     if (ip == 0) {
    0x0000c62c beq.w 0xc508                                      |         goto label_3;
                                                                 |     }
    0x0000c630 cmp r2, 0                                         |     
                                                                 |     if (r2 < 0) {
    0x0000c632 blt 0xc67e                                        |         goto label_15;
                                                                 |     }
                                                                 | label_5:
    0x0000c634 add.w r1, r1, r1, lsl 1                           |     r1 += (r1 << 1);
    0x0000c638 ldr r0, [r3, 4]                                   |     r0 = *((r3 + 4));
    0x0000c63a lsls r2, r1, 3                                    |     r2 = r1 << 3;
    0x0000c63c adds r1, r0, r2                                   |     r1 = r0 + r2;
    0x0000c63e ldr r2, [r0, r2]                                  |     r2 = *((r0 + r2));
    0x0000c640 ldr r0, [r1, 0xc]                                 |     r0 = *((r1 + 0xc));
    0x0000c642 str r2, [sp, 0x18]                                |     var_18h = r2;
    0x0000c644 ldrb r2, [r1, 0x16]                               |     r2 = *((r1 + 0x16));
    0x0000c646 strb.w r2, [sp, 0xf]                              |     var_fh = r2;
                                                                 | label_6:
    0x0000c64a ldr.w r2, [r8]                                    |     r2 = *(r8);
    0x0000c64e ldr r3, [r3]                                      |     r3 = *(r3);
    0x0000c650 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x0000c652 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0000c654 beq.w 0xc508                                      |         goto label_3;
                                                                 |     }
    0x0000c658 ldr r3, [r2]                                      |     r3 = *(r2);
    0x0000c65a ldrd r8, lr, [r3, 0x10]                           |     __asm ("ldrd r8, lr, [r3, 0x10]");
    0x0000c65e cmp.w lr, 0                                       |     
    0x0000c662 mov r3, r8                                        |     r3 = r8;
                                                                 |     if (lr <= 0) {
    0x0000c664 ble 0xc678                                        |         goto label_7;
                                                                 |     }
    0x0000c666 movs r2, 0                                        |     r2 = 0;
    0x0000c668 b 0xc672                                          |     
                                                                 |     while (ip != r1) {
    0x0000c66a adds r2, 1                                        |         r2++;
    0x0000c66c adds r3, 0x10                                     |         r3 += 0x10;
    0x0000c66e cmp r2, lr                                        |         
                                                                 |         if (r2 == lr) {
    0x0000c670 beq 0xc692                                        |             goto label_16;
                                                                 |         }
    0x0000c672 ldr r1, [r3, 0xc]                                 |         r1 = *((r3 + 0xc));
    0x0000c674 cmp ip, r1                                        |         
    0x0000c676 bne 0xc66a                                        |         
                                                                 |     }
                                                                 | label_7:
    0x0000c678 ldr r3, [r3]                                      |     r3 = *(r3);
    0x0000c67a str r3, [sp, 0x10]                                |     var_10h = r3;
    0x0000c67c b 0xc508                                          |     goto label_3;
                                                                 | label_15:
    0x0000c67e ldrsh.w r1, [r3, 0x24]                            |     r1 = *((r3 + 0x24));
    0x0000c682 cmp r1, 0                                         |     
                                                                 |     if (r1 >= 0) {
    0x0000c684 bge 0xc634                                        |         goto label_5;
                                                                 |     }
    0x0000c686 ldr r2, [pc, 0x20]                                |     
    0x0000c688 ldr r0, [pc, 0x20]                                |     
    0x0000c68a add r2, pc                                        |     r2 = 0x18d38;
    0x0000c68c add r0, pc                                        |     r0 = 0x18d3c;
    0x0000c68e str r2, [sp, 0x18]                                |     var_18h = r2;
    0x0000c690 b 0xc64a                                          |     goto label_6;
                                                                 | label_16:
    0x0000c692 add.w r3, r8, r2, lsl 4                           |     r3 = r8 + (r2 << 4);
    0x0000c696 b 0xc678                                          |     goto label_7;
                                                                 | label_11:
    0x0000c698 blx 0x6498                                        |     fcn_00006498 ();
    0x0000c69c invalid                                           |     
                                                                 | }
    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0xc7dc */
                                                     | #include <stdint.h>
                                                     |  
    ; (fcn) fcn.0000c7dc ()                          | void fcn_0000c7dc (int16_t arg1, uint32_t arg2) {
                                                     |     r0 = arg1;
                                                     |     r1 = arg2;
    0x0000c7dc mvnsmi lr, sp, lsr 18                 |     __asm ("mvnsmi lr, sp, lsr 18");
    0x0000c7e0 mov r4, r0                            |     r4 = r0;
    0x0000c7e2 mov r7, r1                            |     r7 = r1;
    0x0000c7e4 cmp r1, 0                             |     
                                                     |     if (r1 == 0) {
    0x0000c7e6 beq.w 0xc8fe                          |         goto label_4;
                                                     |     }
                                                     | label_3:
    0x0000c7ea ldr r3, [r4, 4]                       |     r3 = *((r4 + 4));
                                                     |     if (r3 != 0) {
    0x0000c7ec cbz r3, 0xc7fa                        |         
    0x0000c7ee mov r1, r7                            |         r1 = r7;
    0x0000c7f0 mov r0, r4                            |         r0 = r4;
    0x0000c7f2 blx r3                                |         r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r1);
    0x0000c7f4 cmp r0, 0                             |         
                                                     |         if (r0 != 0) {
    0x0000c7f6 bne.w 0xc90a                          |             goto label_5;
                                                     |         }
                                                     |     }
    0x0000c7fa ldr r3, [r7]                          |     r3 = *(r7);
                                                     |     if (r3 == 0) {
    0x0000c7fc cbz r3, 0xc82e                        |         goto label_6;
                                                     |     }
    0x0000c7fe ldrd r6, r8, [r3]                     |     __asm ("ldrd r6, r8, [r3]");
    0x0000c802 cmp r6, 0                             |     
                                                     |     if (r6 <= 0) {
    0x0000c804 ble 0xc82e                            |         goto label_6;
                                                     |     }
    0x0000c806 add.w r6, r6, r6, lsl 2               |     r6 += (r6 << 2);
    0x0000c80a movs r5, 0                            |     r5 = 0;
    0x0000c80c b 0xc812                              |     
                                                     |     while (r0 == 0) {
    0x0000c80e cmp r6, r5                            |         
                                                     |         if (r6 == r5) {
    0x0000c810 beq 0xc82e                            |             goto label_6;
                                                     |         }
    0x0000c812 ldr.w r1, [r8, r5, lsl 2]             |         offset_0 = r5 << 2;
                                                     |         r1 = *((r8 + offset_0));
    0x0000c816 mov r0, r4                            |         r0 = r4;
    0x0000c818 adds r5, 5                            |         r5 += 5;
    0x0000c81a bl 0xc6b0                             |         r0 = fcn_0000c6b0 (r0, r1);
    0x0000c81e cmp r0, 0                             |         
    0x0000c820 beq 0xc80e                            |         
                                                     |     }
                                                     |     do {
                                                     | label_0:
    0x0000c822 ldr r3, [r4, 0x10]                    |         r3 = *((r4 + 0x10));
    0x0000c824 movs r0, 2                            |         r0 = 2;
    0x0000c826 subs r3, 1                            |         r3--;
    0x0000c828 str r3, [r4, 0x10]                    |         *((r4 + 0x10)) = r3;
    0x0000c82a pop.w {r4, r5, r6, r7, r8, pc}        |         
                                                     | label_6:
    0x0000c82e ldr r1, [r7, 0x24]                    |         r1 = *((r7 + 0x24));
    0x0000c830 mov r0, r4                            |         r0 = r4;
    0x0000c832 bl 0xc6b0                             |         r0 = fcn_0000c6b0 (r0, r1);
    0x0000c836 cmp r0, 0                             |         
    0x0000c838 bne 0xc822                            |         
                                                     |     } while (r0 != 0);
    0x0000c83a ldr r3, [r7, 0x28]                    |     r3 = *((r7 + 0x28));
                                                     |     if (r3 == 0) {
    0x0000c83c cbz r3, 0xc864                        |         goto label_7;
                                                     |     }
    0x0000c83e ldrd r6, r8, [r3]                     |     __asm ("ldrd r6, r8, [r3]");
    0x0000c842 cmp r6, 0                             |     
                                                     |     if (r6 <= 0) {
    0x0000c844 ble 0xc864                            |         goto label_7;
                                                     |     }
    0x0000c846 add.w r6, r6, r6, lsl 2               |     r6 += (r6 << 2);
    0x0000c84a mov r5, r0                            |     r5 = r0;
    0x0000c84c b 0xc852                              |     
                                                     |     while (r0 == 0) {
    0x0000c84e cmp r5, r6                            |         
                                                     |         if (r5 == r6) {
    0x0000c850 beq 0xc864                            |             goto label_7;
                                                     |         }
    0x0000c852 ldr.w r1, [r8, r5, lsl 2]             |         offset_1 = r5 << 2;
                                                     |         r1 = *((r8 + offset_1));
    0x0000c856 mov r0, r4                            |         r0 = r4;
    0x0000c858 adds r5, 5                            |         r5 += 5;
    0x0000c85a bl 0xc6b0                             |         r0 = fcn_0000c6b0 (r0, r1);
    0x0000c85e cmp r0, 0                             |         
    0x0000c860 beq 0xc84e                            |         
                                                     |     }
    0x0000c862 b 0xc822                              |     goto label_0;
                                                     | label_7:
    0x0000c864 ldr r1, [r7, 0x2c]                    |     r1 = *((r7 + 0x2c));
    0x0000c866 mov r0, r4                            |     r0 = r4;
    0x0000c868 bl 0xc6b0                             |     r0 = fcn_0000c6b0 (r0, r1);
    0x0000c86c cmp r0, 0                             |     
                                                     |     if (r0 != 0) {
    0x0000c86e bne 0xc822                            |         goto label_0;
                                                     |     }
    0x0000c870 ldr r3, [r7, 0x30]                    |     r3 = *((r7 + 0x30));
                                                     |     if (r3 == 0) {
    0x0000c872 cbz r3, 0xc89a                        |         goto label_8;
                                                     |     }
    0x0000c874 ldrd r6, r8, [r3]                     |     __asm ("ldrd r6, r8, [r3]");
    0x0000c878 cmp r6, 0                             |     
                                                     |     if (r6 <= 0) {
    0x0000c87a ble 0xc89a                            |         goto label_8;
                                                     |     }
    0x0000c87c add.w r6, r6, r6, lsl 2               |     r6 += (r6 << 2);
    0x0000c880 mov r5, r0                            |     r5 = r0;
    0x0000c882 b 0xc888                              |     
                                                     |     while (r0 == 0) {
    0x0000c884 cmp r5, r6                            |         
                                                     |         if (r5 == r6) {
    0x0000c886 beq 0xc89a                            |             goto label_8;
                                                     |         }
    0x0000c888 ldr.w r1, [r8, r5, lsl 2]             |         offset_2 = r5 << 2;
                                                     |         r1 = *((r8 + offset_2));
    0x0000c88c mov r0, r4                            |         r0 = r4;
    0x0000c88e adds r5, 5                            |         r5 += 5;
    0x0000c890 bl 0xc6b0                             |         r0 = fcn_0000c6b0 (r0, r1);
    0x0000c894 cmp r0, 0                             |         
    0x0000c896 beq 0xc884                            |         
                                                     |     }
    0x0000c898 b 0xc822                              |     goto label_0;
                                                     | label_8:
    0x0000c89a ldr r1, [r7, 0x3c]                    |     r1 = *((r7 + 0x3c));
    0x0000c89c mov r0, r4                            |     r0 = r4;
    0x0000c89e bl 0xc6b0                             |     r0 = fcn_0000c6b0 (r0, r1);
    0x0000c8a2 cmp r0, 0                             |     
                                                     |     if (r0 != 0) {
    0x0000c8a4 bne 0xc822                            |         goto label_0;
                                                     |     }
    0x0000c8a6 ldr r1, [r7, 0x40]                    |     r1 = *((r7 + 0x40));
    0x0000c8a8 mov r0, r4                            |     r0 = r4;
    0x0000c8aa bl 0xc6b0                             |     r0 = fcn_0000c6b0 (r0, r1);
    0x0000c8ae cmp r0, 0                             |     
                                                     |     if (r0 != 0) {
    0x0000c8b0 bne 0xc822                            |         goto label_0;
                                                     |     }
    0x0000c8b2 ldr r5, [r7, 0x20]                    |     r5 = *((r7 + 0x20));
                                                     |     if (r5 == 0) {
    0x0000c8b4 cbz r5, 0xc8ec                        |         goto label_9;
                                                     |     }
    0x0000c8b6 ldr r6, [r5], 8                       |     r6 = *(r5);
                                                     |     r5 += 8;
    0x0000c8ba cmp r6, 0                             |     
                                                     |     if (r6 > 0) {
    0x0000c8bc bgt 0xc8d2                            |         goto label_2;
                                                     |     }
    0x0000c8be b 0xc8ec                              |     goto label_9;
                                                     | label_1:
    0x0000c8c0 ldr r3, [r4, 0x10]                    |     r3 = *((r4 + 0x10));
    0x0000c8c2 adds r3, 1                            |     r3++;
    0x0000c8c4 str r3, [r4, 0x10]                    |     *((r4 + 0x10)) = r3;
    0x0000c8c6 bl 0xc7dc                             |     r0 = fcn_0000c7dc (r0, r1);
    0x0000c8ca cmp r0, 0                             |     
                                                     |     if (r0 != 0) {
    0x0000c8cc bne 0xc822                            |         goto label_0;
                                                     |     }
                                                     |     do {
    0x0000c8ce subs r6, 1                            |         r6--;
                                                     |         if (r6 == 1) {
    0x0000c8d0 beq 0xc8ec                            |             goto label_9;
                                                     |         }
                                                     | label_2:
    0x0000c8d2 ldr r1, [r5, 0x14]                    |         r1 = *((r5 + 0x14));
    0x0000c8d4 mov r0, r4                            |         r0 = r4;
    0x0000c8d6 adds r5, 0x48                         |         r5 += 0x48;
    0x0000c8d8 cmp r1, 0                             |         
    0x0000c8da beq 0xc8ce                            |         
                                                     |     } while (r1 == 0);
    0x0000c8dc ldr r3, [r4, 4]                       |     r3 = *((r4 + 4));
    0x0000c8de cmp r3, 0                             |     
                                                     |     if (r3 != 0) {
    0x0000c8e0 bne 0xc8c0                            |         goto label_1;
                                                     |     }
    0x0000c8e2 ldr r3, [r4, 8]                       |     r3 = *((r4 + 8));
    0x0000c8e4 cmp r3, 0                             |     
                                                     |     if (r3 != 0) {
    0x0000c8e6 bne 0xc8c0                            |         goto label_1;
                                                     |     }
    0x0000c8e8 subs r6, 1                            |     r6--;
                                                     |     if (r6 != 1) {
    0x0000c8ea bne 0xc8d2                            |         goto label_2;
                                                     |     }
                                                     | label_9:
    0x0000c8ec ldr r3, [r4, 8]                       |     r3 = *((r4 + 8));
                                                     |     if (r3 != 0) {
    0x0000c8ee cbz r3, 0xc8f6                        |         
    0x0000c8f0 mov r1, r7                            |         r1 = r7;
    0x0000c8f2 mov r0, r4                            |         r0 = r4;
    0x0000c8f4 blx r3                                |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r1);
                                                     |     }
    0x0000c8f6 ldr r7, [r7, 0x34]                    |     r7 = *((r7 + 0x34));
    0x0000c8f8 cmp r7, 0                             |     
                                                     |     if (r7 != 0) {
    0x0000c8fa bne.w 0xc7ea                          |         goto label_3;
                                                     |     }
                                                     | label_4:
    0x0000c8fe movs r0, 0                            |     r0 = 0;
                                                     |     do {
    0x0000c900 ldr r3, [r4, 0x10]                    |         r3 = *((r4 + 0x10));
    0x0000c902 subs r3, 1                            |         r3--;
    0x0000c904 str r3, [r4, 0x10]                    |         *((r4 + 0x10)) = r3;
    0x0000c906 pop.w {r4, r5, r6, r7, r8, pc}        |         
                                                     | label_5:
    0x0000c90a and r0, r0, 2                         |         r0 &= 2;
    0x0000c90e b 0xc900                              |         
                                                     |     } while (1);
                                                     | }
    ; assembly                               | /* r2dec pseudo code output */
                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0xd140 */
                                             | #include <stdint.h>
                                             |  
    ; (fcn) fcn.0000d140 ()                  | void fcn_0000d140 (int16_t arg1) {
                                             |     r0 = arg1;
    0x0000d140 ldrb r3, [r0, 9]              |     r3 = *((r0 + 9));
    0x0000d142 cmp r3, 0                     |     
                                             |     if (r3 == 0) {
    0x0000d144 beq 0xd1b8                    |         goto label_5;
                                             |     }
    0x0000d146 push {r4, r5, r6, lr}         |     
    0x0000d148 mov r5, r0                    |     r5 = r0;
    0x0000d14a ldr r3, [r0, 0xc]             |     r3 = *((r0 + 0xc));
    0x0000d14c ldrb r6, [r0, 0xa]            |     r6 = *((r0 + 0xa));
    0x0000d14e adds r3, 1                    |     r3++;
    0x0000d150 str r3, [r0, 0xc]             |     *((r0 + 0xc)) = r3;
    0x0000d152 cbz r6, 0xd156                |     
                                             |     while (r4 == 0) {
                                             | label_0:
    0x0000d154 pop {r4, r5, r6, pc}          |         
    0x0000d156 ldr r3, [r0, 4]               |         r3 = *((r0 + 4));
    0x0000d158 ldr r0, [r3, 0x38]            |         r0 = *((r3 + 0x38));
    0x0000d15a blx 0x6410                    |         r0 = fcn_00006410 ();
    0x0000d15e cmp r0, 0                     |         
                                             |         if (r0 == 0) {
    0x0000d160 beq 0xd1ba                    |             goto label_6;
                                             |         }
    0x0000d162 ldr r4, [r5, 0x14]            |         r4 = *((r5 + 0x14));
                                             |         if (r4 != 0) {
    0x0000d164 cbnz r4, 0xd1b0               |             goto label_7;
                                             |         }
                                             | label_2:
    0x0000d166 ldr r3, [r5, 4]               |         r3 = *((r5 + 4));
    0x0000d168 movs r6, 1                    |         r6 = 1;
    0x0000d16a ldr r0, [r3, 0x38]            |         r0 = *((r3 + 0x38));
    0x0000d16c blx 0x6810                    |         fcn_00006810 ();
    0x0000d170 ldr r4, [r5, 0x14]            |         r4 = *((r5 + 0x14));
    0x0000d172 ldrd r2, r3, [r5]             |         __asm ("ldrd r2, r3, [r5]");
    0x0000d176 str r2, [r3, 4]               |         *((r3 + 4)) = r2;
    0x0000d178 strb r6, [r5, 0xa]            |         *((r5 + 0xa)) = r6;
    0x0000d17a cmp r4, 0                     |         
    0x0000d17c beq 0xd154                    |         
                                             |     }
    0x0000d17e ldr r3, [r4, 0xc]             |     r3 = *((r4 + 0xc));
                                             |     if (r3 != 0) {
    0x0000d180 cbnz r3, 0xd18e               |         goto label_8;
                                             |     }
                                             | label_1:
    0x0000d182 ldr r4, [r4, 0x14]            |     r4 = *((r4 + 0x14));
    0x0000d184 cmp r4, 0                     |     
                                             |     if (r4 == 0) {
    0x0000d186 beq 0xd154                    |         goto label_0;
                                             |     }
    0x0000d188 ldr r3, [r4, 0xc]             |     r3 = *((r4 + 0xc));
    0x0000d18a cmp r3, 0                     |     
                                             |     if (r3 == 0) {
    0x0000d18c beq 0xd182                    |         goto label_1;
                                             |     }
                                             | label_8:
    0x0000d18e ldr r3, [r4, 4]               |     r3 = *((r4 + 4));
    0x0000d190 ldr r0, [r3, 0x38]            |     r0 = *((r3 + 0x38));
    0x0000d192 blx 0x6810                    |     fcn_00006810 ();
    0x0000d196 ldrd r2, r3, [r4]             |     __asm ("ldrd r2, r3, [r4]");
    0x0000d19a str r2, [r3, 4]               |     *((r3 + 4)) = r2;
    0x0000d19c strb r6, [r4, 0xa]            |     *((r4 + 0xa)) = r6;
    0x0000d19e b 0xd182                      |     goto label_1;
                                             | label_4:
    0x0000d1a0 ldr r3, [r4, 4]               |     r3 = *((r4 + 4));
    0x0000d1a2 ldr r0, [r3, 0x38]            |     r0 = *((r3 + 0x38));
    0x0000d1a4 blx 0x63dc                    |     fcn_000063dc ();
    0x0000d1a8 strb r6, [r4, 0xa]            |     *((r4 + 0xa)) = r6;
                                             | label_3:
    0x0000d1aa ldr r4, [r4, 0x14]            |     r4 = *((r4 + 0x14));
    0x0000d1ac cmp r4, 0                     |     
                                             |     if (r4 == 0) {
    0x0000d1ae beq 0xd166                    |         goto label_2;
                                             |     }
                                             | label_7:
    0x0000d1b0 ldrb r3, [r4, 0xa]            |     r3 = *((r4 + 0xa));
    0x0000d1b2 cmp r3, 0                     |     
                                             |     if (r3 == 0) {
    0x0000d1b4 beq 0xd1aa                    |         goto label_3;
                                             |     }
    0x0000d1b6 b 0xd1a0                      |     goto label_4;
                                             | label_5:
    0x0000d1b8 bx lr                         |     return;
                                             | label_6:
    0x0000d1ba ldrd r1, r2, [r5]             |     __asm ("ldrd r1, r2, [r5]");
    0x0000d1be movs r3, 1                    |     r3 = 1;
    0x0000d1c0 str r1, [r2, 4]               |     *((r2 + 4)) = r1;
    0x0000d1c2 strb r3, [r5, 0xa]            |     *((r5 + 0xa)) = r3;
    0x0000d1c4 pop {r4, r5, r6, pc}          |     
                                             | }
    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0xd248 */
                                                     | #include <stdint.h>
                                                     |  
    ; (fcn) fcn.0000d248 ()                          | void fcn_0000d248 (int16_t arg1, int16_t arg2) {
                                                     |     r0 = arg1;
                                                     |     r1 = arg2;
    0x0000d248 push {r3, r4, r5, r6, r7, lr}         |     
    0x0000d24a mov r5, r0                            |     r5 = r0;
    0x0000d24c ldr r3, [pc, 0x98]                    |     
    0x0000d24e mov r6, r1                            |     r6 = r1;
    0x0000d250 add r3, pc                            |     
    0x0000d252 ldr r3, [r3, 0x34]                    |     r3 = *(0x1a570);
    0x0000d254 blx r3                                |     uint32_t (*r3)(uint32_t) (r3);
    0x0000d256 ldr r3, [pc, 0x94]                    |     
    0x0000d258 mov r4, r0                            |     r4 = r0;
    0x0000d25a add r3, pc                            |     r3 = 0x1a54c;
    0x0000d25c ldr.w r2, [r3, 0xb4]                  |     r2 = *(0x1a600);
    0x0000d260 str.w r5, [r3, 0x8c]                  |     __asm ("str.w r5, [r3, 0x8c]");
    0x0000d264 cmp r5, r2                            |     
    0x0000d266 it gt                                 |     
                                                     |     if (r5 <= r2) {
    0x0000d268 strgt r5, [r3, 0xb4]                  |         *((r3 + 0xb4)) = r5;
                                                     |     }
    0x0000d26c ldr r3, [pc, 0x80]                    |     
    0x0000d26e add r3, pc                            |     r3 = 0x1a562;
    0x0000d270 ldr r2, [r3, 0x60]                    |     r2 = *(0x1a5c2);
                                                     |     if (r2 == 0) {
    0x0000d272 cbz r2, 0xd290                        |         goto label_0;
                                                     |     }
    0x0000d274 ldr r5, [r3, 0x78]                    |     r5 = *((r3 + 0x78));
    0x0000d276 ldr r2, [r3, 0x58]                    |     r2 = *((r3 + 0x58));
    0x0000d278 ldr r1, [r3, 0x5c]                    |     r1 = *((r3 + 0x5c));
    0x0000d27a subs r2, r2, r4                       |     r2 -= r4;
    0x0000d27c asr.w r0, r5, 0x1f                    |     r0 = r5 >> 0x1f;
    0x0000d280 sbc.w r1, r1, r4, asr 31              |     __asm ("sbc.w r1, r1, r4, asr 31");
    0x0000d284 invalid                               |     
    0x0000d288 itt lt                                |     
                                                     |     if (r2 >= r2) {
    0x0000d28a movlt r2, 0                           |         r2 = 0;
                                                     |     }
                                                     |     if (r2 >= r2) {
    0x0000d28c strlt r2, [r3, 0x74]                  |         *((r3 + 0x74)) = r2;
                                                     |     }
    0x0000d28e bge 0xd2da                            |     
                                                     |     while (1) {
                                                     | label_0:
    0x0000d290 ldr r7, [pc, 0x60]                    |         
    0x0000d292 mov r0, r4                            |         r0 = r4;
    0x0000d294 add r7, pc                            |         r7 = 0x1a58c;
    0x0000d296 ldr r3, [r7, 0x24]                    |         r3 = *(0x1a5b0);
    0x0000d298 blx r3                                |         r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0000d29a mov r5, r0                            |         r5 = r0;
                                                     |         if (r0 != 0) {
    0x0000d29c cbz r0, 0xd2d4                        |             
    0x0000d29e ldr r3, [r7, 0x30]                    |             r3 = *((r7 + 0x30));
    0x0000d2a0 blx r3                                |             uint32_t (*r3)(uint32_t) (r3);
    0x0000d2a2 ldr r2, [pc, 0x54]                    |             
    0x0000d2a4 mov r4, r0                            |             r4 = r0;
    0x0000d2a6 add r2, pc                            |             r2 = 0x1a5a4;
    0x0000d2a8 ldr r3, [r2, 0x78]                    |             r3 = *(0x1a61c);
    0x0000d2aa ldr.w r1, [r2, 0xa0]                  |             r1 = *(0x1a644);
    0x0000d2ae add r3, r0                            |             r3 += r0;
    0x0000d2b0 cmp r3, r1                            |             
    0x0000d2b2 str r3, [r2, 0x78]                    |             *((r2 + 0x78)) = r3;
    0x0000d2b4 it gt                                 |             
                                                     |             if (r3 <= r1) {
    0x0000d2b6 strgt r3, [r2, 0xa0]                  |                 *((r2 + 0xa0)) = r3;
                                                     |             }
    0x0000d2ba ldr r2, [pc, 0x40]                    |             
    0x0000d2bc add r2, pc                            |             r2 = 0x1a5be;
    0x0000d2be ldr.w r3, [r2, 0x9c]                  |             r3 = *(0x1a65a);
    0x0000d2c2 ldr.w r1, [r2, 0xc4]                  |             r1 = *(0x1a682);
    0x0000d2c6 adds r3, 1                            |             r3++;
    0x0000d2c8 cmp r3, r1                            |             
    0x0000d2ca str.w r3, [r2, 0x9c]                  |             __asm ("str.w r3, [r2, 0x9c]");
    0x0000d2ce it gt                                 |             
                                                     |             if (r3 > r1) {
    0x0000d2d0 strgt r3, [r2, 0xc4]                  |                 *((r2 + 0xc4)) = r3;
                                                     |                 goto label_1;
                                                     |             }
                                                     |         }
                                                     | label_1:
    0x0000d2d4 mov r0, r4                            |         r0 = r4;
    0x0000d2d6 str r5, [r6]                          |         *(r6) = r5;
    0x0000d2d8 pop {r3, r4, r5, r6, r7, pc}          |         
    0x0000d2da movs r2, 1                            |         r2 = 1;
    0x0000d2dc mov r0, r4                            |         r0 = r4;
    0x0000d2de str r2, [r3, 0x74]                    |         *((r3 + 0x74)) = r2;
    0x0000d2e0 bl 0xd204                             |         fcn_0000d204 (r0);
    0x0000d2e4 b 0xd290                              |         
                                                     |     }
                                                     | }
    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0xd4ac */
                                                         | #include <stdint.h>
                                                         |  
                                                         | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                         |  
    ; (fcn) fcn.0000d4ac ()                              | void fcn_0000d4ac (int16_t arg1, int16_t arg2, int16_t arg3) {
                                                         |     r0 = arg1;
                                                         |     r1 = arg2;
                                                         |     r2 = arg3;
    0x0000d4ac push.w {r4, r5, r6, r7, r8, lr}           |     
    0x0000d4b0 mov r5, r1                                |     r5 = r1;
    0x0000d4b2 add.w r1, r2, r2, lsr 31                  |     r1 = r2 + (r2 >> 31);
    0x0000d4b6 mov r4, r2                                |     r4 = r2;
    0x0000d4b8 asrs r1, r1, 1                            |     r1 >>= 1;
    0x0000d4ba adds r1, 1                                |     r1++;
    0x0000d4bc bl 0xd3a0                                 |     r0 = fcn_0000d3a0 (r0, r1);
                                                         |     if (r0 == 0) {
    0x0000d4c0 cbz r0, 0xd514                            |         goto label_0;
                                                         |     }
    0x0000d4c2 subs r1, r4, 1                            |     r1 = r4 - 1;
    0x0000d4c4 cmp r1, 0                                 |     
                                                         |     if (r1 <= 0) {
    0x0000d4c6 ble 0xd518                                |         goto label_1;
                                                         |     }
    0x0000d4c8 mov.w lr, 0                               |     lr = 0;
    0x0000d4cc adds r6, r5, 1                            |     r6 = r5 + 1;
                                                         |     do {
    0x0000d4ce ldrb.w r8, [r5, lr]                       |         r8 = *((r5 + lr));
    0x0000d4d2 asr.w r2, lr, 1                           |         r2 = lr >> 1;
    0x0000d4d6 ldrb.w r7, [r6, lr]                       |         r7 = *((r6 + lr));
    0x0000d4da add.w lr, lr, 2                           |         lr += 2;
    0x0000d4de cmp r1, lr                                |         
    0x0000d4e0 ubfx ip, r8, 6, 1                         |         ip = (r8 >> 6) & ((1 << 1) - 1);
    0x0000d4e4 ubfx r3, r7, 6, 1                         |         r3 = (r7 >> 6) & ((1 << 1) - 1);
    0x0000d4e8 add.w ip, ip, ip, lsl 3                   |         
    0x0000d4ec add.w r3, r3, r3, lsl 3                   |         r3 += (r3 << 3);
    0x0000d4f0 add ip, r8                                |         
    0x0000d4f2 add r3, r7                                |         r3 += r7;
    0x0000d4f4 and ip, ip, 0xf                           |         
    0x0000d4f8 and r3, r3, 0xf                           |         r3 &= 0xf;
    0x0000d4fc orr.w r3, r3, ip, lsl 4                   |         r3 |= (ip << 4);
    0x0000d500 strb r3, [r0, r2]                         |         *((r0 + r2)) = r3;
    0x0000d502 bgt 0xd4ce                                |         
                                                         |     } while (r1 > lr);
    0x0000d504 subs r3, r4, 2                            |     r3 = r4 - 2;
    0x0000d506 bic r3, r3, 1                             |     r3 = BIT_MASK (r3, 1);
    0x0000d50a adds r3, 2                                |     r3 += 2;
    0x0000d50c add.w r3, r0, r3, asr 1                   |     r3 = r0 + (r3 >> 1);
                                                         |     do {
    0x0000d510 movs r2, 0                                |         r2 = 0;
    0x0000d512 strb r2, [r3]                             |         *(r3) = r2;
                                                         | label_0:
    0x0000d514 pop.w {r4, r5, r6, r7, r8, pc}            |         
                                                         | label_1:
    0x0000d518 mov r3, r0                                |         r3 = r0;
    0x0000d51a b 0xd510                                  |         
                                                         |     } while (1);
                                                         | }
    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0xd614 */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) fcn.0000d614 ()                              | void fcn_0000d614 (int16_t arg_18h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                         |     r0 = arg1;
                                                         |     r1 = arg2;
                                                         |     r2 = arg3;
                                                         |     r3 = arg4;
    0x0000d614 add.w r1, r1, r1, lsl 2                   |     r1 += (r1 << 2);
    0x0000d618 push.w {r4, r5, r6, r7, r8, lr}           |     
    0x0000d61c mov r6, r3                                |     r6 = r3;
    0x0000d61e ldrd r7, r8, [sp, 0x18]                   |     __asm ("ldrd r7, r8, [arg_18h]");
    0x0000d622 add.w ip, r2, r1, lsl 2                   |     
    0x0000d626 sub.w r4, ip, 0x14                        |     r4 = ip - 0x14;
                                                         |     if (r3 != 0) {
    0x0000d62a cbz r3, 0xd65a                            |         
    0x0000d62c adds r1, r7, 1                            |         r1 = r7 + 1;
    0x0000d62e bl 0xd3a0                                 |         r0 = fcn_0000d3a0 (r0, r1);
    0x0000d632 mov r5, r0                                |         r5 = r0;
                                                         |         if (r0 != 0) {
    0x0000d634 cbz r0, 0xd654                            |             
    0x0000d636 mov r1, r6                                |             r1 = r6;
    0x0000d638 mov r2, r7                                |             r2 = r7;
    0x0000d63a blx 0x6214                                |             fcn_00006214 ();
    0x0000d63e movs r3, 0                                |             r3 = 0;
    0x0000d640 strb r3, [r5, r7]                         |             *((r5 + r7)) = r3;
    0x0000d642 str r5, [r4, 4]                           |             *((r4 + 4)) = r5;
    0x0000d644 cmp.w r8, 0                               |             
                                                         |             if (r8 == 0) {
    0x0000d648 beq 0xd656                                |                 goto label_0;
                                                         |             }
    0x0000d64a mov r0, r5                                |             r0 = r5;
    0x0000d64c pop.w {r4, r5, r6, r7, r8, lr}            |             
    0x0000d650 b.w 0xadf4                                |             void (*0xadf4)() ();
                                                         |         }
    0x0000d654 str r0, [r4, 4]                           |         *((r4 + 4)) = r0;
                                                         | label_0:
    0x0000d656 pop.w {r4, r5, r6, r7, r8, pc}            |         
                                                         |     }
    0x0000d65a str r3, [r4, 4]                           |     *((r4 + 4)) = r3;
    0x0000d65c 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-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0xd6d0 */
                                                     | #include <stdint.h>
                                                     |  
    ; (fcn) fcn.0000d6d0 ()                          | void fcn_0000d6d0 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                     |     r0 = arg1;
                                                     |     r1 = arg2;
                                                     |     r2 = arg3;
                                                     |     r3 = arg4;
    0x0000d6d0 push {r3, r4, r5, r6, r7, lr}         |     
    0x0000d6d2 mov r6, r1                            |     r6 = r1;
    0x0000d6d4 movs r1, 0x30                         |     r1 = 0x30;
    0x0000d6d6 mov r5, r2                            |     r5 = r2;
    0x0000d6d8 mov r7, r3                            |     r7 = r3;
    0x0000d6da bl 0xd3a0                             |     r0 = fcn_0000d3a0 (r0, r1);
    0x0000d6de mov r4, r0                            |     r4 = r0;
                                                     |     if (r0 != 0) {
    0x0000d6e0 cbz r0, 0xd742                        |         
    0x0000d6e2 add.w r5, r5, r5, lsl 3               |         r5 += (r5 << 3);
    0x0000d6e6 movs r2, 0x30                         |         r2 = 0x30;
    0x0000d6e8 movs r1, 0                            |         r1 = 0;
    0x0000d6ea blx 0x5fcc                            |         fcn_00005fcc ();
    0x0000d6ee add.w r1, r6, r5, lsl 3               |         r1 = r6 + (r5 << 3);
    0x0000d6f2 movs r3, 0x9a                         |         r3 = 0x9a;
    0x0000d6f4 strb r3, [r4]                         |         *(r4) = r3;
    0x0000d6f6 movw r0, 0xffff                       |         r0 = 0xffff;
    0x0000d6fa ldr r3, [r1, 0x18]                    |         r3 = *((r1 + 0x18));
    0x0000d6fc movs r2, 1                            |         r2 = 1;
    0x0000d6fe ldr r5, [r1, 0x30]                    |         r5 = *((r1 + 0x30));
    0x0000d700 strh r0, [r4, 0x22]                   |         *((r4 + 0x22)) = r0;
    0x0000d702 str r3, [r4, 0x2c]                    |         *((r4 + 0x2c)) = r3;
    0x0000d704 ldrsh.w r3, [r3, 0x24]                |         r3 = *((r3 + 0x24));
    0x0000d708 str r2, [r4, 0x18]                    |         *((r4 + 0x18)) = r2;
    0x0000d70a str r5, [r4, 0x1c]                    |         *((r4 + 0x1c)) = r5;
    0x0000d70c cmp r3, r7                            |         
    0x0000d70e it eq                                 |         
                                                     |         if (r3 == r7) {
    0x0000d710 strheq r0, [r4, 0x20]                 |             __asm ("strheq r0, [r4, 0x20]");
                                                     |         }
                                                     |         if (r3 != r7) {
    0x0000d712 beq 0xd73e                            |             
    0x0000d714 cmp r7, 0x3f                          |             
    0x0000d716 mov r3, r7                            |             r3 = r7;
    0x0000d718 it ge                                 |             
                                                     |             if (r7 < 0x3f) {
    0x0000d71a movge r3, 0x3f                        |                 r3 = 0x3f;
                                                     |             }
    0x0000d71c ldr r5, [r1, 0x40]                    |             r5 = *((r1 + 0x40));
    0x0000d71e sub.w r0, r3, 0x20                    |             r0 = r3 - 0x20;
    0x0000d722 rsb.w r6, r3, 0x20                    |             r6 = 0x20 - r3;
    0x0000d726 lsl.w r0, r2, r0                      |             r0 = r2 << r0;
    0x0000d72a lsr.w r6, r2, r6                      |             r6 = r2 >> r6;
    0x0000d72e lsls r2, r3                           |             r2 <<= r3;
    0x0000d730 ldr r3, [r1, 0x44]                    |             r3 = *((r1 + 0x44));
    0x0000d732 orrs r0, r6                           |             r0 |= r6;
    0x0000d734 strh r7, [r4, 0x20]                   |             *((r4 + 0x20)) = r7;
    0x0000d736 orrs r5, r2                           |             r5 |= r2;
    0x0000d738 orrs r3, r0                           |             r3 |= r0;
    0x0000d73a str r5, [r1, 0x40]                    |             *((r1 + 0x40)) = r5;
    0x0000d73c str r3, [r1, 0x44]                    |             *((r1 + 0x44)) = r3;
                                                     |         }
    0x0000d73e movs r3, 4                            |         r3 = 4;
    0x0000d740 str r3, [r4, 4]                       |         *((r4 + 4)) = r3;
                                                     |     }
    0x0000d742 mov r0, r4                            |     r0 = r4;
    0x0000d744 pop {r3, r4, r5, r6, r7, pc}          |     
                                                     | }
    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0xdc94 */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) fcn.0000dc94 ()                      | void fcn_0000dc94 (uint32_t arg1) {
                                                 |     r0 = arg1;
    0x0000dc94 ldr r3, [pc, 0xa8]                |     
    0x0000dc96 push {r4, r5, r6, lr}             |     
    0x0000dc98 mov r4, r0                        |     r4 = r0;
    0x0000dc9a ldr r5, [pc, 0xa8]                |     
    0x0000dc9c add r3, pc                        |     r3 = 0x1b9e0;
    0x0000dc9e ldr.w r2, [r3, 0xbc]              |     r2 = *(0x1ba9c);
    0x0000dca2 add r5, pc                        |     r5 = 0x1b9ec;
    0x0000dca4 str.w r0, [r3, 0x94]              |     __asm ("str.w r0, [r3, 0x94]");
    0x0000dca8 cmp r0, r2                        |     
    0x0000dcaa it gt                             |     
                                                 |     if (r0 <= r2) {
    0x0000dcac strgt r0, [r3, 0xbc]              |         *((r3 + 0xbc)) = r0;
                                                 |     }
    0x0000dcb0 ldr r3, [r5, 0x24]                |     r3 = *(0x1ba10);
    0x0000dcb2 cmp r3, r0                        |     
                                                 |     if (r3 >= r0) {
    0x0000dcb4 blt 0xdcfc                        |         
    0x0000dcb6 ldr r0, [r5, 0x38]                |         r0 = *((r5 + 0x38));
    0x0000dcb8 blx 0x6810                        |         fcn_00006810 ();
    0x0000dcbc ldr r6, [r5, 0x3c]                |         r6 = *((r5 + 0x3c));
                                                 |         if (r6 != 0) {
    0x0000dcbe cbz r6, 0xdcf6                    |             
    0x0000dcc0 ldr r2, [r5, 0x40]                |             r2 = *((r5 + 0x40));
    0x0000dcc2 ldr r1, [r5, 0x2c]                |             r1 = *((r5 + 0x2c));
    0x0000dcc4 ldr r3, [r5, 0x7c]                |             r3 = *((r5 + 0x7c));
    0x0000dcc6 subs r2, 1                        |             r2--;
    0x0000dcc8 ldr r0, [r6]                      |             r0 = *(r6);
    0x0000dcca cmp r2, r1                        |             
    0x0000dccc ite ge                            |             
                                                 |             if (r2 < r1) {
    0x0000dcce movge r1, 0                       |                 r1 = 0;
                                                 |             }
                                                 |             if (r2 >= r1) {
    0x0000dcd0 movlt r1, 1                       |                 r1 = 1;
                                                 |             }
    0x0000dcd2 strd r2, r1, [r5, 0x40]           |             __asm ("strd r2, r1, [r5, 0x40]");
    0x0000dcd6 adds r3, 1                        |             r3++;
    0x0000dcd8 ldr.w r2, [r5, 0xa4]              |             r2 = *((r5 + 0xa4));
    0x0000dcdc str r3, [r5, 0x7c]                |             *((r5 + 0x7c)) = r3;
    0x0000dcde str r0, [r5, 0x3c]                |             *((r5 + 0x3c)) = r0;
    0x0000dce0 cmp r3, r2                        |             
    0x0000dce2 it gt                             |             
                                                 |             if (r3 <= r2) {
    0x0000dce4 strgt r3, [r5, 0xa4]              |                 *((r5 + 0xa4)) = r3;
                                                 |             }
    0x0000dce8 ldr r3, [pc, 0x5c]                |             
    0x0000dcea add r3, pc                        |             r3 = 0x1ba36;
    0x0000dcec ldr r0, [r3, 0x38]                |             r0 = *(0x1ba6e);
    0x0000dcee blx 0x63dc                        |             fcn_000063dc ();
    0x0000dcf2 mov r0, r6                        |             r0 = r6;
    0x0000dcf4 pop {r4, r5, r6, pc}              |             
                                                 |         }
    0x0000dcf6 ldr r0, [r5, 0x38]                |         r0 = *((r5 + 0x38));
    0x0000dcf8 blx 0x63dc                        |         fcn_000063dc ();
                                                 |     }
    0x0000dcfc mov r0, r4                        |     r0 = r4;
    0x0000dcfe bl 0xd300                         |     r0 = fcn_0000d300 (r0, r1, r2, r3, r4);
    0x0000dd02 mov r6, r0                        |     r6 = r0;
                                                 |     if (r0 != 0) {
    0x0000dd04 cbz r0, 0xdd3a                    |         
    0x0000dd06 ldr r3, [pc, 0x44]                |         
    0x0000dd08 ldr r5, [pc, 0x44]                |         
    0x0000dd0a add r3, pc                        |         
    0x0000dd0c add r5, pc                        |         r5 = 0x1ba60;
    0x0000dd0e ldr r3, [r3, 0x30]                |         r3 = *(0x1ba8c);
    0x0000dd10 blx r3                            |         r0 = uint32_t (*r3)(uint32_t) (r3);
    0x0000dd12 mov r4, r0                        |         r4 = r0;
    0x0000dd14 ldr r0, [r5, 0x38]                |         r0 = *(0x1ba98);
    0x0000dd16 blx 0x6810                        |         fcn_00006810 ();
    0x0000dd1a ldr.w r2, [r5, 0x80]              |         r2 = *(0x1bae0);
    0x0000dd1e ldr.w r3, [r5, 0xa8]              |         r3 = *(0x1bb08);
    0x0000dd22 add r2, r4                        |         r2 += r4;
    0x0000dd24 cmp r2, r3                        |         
    0x0000dd26 ldr r3, [pc, 0x2c]                |         
    0x0000dd28 str.w r2, [r5, 0x80]              |         __asm ("str.w r2, [r5, 0x80]");
    0x0000dd2c it gt                             |         
                                                 |         if (r2 <= r3) {
    0x0000dd2e strgt r2, [r5, 0xa8]              |             *((r5 + 0xa8)) = r2;
                                                 |         }
    0x0000dd32 add r3, pc                        |         r3 = 0x1ba8c;
    0x0000dd34 ldr r0, [r3, 0x38]                |         r0 = *(0x1bac4);
    0x0000dd36 blx 0x63dc                        |         fcn_000063dc ();
                                                 |     }
    0x0000dd3a mov r0, r6                        |     r0 = r6;
    0x0000dd3c pop {r4, r5, r6, pc}              |     
                                                 | }
    ; assembly                               | /* r2dec pseudo code output */
                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0xdd58 */
                                             | #include <stdint.h>
                                             |  
    ; (fcn) fcn.0000dd58 ()                  | void fcn_0000dd58 (int16_t arg_58h, int16_t arg_1f0h, int16_t arg_1f8h, int16_t arg_230h, int16_t arg_280h, int16_t arg_398h, int16_t arg_3d8h, int16_t arg1) {
                                             |     int16_t var_0h;
                                             |     int16_t var_4h;
                                             |     r0 = arg1;
    0x0000dd58 blmi 0x10e0668                |     __asm ("blmi 0x10e0668");
    0x0000dd5c push {r4, r5, lr}             |     
    0x0000dd5e mov r4, r0                    |     r4 = r0;
    0x0000dd60 ldr r5, [pc, 0x108]           |     
    0x0000dd62 add r2, pc                    |     r2 += pc;
    0x0000dd64 sub sp, 0xc                   |     
    0x0000dd66 ldr r3, [r2, r3]              |     r3 = *((r2 + r3));
    0x0000dd68 add r5, pc                    |     r5 = 0x1bbd8;
    0x0000dd6a ldr r0, [r5, 0x50]            |     r0 = *(0x1bc28);
    0x0000dd6c ldr r3, [r3]                  |     r3 = *(r3);
    0x0000dd6e str r3, [sp, 4]               |     var_4h = r3;
    0x0000dd70 mov.w r3, 0                   |     r3 = 0;
    0x0000dd74 blx 0x6810                    |     fcn_00006810 ();
    0x0000dd78 ldr r3, [r5, 0x70]            |     r3 = *(0x1bc48);
                                             |     if (r3 != 0) {
    0x0000dd7a cbz r3, 0xdd88                |         
    0x0000dd7c ldr r2, [pc, 0xf0]            |         
    0x0000dd7e add r2, pc                    |         
    0x0000dd80 ldr.w r2, [r2, 0xc4]          |         r2 = *(0x1bcb6);
    0x0000dd84 cmp r2, r4                    |         
                                             |         if (r2 >= r4) {
    0x0000dd86 bge 0xddf0                    |             goto label_0;
                                             |         }
                                             |     }
    0x0000dd88 ldr r5, [pc, 0xe8]            |     
    0x0000dd8a add r5, pc                    |     r5 = 0x1bc02;
    0x0000dd8c ldr r3, [r5]                  |     r3 = *(0x1bc02);
    0x0000dd8e cmp r3, 0                     |     
                                             |     if (r3 == 0) {
    0x0000dd90 beq 0xde34                    |         goto label_1;
                                             |     }
    0x0000dd92 ldr r3, [pc, 0xe4]            |     
    0x0000dd94 mov r1, sp                    |     r1 = sp;
    0x0000dd96 mov r0, r4                    |     r0 = r4;
    0x0000dd98 add r3, pc                    |     r3 = 0x1bc16;
    0x0000dd9a ldr.w r2, [r3, 0xc0]          |     r2 = *(0x1bcd6);
    0x0000dd9e str.w r4, [r3, 0x98]          |     __asm ("str.w r4, [r3, 0x98]");
    0x0000dda2 cmp r4, r2                    |     
    0x0000dda4 it gt                         |     
                                             |     if (r4 <= r2) {
    0x0000dda6 strgt r4, [r3, 0xc0]          |         *((r3 + 0xc0)) = r4;
                                             |     }
    0x0000ddaa bl 0xd248                     |     fcn_0000d248 (r0, r1);
    0x0000ddae ldr r3, [sp]                  |     r3 = *(sp);
                                             |     if (r3 != 0) {
    0x0000ddb0 cbz r3, 0xddcc                |         
    0x0000ddb2 ldr r3, [pc, 0xc8]            |         
    0x0000ddb4 add r3, pc                    |         r3 = 0x1bc36;
    0x0000ddb6 ldr.w r1, [r3, 0x88]          |         r1 = *(0x1bcbe);
    0x0000ddba ldr.w r2, [r3, 0xb0]          |         r2 = *(0x1bce6);
    0x0000ddbe add r0, r1                    |         r0 += r1;
    0x0000ddc0 cmp r0, r2                    |         
    0x0000ddc2 str.w r0, [r3, 0x88]          |         __asm ("str.w r0, [r3, 0x88]");
    0x0000ddc6 it gt                         |         
                                             |         if (r0 > r2) {
    0x0000ddc8 strgt r0, [r3, 0xb0]          |             *((r3 + 0xb0)) = r0;
                                             |             goto label_2;
                                             |         }
                                             |     }
                                             | label_2:
    0x0000ddcc ldr r3, [pc, 0xb0]            |     
    0x0000ddce add r3, pc                    |     r3 = 0x1bc52;
    0x0000ddd0 ldr r0, [r3, 0x50]            |     r0 = *(0x1bca2);
    0x0000ddd2 blx 0x63dc                    |     fcn_000063dc ();
    0x0000ddd6 ldr r0, [sp]                  |     r0 = *(sp);
                                             |     do {
    0x0000ddd8 ldr r2, [pc, 0xa8]            |         
    0x0000ddda ldr r3, [pc, 0x8c]            |         r3 = *(0xde6a);
    0x0000dddc add r2, pc                    |         r2 = 0x1bc64;
    0x0000ddde ldr r3, [r2, r3]              |         r3 = *(0x1bc64);
    0x0000dde0 ldr r2, [r3]                  |         r2 = *(0x1bc64);
    0x0000dde2 ldr r3, [sp, 4]               |         r3 = var_4h;
    0x0000dde4 eors r2, r3                   |         r2 ^= r3;
    0x0000dde6 mov.w r3, 0                   |         r3 = 0;
                                             |         if (r2 != r3) {
    0x0000ddea bne 0xde5e                    |             goto label_3;
                                             |         }
    0x0000ddec add sp, 0xc                   |         
    0x0000ddee pop {r4, r5, pc}              |         
                                             | label_0:
    0x0000ddf0 ldr r2, [r5, 0x6c]            |         r2 = *((r5 + 0x6c));
    0x0000ddf2 subs r3, 1                    |         r3--;
    0x0000ddf4 str r2, [sp]                  |         *(sp) = r2;
    0x0000ddf6 ldr r1, [r2]                  |         r1 = *(r2);
    0x0000ddf8 str r3, [r5, 0x70]            |         *((r5 + 0x70)) = r3;
    0x0000ddfa ldr.w r3, [r5, 0x84]          |         r3 = *((r5 + 0x84));
    0x0000ddfe ldr.w r2, [r5, 0xac]          |         r2 = *((r5 + 0xac));
    0x0000de02 str r1, [r5, 0x6c]            |         *((r5 + 0x6c)) = r1;
    0x0000de04 adds r3, 1                    |         r3++;
    0x0000de06 cmp r3, r2                    |         
    0x0000de08 str.w r3, [r5, 0x84]          |         __asm ("str.w r3, [r5, 0x84]");
    0x0000de0c it gt                         |         
                                             |         if (r3 <= r2) {
    0x0000de0e strgt r3, [r5, 0xac]          |             *((r5 + 0xac)) = r3;
                                             |         }
    0x0000de12 ldr r3, [pc, 0x74]            |         
    0x0000de14 add r3, pc                    |         r3 = 0x1bca2;
    0x0000de16 ldr.w r2, [r3, 0xc0]          |         r2 = *(0x1bd62);
    0x0000de1a str.w r4, [r3, 0x98]          |         __asm ("str.w r4, [r3, 0x98]");
    0x0000de1e cmp r4, r2                    |         
    0x0000de20 it gt                         |         
                                             |         if (r4 <= r2) {
    0x0000de22 strgt r4, [r3, 0xc0]          |             *((r3 + 0xc0)) = r4;
                                             |         }
    0x0000de26 ldr r3, [pc, 0x64]            |         
    0x0000de28 add r3, pc                    |         r3 = 0x1bcba;
    0x0000de2a ldr r0, [r3, 0x50]            |         r0 = *(0x1bd0a);
    0x0000de2c blx 0x63dc                    |         fcn_000063dc ();
    0x0000de30 ldr r0, [sp]                  |         r0 = *(sp);
    0x0000de32 b 0xddd8                      |         
                                             |     } while (1);
                                             | label_1:
    0x0000de34 ldr r3, [pc, 0x58]            |     
    0x0000de36 add r3, pc                    |     r3 = 0x1bcca;
    0x0000de38 ldr r0, [r3, 0x50]            |     r0 = *(0x1bd1a);
    0x0000de3a blx 0x63dc                    |     fcn_000063dc ();
    0x0000de3e ldr r2, [pc, 0x54]            |     
    0x0000de40 ldr r3, [pc, 0x24]            |     r3 = *(0xde68);
    0x0000de42 add r2, pc                    |     r2 = 0x1bcdc;
    0x0000de44 ldr r3, [r2, r3]              |     r3 = *(0x1bcdc);
    0x0000de46 ldr r2, [r3]                  |     r2 = *(0x1bcdc);
    0x0000de48 ldr r3, [sp, 4]               |     r3 = var_4h;
    0x0000de4a eors r2, r3                   |     r2 ^= r3;
    0x0000de4c mov.w r3, 0                   |     r3 = 0;
                                             |     if (r2 == r3) {
    0x0000de50 bne 0xde5e                    |         
    0x0000de52 ldr r3, [r5, 0x24]            |         r3 = *((r5 + 0x24));
    0x0000de54 mov r0, r4                    |         r0 = r4;
    0x0000de56 add sp, 0xc                   |         
    0x0000de58 pop.w {r4, r5, lr}            |         
    0x0000de5c bx r3                         |         return uint32_t (*r3)() ();
                                             |     }
                                             | label_3:
    0x0000de5e blx 0x6498                    |     fcn_00006498 ();
    0x0000de62 nop                           |     
    0x0000de64 ldr r6, [sp, 0x3d8]           |     r6 = *(arg_3d8h);
    0x0000de66 movs r6, r0                   |     r6 = r0;
    0x0000de68 lsls r0, r1, 0xe              |     r0 = r1 << 0xe;
    0x0000de6a movs r0, r0                   |     
    0x0000de6c add sp, 0x130                 |     
    0x0000de6e movs r6, r0                   |     r6 = r0;
    0x0000de70 adr r2, 0x218                 |     r2 = 0x218;
    0x0000de72 movs r6, r0                   |     r6 = r0;
    0x0000de74 adr r2, 0x1e8                 |     r2 = 0x1e8;
    0x0000de76 movs r6, r0                   |     r6 = r0;
    0x0000de78 add sp, 0x70                  |     
    0x0000de7a movs r6, r0                   |     r6 = r0;
    0x0000de7c add sp, 0                     |     
    0x0000de7e movs r6, r0                   |     r6 = r0;
    0x0000de80 add r7, sp, 0x398             |     r7 += arg_398h;
    0x0000de82 movs r6, r0                   |     r6 = r0;
    0x0000de84 ldr r6, [sp, 0x1f0]           |     r6 = *(arg_1f0h);
    0x0000de86 movs r6, r0                   |     r6 = r0;
    0x0000de88 add r7, sp, 0x280             |     r7 += arg_280h;
    0x0000de8a movs r6, r0                   |     r6 = r0;
    0x0000de8c add r7, sp, 0x230             |     r7 += arg_230h;
    0x0000de8e movs r6, r0                   |     r6 = r0;
    0x0000de90 add r7, sp, 0x1f8             |     r7 += arg_1f8h;
    0x0000de92 movs r6, r0                   |     r6 = r0;
    0x0000de94 ldr r6, [sp, 0x58]            |     r6 = *(arg_58h);
    0x0000de96 movs r6, r0                   |     r6 = r0;
                                             | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0xe370 */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) fcn.0000e370 ()                                  | void fcn_0000e370 (int16_t arg1, int16_t arg2) {
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
                                                             |     if (? >= ?) {
    0x0000e370 ldrbmi lr, [r0, sp, lsr 18]!                  |         
                                                             |     }
                                                             |     if (r1 == 0) {
    0x0000e374 cbz r1, 0xe3d4                                |         goto label_0;
                                                             |     }
    0x0000e376 mov r7, r1                                    |     r7 = r1;
    0x0000e378 movs r1, 8                                    |     r1 = 8;
    0x0000e37a mov sb, r0                                    |     sb = r0;
    0x0000e37c bl 0xd3a0                                     |     r0 = fcn_0000d3a0 (r0, r1);
    0x0000e380 mov r8, r0                                    |     r8 = r0;
                                                             |     if (r0 == 0) {
    0x0000e382 cbz r0, 0xe3d4                                |         goto label_0;
                                                             |     }
    0x0000e384 ldr r1, [r7, 4]                               |     r1 = *((r7 + 4));
    0x0000e386 str r1, [r0, 4]                               |     *((r0 + 4)) = r1;
    0x0000e388 mov r0, sb                                    |     r0 = sb;
    0x0000e38a lsls r1, r1, 3                                |     r1 <<= 3;
    0x0000e38c bl 0xd3a0                                     |     r0 = fcn_0000d3a0 (r0, r1);
    0x0000e390 mov r6, r0                                    |     r6 = r0;
    0x0000e392 str.w r0, [r8]                                |     __asm ("str.w r0, [r8]");
                                                             |     if (r0 == 0) {
    0x0000e396 cbz r0, 0xe3de                                |         goto label_1;
                                                             |     }
    0x0000e398 ldr r3, [r7, 4]                               |     r3 = *((r7 + 4));
    0x0000e39a cmp r3, 0                                     |     
    0x0000e39c it gt                                         |     
                                                             |     if (r3 <= 0) {
    0x0000e39e movgt r4, 0                                   |         r4 = 0;
                                                             |     }
                                                             |     if (r3 > 0) {
    0x0000e3a0 bgt 0xe3a8                                    |         goto label_2;
                                                             |     }
    0x0000e3a2 b 0xe3ce                                      |     goto label_3;
                                                             |     do {
    0x0000e3a4 ldr.w r6, [r8]                                |         r6 = *(r8);
                                                             | label_2:
    0x0000e3a8 ldr r5, [r7]                                  |         r5 = *(r7);
    0x0000e3aa lsls r2, r4, 3                                |         r2 = r4 << 3;
    0x0000e3ac mov r0, sb                                    |         r0 = sb;
    0x0000e3ae add.w sl, r6, r2                              |         sl = r6 + r2;
    0x0000e3b2 ldr.w r1, [r5, r4, lsl 3]                     |         offset_0 = r4 << 3;
                                                             |         r1 = *((r5 + offset_0));
    0x0000e3b6 add r5, r2                                    |         r5 += r2;
    0x0000e3b8 bl 0xd418                                     |         fcn_0000d418 (r0, r1);
    0x0000e3bc ldr r3, [r7, 4]                               |         r3 = *((r7 + 4));
    0x0000e3be ldr r2, [r5, 4]                               |         r2 = *((r5 + 4));
    0x0000e3c0 str.w r0, [r6, r4, lsl 3]                     |         __asm ("str.w r0, [r6, r4, lsl 3]");
    0x0000e3c4 adds r4, 1                                    |         r4++;
    0x0000e3c6 cmp r3, r4                                    |         
    0x0000e3c8 str.w r2, [sl, 4]                             |         __asm ("str.w r2, [sl, 4]");
    0x0000e3cc bgt 0xe3a4                                    |         
                                                             |     } while (r3 > r4);
                                                             |     do {
                                                             | label_3:
    0x0000e3ce mov r0, r8                                    |         r0 = r8;
    0x0000e3d0 pop.w {r4, r5, r6, r7, r8, sb, sl, pc}        |         
                                                             | label_0:
    0x0000e3d4 mov.w r8, 0                                   |         r8 = 0;
    0x0000e3d8 mov r0, r8                                    |         r0 = r8;
    0x0000e3da pop.w {r4, r5, r6, r7, r8, sb, sl, pc}        |         
                                                             | label_1:
    0x0000e3de mov r1, r8                                    |         r1 = r8;
    0x0000e3e0 mov r0, sb                                    |         r0 = sb;
    0x0000e3e2 mov r8, r6                                    |         r8 = r6;
    0x0000e3e4 bl 0xe12c                                     |         fcn_0000e12c (r0, r1);
    0x0000e3e8 b 0xe3ce                                      |         
                                                             |     } while (1);
                                                             | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0xe5fc */
                                                                     | #include <stdint.h>
                                                                     |  
                                                                     | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                     |  
    ; (fcn) fcn.0000e5fc ()                                          | void fcn_0000e5fc (int16_t arg_128h, int16_t arg_250h, int16_t arg1, uint32_t arg2, int16_t arg3, int16_t arg4) {
                                                                     |     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;
                                                                     |     r3 = arg4;
    0x0000e5fc push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0000e600 mov r8, r2                                            |     r8 = r2;
    0x0000e602 ldr r2, [pc, 0x24c]                                   |     
    0x0000e604 mov r7, r3                                            |     r7 = r3;
    0x0000e606 sub sp, 0x1c                                          |     
    0x0000e608 mov r4, r1                                            |     r4 = r1;
    0x0000e60a ldr r3, [pc, 0x248]                                   |     r3 = *(0xe856);
    0x0000e60c mov r5, r1                                            |     r5 = r1;
    0x0000e60e add r2, pc                                            |     r2 = 0x1ce64;
    0x0000e610 ldr r3, [r2, r3]                                      |     
    0x0000e612 ldr r3, [r3]                                          |     r3 = *(0x1ce64);
    0x0000e614 str r3, [sp, 0x14]                                    |     var_14h = r3;
    0x0000e616 mov.w r3, 0                                           |     r3 = 0;
    0x0000e61a cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x0000e61c beq 0xe6c0                                            |         goto label_4;
                                                                     |     }
    0x0000e61e mov sb, r0                                            |     sb = r0;
    0x0000e620 cmp r7, 0                                             |     
                                                                     |     if (r7 == 0) {
    0x0000e622 beq.w 0xe7ee                                          |         goto label_13;
                                                                     |     }
    0x0000e626 ldr r5, [r7]                                          |     r5 = *(r7);
    0x0000e628 mov.w fp, 0x8000                                      |     
                                                                     | label_8:
    0x0000e62c str r5, [sp, 0x10]                                    |     var_10h = r5;
    0x0000e62e cmp r5, 0                                             |     
                                                                     |     if (r5 == 0) {
    0x0000e630 beq 0xe6c0                                            |         goto label_4;
                                                                     |     }
    0x0000e632 ldr r2, [r4, 4]                                       |     r2 = *((r4 + 4));
    0x0000e634 and r6, r2, 0x400                                     |     r6 = r2 & 0x400;
    0x0000e638 cmp.w r8, 0                                           |     
                                                                     |     if (r8 == 0) {
    0x0000e63c beq 0xe6de                                            |         goto label_14;
                                                                     |     }
    0x0000e63e ldr r3, [r4, 0xc]                                     |     r3 = *((r4 + 0xc));
    0x0000e640 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0000e642 beq.w 0xe804                                          |         goto label_15;
                                                                     |     }
    0x0000e646 mov.w r1, 0x2000                                      |     r1 = 0x2000;
    0x0000e64a movs r3, 0x1c                                         |     r3 = 0x1c;
    0x0000e64c strd r1, r3, [sp, 4]                                  |     __asm ("strd r1, r3, [var_4h_2]");
    0x0000e650 cmp r6, 0                                             |     
                                                                     |     if (r6 == 0) {
    0x0000e652 beq 0xe724                                            |         goto label_9;
                                                                     |     }
                                                                     | label_10:
    0x0000e654 movs r6, 0                                            |     r6 = 0;
                                                                     | label_0:
    0x0000e656 ldr r2, [sp, 8]                                       |     r2 = var_8h;
    0x0000e658 mov r1, r4                                            |     r1 = r4;
    0x0000e65a mov r0, r5                                            |     r0 = r5;
    0x0000e65c blx 0x6214                                            |     fcn_00006214 ();
                                                                     |     do {
    0x0000e660 ldr r1, [r5, 4]                                       |         r1 = *((r5 + 4));
    0x0000e662 ldr r3, [sp, 4]                                       |         r3 = var_4h_2;
    0x0000e664 bic r1, r1, 0x1e000                                   |         r1 = BIT_MASK (r1, 0x1e000);
    0x0000e668 orr.w r1, r1, fp                                      |         r1 |= fp;
    0x0000e66c orrs r1, r3                                           |         r1 |= r3;
    0x0000e66e str r1, [r5, 4]                                       |         *((r5 + 4)) = r1;
    0x0000e670 cmp r6, 0                                             |         
                                                                     |         if (r6 != 0) {
    0x0000e672 bne.w 0xe7ae                                          |             goto label_16;
                                                                     |         }
                                                                     | label_5:
    0x0000e676 ldr r6, [r4, 4]                                       |         r6 = *((r4 + 4));
    0x0000e678 orr.w r2, r6, r1                                      |         r2 = r6 | r1;
    0x0000e67c lsls r2, r2, 0x11                                     |         r2 <<= 0x11;
                                                                     |         if (r2 >= r2) {
    0x0000e67e bmi 0xe696                                            |             
    0x0000e680 lsls r3, r6, 0x14                                     |             r3 = r6 << 0x14;
    0x0000e682 ldr r1, [r4, 0x14]                                    |             r1 = *((r4 + 0x14));
    0x0000e684 mov r2, r8                                            |             r2 = r8;
    0x0000e686 mov r0, sb                                            |             r0 = sb;
                                                                     |             if (r3 >= r6) {
    0x0000e688 bpl.w 0xe7e2                                          |                 goto label_17;
                                                                     |             }
    0x0000e68c bl 0xe4c4                                             |             fcn_0000e4c4 (r0, r1, r2);
    0x0000e690 ldr r1, [r5, 4]                                       |             r1 = *((r5 + 4));
    0x0000e692 ldr r6, [r4, 4]                                       |             r6 = *((r4 + 4));
    0x0000e694 str r0, [r5, 0x14]                                    |             *((r5 + 0x14)) = r0;
                                                                     |         }
                                                                     | label_7:
    0x0000e696 tst.w r1, 0x6000                                      |         
                                                                     |         if ((r1 & fcn.00006000) != 0) {
    0x0000e69a bne 0xe762                                            |             goto label_18;
                                                                     |         }
    0x0000e69c ands r6, r6, 0x4000                                   |         r6 &= 0x4000;
                                                                     |         if (r6 == r6) {
    0x0000e6a0 bne 0xe6c0                                            |             
    0x0000e6a2 ldr r1, [r4, 0xc]                                     |             r1 = *((r4 + 0xc));
    0x0000e6a4 mov r3, r6                                            |             r3 = r6;
    0x0000e6a6 mov r2, r6                                            |             r2 = r6;
    0x0000e6a8 mov r0, sb                                            |             r0 = sb;
    0x0000e6aa bl 0xe5fc                                             |             r0 = fcn_0000e5fc (r0, r1, r2, r3, r4, r5);
    0x0000e6ae mov r3, r0                                            |             r3 = r0;
    0x0000e6b0 ldr r1, [r4, 0x10]                                    |             r1 = *((r4 + 0x10));
    0x0000e6b2 mov r0, sb                                            |             r0 = sb;
    0x0000e6b4 str r3, [r5, 0xc]                                     |             *((r5 + 0xc)) = r3;
    0x0000e6b6 mov r2, r6                                            |             r2 = r6;
    0x0000e6b8 mov r3, r6                                            |             r3 = r6;
    0x0000e6ba bl 0xe5fc                                             |             fcn_0000e5fc (r0, r1, r2, r3, r4, r5);
    0x0000e6be str r0, [r5, 0x10]                                    |             *((r5 + 0x10)) = r0;
                                                                     |         }
                                                                     | label_4:
    0x0000e6c0 ldr r2, [pc, 0x194]                                   |         
    0x0000e6c2 ldr r3, [pc, 0x190]                                   |         r3 = *(0xe856);
    0x0000e6c4 add r2, pc                                            |         r2 = 0x1cf20;
    0x0000e6c6 ldr r3, [r2, r3]                                      |         r3 = *(0x1cf20);
    0x0000e6c8 ldr r2, [r3]                                          |         r2 = *(0x1cf20);
    0x0000e6ca ldr r3, [sp, 0x14]                                    |         r3 = var_14h;
    0x0000e6cc eors r2, r3                                           |         r2 ^= r3;
    0x0000e6ce mov.w r3, 0                                           |         r3 = 0;
                                                                     |         if (r2 != r3) {
    0x0000e6d2 bne.w 0xe84a                                          |             goto label_19;
                                                                     |         }
    0x0000e6d6 mov r0, r5                                            |         r0 = r5;
    0x0000e6d8 add sp, 0x1c                                          |         
    0x0000e6da pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |         
                                                                     | label_14:
    0x0000e6de cmp r6, 0                                             |         
                                                                     |         if (r6 != 0) {
    0x0000e6e0 bne 0xe756                                            |             goto label_20;
                                                                     |         }
    0x0000e6e2 ldr r1, [r4, 8]                                       |         r1 = *((r4 + 8));
    0x0000e6e4 cmp r1, 0                                             |         
                                                                     |         if (r1 != 0) {
    0x0000e6e6 bne.w 0xe822                                          |             goto label_21;
                                                                     |         }
    0x0000e6ea mov r6, r8                                            |         r6 = r8;
    0x0000e6ec movs r3, 0x30                                         |         r3 = 0x30;
    0x0000e6ee str.w r8, [sp, 4]                                     |         __asm ("str.w r8, [var_4h_2]");
    0x0000e6f2 str r3, [sp, 8]                                       |         var_8h = r3;
                                                                     | label_3:
    0x0000e6f4 lsls r1, r2, 0x11                                     |         r1 = r2 << 0x11;
                                                                     |         if (r1 < r2) {
    0x0000e6f6 bmi 0xe74e                                            |             goto label_22;
                                                                     |         }
                                                                     | label_1:
    0x0000e6f8 ands sl, r2, 0x2000                                   |         sl = r2 & 0x2000;
    0x0000e6fc itt ne                                                |         
                                                                     |         if (sl == r2) {
    0x0000e6fe movne sl, 0x14                                        |             sl = 0x14;
                                                                     |         }
                                                                     |         if (sl != r2) {
    0x0000e702 movs r3, 0x1c                                         |             r3 = 0x1c;
                                                                     |         }
                                                                     |         if (r3 == 0x1c) {
    0x0000e704 bne 0xe708                                            |             
    0x0000e706 movs r3, 0x30                                         |             r3 = 0x30;
                                                                     |         }
                                                                     | label_2:
    0x0000e708 mov r2, r3                                            |         r2 = r3;
    0x0000e70a mov r1, r4                                            |         r1 = r4;
    0x0000e70c mov r0, r5                                            |         r0 = r5;
    0x0000e70e str r3, [sp, 0xc]                                     |         var_ch = r3;
    0x0000e710 blx 0x6214                                            |         r0 = fcn_00006214 ();
    0x0000e714 ldrd r3, r0, [sp, 0xc]                                |         __asm ("ldrd r3, r0, [var_10h]");
    0x0000e718 mov r2, sl                                            |         r2 = sl;
    0x0000e71a movs r1, 0                                            |         r1 = 0;
    0x0000e71c add r0, r3                                            |         r0 += r3;
    0x0000e71e blx 0x5fcc                                            |         fcn_00005fcc ();
    0x0000e722 b 0xe660                                              |         
                                                                     |     } while (1);
                                                                     | label_9:
    0x0000e724 ldr r1, [r4, 8]                                       |     r1 = *((r4 + 8));
    0x0000e726 cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x0000e728 beq 0xe656                                            |         goto label_0;
                                                                     |     }
    0x0000e72a ldrb r3, [r1]                                         |     r3 = *(r1);
    0x0000e72c mov r6, r8                                            |     r6 = r8;
    0x0000e72e cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0000e730 beq 0xe656                                            |         goto label_0;
                                                                     |     }
                                                                     | label_11:
    0x0000e732 mov r6, r1                                            |     r6 = r1;
                                                                     |     do {
    0x0000e734 ldrb r3, [r6, 1]!                                     |         r3 = *((r6 += 1));
    0x0000e738 cmp r3, 0                                             |         
    0x0000e73a bne 0xe734                                            |         
                                                                     |     } while (r3 != 0);
    0x0000e73c subs r6, r6, r1                                       |     r6 -= r1;
    0x0000e73e bic r6, r6, 0xc0000000                                |     r6 = BIT_MASK (r6, 0xc0000000);
    0x0000e742 adds r6, 1                                            |     r6++;
    0x0000e744 cmp.w r8, 0                                           |     
                                                                     |     if (r8 != 0) {
    0x0000e748 bne 0xe656                                            |         goto label_0;
                                                                     |     }
    0x0000e74a lsls r1, r2, 0x11                                     |     r1 = r2 << 0x11;
                                                                     |     if (r1 >= r2) {
    0x0000e74c bpl 0xe6f8                                            |         goto label_1;
                                                                     |     }
                                                                     | label_22:
    0x0000e74e mov.w sl, 0x24                                        |     sl = 0x24;
    0x0000e752 movs r3, 0xc                                          |     r3 = 0xc;
    0x0000e754 b 0xe708                                              |     goto label_2;
                                                                     | label_20:
    0x0000e756 movs r3, 0x30                                         |     r3 = 0x30;
    0x0000e758 mov r6, r8                                            |     r6 = r8;
    0x0000e75a str.w r8, [sp, 4]                                     |     __asm ("str.w r8, [var_4h_2]");
    0x0000e75e str r3, [sp, 8]                                       |     var_8h = r3;
    0x0000e760 b 0xe6f4                                              |     goto label_3;
                                                                     | label_18:
    0x0000e762 movs r2, 0x30                                         |     r2 = 0x30;
    0x0000e764 cmp.w r8, 0                                           |     
                                                                     |     if (r8 != 0) {
    0x0000e768 beq 0xe772                                            |         
    0x0000e76a ldr r2, [r4, 0xc]                                     |         r2 = *((r4 + 0xc));
    0x0000e76c cmp r2, 0                                             |         
                                                                     |         if (r2 == 0) {
    0x0000e76e beq 0xe83e                                            |             goto label_23;
                                                                     |         }
    0x0000e770 movs r2, 0x1c                                         |         r2 = 0x1c;
                                                                     |     }
    0x0000e772 lsls r6, r6, 0x15                                     |     r6 <<= 0x15;
                                                                     |     if (r6 < r6) {
    0x0000e774 bmi 0xe794                                            |         goto label_12;
                                                                     |     }
    0x0000e776 ldr r6, [r4, 8]                                       |     r6 = *((r4 + 8));
                                                                     |     if (r6 == 0) {
    0x0000e778 cbz r6, 0xe794                                        |         goto label_12;
                                                                     |     }
    0x0000e77a ldrb r3, [r6]                                         |     r3 = *(r6);
    0x0000e77c cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0000e77e beq 0xe838                                            |         goto label_24;
                                                                     |     }
    0x0000e780 mov r3, r6                                            |     r3 = r6;
                                                                     |     do {
    0x0000e782 ldrb r0, [r3, 1]!                                     |         r0 = *((r3 += 1));
    0x0000e786 cmp r0, 0                                             |         
    0x0000e788 bne 0xe782                                            |         
                                                                     |     } while (r0 != 0);
    0x0000e78a subs r3, r3, r6                                       |     r3 -= r6;
    0x0000e78c bic r3, r3, 0xc0000000                                |     r3 = BIT_MASK (r3, 0xc0000000);
    0x0000e790 adds r3, 1                                            |     r3++;
    0x0000e792 add r2, r3                                            |     r2 += r3;
                                                                     | label_12:
    0x0000e794 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x0000e796 adds r2, 7                                            |     r2 += 7;
    0x0000e798 bic r2, r2, 7                                         |     r2 = BIT_MASK (r2, 7);
    0x0000e79c lsls r0, r1, 0x12                                     |     r0 = r1 << 0x12;
    0x0000e79e add r3, r2                                            |     r3 += r2;
    0x0000e7a0 str r3, [sp, 0x10]                                    |     var_10h = r3;
                                                                     |     if (r0 < r1) {
    0x0000e7a2 bmi 0xe7c2                                            |         goto label_25;
                                                                     |     }
                                                                     | label_6:
    0x0000e7a4 cmp r7, 0                                             |     
                                                                     |     if (r7 == 0) {
    0x0000e7a6 beq 0xe6c0                                            |         goto label_4;
                                                                     |     }
    0x0000e7a8 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x0000e7aa str r3, [r7]                                          |     *(r7) = r3;
    0x0000e7ac b 0xe6c0                                              |     goto label_4;
                                                                     | label_16:
    0x0000e7ae ldr r0, [sp, 0x10]                                    |     r0 = var_10h;
    0x0000e7b0 mov r2, r6                                            |     r2 = r6;
    0x0000e7b2 ldr r3, [sp, 8]                                       |     r3 = var_8h;
    0x0000e7b4 add r0, r3                                            |     r0 += r3;
    0x0000e7b6 str r0, [r5, 8]                                       |     *((r5 + 8)) = r0;
    0x0000e7b8 ldr r1, [r4, 8]                                       |     r1 = *((r4 + 8));
    0x0000e7ba blx 0x6214                                            |     fcn_00006214 ();
    0x0000e7be ldr r1, [r5, 4]                                       |     r1 = *((r5 + 4));
    0x0000e7c0 b 0xe676                                              |     goto label_5;
                                                                     | label_25:
    0x0000e7c2 add r6, sp, 0x10                                      |     r6 += var_10h;
    0x0000e7c4 ldr r1, [r4, 0xc]                                     |     r1 = *((r4 + 0xc));
    0x0000e7c6 mov r3, r6                                            |     r3 = r6;
    0x0000e7c8 movs r2, 1                                            |     r2 = 1;
    0x0000e7ca mov r0, sb                                            |     r0 = sb;
    0x0000e7cc bl 0xe5fc                                             |     fcn_0000e5fc (r0, r1, r2, r3, r4, r5);
    0x0000e7d0 ldr r1, [r4, 0x10]                                    |     r1 = *((r4 + 0x10));
    0x0000e7d2 mov r3, r6                                            |     r3 = r6;
    0x0000e7d4 str r0, [r5, 0xc]                                     |     *((r5 + 0xc)) = r0;
    0x0000e7d6 movs r2, 1                                            |     r2 = 1;
    0x0000e7d8 mov r0, sb                                            |     r0 = sb;
    0x0000e7da bl 0xe5fc                                             |     fcn_0000e5fc (r0, r1, r2, r3, r4, r5);
    0x0000e7de str r0, [r5, 0x10]                                    |     *((r5 + 0x10)) = r0;
    0x0000e7e0 b 0xe7a4                                              |     goto label_6;
                                                                     | label_17:
    0x0000e7e2 bl 0xe3ec                                             |     fcn_0000e3ec (r0, r1, r2);
    0x0000e7e6 ldr r1, [r5, 4]                                       |     r1 = *((r5 + 4));
    0x0000e7e8 ldr r6, [r4, 4]                                       |     r6 = *((r4 + 4));
    0x0000e7ea str r0, [r5, 0x14]                                    |     *((r5 + 0x14)) = r0;
    0x0000e7ec b 0xe696                                              |     goto label_7;
                                                                     | label_13:
    0x0000e7ee mov r1, r8                                            |     r1 = r8;
    0x0000e7f0 mov r0, r4                                            |     r0 = r4;
    0x0000e7f2 bl 0xc0e4                                             |     r0 = fcn_0000c0e4 (r0, r1);
    0x0000e7f6 mov r1, r0                                            |     r1 = r0;
    0x0000e7f8 mov r0, sb                                            |     r0 = sb;
    0x0000e7fa bl 0xd3a0                                             |     fcn_0000d3a0 (r0, r1);
    0x0000e7fe mov fp, r7                                            |     
    0x0000e800 mov r5, r0                                            |     r5 = r0;
    0x0000e802 b 0xe62c                                              |     goto label_8;
                                                                     | label_15:
    0x0000e804 ldr r3, [r4, 0x14]                                    |     r3 = *((r4 + 0x14));
    0x0000e806 cmp r3, 0                                             |     
    0x0000e808 ite ne                                                |     
                                                                     |     if (r3 == 0) {
    0x0000e80a movne r3, 0x2000                                      |         r3 = 0x2000;
                                                                     |     }
                                                                     |     if (r3 == 0) {
    0x0000e80e mov.w r3, 0x4000                                      |         r3 = 0x4000;
                                                                     |     }
    0x0000e812 str r3, [sp, 4]                                       |     var_4h_2 = r3;
    0x0000e814 ite ne                                                |     
                                                                     |     if (r3 == 0) {
    0x0000e816 movne r3, 0x1c                                        |         r3 = 0x1c;
                                                                     |     }
                                                                     |     if (r3 != 0) {
    0x0000e818 moveq r3, 0xc                                         |         r3 = 0xc;
                                                                     |     }
    0x0000e81a str r3, [sp, 8]                                       |     var_8h = r3;
    0x0000e81c cmp r6, 0                                             |     
                                                                     |     if (r6 == 0) {
    0x0000e81e beq 0xe724                                            |         goto label_9;
                                                                     |     }
    0x0000e820 b 0xe654                                              |     goto label_10;
                                                                     | label_21:
    0x0000e822 ldrb r3, [r1]                                         |     r3 = *(r1);
    0x0000e824 str.w r8, [sp, 4]                                     |     __asm ("str.w r8, [var_4h_2]");
                                                                     |     if (r3 != 0) {
    0x0000e828 cbz r3, 0xe830                                        |         
    0x0000e82a movs r3, 0x30                                         |         r3 = 0x30;
    0x0000e82c str r3, [sp, 8]                                       |         var_8h = r3;
    0x0000e82e b 0xe732                                              |         goto label_11;
                                                                     |     }
    0x0000e830 movs r3, 0x30                                         |     r3 = 0x30;
    0x0000e832 movs r6, 1                                            |     r6 = 1;
    0x0000e834 str r3, [sp, 8]                                       |     var_8h = r3;
    0x0000e836 b 0xe6f4                                              |     goto label_3;
                                                                     | label_24:
    0x0000e838 movs r3, 1                                            |     r3 = 1;
    0x0000e83a add r2, r3                                            |     r2 += r3;
    0x0000e83c b 0xe794                                              |     goto label_12;
                                                                     | label_23:
    0x0000e83e ldr r2, [r4, 0x14]                                    |     r2 = *((r4 + 0x14));
    0x0000e840 cmp r2, 0                                             |     
    0x0000e842 ite ne                                                |     
                                                                     |     if (r2 == 0) {
    0x0000e844 movne r2, 0x1c                                        |         r2 = 0x1c;
                                                                     |     }
                                                                     |     if (r2 == 0) {
    0x0000e846 invalid                                               |         
                                                                     |     }
                                                                     | label_19:
    0x0000e84a blx 0x6498                                            |     fcn_00006498 ();
    0x0000e84e nop                                                   |     
    0x0000e850 str r6, [sp, 0x128]                                   |     *(arg_128h) = r6;
    0x0000e852 movs r6, r0                                           |     r6 = r0;
    0x0000e854 lsls r0, r1, 0xe                                      |     r0 = r1 << 0xe;
    0x0000e856 movs r0, r0                                           |     
    0x0000e858 str r5, [sp, 0x250]                                   |     *(arg_250h) = r5;
    0x0000e85a movs r6, r0                                           |     r6 = r0;
                                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0xe85c */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.0000e85c ()                                      | void fcn_0000e85c (int16_t arg_5h, int16_t arg1, uint32_t arg2, int16_t arg3) {
                                                                 |     int16_t var_4h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
    0x0000e85c svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x0000e860 sub sp, 0xc                                       |     
    0x0000e862 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0000e864 beq.w 0xe9a6                                      |         goto label_0;
                                                                 |     }
    0x0000e868 mov sb, r1                                        |     sb = r1;
    0x0000e86a mov r7, r0                                        |     r7 = r0;
    0x0000e86c ldr r3, [r1]                                      |     r3 = *(r1);
    0x0000e86e mov sl, r2                                        |     sl = r2;
    0x0000e870 cmp r3, 0                                         |     
    0x0000e872 itett gt                                          |     
                                                                 |     if (r3 <= 0) {
    0x0000e874 addgt r3, r3, -1                                  |         r3 += -1;
                                                                 |     }
                                                                 |     if (r3 <= 0) {
    0x0000e878 movgt r1, 0x50                                    |         r1 = 0x50;
                                                                 |     }
                                                                 |     if (r3 <= 0) {
    0x0000e87a addgt r3, r3, r3, lsl 3                           |         r3 += (r3 << 3);
                                                                 |     }
                                                                 |     if (r3 > 0) {
    0x0000e87e lsls r1, r3, 3                                    |         r1 = r3 << 3;
                                                                 |     }
    0x0000e880 it gt                                             |     
                                                                 |     if (r1 <= r3) {
    0x0000e882 addgt r1, 0x50                                    |         r1 += 0x50;
                                                                 |     }
    0x0000e884 bl 0xd3a0                                         |     r0 = fcn_0000d3a0 (r0, r1);
    0x0000e888 mov r4, r0                                        |     r4 = r0;
    0x0000e88a str r0, [sp, 4]                                   |     var_4h = r0;
    0x0000e88c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0000e88e beq.w 0xe9a6                                      |         goto label_0;
                                                                 |     }
    0x0000e892 ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x0000e896 strd r3, r3, [r0]                                 |     __asm ("strd r3, r3, [r0]");
    0x0000e89a ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x0000e89e cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x0000e8a0 ble 0xe99e                                        |         goto label_1;
                                                                 |     }
    0x0000e8a2 mov r5, sb                                        |     r5 = sb;
    0x0000e8a4 mov.w r8, 0                                       |     r8 = 0;
                                                                 |     do {
    0x0000e8a8 ldr r3, [r5, 8]                                   |         r3 = *((r5 + 8));
    0x0000e8aa mov r0, r7                                        |         r0 = r7;
    0x0000e8ac add.w r6, r8, r8, lsl 3                           |         r6 = r8 + (r8 << 3);
    0x0000e8b0 add.w r8, r8, 1                                   |         r8++;
    0x0000e8b4 str r3, [r4, 8]                                   |         *((r4 + 8)) = r3;
    0x0000e8b6 lsls r6, r6, 3                                    |         r6 <<= 3;
    0x0000e8b8 ldr r1, [r5, 0xc]                                 |         r1 = *((r5 + 0xc));
    0x0000e8ba bl 0xd418                                         |         fcn_0000d418 (r0, r1);
    0x0000e8be str r0, [r4, 0xc]                                 |         *((r4 + 0xc)) = r0;
    0x0000e8c0 mov r0, r7                                        |         r0 = r7;
    0x0000e8c2 ldr r1, [r5, 0x10]                                |         r1 = *((r5 + 0x10));
    0x0000e8c4 bl 0xd418                                         |         fcn_0000d418 (r0, r1);
    0x0000e8c8 str r0, [r4, 0x10]                                |         *((r4 + 0x10)) = r0;
    0x0000e8ca mov r0, r7                                        |         r0 = r7;
    0x0000e8cc ldr r1, [r5, 0x14]                                |         r1 = *((r5 + 0x14));
    0x0000e8ce bl 0xd418                                         |         fcn_0000d418 (r0, r1);
    0x0000e8d2 str r0, [r4, 0x14]                                |         *((r4 + 0x14)) = r0;
    0x0000e8d4 add.w r1, sb, r6                                  |         r1 = sb + r6;
    0x0000e8d8 ldrb.w r3, [r5, 0x2c]                             |         r3 = *((r5 + 0x2c));
    0x0000e8dc add.w fp, r1, 0x28                                |         
    0x0000e8e0 mov r0, r7                                        |         r0 = r7;
    0x0000e8e2 strb.w r3, [r4, 0x2c]                             |         *((r4 + 0x2c)) = r3;
    0x0000e8e6 ldr r3, [r5, 0x30]                                |         r3 = *((r5 + 0x30));
    0x0000e8e8 str r3, [r4, 0x30]                                |         *((r4 + 0x30)) = r3;
    0x0000e8ea ldr r2, [r5, 0x20]                                |         r2 = *((r5 + 0x20));
    0x0000e8ec ldr r3, [sp, 4]                                   |         r3 = var_4h;
    0x0000e8ee str r2, [r4, 0x20]                                |         *((r4 + 0x20)) = r2;
    0x0000e8f0 ldr r2, [r5, 0x24]                                |         r2 = *((r5 + 0x24));
    0x0000e8f2 add r6, r3                                        |         r6 += r3;
    0x0000e8f4 str r2, [r4, 0x24]                                |         *((r4 + 0x24)) = r2;
    0x0000e8f6 ldrb.w r2, [r1, 0x2d]                             |         r2 = *((r1 + 0x2d));
    0x0000e8fa ldrb.w ip, [r6, 0x2d]                             |         ip = *((r6 + 0x2d));
    0x0000e8fe ubfx r2, r2, 1, 1                                 |         r2 = (r2 >> 1) & ((1 << 1) - 1);
    0x0000e902 bfi ip, r2, 1, 1                                  |         value_0 = BIT_MASK (1, 1);
                                                                 |         value_1 = r2 & value_0;
                                                                 |         value_0 = ~value_0;
                                                                 |         ip &= value_0;
                                                                 |         ip |= value_1;
    0x0000e906 strb.w ip, [r6, 0x2d]                             |         *((r6 + 0x2d)) = ip;
    0x0000e90a uxtb.w ip, ip                                     |         ip = (int8_t) ip;
    0x0000e90e ldrb.w r2, [r1, 0x2d]                             |         r2 = *((r1 + 0x2d));
    0x0000e912 ubfx r2, r2, 2, 1                                 |         r2 = (r2 >> 2) & ((1 << 1) - 1);
    0x0000e916 bfi ip, r2, 2, 1                                  |         value_2 = BIT_MASK (2, 1);
                                                                 |         value_3 = r2 & value_2;
                                                                 |         value_2 = ~value_2;
                                                                 |         ip &= value_2;
                                                                 |         ip |= value_3;
    0x0000e91a strb.w ip, [r6, 0x2d]                             |         *((r6 + 0x2d)) = ip;
    0x0000e91e ldrb.w r2, [r1, 0x2d]                             |         r2 = *((r1 + 0x2d));
    0x0000e922 uxtb.w r1, ip                                     |         r1 = (int8_t) ip;
    0x0000e926 ubfx r2, r2, 3, 1                                 |         r2 = (r2 >> 3) & ((1 << 1) - 1);
    0x0000e92a bfi r1, r2, 3, 1                                  |         value_4 = BIT_MASK (3, 1);
                                                                 |         value_5 = r2 & value_4;
                                                                 |         value_4 = ~value_4;
                                                                 |         r1 &= value_4;
                                                                 |         r1 |= value_5;
    0x0000e92e strb.w r1, [r6, 0x2d]                             |         *((r6 + 0x2d)) = r1;
    0x0000e932 ldr r1, [r5, 0x48]                                |         r1 = *((r5 + 0x48));
    0x0000e934 bl 0xd418                                         |         r0 = fcn_0000d418 (r0, r1);
    0x0000e938 mov r1, r0                                        |         r1 = r0;
    0x0000e93a mov r2, sl                                        |         r2 = sl;
    0x0000e93c str r1, [r4, 0x48]                                |         *((r4 + 0x48)) = r1;
    0x0000e93e mov r0, r7                                        |         r0 = r7;
    0x0000e940 ldrb.w r1, [fp, 5]                                |         r1 = *(arg_5h);
    0x0000e944 ldrb.w r3, [r6, 0x2d]                             |         r3 = *((r6 + 0x2d));
    0x0000e948 bfi r3, r1, 0, 1                                  |         value_6 = BIT_MASK (0, 1);
                                                                 |         value_7 = r1 & value_6;
                                                                 |         value_6 = ~value_6;
                                                                 |         r3 &= value_6;
                                                                 |         r3 |= value_7;
    0x0000e94c strb.w r3, [r6, 0x2d]                             |         *((r6 + 0x2d)) = r3;
    0x0000e950 ldr r3, [r5, 0x4c]                                |         r3 = *((r5 + 0x4c));
    0x0000e952 str r3, [r4, 0x4c]                                |         *((r4 + 0x4c)) = r3;
    0x0000e954 ldr r3, [r5, 0x18]                                |         r3 = *((r5 + 0x18));
    0x0000e956 str r3, [r4, 0x18]                                |         *((r4 + 0x18)) = r3;
                                                                 |         if (r3 != 0) {
    0x0000e958 cbz r3, 0xe960                                    |             
    0x0000e95a ldrh r1, [r3, 0x28]                               |             r1 = *((r3 + 0x28));
    0x0000e95c adds r1, 1                                        |             r1++;
    0x0000e95e strh r1, [r3, 0x28]                               |             *((r3 + 0x28)) = r1;
                                                                 |         }
    0x0000e960 ldr r1, [r5, 0x1c]                                |         r1 = *((r5 + 0x1c));
    0x0000e962 adds r4, 0x48                                     |         r4 += 0x48;
    0x0000e964 bl 0xe4c4                                         |         fcn_0000e4c4 (r0, r1, r2);
    0x0000e968 adds r5, 0x48                                     |         r5 += 0x48;
    0x0000e96a movs r3, 0                                        |         r3 = 0;
    0x0000e96c mov r2, sl                                        |         r2 = sl;
    0x0000e96e str r0, [r4, -0x2c]                               |         *((r4 - 0x2c)) = r0;
    0x0000e972 ldr r1, [r5, -0x14]                               |         r1 = *((r5 - 0x14));
    0x0000e976 mov r0, r7                                        |         r0 = r7;
    0x0000e978 bl 0xe5fc                                         |         fcn_0000e5fc (r0, r1, r2, r3, r4, r5);
    0x0000e97c str r0, [r4, -0x14]                               |         *((r4 - 0x14)) = r0;
    0x0000e980 mov r0, r7                                        |         r0 = r7;
    0x0000e982 ldr r1, [r5, -0x10]                               |         r1 = *((r5 - 0x10));
    0x0000e986 bl 0xe370                                         |         fcn_0000e370 (r0, r1);
    0x0000e98a str r0, [r4, -0x10]                               |         *((r4 - 0x10)) = r0;
    0x0000e98e ldrd r2, r3, [r5, -0x8]                           |         __asm ("ldrd r2, r3, [r5, -0x8]");
    0x0000e992 strd r2, r3, [r4, -0x8]                           |         __asm ("strd r2, r3, [r4, -0x8]");
    0x0000e996 ldr.w r3, [sb]                                    |         r3 = *(sb);
    0x0000e99a cmp r3, r8                                        |         
    0x0000e99c bgt 0xe8a8                                        |         
                                                                 |     } while (r3 > r8);
                                                                 | label_1:
    0x0000e99e ldr r0, [sp, 4]                                   |     r0 = var_4h;
    0x0000e9a0 add sp, 0xc                                       |     
    0x0000e9a2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_0:
    0x0000e9a6 movs r3, 0                                        |     r3 = 0;
    0x0000e9a8 str r3, [sp, 4]                                   |     var_4h = r3;
    0x0000e9aa ldr r0, [sp, 4]                                   |     r0 = var_4h;
    0x0000e9ac add sp, 0xc                                       |     
    0x0000e9ae 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-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0xec60 */
                                                                     | #include <stdint.h>
                                                                     |  
                                                                     | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                     |  
    ; (fcn) fcn.0000ec60 ()                                          | void fcn_0000ec60 (int16_t arg_14h, int16_t arg_15h, int16_t arg_1bch, int16_t arg_1c2h, int16_t arg_1d8h, 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_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;
    0x0000ec60 ldr.w r3, [r1, 0x1b8]                                 |     r3 = *((r1 + 0x1b8));
    0x0000ec64 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0000ec68 sub sp, 0x34                                          |     
    0x0000ec6a ldr r2, [pc, 0x26c]                                   |     
    0x0000ec6c mov fp, r1                                            |     
    0x0000ec6e mov r4, r0                                            |     r4 = r0;
    0x0000ec70 str r3, [sp, 0x1c]                                    |     var_1ch = r3;
    0x0000ec72 ldr r3, [pc, 0x268]                                   |     r3 = *(0xeede);
    0x0000ec74 add r2, pc                                            |     
    0x0000ec76 ldr r6, [r0, 4]                                       |     r6 = *((r0 + 4));
    0x0000ec78 ldr r7, [r0]                                          |     r7 = *(r0);
    0x0000ec7a ldr r3, [r2, r3]                                      |     
    0x0000ec7c ldr r2, [r0, 0x20]                                    |     r2 = *((r0 + 0x20));
    0x0000ec7e ldr r3, [r3]                                          |     r3 = *(0x1db52);
    0x0000ec80 str r3, [sp, 0x2c]                                    |     var_2ch = r3;
    0x0000ec82 mov.w r3, 0                                           |     r3 = 0;
    0x0000ec86 ldr r3, [r1, 0x50]                                    |     r3 = *((r1 + 0x50));
    0x0000ec88 add.w r2, r2, r2, lsl 2                               |     
    0x0000ec8c cmp r3, 0                                             |     
    0x0000ec8e lsl.w r8, r2, 2                                       |     r8 = r2 << 2;
    0x0000ec92 ldr r2, [r1, 0x54]                                    |     r2 = *((r1 + 0x54));
    0x0000ec94 it eq                                                 |     
                                                                     |     if (r3 != 0) {
    0x0000ec96 moveq r3, 1                                           |         r3 = 1;
                                                                     |     }
    0x0000ec98 str r3, [sp, 0x14]                                    |     var_14h = r3;
    0x0000ec9a add.w r5, r6, r8                                      |     r5 = r6 + r8;
    0x0000ec9e add.w r2, r2, r2, lsl 2                               |     r2 = 0x1db52;
    0x0000eca2 lsl.w sb, r2, 2                                       |     sb = r2 << 2;
    0x0000eca6 ldrd r2, r3, [r1, 0x44]                               |     __asm ("ldrd r2, r3, [r1, 0x44]");
    0x0000ecaa add r6, sb                                            |     r6 += sb;
    0x0000ecac add r3, r2                                            |     r3 += r2;
    0x0000ecae str r2, [sp, 0x18]                                    |     var_18h = r2;
    0x0000ecb0 str r3, [sp, 0x10]                                    |     var_10h = r3;
    0x0000ecb2 ldr.w r3, [r1, 0x188]                                 |     r3 = *((r1 + 0x188));
    0x0000ecb6 add r1, sp, 0x28                                      |     r1 += var_28h;
    0x0000ecb8 str r3, [sp, 0x28]                                    |     var_28h = r3;
    0x0000ecba bl 0xeb0c                                             |     fcn_0000eb0c (r0, r1);
    0x0000ecbe ldrb.w r3, [fp, 0x14]                                 |     r3 = *(arg_14h);
                                                                     |     if (r3 != 0) {
    0x0000ecc2 cbz r3, 0xecce                                        |         
    0x0000ecc4 ldrb.w r3, [fp, 0x15]                                 |         r3 = *(arg_15h);
    0x0000ecc8 subs r3, 0                                            |         
    0x0000ecca it ne                                                 |         
                                                                     |         if (r3 != 0) {
    0x0000eccc movne r3, 1                                           |             r3 = 1;
                                                                     |             goto label_4;
                                                                     |         }
                                                                     |     }
                                                                     | label_4:
    0x0000ecce ldrb.w r2, [r4, 0x58]                                 |     r2 = *((r4 + 0x58));
    0x0000ecd2 bfi r2, r3, 7, 1                                      |     value_0 = BIT_MASK (7, 1);
                                                                     |     value_1 = r3 & value_0;
                                                                     |     value_0 = ~value_0;
                                                                     |     r2 &= value_0;
                                                                     |     r2 |= value_1;
    0x0000ecd6 strb.w r2, [r4, 0x58]                                 |     *((r4 + 0x58)) = r2;
    0x0000ecda ldrb.w r3, [fp, 0x1c2]                                |     r3 = *(arg_1c2h);
                                                                     |     if (r3 != 0) {
    0x0000ecde cbz r3, 0xecea                                        |         
    0x0000ece0 ldr r3, [sp, 0x10]                                    |         r3 = var_10h;
    0x0000ece2 cmp r3, 0xa                                           |         
    0x0000ece4 it lt                                                 |         
                                                                     |         if (r3 >= 0xa) {
    0x0000ece6 movlt r3, 0xa                                         |             r3 = 0xa;
                                                                     |         }
    0x0000ece8 str r3, [sp, 0x10]                                    |         var_10h = r3;
                                                                     |     }
    0x0000ecea sub.w r2, sb, r8                                      |     r2 = sb - r8;
    0x0000ecee movs r1, 0                                            |     r1 = 0;
    0x0000ecf0 mov r0, r5                                            |     r0 = r5;
    0x0000ecf2 blx 0x5fcc                                            |     fcn_00005fcc ();
    0x0000ecf6 ldr r2, [sp, 0x10]                                    |     r2 = var_10h;
    0x0000ecf8 ldr r3, [sp, 0x28]                                    |     r3 = var_28h;
    0x0000ecfa ldr r1, [sp, 0x1c]                                    |     r1 = var_1ch;
    0x0000ecfc str r7, [sp]                                          |     *(sp) = r7;
    0x0000ecfe add.w r2, r2, r2, lsl 2                               |     r2 += (r2 << 2);
    0x0000ed02 lsl.w r8, r3, 2                                       |     r8 = r3 << 2;
    0x0000ed06 lsls r0, r2, 3                                        |     r0 = r2 << 3;
    0x0000ed08 ldr r2, [sp, 0x18]                                    |     r2 = var_18h;
    0x0000ed0a lsls r3, r1, 2                                        |     r3 = r1 << 2;
    0x0000ed0c add.w r8, r8, 7                                       |     r8 += 7;
    0x0000ed10 bic r8, r8, 7                                         |     r8 = BIT_MASK (r8, 7);
    0x0000ed14 str r0, [sp, 0x20]                                    |     var_20h = r0;
    0x0000ed16 mov sl, r0                                            |     sl = r0;
    0x0000ed18 lsls r2, r2, 2                                        |     r2 <<= 2;
    0x0000ed1a adds r2, 7                                            |     r2 += 7;
    0x0000ed1c bic r2, r2, 7                                         |     r2 = BIT_MASK (r2, 7);
    0x0000ed20 str r2, [sp, 8]                                       |     var_8h = r2;
    0x0000ed22 adds r2, r3, r1                                       |     r2 = r3 + r1;
    0x0000ed24 adds r3, 7                                            |     r3 += 7;
    0x0000ed26 lsls r2, r2, 3                                        |     r2 <<= 3;
    0x0000ed28 bic r3, r3, 7                                         |     r3 = BIT_MASK (r3, 7);
    0x0000ed2c str r3, [sp, 4]                                       |     var_4h = r3;
    0x0000ed2e mov sb, r2                                            |     sb = r2;
    0x0000ed30 ldrb.w r3, [r4, 0x58]                                 |     r3 = *((r4 + 0x58));
    0x0000ed34 str r2, [sp, 0x24]                                    |     var_24h = r2;
    0x0000ed36 mov r2, r6                                            |     r2 = r6;
    0x0000ed38 bfc r3, 5, 1                                          |     value_2 = BIT_MASK (1, );
                                                                     |     value_2 = ~value_2;
                                                                     |     r3 &= value_2;
    0x0000ed3c strb.w r3, [r4, 0x58]                                 |     *((r4 + 0x58)) = r3;
    0x0000ed40 and r3, r5, 7                                         |     r3 = r5 & 7;
    0x0000ed44 add r5, r3                                            |     r5 += r3;
    0x0000ed46 ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0000ed48 adds r3, 7                                            |     r3 += 7;
    0x0000ed4a str r3, [sp, 0xc]                                     |     var_ch = r3;
                                                                     | label_2:
    0x0000ed4c ldr r3, [r4, 8]                                       |     r3 = *((r4 + 8));
    0x0000ed4e cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0000ed50 beq.w 0xee90                                          |         goto label_5;
                                                                     |     }
                                                                     | label_1:
    0x0000ed54 movs r6, 0                                            |     r6 = 0;
                                                                     | label_0:
    0x0000ed56 str r3, [r4, 8]                                       |     *((r4 + 8)) = r3;
    0x0000ed58 ldr r3, [r4, 0x3c]                                    |     r3 = *((r4 + 0x3c));
                                                                     |     if (r3 == 0) {
    0x0000ed5a cbnz r3, 0xed6a                                       |         
    0x0000ed5c add.w r1, r5, sb                                      |         r1 = r5 + sb;
    0x0000ed60 cmp r2, r1                                            |         
    0x0000ed62 itet hs                                               |         
                                                                     |         if (r2 < r1) {
    0x0000ed64 movhs r3, r5                                          |             r3 = r5;
                                                                     |         }
                                                                     |         if (r2 >= r1) {
    0x0000ed66 addlo r6, sb                                          |             r6 += sb;
                                                                     |         }
                                                                     |         if (r2 >= r1) {
    0x0000ed68 movhs r5, r1                                          |             r5 = r1;
                                                                     |             goto label_6;
                                                                     |         }
                                                                     |     }
                                                                     | label_6:
    0x0000ed6a ldr r1, [r4, 0xc]                                     |     r1 = *((r4 + 0xc));
    0x0000ed6c str r3, [r4, 0x3c]                                    |     *((r4 + 0x3c)) = r3;
                                                                     |     if (r1 == 0) {
    0x0000ed6e cbnz r1, 0xed7e                                       |         
    0x0000ed70 add.w r0, r5, r8                                      |         r0 = r5 + r8;
    0x0000ed74 cmp r2, r0                                            |         
    0x0000ed76 itet hs                                               |         
                                                                     |         if (r2 < r0) {
    0x0000ed78 movhs r1, r5                                          |             r1 = r5;
                                                                     |         }
                                                                     |         if (r2 >= r0) {
    0x0000ed7a addlo r6, r8                                          |             r6 += r8;
                                                                     |         }
                                                                     |         if (r2 >= r0) {
    0x0000ed7c movhs r5, r0                                          |             r5 = r0;
                                                                     |             goto label_7;
                                                                     |         }
                                                                     |     }
                                                                     | label_7:
    0x0000ed7e ldr r0, [r4, 0x40]                                    |     r0 = *((r4 + 0x40));
    0x0000ed80 str r1, [r4, 0xc]                                     |     *((r4 + 0xc)) = r1;
                                                                     |     if (r0 == 0) {
    0x0000ed82 cbnz r0, 0xed94                                       |         
    0x0000ed84 ldr r1, [sp, 4]                                       |         r1 = var_4h;
    0x0000ed86 adds r1, r5, r1                                       |         r1 = r5 + r1;
    0x0000ed88 cmp r2, r1                                            |         
    0x0000ed8a iteet lo                                              |         
                                                                     |         if (r2 >= r1) {
    0x0000ed8c ldrlo r1, [sp, 4]                                     |             r1 = var_4h;
                                                                     |         }
                                                                     |         if (r2 < r1) {
    0x0000ed8e movhs r0, r5                                          |             r0 = r5;
                                                                     |         }
                                                                     |         if (r2 < r1) {
    0x0000ed90 movhs r5, r1                                          |             r5 = r1;
                                                                     |         }
                                                                     |         if (r2 < r1) {
    0x0000ed92 addlo r6, r6, r1                                      |             r6 += r1;
                                                                     |             goto label_8;
                                                                     |         }
                                                                     |     }
                                                                     | label_8:
    0x0000ed94 ldr r1, [r4, 0x38]                                    |     r1 = *((r4 + 0x38));
    0x0000ed96 str r0, [r4, 0x40]                                    |     *((r4 + 0x40)) = r0;
                                                                     |     if (r1 == 0) {
    0x0000ed98 cbnz r1, 0xedaa                                       |         
    0x0000ed9a ldr r7, [sp, 8]                                       |         r7 = var_8h;
    0x0000ed9c add.w ip, r5, r7                                      |         
    0x0000eda0 cmp r2, ip                                            |         
    0x0000eda2 itet hs                                               |         
                                                                     |         if (r2 < ip) {
    0x0000eda4 movhs r1, r5                                          |             r1 = r5;
                                                                     |         }
                                                                     |         if (r2 >= ip) {
    0x0000eda6 addlo r6, r6, r7                                      |             r6 += r7;
                                                                     |         }
                                                                     |         if (r2 >= ip) {
    0x0000eda8 movhs r5, ip                                          |             r5 = ip;
                                                                     |             goto label_9;
                                                                     |         }
                                                                     |     }
                                                                     | label_9:
    0x0000edaa str r1, [r4, 0x38]                                    |     *((r4 + 0x38)) = r1;
    0x0000edac ldr.w r1, [r4, 0xc8]                                  |     r1 = *((r4 + 0xc8));
                                                                     |     if (r1 == 0) {
    0x0000edb0 cbnz r1, 0xedc4                                       |         
    0x0000edb2 ldr r7, [sp, 0xc]                                     |         r7 = var_ch;
    0x0000edb4 bic ip, r7, 7                                         |         ip = BIT_MASK (r7, 7);
    0x0000edb8 add.w lr, r5, ip                                      |         lr = r5 + ip;
    0x0000edbc cmp r2, lr                                            |         
    0x0000edbe ite lo                                                |         
                                                                     |         if (r2 >= lr) {
    0x0000edc0 addlo r6, ip                                          |             r6 += ip;
                                                                     |         }
                                                                     |         if (r2 >= lr) {
    0x0000edc2 movhs r1, r5                                          |             r1 = r5;
                                                                     |             goto label_10;
                                                                     |         }
                                                                     |     }
                                                                     | label_10:
    0x0000edc4 str.w r1, [r4, 0xc8]                                  |     __asm ("str.w r1, [r4, 0xc8]");
    0x0000edc8 cmp r6, 0                                             |     
                                                                     |     if (r6 != 0) {
    0x0000edca bne 0xeea4                                            |         goto label_11;
                                                                     |     }
    0x0000edcc ldr r7, [sp]                                          |     r7 = *(sp);
                                                                     | label_3:
    0x0000edce ldr r2, [sp, 0x18]                                    |     r2 = var_18h;
    0x0000edd0 str r2, [r4, 0x24]                                    |     *((r4 + 0x24)) = r2;
    0x0000edd2 ldr r2, [sp, 0x14]                                    |     r2 = var_14h;
    0x0000edd4 str.w r2, [r4, 0xc4]                                  |     __asm ("str.w r2, [r4, 0xc4]");
                                                                     |     if (r3 == 0) {
    0x0000edd8 cbz r3, 0xedf4                                        |         goto label_12;
                                                                     |     }
    0x0000edda ldr r2, [sp, 0x1c]                                    |     r2 = var_1ch;
    0x0000eddc cmp r2, 0                                             |     
    0x0000edde strh.w r2, [r4, 0x44]                                 |     *((r4 + 0x44)) = r2;
                                                                     |     if (r2 <= 0) {
    0x0000ede2 ble 0xedf4                                            |         goto label_12;
                                                                     |     }
    0x0000ede4 ldr r2, [sp, 0x24]                                    |     r2 = var_24h;
    0x0000ede6 movs r1, 1                                            |     r1 = 1;
    0x0000ede8 add r2, r3                                            |     r2 += r3;
                                                                     |     do {
    0x0000edea strh r1, [r3, 0x1c]                                   |         *((r3 + 0x1c)) = r1;
    0x0000edec str r7, [r3], 0x28                                    |         *(r3) = r7;
                                                                     |         r3 += 0x28;
    0x0000edf0 cmp r2, r3                                            |         
    0x0000edf2 bne 0xedea                                            |         
                                                                     |     } while (r2 != r3);
                                                                     |     if (r0 != 0) {
                                                                     | label_12:
    0x0000edf4 cbz r0, 0xee18                                        |         
    0x0000edf6 ldrsh.w r2, [fp, 0x1bc]                               |         r2 = *(arg_1bch);
    0x0000edfa ldr.w r1, [fp, 0x1d8]                                 |         r1 = *(arg_1d8h);
    0x0000edfe strh.w r2, [r4, 0x46]                                 |         *((r4 + 0x46)) = r2;
    0x0000ee02 lsls r2, r2, 2                                        |         r2 <<= 2;
    0x0000ee04 blx 0x6214                                            |         fcn_00006214 ();
    0x0000ee08 ldr.w r2, [fp, 0x1bc]                                 |         r2 = *(arg_1bch);
    0x0000ee0c movs r1, 0                                            |         r1 = 0;
    0x0000ee0e ldr.w r0, [fp, 0x1d8]                                 |         r0 = *(arg_1d8h);
    0x0000ee12 lsls r2, r2, 2                                        |         r2 <<= 2;
    0x0000ee14 blx 0x5fcc                                            |         fcn_00005fcc ();
                                                                     |     }
    0x0000ee18 ldr r3, [r4, 8]                                       |     r3 = *((r4 + 8));
                                                                     |     if (r3 == 0) {
    0x0000ee1a cbz r3, 0xee3a                                        |         goto label_13;
                                                                     |     }
    0x0000ee1c ldr r1, [sp, 0x10]                                    |     r1 = var_10h;
    0x0000ee1e sub.w r2, r3, 0x28                                    |     r2 = r3 - 0x28;
    0x0000ee22 str r2, [r4, 8]                                       |     *((r4 + 8)) = r2;
    0x0000ee24 cmp r1, 0                                             |     
    0x0000ee26 str r1, [r4, 0x1c]                                    |     *((r4 + 0x1c)) = r1;
                                                                     |     if (r1 <= 0) {
    0x0000ee28 ble 0xee3a                                            |         goto label_13;
                                                                     |     }
    0x0000ee2a ldr r2, [sp, 0x20]                                    |     r2 = var_20h;
    0x0000ee2c movs r1, 0x80                                         |     r1 = 0x80;
    0x0000ee2e add r2, r3                                            |     r2 += r3;
                                                                     |     do {
    0x0000ee30 strh r1, [r3, 0x1c]                                   |         *((r3 + 0x1c)) = r1;
    0x0000ee32 str r7, [r3], 0x28                                    |         *(r3) = r7;
                                                                     |         r3 += 0x28;
    0x0000ee36 cmp r3, r2                                            |         
    0x0000ee38 bne 0xee30                                            |         
                                                                     |     } while (r3 != r2);
                                                                     | label_13:
    0x0000ee3a ldrb.w r0, [fp, 0x1c2]                                |     r0 = *(arg_1c2h);
    0x0000ee3e movs r3, 0                                            |     r3 = 0;
    0x0000ee40 ldrb.w r2, [r4, 0x58]                                 |     r2 = *((r4 + 0x58));
    0x0000ee44 movw r1, 0xda3                                        |     
    0x0000ee48 str r3, [r4, 0x50]                                    |     *((r4 + 0x50)) = r3;
    0x0000ee4a movt r1, 0xbdf2                                       |     r1 = 0xbdf20da3;
    0x0000ee4e str r3, [r4, 0x5c]                                    |     *((r4 + 0x5c)) = r3;
    0x0000ee50 bfi r2, r0, 0, 2                                      |     value_3 = BIT_MASK (0, 2);
                                                                     |     value_4 = r0 & value_3;
                                                                     |     value_3 = ~value_3;
                                                                     |     r2 &= value_3;
                                                                     |     r2 |= value_4;
    0x0000ee54 str r3, [r4, 0x68]                                    |     *((r4 + 0x68)) = r3;
    0x0000ee56 strb.w r2, [r4, 0x58]                                 |     *((r4 + 0x58)) = r2;
    0x0000ee5a mov.w r0, -1                                          |     r0 = -1;
    0x0000ee5e ldr r2, [pc, 0x80]                                    |     
    0x0000ee60 ldr r3, [pc, 0x78]                                    |     r3 = *(0xeedc);
    0x0000ee62 vmov.i32 d16, 0                                       |     __asm ("vmov.i32 d16, 0");
    0x0000ee66 add r2, pc                                            |     r2 = 0x1dd4c;
    0x0000ee68 str r1, [r4, 0x28]                                    |     *((r4 + 0x28)) = r1;
    0x0000ee6a str r0, [r4, 0x4c]                                    |     *((r4 + 0x4c)) = r0;
    0x0000ee6c movw r1, 0xff02                                       |     r1 = 0xff02;
    0x0000ee70 movs r0, 1                                            |     r0 = 1;
    0x0000ee72 strh.w r1, [r4, 0x56]                                 |     *((r4 + 0x56)) = r1;
    0x0000ee76 str r0, [r4, 0x48]                                    |     *((r4 + 0x48)) = r0;
    0x0000ee78 vstr d16, [r4, 0x90]                                  |     __asm ("vstr d16, [r4, 0x90]");
    0x0000ee7c ldr r3, [r2, r3]                                      |     r3 = *(0x1dd4c);
    0x0000ee7e ldr r2, [r3]                                          |     r2 = *(0x1dd4c);
    0x0000ee80 ldr r3, [sp, 0x2c]                                    |     r3 = var_2ch;
    0x0000ee82 eors r2, r3                                           |     r2 ^= r3;
    0x0000ee84 mov.w r3, 0                                           |     r3 = 0;
                                                                     |     if (r2 != r3) {
    0x0000ee88 bne 0xeed2                                            |         goto label_14;
                                                                     |     }
    0x0000ee8a add sp, 0x34                                          |     
    0x0000ee8c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |     
                                                                     | label_5:
    0x0000ee90 add.w r1, r5, sl                                      |     r1 = r5 + sl;
    0x0000ee94 cmp r2, r1                                            |     
    0x0000ee96 it lo                                                 |     
                                                                     |     if (r2 < r1) {
    0x0000ee98 movlo r6, sl                                          |         r6 = sl;
                                                                     |         goto label_15;
                                                                     |     }
                                                                     |     if (r2 <= r1) {
                                                                     | label_15:
    0x0000ee9a blo.w 0xed56                                          |         goto label_0;
                                                                     |     }
    0x0000ee9e mov r3, r5                                            |     r3 = r5;
    0x0000eea0 mov r5, r1                                            |     r5 = r1;
    0x0000eea2 b 0xed54                                              |     goto label_1;
                                                                     | label_11:
    0x0000eea4 ldr r0, [sp]                                          |     r0 = *(sp);
    0x0000eea6 mov r1, r6                                            |     r1 = r6;
    0x0000eea8 bl 0xd3a0                                             |     r0 = fcn_0000d3a0 (r0, r1);
    0x0000eeac mov r5, r0                                            |     r5 = r0;
                                                                     |     if (r0 != 0) {
    0x0000eeae cbz r0, 0xeeb8                                        |         
    0x0000eeb0 mov r2, r6                                            |         r2 = r6;
    0x0000eeb2 movs r1, 0                                            |         r1 = 0;
    0x0000eeb4 blx 0x5fcc                                            |         fcn_00005fcc ();
                                                                     |     }
    0x0000eeb8 ldr r3, [sp]                                          |     r3 = *(sp);
    0x0000eeba adds r2, r5, r6                                       |     r2 = r5 + r6;
    0x0000eebc str.w r5, [r4, 0xac]                                  |     __asm ("str.w r5, [r4, 0xac]");
    0x0000eec0 ldrb.w r3, [r3, 0x40]                                 |     r3 = *((r3 + 0x40));
    0x0000eec4 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0000eec6 beq.w 0xed4c                                          |         goto label_2;
                                                                     |     }
    0x0000eeca ldr r7, [sp]                                          |     r7 = *(sp);
    0x0000eecc ldrd r3, r0, [r4, 0x3c]                               |     __asm ("ldrd r3, r0, [r4, 0x3c]");
    0x0000eed0 b 0xedce                                              |     goto label_3;
                                                                     | label_14:
    0x0000eed2 blx 0x6498                                            |     fcn_00006498 ();
    0x0000eed6 nop                                                   |     
    0x0000eed8 ldrh r4, [r4, 0x3e]                                   |     r4 = *((r4 + 0x3e));
    0x0000eeda movs r6, r0                                           |     r6 = r0;
    0x0000eedc lsls r0, r1, 0xe                                      |     r0 = r1 << 0xe;
    0x0000eede movs r0, r0                                           |     
    0x0000eee0 ldrh r2, [r6, 0x2e]                                   |     r2 = *((r6 + 0x2e));
    0x0000eee2 movs r6, r0                                           |     r6 = r0;
                                                                     | }


r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0xefdc).
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-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0xf138 */
                                                             | #include <stdint.h>
                                                             |  
                                                             | #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
                                                             |                                ((n & 0x0000ff00) <<  8) | \
                                                             |                                ((n & 0x00ff0000) >>  8) | \
                                                             |                                ((n & 0xff000000) >> 24)))
                                                             |  
    ; (fcn) fcn.0000f138 ()                                  | void fcn_0000f138 (int16_t arg1) {
                                                             |     int16_t var_0h;
                                                             |     int32_t var_0h_2;
                                                             |     int16_t var_8h;
                                                             |     int16_t var_ch;
                                                             |     r0 = arg1;
    0x0000f138 ldr r2, [pc, 0x120]                           |     
    0x0000f13a ldr r3, [pc, 0x124]                           |     r3 = *(0xf262);
    0x0000f13c push.w {r4, r5, r6, r7, r8, sb, lr}           |     
    0x0000f140 sub sp, 0x14                                  |     
    0x0000f142 add r2, pc                                    |     r2 = 0x1e3a2;
    0x0000f144 ldr r5, [r0, 0x10]                            |     r5 = *((r0 + 0x10));
    0x0000f146 mov r4, r0                                    |     r4 = r0;
    0x0000f148 ldr r3, [r2, r3]                              |     
    0x0000f14a ldr r3, [r3]                                  |     r3 = *(0x1e3a2);
    0x0000f14c str r3, [sp, 0xc]                             |     var_ch = r3;
    0x0000f14e mov.w r3, 0                                   |     r3 = 0;
    0x0000f152 ldrb r3, [r5, 5]                              |     r3 = *((r5 + 5));
    0x0000f154 cmp r3, 2                                     |     
                                                             |     if (r3 == 2) {
    0x0000f156 beq 0xf1e4                                    |         goto label_3;
                                                             |     }
    0x0000f158 ldr r6, [r5, 0x44]                            |     r6 = *((r5 + 0x44));
    0x0000f15a ldr r2, [r6]                                  |     r2 = *(r6);
    0x0000f15c cmp r2, 0                                     |     
                                                             |     if (r2 == 0) {
    0x0000f15e beq 0xf222                                    |         goto label_4;
                                                             |     }
                                                             | label_2:
    0x0000f160 ldr r7, [r5, 0x34]                            |     r7 = *((r5 + 0x34));
    0x0000f162 ldr.w r3, [r5, 0x98]                          |     r3 = *((r5 + 0x98));
    0x0000f166 ldr.w r6, [r5, 0xc8]                          |     r6 = *((r5 + 0xc8));
    0x0000f16a ldr.w r8, [r4, 4]                             |     r8 = *((r4 + 4));
    0x0000f16e adds r3, 4                                    |     r3 += 4;
    0x0000f170 ldr r2, [r4, 0x14]                            |     r2 = *((r4 + 0x14));
    0x0000f172 asrs r1, r3, 0x1f                             |     r1 = r3 >> 0x1f;
    0x0000f174 umull sb, r3, r3, r7                          |     sb:r3 = r3 * r7;
    0x0000f178 mla r7, r7, r1, r3                            |     __asm ("mla r7, r7, r1, r3");
                                                             |     if (r6 != 0) {
    0x0000f17c cbz r6, 0xf18e                                |         
    0x0000f17e ldr.w r0, [r5, 0xd4]                          |         r0 = *((r5 + 0xd4));
    0x0000f182 mov r1, r8                                    |         r1 = r8;
    0x0000f184 movs r3, 7                                    |         r3 = 7;
    0x0000f186 blx r6                                        |         r0 = uint32_t (*r6)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x0000f188 mov r8, r0                                    |         r8 = r0;
    0x0000f18a cmp r0, 0                                     |         
                                                             |         if (r0 == 0) {
    0x0000f18c beq 0xf254                                    |             goto label_5;
                                                             |         }
                                                             |     }
    0x0000f18e ldr r3, [r4, 0x14]                            |     r3 = *((r4 + 0x14));
    0x0000f190 movs r2, 4                                    |     r2 = 4;
    0x0000f192 ldr r0, [r5, 0x44]                            |     r0 = *((r5 + 0x44));
    0x0000f194 add r1, sp, 8                                 |     r1 += var_8h;
    0x0000f196 rev r3, r3                                    |     r3 = SWAP32 (r3);
    0x0000f198 str r3, [sp, 8]                               |     var_8h = r3;
    0x0000f19a ldr r3, [r0]                                  |     r3 = *(r0);
    0x0000f19c strd sb, r7, [sp]                             |     __asm ("strd sb, r7, [sp]");
    0x0000f1a0 ldr r3, [r3, 0xc]                             |     r3 = *((r3 + 0xc));
    0x0000f1a2 blx r3                                        |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0000f1a4 mov r6, r0                                    |     r6 = r0;
    0x0000f1a6 cbz r0, 0xf1c4                                |     
                                                             |     while (r0 != 0) {
                                                             | label_0:
    0x0000f1a8 ldr r2, [pc, 0xb8]                            |         
    0x0000f1aa ldr r3, [pc, 0xb4]                            |         r3 = *(0xf262);
    0x0000f1ac add r2, pc                                    |         r2 = 0x1e414;
    0x0000f1ae ldr r3, [r2, r3]                              |         r3 = *(0x1e414);
    0x0000f1b0 ldr r2, [r3]                                  |         r2 = *(0x1e414);
    0x0000f1b2 ldr r3, [sp, 0xc]                             |         r3 = var_ch;
    0x0000f1b4 eors r2, r3                                   |         r2 ^= r3;
    0x0000f1b6 mov.w r3, 0                                   |         r3 = 0;
                                                             |         if (r2 != r3) {
    0x0000f1ba bne 0xf258                                    |             goto label_6;
                                                             |         }
    0x0000f1bc mov r0, r6                                    |         r0 = r6;
    0x0000f1be add sp, 0x14                                  |         
    0x0000f1c0 pop.w {r4, r5, r6, r7, r8, sb, pc}            |         
    0x0000f1c4 ldr r0, [r5, 0x44]                            |         r0 = *((r5 + 0x44));
    0x0000f1c6 adds.w r6, sb, 4                              |         r6 = sb + 4;
    0x0000f1ca adc r7, r7, 0                                 |         __asm ("adc r7, r7, 0");
    0x0000f1ce ldr.w r2, [r5, 0x98]                          |         r2 = *((r5 + 0x98));
    0x0000f1d2 mov r1, r8                                    |         r1 = r8;
    0x0000f1d4 ldr r3, [r0]                                  |         r3 = *(r0);
    0x0000f1d6 strd r6, r7, [sp]                             |         __asm ("strd r6, r7, [sp]");
    0x0000f1da ldr r3, [r3, 0xc]                             |         r3 = *((r3 + 0xc));
    0x0000f1dc blx r3                                        |         r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0000f1de mov r6, r0                                    |         r6 = r0;
    0x0000f1e0 cmp r0, 0                                     |         
    0x0000f1e2 bne 0xf1a8                                    |         
                                                             |     }
                                                             | label_3:
    0x0000f1e4 ldr r7, [r5, 0x60]                            |     r7 = *((r5 + 0x60));
    0x0000f1e6 movs r6, 0                                    |     r6 = 0;
    0x0000f1e8 ldr r3, [r5, 0x34]                            |     r3 = *((r5 + 0x34));
    0x0000f1ea ldr.w r8, [r4, 0x14]                          |     r8 = *((r4 + 0x14));
    0x0000f1ee cmp r7, 0                                     |     
    0x0000f1f0 add.w r3, r3, 1                               |     r3++;
    0x0000f1f4 it gt                                         |     
                                                             |     if (r7 <= 0) {
    0x0000f1f6 movgt r4, r6                                  |         r4 = r6;
                                                             |     }
    0x0000f1f8 str r3, [r5, 0x34]                            |     *((r5 + 0x34)) = r3;
                                                             |     if (r7 > 0) {
    0x0000f1fa bgt 0xf204                                    |         goto label_7;
                                                             |     }
    0x0000f1fc b 0xf1a8                                      |     goto label_0;
                                                             | label_1:
    0x0000f1fe adds r4, 1                                    |     r4++;
    0x0000f200 cmp r4, r7                                    |     
                                                             |     if (r4 >= r7) {
    0x0000f202 bge 0xf1a8                                    |         goto label_0;
                                                             |     }
                                                             | label_7:
    0x0000f204 ldr r3, [r5, 0x5c]                            |     r3 = *((r5 + 0x5c));
    0x0000f206 add.w r2, r4, r4, lsl 1                       |     r2 = r4 + (r4 << 1);
    0x0000f20a add.w r3, r3, r2, lsl 4                       |     r3 += (r2 << 4);
    0x0000f20e ldr r2, [r3, 0x14]                            |     r2 = *((r3 + 0x14));
    0x0000f210 cmp r8, r2                                    |     
                                                             |     if (r8 > r2) {
    0x0000f212 bhi 0xf1fe                                    |         goto label_1;
                                                             |     }
    0x0000f214 ldr r0, [r3, 0x10]                            |     r0 = *((r3 + 0x10));
    0x0000f216 mov r1, r8                                    |     r1 = r8;
    0x0000f218 bl 0xefdc                                     |     fcn_0000efdc (r0, r1, r2);
    0x0000f21c ldr r7, [r5, 0x60]                            |     r7 = *((r5 + 0x60));
    0x0000f21e orrs r6, r0                                   |     r6 |= r0;
    0x0000f220 b 0xf1fe                                      |     goto label_1;
                                                             | label_4:
    0x0000f222 cmp r3, 4                                     |     
                                                             |     if (r3 == 4) {
    0x0000f224 beq 0xf240                                    |         goto label_8;
                                                             |     }
    0x0000f226 ldrb r1, [r5, 0x15]                           |     r1 = *((r5 + 0x15));
                                                             |     if (r1 != 0) {
    0x0000f228 cbnz r1, 0xf240                               |         goto label_8;
                                                             |     }
    0x0000f22a ldr r0, [r5]                                  |     r0 = *(r5);
    0x0000f22c mov r2, r6                                    |     r2 = r6;
    0x0000f22e str r1, [sp]                                  |     *(sp) = r1;
    0x0000f230 movw r3, 0x201e                               |     r3 = 0x201e;
    0x0000f234 ldr r6, [r0, 0x18]                            |     r6 = *((r0 + 0x18));
    0x0000f236 blx r6                                        |     r0 = uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0000f238 mov r6, r0                                    |     r6 = r0;
    0x0000f23a cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x0000f23c bne 0xf1a8                                    |         goto label_0;
                                                             |     }
    0x0000f23e b 0xf160                                      |     goto label_2;
                                                             | label_8:
    0x0000f240 movs r2, 0x24                                 |     r2 = 0x24;
    0x0000f242 movs r1, 0                                    |     r1 = 0;
    0x0000f244 adds r0, r6, 4                                |     r0 = r6 + 4;
    0x0000f246 blx 0x5fcc                                    |     fcn_00005fcc ();
    0x0000f24a ldr r3, [pc, 0x1c]                            |     
    0x0000f24c add r3, pc                                    |     r3 = 0x1e4ba;
    0x0000f24e adds r3, 0xfc                                 |     r3 += 0xfc;
    0x0000f250 str r3, [r6]                                  |     *(r6) = r3;
    0x0000f252 b 0xf160                                      |     goto label_2;
                                                             | label_5:
    0x0000f254 movs r6, 7                                    |     r6 = 7;
    0x0000f256 b 0xf1a8                                      |     goto label_0;
                                                             | label_6:
    0x0000f258 blx 0x6498                                    |     fcn_00006498 ();
    0x0000f25c ldrh r6, [r2, 0x18]                           |     r6 = *((r2 + 0x18));
    0x0000f25e movs r6, r0                                   |     r6 = r0;
    0x0000f260 lsls r0, r1, 0xe                              |     r0 = r1 << 0xe;
    0x0000f262 movs r0, r0                                   |     
    0x0000f264 ldrh r4, [r5, 0x14]                           |     r4 = *((r5 + 0x14));
    0x0000f266 movs r6, r0                                   |     r6 = r0;
    0x0000f268 ldrb r0, [r4, 0x1e]                           |     r0 = *((r4 + 0x1e));
    0x0000f26a movs r6, r0                                   |     r6 = r0;
                                                             | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0xf898 */
                                                             | #include <stdint.h>
                                                             |  
                                                             | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                             |  
    ; (fcn) fcn.0000f898 ()                                  | void fcn_0000f898 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
                                                             |     r2 = arg3;
                                                             |     r3 = arg4;
                                                             |     if (? >= ?) {
    0x0000f898 ldrbmi lr, [r0, sp, lsr 18]!                  |         
                                                             |     }
    0x0000f89c ldr.w r8, [r0, 0xf4]                          |     r8 = *((r0 + 0xf4));
    0x0000f8a0 cmp.w r8, 0                                   |     
                                                             |     if (r8 != 0) {
    0x0000f8a4 bne 0xf944                                    |         goto label_2;
                                                             |     }
    0x0000f8a6 mov r5, r3                                    |     r5 = r3;
    0x0000f8a8 ldrb.w r3, [r0, 0xf3]                         |     r3 = *((r0 + 0xf3));
    0x0000f8ac mov r6, r0                                    |     r6 = r0;
    0x0000f8ae mov r7, r1                                    |     r7 = r1;
    0x0000f8b0 mov r4, r2                                    |     r4 = r2;
    0x0000f8b2 cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x0000f8b4 bne 0xf93a                                    |         goto label_3;
                                                             |     }
                                                             | label_0:
    0x0000f8b6 bic r4, r4, 7                                 |     r4 = BIT_MASK (r4, 7);
    0x0000f8ba cmp r4, 4                                     |     
                                                             |     if (r4 <= 4) {
    0x0000f8bc ble 0xf920                                    |         goto label_4;
                                                             |     }
    0x0000f8be cmp r5, 0                                     |     
    0x0000f8c0 bic.w sl, r5, r5, asr 31                      |     sl = BIT_MASK (r5, r5);
                                                             |     if (r5 <= 0) {
    0x0000f8c4 ble 0xf920                                    |         goto label_4;
                                                             |     }
    0x0000f8c6 mov sb, r7                                    |     sb = r7;
    0x0000f8c8 cmp r7, 0                                     |     
                                                             |     if (r7 == 0) {
    0x0000f8ca beq 0xf94e                                    |         goto label_5;
                                                             |     }
                                                             | label_1:
    0x0000f8cc subs.w r2, sl, 1                              |     r2 = sl - 1;
    0x0000f8d0 mov.w r5, 0                                   |     r5 = 0;
    0x0000f8d4 mov r3, sb                                    |     r3 = sb;
    0x0000f8d6 str.w sb, [r6, 0x10c]                         |     __asm ("str.w sb, aav.0x000000ff");
    0x0000f8d8 str r1, [sp, 0x30]                            |     *((sp + 0x30)) = r1;
    0x0000f8da strh.w r4, [r6, 0xf0]                         |     *((r6 + 0xf0)) = r4;
    0x0000f8dc lsrs r0, r6                                   |     r0 >>= r6;
    0x0000f8de str.w r5, [r6, 0x108]                         |     __asm ("str.w r5, aav.0x000000ff");
                                                             |     if (r0 < r6) {
    0x0000f8e2 bmi 0xf906                                    |         goto label_6;
                                                             |     }
                                                             |     do {
    0x0000f8e4 subs r2, 1                                    |         r2--;
    0x0000f8e6 add.w ip, r3, r4                              |         
    0x0000f8ea str r5, [r3]                                  |         *(r3) = r5;
    0x0000f8ec mov r5, r3                                    |         r5 = r3;
    0x0000f8ee adds r3, r2, 1                                |         r3 = r2 + 1;
    0x0000f8f0 mov r3, ip                                    |         r3 = ip;
    0x0000f8f2 bne 0xf8e4                                    |         
                                                             |     } while (r3 != r2);
    0x0000f8f4 movs r4, r0                                   |     r4 = r0;
    0x0000f8f6 movs r0, r0                                   |     
    0x0000f8f8 add.w r4, r0, r4                              |     r4 = r0 + r4;
    0x0000f8fc add.w r3, sb, sl                              |     r3 = sb + sl;
    0x0000f900 add r4, sb                                    |     r4 += sb;
    0x0000f902 str.w r4, [r6, 0x108]                         |     __asm ("str.w r4, aav.0x000000ff");
                                                             | label_6:
    0x0000f906 clz r7, r7                                    |     r7 &= r7;
    0x0000f90a movs r2, 1                                    |     r2 = 1;
    0x0000f90c lsrs r7, r7, 5                                |     r7 >>= 5;
    0x0000f90e mov r0, r8                                    |     r0 = r8;
    0x0000f910 str.w r3, [r6, 0x110]                         |     __asm ("str.w r3, aav.0x000000ff");
    0x0000f914 strb.w r2, [r6, 0xf2]                         |     *((r6 + 0xf2)) = r2;
    0x0000f918 strb.w r7, [r6, 0xf3]                         |     *((r6 + 0xf3)) = r7;
    0x0000f91c pop.w {r4, r5, r6, r7, r8, sb, sl, pc}        |     
                                                             | label_4:
    0x0000f920 movs r4, 0                                    |     r4 = 0;
                                                             |     do {
    0x0000f922 movs r3, 0                                    |         r3 = 0;
    0x0000f924 mov r0, r8                                    |         r0 = r8;
    0x0000f926 strh.w r4, [r6, 0xf0]                         |         *((r6 + 0xf0)) = r4;
    0x0000f92a strd r3, r6, [r6, 0x108]                      |         __asm ("strd r3, r6, aav.0x000000ff");
    0x0000f92e str.w r6, [r6, 0x110]                         |         __asm ("str.w r6, aav.0x000000ff");
    0x0000f932 strh.w r3, [r6, 0xf2]                         |         *((r6 + 0xf2)) = r3;
    0x0000f936 pop.w {r4, r5, r6, r7, r8, sb, sl, pc}        |         
                                                             | label_3:
    0x0000f93a ldr.w r0, [r0, 0x10c]                         |         r0 = *((r0 + 0x10c));
    0x0000f93e blx 0x6050                                    |         fcn_00006050 ();
    0x0000f942 b 0xf8b6                                      |         goto label_0;
                                                             | label_2:
    0x0000f944 mov.w r8, 5                                   |         r8 = 5;
    0x0000f948 mov r0, r8                                    |         r0 = r8;
    0x0000f94a pop.w {r4, r5, r6, r7, r8, sb, sl, pc}        |         
                                                             | label_5:
    0x0000f94e ldr r3, [pc, 0x40]                            |         
    0x0000f950 add r3, pc                                    |         
    0x0000f952 ldr.w r3, [r3, 0x1a8]                         |         r3 = *(0x1f48e);
                                                             |         if (r3 != 0) {
    0x0000f956 cbz r3, 0xf95a                                |             
    0x0000f958 blx r3                                        |             uint32_t (*r3)() ();
                                                             |         }
    0x0000f95a mul r0, r4, sl                                |         r0 = r4 * sl;
    0x0000f95e bl 0xd300                                     |         fcn_0000d300 (r0, r1, r2, r3, r4);
    0x0000f962 ldr r3, [pc, 0x30]                            |         
    0x0000f964 mov sb, r0                                    |         sb = r0;
    0x0000f966 add r3, pc                                    |         
    0x0000f968 ldr.w r3, [r3, 0x1ac]                         |         r3 = *(0x1f4ac);
                                                             |         if (r3 != 0) {
    0x0000f96c cbz r3, 0xf970                                |             
    0x0000f96e blx r3                                        |             uint32_t (*r3)() ();
                                                             |         }
    0x0000f970 cmp.w sb, 0                                   |         
                                                             |         if (sb != 0) {
    0x0000f974 beq 0xf98a                                    |             
    0x0000f976 ldr r3, [pc, 0x20]                            |             
    0x0000f978 mov r0, sb                                    |             r0 = sb;
    0x0000f97a add r3, pc                                    |             
    0x0000f97c ldr r3, [r3, 0x30]                            |             r3 = *(0x1f348);
    0x0000f97e blx r3                                        |             uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0000f980 mov r1, r4                                    |             r1 = r4;
    0x0000f982 bl 0x5ded8                                    |             r0 = fcn_0005ded8 (r0, r1);
    0x0000f986 mov sl, r0                                    |             sl = r0;
    0x0000f988 b 0xf8cc                                      |             goto label_1;
                                                             |         }
    0x0000f98a uxth r4, r4                                   |         r4 = (int16_t) r4;
    0x0000f98c b 0xf922                                      |         
                                                             |     } while (1);
                                                             | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0xfff8 */
                                                                     | #include <stdint.h>
                                                                     |  
    ; (fcn) fcn.0000fff8 ()                                          | void fcn_0000fff8 (uint32_t arg1, int16_t arg2) {
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
    0x0000fff8 push.w {r3, r4, r5, r6, r7}                           |     
    0x0000fffc movs r0, r0                                           |     
    0x0000fffe movs r0, r0                                           |     
    0x00010000 invalid                                               |     
    0x00010002 movs r0, r0                                           |     
    0x00010004 movs r0, r0                                           |     
    0x00010006 movs r0, r0                                           |     
    0x00010008 movs r0, r0                                           |     
    0x0001000a mcr2 p0, 0, r0, c0, c15, 7                            |     __asm ("mcr2 p0, 0, r0, c0, c15, 7");
    0x0001000e lsls r7, r7, 7                                        |     r7 <<= 7;
    0x00010010 invalid                                               |     
    0x00010014 movs r7, r1                                           |     r7 = r1;
    0x00010016 lsls r0, r6, 3                                        |     r0 = r6 << 3;
    0x00010018 movs r2, r5                                           |     r2 = r5;
    0x0001001a invalid                                               |     
    0x0001001e movs r0, r0                                           |     
    0x00010020 movs r0, r0                                           |     
    0x00010022 invalid                                               |     
    0x00010024 movs r0, r0                                           |     
    0x00010026 adds r0, 1                                            |     r0++;
    0x00010028 cmp r0, r3                                            |     
    0x0001002a movs r2, r1                                           |     r2 = r1;
    0x0001002c movs r0, r0                                           |     
    0x0001002e adds r0, 0xf4                                         |     r0 += 0xf4;
    0x00010030 ldr.w r0, [r5, 8]                                     |     r0 = *((r5 + 8));
    0x00010034 movs r0, r0                                           |     
    0x00010036 movs r0, r0                                           |     
    0x00010038 invalid                                               |     
    0x0001003c str.w r3, [r5, 0xf4]                                  |     __asm ("str.w r3, [r5, 0xf4]");
                                                                     |     do {
    0x00010040 adds r4, 0x28                                         |         r4 += 0x28;
    0x00010042 lsls r4, r6, 2                                        |         r4 = r6 << 2;
    0x00010044 movs r0, r0                                           |         
    0x00010046 lsls r4, r2, 2                                        |         r4 = r2 << 2;
    0x00010048 movs r0, r0                                           |         
    0x0001004a lsls r0, r7, 1                                        |         r0 = r7 << 1;
    0x0001004c movs r0, r0                                           |         
    0x0001004e mcr2 p0, 0, r0, c0, c15, 7                            |         __asm ("mcr2 p0, 0, r0, c0, c15, 7");
    0x00010052 lsrs r0, r0, 0x20                                     |         r0 >>= 0x20;
    0x00010054 movs r2, r0                                           |         r2 = r0;
    0x00010056 invalid                                               |         
    0x00010058 invalid                                               |         
    0x0001005c lsrs r1, r2, 8                                        |         r1 = r2 >> 8;
    0x0001005e movs r1, 0x10                                         |         r1 = 0x10;
    0x00010060 cmp r0, r2                                            |         
                                                                     |         if (r0 >= r2) {
    0x00010062 bhs 0x1007e                                           |             goto label_2;
                                                                     |         }
    0x00010064 ldrh.w r0, [r5, 0xf0]                                 |         r0 = *((r5 + 0xf0));
                                                                     | label_0:
    0x00010068 ldr r2, [r3]                                          |         r2 = *(r3);
    0x0001006a adds r4, 0x28                                         |         r4 += 0x28;
    0x0001006c cmp r4, r6                                            |         
    0x0001006e add r2, r0                                            |         r2 += r0;
    0x00010070 str r2, [r3]                                          |         *(r3) = r2;
    0x00010072 lsls r0, r5, 3                                        |         r0 = r5 << 3;
    0x00010074 str r2, [sp]                                          |         *(sp) = r2;
    0x00010076 lsls r0, r0, 4                                        |         r0 <<= 4;
    0x00010078 blx 0x6050                                            |         fcn_00006050 ();
    0x0001007c b 0x10040                                             |         
                                                                     |     } while (1);
                                                                     | label_2:
    0x0001007e ldr r3, [r7, 0x30]                                    |     r3 = *((r7 + 0x30));
    0x00010080 blx r3                                                |     uint32_t (*r3)(uint32_t) (r3);
    0x00010082 ldr.w r3, [r5, 0x200]                                 |     r3 = *((r5 + 0x200));
    0x00010086 b 0x10068                                             |     goto label_0;
    0x00010088 cmp r0, r6                                            |     
                                                                     |     if (r0 >= r6) {
    0x0001008a bhs 0x100d8                                           |         goto label_3;
                                                                     |     }
    0x0001008c movw r7, 0x2460                                       |     r7 = 0x2460;
    0x00010090 mov.w r8, 0x80                                        |     r8 = 0x80;
    0x00010094 b 0x100ae                                             |     
                                                                     |     while (fp == r7) {
    0x00010096 ldr r1, [r4, 0x24]                                    |         r1 = *((r4 + 0x24));
    0x00010098 mov r0, r5                                            |         r0 = r5;
                                                                     |         if (r1 != 0) {
    0x0001009a cbz r1, 0x100a4                                       |             
    0x0001009c bl 0xe12c                                             |             fcn_0000e12c (r0, r1);
    0x000100a0 str.w fp, [r4, 0x24]                                  |             __asm ("str.w fp, [r4, 0x24]");
                                                                     |         }
    0x000100a4 strh.w r8, [r4, 0x1c]                                 |         *((r4 + 0x1c)) = r8;
    0x000100a8 adds r4, 0x28                                         |         r4 += 0x28;
    0x000100aa cmp r4, r6                                            |         
                                                                     |         if (r4 >= r6) {
    0x000100ac bhs 0x100d8                                           |             goto label_3;
                                                                     |         }
                                                                     | label_1:
    0x000100ae ldrh r3, [r4, 0x1c]                                   |         r3 = *((r4 + 0x1c));
    0x000100b0 ands.w fp, r7, r3                                     |         
    0x000100b4 beq 0x10096                                           |         
                                                                     |     }
    0x000100b6 mov r0, r4                                            |     r0 = r4;
    0x000100b8 lsls r7, r7, 3                                        |     r7 <<= 3;
    0x000100ba movs r0, r0                                           |     
    0x000100bc ldr r0, [r0, 0x20]                                    |     r0 = *((r0 + 0x20));
                                                                     |     if (r1 != 0) {
    0x000100be cbz r1, 0x100ca                                       |         
    0x000100c0 ldr r0, [r4]                                          |         r0 = *(r4);
    0x000100c2 lsls r6, r7, 3                                        |         r6 = r7 << 3;
    0x000100c4 invalid                                               |         
    0x000100c8 str r0, [sp, 0x90]                                    |         *((sp + 0x90)) = r0;
                                                                     |     }
    0x000100ca str.w sb, [r4, 4]                                     |     __asm ("str.w sb, [r4, 4]");
    0x000100ce adds r4, 0x28                                         |     r4 += 0x28;
    0x000100d0 strh r8, [r4, -0xc]                                   |     *((r4 - 0xc)) = r8;
    0x000100d4 cmp r4, r6                                            |     
                                                                     |     if (r4 <= r6) {
    0x000100d6 blo 0x100ae                                           |         goto label_1;
                                                                     |     }
                                                                     | label_3:
    0x000100d8 strb.w sl, [r5, 0x40]                                 |     *((r5 + 0x40)) = sl;
    0x000100dc pop.w {r3, 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-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x100e4 */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) fcn.000100e4 ()                      | void fcn_000100e4 (int16_t arg1, int16_t arg2) {
                                                 |     r0 = arg1;
                                                 |     r1 = arg2;
    0x000100e4 push {r3, r4, r5, r6, r7, lr}     |     
    0x000100e6 mov r4, r1                        |     r4 = r1;
    0x000100e8 ldrh.w r3, [r0, 0x54]             |     r3 = *((r0 + 0x54));
    0x000100ec mov r5, r0                        |     r5 = r0;
    0x000100ee ldr r1, [r0, 0x10]                |     r1 = *((r0 + 0x10));
    0x000100f0 ldr r6, [r0]                      |     r6 = *(r0);
    0x000100f2 cmp r1, 0                         |     
    0x000100f4 it ne                             |     
                                                 |     if (r1 != 0) {
    0x000100f6 cmpne r3, 0                       |         __asm ("cmpne r3, 0");
                                                 |     }
                                                 |     if (r1 != 0) {
    0x000100f8 beq 0x10106                       |         
    0x000100fa mov r0, r1                        |         r0 = r1;
    0x000100fc add.w r1, r3, r3, lsl 2           |         r1 = r3 + (r3 << 2);
    0x00010100 bl 0xfff8                         |         fcn_0000fff8 (r0, r1);
    0x00010102 invalid                           |         
                                                 |     }
    0x00010106 add.w r7, r4, r4, lsl 2           |     r7 = r4 + (r4 << 2);
    0x0001010a mov r0, r6                        |     r0 = r6;
    0x0001010c bl 0xe12c                         |     fcn_0000e12c (r0, r1);
    0x00010110 mov r0, r6                        |     r0 = r6;
    0x00010112 add.w r6, r7, r7, lsl 2           |     r6 = r7 + (r7 << 2);
    0x00010116 strh.w r4, [r5, 0x54]             |     *((r5 + 0x54)) = r4;
    0x0001011a lsls r6, r6, 3                    |     r6 <<= 3;
    0x0001011c mov r1, r6                        |     r1 = r6;
    0x0001011e bl 0xd3a0                         |     r0 = fcn_0000d3a0 (r0, r1);
    0x00010122 mov r4, r0                        |     r4 = r0;
                                                 |     if (r0 == 0) {
    0x00010124 cbz r0, 0x10154                   |         goto label_0;
                                                 |     }
    0x00010126 mov r2, r6                        |     r2 = r6;
    0x00010128 movs r1, 0                        |     r1 = 0;
    0x0001012a blx 0x5fcc                        |     fcn_00005fcc ();
    0x0001012e cmp r7, 0                         |     
    0x00010130 add.w r2, r7, -1                  |     r2 = r7 + -1;
    0x00010134 str r4, [r5, 0x10]                |     *((r5 + 0x10)) = r4;
                                                 |     if (r7 <= 0) {
    0x00010136 ble 0x10152                       |         goto label_1;
                                                 |     }
    0x00010138 ldr r0, [r5]                      |     r0 = *(r5);
    0x0001013a add.w r3, r4, 0x28                |     r3 = r4 + 0x28;
    0x0001013e movs r1, 1                        |     r1 = 1;
                                                 |     do {
    0x00010140 subs r2, 1                        |         r2--;
    0x00010142 strh r1, [r3, -0xc]               |         *((r3 - 0xc)) = r1;
    0x00010146 adds r4, r2, 1                    |         r4 = r2 + 1;
    0x00010148 str r0, [r3, -0x28]               |         *((r3 - 0x28)) = r0;
    0x0001014c add.w r3, r3, 0x28                |         r3 += 0x28;
    0x00010150 bne 0x10140                       |         
                                                 |     } while (r4 != r2);
                                                 | label_1:
    0x00010152 pop {r3, r4, r5, r6, r7, pc}      |     
                                                 | label_0:
    0x00010154 str r0, [r5, 0x10]                |     *((r5 + 0x10)) = r0;
    0x00010156 pop {r3, r4, r5, r6, r7, pc}      |     
                                                 | }
    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1021c */
                                                     | #include <stdint.h>
                                                     |  
                                                     | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                     |  
    ; (fcn) fcn.0001021c ()                          | void fcn_0001021c (int16_t arg1, uint32_t arg2, int16_t arg3, int16_t arg4) {
                                                     |     r0 = arg1;
                                                     |     r1 = arg2;
                                                     |     r2 = arg3;
                                                     |     r3 = arg4;
    0x0001021c push {r3, r4, r5, r6, r7, lr}         |     
    0x0001021e mov r6, r0                            |     r6 = r0;
    0x00010220 ldr r4, [r6, 4]                       |     r4 = *((r6 + 4));
    0x00010222 mov r7, r2                            |     r7 = r2;
    0x00010224 mov r5, r3                            |     r5 = r3;
    0x00010226 ldr r0, [r0]                          |     r0 = *(r0);
                                                     |     if (r4 == 0) {
    0x00010228 cbz r4, 0x10282                       |         goto label_1;
                                                     |     }
    0x0001022a ldrb.w r3, [r0, 0x40]                 |     r3 = *((r0 + 0x40));
                                                     |     if (r3 != 0) {
    0x0001022e cbnz r3, 0x10282                      |         goto label_1;
                                                     |     }
    0x00010230 cmp r1, 0                             |     
    0x00010232 itt lt                                |     
                                                     |     if (r1 >= 0) {
    0x00010234 ldrlt r1, [r6, 0x20]                  |         r1 = *((r6 + 0x20));
                                                     |     }
                                                     |     if (r1 >= 0) {
    0x00010236 addlt r1, r1, -1                      |         r1 += -1;
                                                     |     }
    0x0001023a add.w r1, r1, r1, lsl 2               |     r1 += (r1 << 2);
    0x0001023e add.w pc, r4, r0, lsl 28              |     pc = r4 + (r0 << 28);
    0x00010242 movs r0, r0                           |     
    0x00010244 ldrsb.w r1, [r4, 1]                   |     r1 = *((r4 + 1));
    0x00010248 bl 0x10158                            |     fcn_00010158 (r0, r1);
    0x0001024c cmn.w r5, 0xe                         |     
    0x00010250 mov.w r3, 0                           |     r3 = 0;
    0x00010254 str r3, [r4, 0x10]                    |     *((r4 + 0x10)) = r3;
                                                     |     if (r5 == 0xe) {
    0x00010256 beq 0x1027c                           |         goto label_2;
                                                     |     }
                                                     |     if (r7 == 0) {
    0x00010258 cbz r7, 0x10292                       |         goto label_3;
                                                     |     }
    0x0001025a adds r3, r5, 6                        |     r3 = r5 + 6;
                                                     |     if (r3 == r5) {
    0x0001025c beq 0x1027c                           |         goto label_2;
                                                     |     }
    0x0001025e cmn.w r5, 0xa                         |     
                                                     |     if (r5 == 0xa) {
    0x00010262 beq 0x10296                           |         goto label_4;
                                                     |     }
    0x00010264 cmp r5, 0                             |     
                                                     |     if (r5 < 0) {
    0x00010266 blt 0x1027c                           |         goto label_2;
                                                     |     }
                                                     |     if (r5 == 0) {
    0x00010268 beq 0x102a2                           |         goto label_5;
                                                     |     }
                                                     | label_0:
    0x0001026a ldr r0, [r6]                          |     r0 = *(r6);
    0x0001026c mov r2, r5                            |     r2 = r5;
    0x0001026e mov r1, r7                            |     r1 = r7;
    0x00010270 bl 0xdbf0                             |     fcn_0000dbf0 (r0, r1, r2);
    0x00010274 movs r3, 0xff                         |     r3 = 0xff;
    0x00010276 str r0, [r4, 0x10]                    |     *((r4 + 0x10)) = r0;
    0x00010278 strb r3, [r4, 1]                      |     *((r4 + 1)) = r3;
                                                     |     do {
    0x0001027a pop {r3, r4, r5, r6, r7, pc}          |         
                                                     | label_2:
    0x0001027c str r7, [r4, 0x10]                    |         *((r4 + 0x10)) = r7;
    0x0001027e strb r5, [r4, 1]                      |         *((r4 + 1)) = r5;
    0x00010280 pop {r3, r4, r5, r6, r7, pc}          |         
                                                     | label_1:
    0x00010282 cmn.w r5, 0xa                         |         
    0x00010286 beq 0x1027a                           |         
                                                     |     } while (r5 == 0xa);
    0x00010288 mov r2, r7                            |     r2 = r7;
    0x0001028a mov r1, r5                            |     r1 = r5;
    0x0001028c pop.w {r3, r4, r5, r6, r7, lr}        |     
    0x00010290 b 0x10158                             |     void (*0x10158)() ();
                                                     | label_3:
    0x00010292 strb r7, [r4, 1]                      |     *((r4 + 1)) = r7;
    0x00010294 pop {r3, r4, r5, r6, r7, pc}          |     
                                                     | label_4:
    0x00010296 invalid                               |     
    0x0001029a str r7, [r4, 0x10]                    |     *((r4 + 0x10)) = r7;
    0x0001029c adds r3, 1                            |     r3++;
    0x0001029e str r3, [r7, 0xc]                     |     *((r7 + 0xc)) = r3;
    0x000102a0 pop {r3, r4, r5, r6, r7, pc}          |     
                                                     | label_5:
    0x000102a2 ldrb r3, [r7]                         |     r3 = *(r7);
    0x000102a4 cmp r3, 0                             |     
                                                     |     if (r3 == 0) {
    0x000102a6 beq 0x1026a                           |         goto label_0;
                                                     |     }
    0x000102a8 mov r5, r7                            |     r5 = r7;
                                                     |     do {
    0x000102aa ldrb r3, [r5, 1]!                     |         r3 = *((r5 += 1));
    0x000102ae cmp r3, 0                             |         
    0x000102b0 bne 0x102aa                           |         
                                                     |     } while (r3 != 0);
    0x000102b2 subs r5, r5, r7                       |     r5 -= r7;
    0x000102b4 bic r5, r5, 0xc0000000                |     r5 = BIT_MASK (r5, 0xc0000000);
    0x000102b8 b 0x1026a                             |     goto label_0;
                                                     | }
    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x102bc */
                                                     | #include <stdint.h>
                                                     |  
    ; (fcn) fcn.000102bc ()                          | void fcn_000102bc (int16_t arg1, int16_t arg2) {
                                                     |     r0 = arg1;
                                                     |     r1 = arg2;
    0x000102bc push.w {r4, r5, r6, r7, r8, lr}       |     
    0x000102c0 add.w r7, r1, r1, lsl 2               |     r7 = r1 + (r1 << 2);
    0x000102c4 ldr.w r8, [r0, 4]                     |     r8 = *((r0 + 4));
    0x000102c8 mov r6, r1                            |     r6 = r1;
    0x000102ca lsls r7, r7, 2                        |     r7 <<= 2;
    0x000102cc mov r5, r0                            |     r5 = r0;
    0x000102ce ldr r0, [r0]                          |     r0 = *(r0);
    0x000102d0 add.w r4, r8, r7                      |     r4 = r8 + r7;
    0x000102d4 ldr r2, [r4, 0x10]                    |     r2 = *((r4 + 0x10));
    0x000102d6 ldrsb.w r1, [r4, 1]                   |     r1 = *((r4 + 1));
    0x000102da bl 0x10158                            |     fcn_00010158 (r0, r1);
    0x000102de movs r3, 0                            |     r3 = 0;
    0x000102e0 str.w r3, [r8, r7]                    |     __asm ("str.w r3, [r8, r7]");
    0x000102e4 str r3, [r4, 4]                       |     *((r4 + 4)) = r3;
    0x000102e6 str r3, [r4, 8]                       |     *((r4 + 8)) = r3;
    0x000102e8 str r3, [r4, 0xc]                     |     *((r4 + 0xc)) = r3;
    0x000102ea str r3, [r4, 0x10]                    |     *((r4 + 0x10)) = r3;
    0x000102ec movs r3, 0x9d                         |     r3 = 0x9d;
    0x000102ee strb.w r3, [r8, r7]                   |     *((r8 + r7)) = r3;
    0x000102f2 ldr r3, [r5, 0x20]                    |     r3 = *((r5 + 0x20));
    0x000102f4 subs r3, 1                            |     r3--;
    0x000102f6 cmp r6, r3                            |     
    0x000102f8 it eq                                 |     
                                                     |     if (r6 != r3) {
    0x000102fa streq r6, [r5, 0x20]                  |         *((r5 + 0x20)) = r6;
                                                     |     }
    0x000102fc 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-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x105fc */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) fcn.000105fc ()                                  | void fcn_000105fc (int16_t arg1) {
                                                             |     r0 = arg1;
    0x000105fc ldr r2, [r0, 0x60]                            |     r2 = *((r0 + 0x60));
    0x000105fe push.w {r3, r4, r5, r6, r7, r8, sb, lr}       |     
    0x00010602 mov r8, r0                                    |     r8 = r0;
    0x00010604 cmp r2, 0                                     |     
    0x00010606 itt gt                                        |     
                                                             |     if (r2 <= 0) {
    0x00010608 movgt r7, 0x4e                                |         r7 = 0x4e;
                                                             |     }
                                                             |     if (r2 <= 0) {
    0x0001060a movgt sb, r7                                  |         sb = r7;
                                                             |     }
                                                             |     if (r2 <= 0) {
    0x0001060c ble 0x10644                                   |         goto label_2;
                                                             |     }
                                                             | label_0:
    0x0001060e ldr.w r3, [r8, 0x5c]                          |     r3 = *((r8 + 0x5c));
    0x00010612 add r3, r7                                    |     r3 += r7;
    0x00010614 ldr r6, [r3, 0x10]                            |     r6 = *((r3 + 0x10));
                                                             |     if (r6 == 0) {
    0x00010616 cbz r6, 0x1063a                               |         goto label_3;
                                                             |     }
    0x00010618 ldr r3, [r6, 8]                               |     r3 = *((r6 + 8));
                                                             |     if (r3 == 0) {
    0x0001061a cbz r3, 0x10630                               |         goto label_4;
                                                             |     }
    0x0001061c add.w r4, r6, 8                               |     r4 = r6 + 8;
    0x00010620 add.w r5, r6, 0x1fc                           |     r5 = r6 + 0x1fc;
                                                             |     do {
    0x00010624 ldr r0, [r4, 4]!                              |         r0 = *((r4 += 4));
    0x00010628 bl 0x1042c                                    |         fcn_0001042c (r0, r1, r2, r3);
    0x0001062c cmp r5, r4                                    |         
    0x0001062e bne 0x10624                                   |         
                                                             |     } while (r5 != r4);
                                                             | label_4:
    0x00010630 mov r0, r6                                    |     r0 = r6;
    0x00010632 blx 0x6050                                    |     fcn_00006050 ();
    0x00010636 ldr.w r2, [r8, 0x60]                          |     r2 = *((r8 + 0x60));
                                                             | label_3:
    0x0001063a add.w sb, sb, 1                               |     sb++;
    0x0001063e adds r7, 0x30                                 |     r7 += 0x30;
    0x00010640 cmp r2, sb                                    |     
                                                             |     if (r2 > sb) {
    0x00010642 bgt 0x1060e                                   |         goto label_0;
                                                             |     }
                                                             | label_2:
    0x00010644 ldrb.w r3, [r8, 4]                            |     r3 = *((r8 + 4));
    0x00010648 ldr.w r4, [r8, 0x44]                          |     r4 = *((r8 + 0x44));
    0x0001064c ldr r2, [r4]                                  |     r2 = *(r4);
                                                             |     if (r3 == 0) {
    0x0001064e cbz r3, 0x10670                               |         goto label_5;
                                                             |     }
    0x00010650 ldr r3, [pc, 0x2c]                            |     
    0x00010652 add r3, pc                                    |     r3 = 0x20cd6;
    0x00010654 adds r3, 0xfc                                 |     r3 += 0xfc;
    0x00010656 cmp r2, r3                                    |     
                                                             |     if (r2 == r3) {
    0x00010658 beq 0x10674                                   |         goto label_6;
                                                             |     }
                                                             |     do {
                                                             | label_1:
    0x0001065a ldr.w r0, [r8, 0x5c]                          |         r0 = *((r8 + 0x5c));
    0x0001065e blx 0x6050                                    |         fcn_00006050 ();
    0x00010662 movs r3, 0                                    |         r3 = 0;
    0x00010664 strd r3, r3, [r8, 0x5c]                       |         __asm ("strd r3, r3, [r8, 0x5c]");
    0x00010668 str.w r3, [r8, 0x34]                          |         __asm ("str.w r3, [r8, 0x34]");
    0x0001066c pop.w {r3, r4, r5, r6, r7, r8, sb, pc}        |         
                                                             | label_5:
    0x00010670 cmp r2, 0                                     |         
    0x00010672 beq 0x1065a                                   |         
                                                             |     } while (r2 == 0);
                                                             | label_6:
    0x00010674 ldr r3, [r2, 4]                               |     r3 = *((r2 + 4));
    0x00010676 mov r0, r4                                    |     r0 = r4;
    0x00010678 blx r3                                        |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0001067a movs r3, 0                                    |     r3 = 0;
    0x0001067c str r3, [r4]                                  |     *(r4) = r3;
    0x0001067e b 0x1065a                                     |     goto label_1;
                                                             | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x10b60 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00010b60 ()                                      | void fcn_00010b60 (int16_t arg1, int16_t arg2) {
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x00010b60 push.w {r4, r5, r6, r7, r8, sb, sl, lr}           |     
    0x00010b64 mov r5, r1                                        |     r5 = r1;
    0x00010b66 ldr r7, [pc, 0xd4]                                |     
    0x00010b68 mov r8, r0                                        |     r8 = r0;
    0x00010b6a add r7, pc                                        |     r7 = 0x217ac;
    0x00010b6c ldr r3, [r7, 0x30]                                |     r3 = *(0x217dc);
    0x00010b6e blx r3                                            |     uint32_t (*r3)(uint32_t) (r3);
    0x00010b70 ldr r3, [r7, 0x34]                                |     r3 = *(0x217e0);
    0x00010b72 mov r6, r0                                        |     r6 = r0;
    0x00010b74 mov r0, r5                                        |     r0 = r5;
    0x00010b76 blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00010b78 cmp r6, r0                                        |     
                                                                 |     if (r6 == r0) {
    0x00010b7a beq 0x10c0a                                       |         goto label_2;
                                                                 |     }
    0x00010b7c ldr r3, [r7]                                      |     r3 = *(r7);
    0x00010b7e mov r4, r0                                        |     r4 = r0;
                                                                 |     if (r3 == 0) {
    0x00010b80 cbnz r3, 0x10b8e                                  |         
    0x00010b82 ldr r3, [r7, 0x2c]                                |         r3 = *((r7 + 0x2c));
    0x00010b84 mov r1, r0                                        |         r1 = r0;
    0x00010b86 mov r0, r8                                        |         r0 = r8;
    0x00010b88 pop.w {r4, r5, r6, r7, r8, sb, sl, lr}            |         
    0x00010b8c bx r3                                             |         return uint32_t (*r3)() ();
                                                                 |     }
    0x00010b8e ldr r7, [pc, 0xb0]                                |     
    0x00010b90 add r7, pc                                        |     r7 = 0x217d6;
    0x00010b92 ldr r0, [r7, 0x50]                                |     r0 = *(0x21826);
    0x00010b94 blx 0x6810                                        |     fcn_00006810 ();
    0x00010b98 ldr.w r3, [r7, 0xb4]                              |     r3 = *(0x2188a);
    0x00010b9c subs r0, r4, r6                                   |     r0 = r4 - r6;
    0x00010b9e ldr r2, [pc, 0xa4]                                |     
    0x00010ba0 str.w r5, [r7, 0x8c]                              |     __asm ("str.w r5, [r7, 0x8c]");
    0x00010ba4 cmp r5, r3                                        |     
    0x00010ba6 add r2, pc                                        |     r2 = 0x217f0;
    0x00010ba8 it gt                                             |     
                                                                 |     if (r5 <= r3) {
    0x00010baa strgt r5, [r7, 0xb4]                              |         *((r7 + 0xb4)) = r5;
                                                                 |     }
    0x00010bae ldr r7, [r2, 0x78]                                |     r7 = *(0x21868);
    0x00010bb0 ldrd r3, r2, [r2, 0x58]                           |     __asm ("ldrd r3, r2, [r2, 0x58]");
    0x00010bb4 subs r3, r3, r0                                   |     r3 -= r0;
    0x00010bb6 asr.w r1, r7, 0x1f                                |     r1 = r7 >> 0x1f;
    0x00010bba sbc.w r2, r2, r0, asr 31                          |     __asm ("sbc.w r2, r2, r0, asr 31");
    0x00010bbe cmp r7, r3                                        |     
    0x00010bc0 sbcs r1, r2                                       |     __asm ("sbcs r1, r2");
    0x00010bc2 bge 0x10c12                                       |     
                                                                 |     while (1) {
    0x00010bc4 ldr.w sb, [pc, 0x80]                              |         sb = *(0x00010c48);
    0x00010bc8 mov r1, r4                                        |         r1 = r4;
    0x00010bca mov r0, r8                                        |         r0 = r8;
    0x00010bcc add sb, pc                                        |         sb += pc;
    0x00010bce ldr.w r3, [sb, 0x2c]                              |         r3 = *((sb + 0x2c));
    0x00010bd2 blx r3                                            |         r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x00010bd4 mov r7, r0                                        |         r7 = r0;
                                                                 |         if (r0 == 0) {
    0x00010bd6 cbz r0, 0x10c18                                   |             goto label_3;
                                                                 |         }
                                                                 | label_1:
    0x00010bd8 ldr r3, [pc, 0x70]                                |         
    0x00010bda mov r0, r7                                        |         r0 = r7;
    0x00010bdc add r3, pc                                        |         
    0x00010bde ldr r3, [r3, 0x30]                                |         r3 = *(0x2185c);
    0x00010be0 blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00010be2 ldr r3, [pc, 0x6c]                                |         
    0x00010be4 subs r0, r0, r6                                   |         r0 -= r6;
    0x00010be6 add r3, pc                                        |         r3 = 0x2183c;
    0x00010be8 ldr r1, [r3, 0x78]                                |         r1 = *(0x218b4);
    0x00010bea ldr.w r2, [r3, 0xa0]                              |         r2 = *(0x218dc);
    0x00010bee add r0, r1                                        |         r0 += r1;
    0x00010bf0 cmp r0, r2                                        |         
    0x00010bf2 str r0, [r3, 0x78]                                |         *((r3 + 0x78)) = r0;
    0x00010bf4 it gt                                             |         
                                                                 |         if (r0 <= r2) {
    0x00010bf6 strgt r0, [r3, 0xa0]                              |             *((r3 + 0xa0)) = r0;
                                                                 |         }
                                                                 | label_0:
    0x00010bfa ldr r3, [pc, 0x58]                                |         
    0x00010bfc add r3, pc                                        |         r3 = 0x21856;
    0x00010bfe ldr r0, [r3, 0x50]                                |         r0 = *(0x218a6);
    0x00010c00 blx 0x63dc                                        |         fcn_000063dc ();
    0x00010c04 mov r0, r7                                        |         r0 = r7;
    0x00010c06 pop.w {r4, r5, r6, r7, r8, sb, sl, pc}            |         
                                                                 | label_2:
    0x00010c0a mov r7, r8                                        |         r7 = r8;
    0x00010c0c mov r0, r7                                        |         r0 = r7;
    0x00010c0e pop.w {r4, r5, r6, r7, r8, sb, sl, pc}            |         
    0x00010c12 bl 0xd204                                         |         fcn_0000d204 (r0);
    0x00010c16 b 0x10bc4                                         |         
                                                                 |     }
                                                                 | label_3:
    0x00010c18 ldr r3, [pc, 0x3c]                                |     
    0x00010c1a add r3, pc                                        |     
    0x00010c1c ldr r3, [r3, 0x60]                                |     r3 = *(0x218d6);
    0x00010c1e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00010c20 beq 0x10bfa                                       |         goto label_0;
                                                                 |     }
    0x00010c22 mov r0, r5                                        |     r0 = r5;
    0x00010c24 bl 0xd204                                         |     fcn_0000d204 (r0);
    0x00010c28 ldr.w r3, [sb, 0x2c]                              |     r3 = *((sb + 0x2c));
    0x00010c2c mov r1, r4                                        |     r1 = r4;
    0x00010c2e mov r0, r8                                        |     r0 = r8;
    0x00010c30 blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x00010c32 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00010c34 beq 0x10bfa                                       |         goto label_0;
                                                                 |     }
    0x00010c36 mov r7, r0                                        |     r7 = r0;
    0x00010c38 b 0x10bd8                                         |     goto label_1;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x10c5c */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00010c5c ()                                      | void fcn_00010c5c (uint32_t arg1, uint32_t arg2) {
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x00010c5c push.w {r3, r4, r5, r6, r7, r8, sb, lr}           |     
    0x00010c60 ldr r7, [r0, 0x60]                                |     r7 = *((r0 + 0x60));
    0x00010c62 cmp r7, r1                                        |     
                                                                 |     if (r7 >= r1) {
    0x00010c64 bge 0x10c6c                                       |         goto label_4;
                                                                 |     }
    0x00010c66 ldrb r3, [r0, 6]                                  |     r3 = *((r0 + 6));
    0x00010c68 mov r4, r0                                        |     r4 = r0;
    0x00010c6a cbnz r3, 0x10c72                                  |     
                                                                 |     while (r7 == r8) {
                                                                 | label_4:
    0x00010c6c movs r0, 0                                        |         r0 = 0;
                                                                 | label_2:
    0x00010c6e pop.w {r3, r4, r5, r6, r7, r8, sb, pc}            |         
    0x00010c72 ldr r0, [r0, 0x5c]                                |         r0 = *((r0 + 0x5c));
    0x00010c74 mov r8, r1                                        |         r8 = r1;
    0x00010c76 add.w r1, r1, r1, lsl 1                           |         r1 += (r1 << 1);
    0x00010c7a lsls r1, r1, 4                                    |         r1 <<= 4;
    0x00010c7c cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00010c7e beq 0x10d2e                                       |             goto label_5;
                                                                 |         }
    0x00010c80 cmp r1, 0                                         |         
                                                                 |         if (r1 <= 0) {
    0x00010c82 ble 0x10d38                                       |             goto label_6;
                                                                 |         }
    0x00010c84 movw r3, 0xfeff                                   |         
    0x00010c88 movt r3, 0x7fff                                   |         r3 = 0x7ffffeff;
    0x00010c8c cmp r1, r3                                        |         
                                                                 |         if (r1 > r3) {
    0x00010c8e bgt 0x10d2a                                       |             goto label_7;
                                                                 |         }
    0x00010c90 bl 0x10b60                                        |         r0 = fcn_00010b60 (r0, r1);
    0x00010c94 mov r6, r0                                        |         r6 = r0;
                                                                 | label_3:
    0x00010c96 cmp r6, 0                                         |         
                                                                 |         if (r6 == 0) {
    0x00010c98 beq 0x10d2a                                       |             goto label_7;
                                                                 |         }
    0x00010c9a add.w r0, r7, r7, lsl 1                           |         r0 = r7 + (r7 << 1);
    0x00010c9e sub.w r2, r8, r7                                  |         r2 = r8 - r7;
    0x00010ca2 add.w r2, r2, r2, lsl 1                           |         r2 += (r2 << 1);
    0x00010ca6 movs r1, 0                                        |         r1 = 0;
    0x00010ca8 add.w r0, r6, r0, lsl 4                           |         r0 = r6 + (r0 << 4);
    0x00010cac lsls r2, r2, 4                                    |         r2 <<= 4;
    0x00010cae mov r5, r0                                        |         r5 = r0;
    0x00010cb0 blx 0x5fcc                                        |         fcn_00005fcc ();
    0x00010cb4 str r6, [r4, 0x5c]                                |         *((r4 + 0x5c)) = r6;
    0x00010cb6 b 0x10ce4                                         |         goto label_8;
                                                                 | label_0:
    0x00010cb8 movs r1, 0                                        |         r1 = 0;
    0x00010cba blx 0x5fcc                                        |         fcn_00005fcc ();
    0x00010cbe ldr.w r3, [r4, 0xe0]                              |         r3 = *((r4 + 0xe0));
    0x00010cc2 str.w sb, [r6]                                    |         __asm ("str.w sb, [r6]");
    0x00010cc6 str r6, [r5, 0x10]                                |         *((r5 + 0x10)) = r6;
                                                                 |         if (r3 != 0) {
    0x00010cc8 cbz r3, 0x10cda                                   |             
    0x00010cca ldr r2, [r3, 0x44]                                |             r2 = *((r3 + 0x44));
    0x00010ccc str r2, [r5, 0x1c]                                |             *((r5 + 0x1c)) = r2;
    0x00010cce ldr r2, [r3, 0x4c]                                |             r2 = *((r3 + 0x4c));
    0x00010cd0 str r2, [r5, 0x20]                                |             *((r5 + 0x20)) = r2;
    0x00010cd2 ldr r2, [r3, 0x50]                                |             r2 = *((r3 + 0x50));
    0x00010cd4 str r2, [r5, 0x24]                                |             *((r5 + 0x24)) = r2;
    0x00010cd6 ldr r3, [r3, 0x68]                                |             r3 = *((r3 + 0x68));
    0x00010cd8 str r3, [r5, 0x28]                                |             *((r5 + 0x28)) = r3;
                                                                 |         }
    0x00010cda cmp r7, r8                                        |         
    0x00010cdc add.w r5, r5, 0x30                                |         r5 += 0x30;
    0x00010ce0 str r7, [r4, 0x60]                                |         *((r4 + 0x60)) = r7;
    0x00010ce2 beq 0x10c6c                                       |         
                                                                 |     }
                                                                 | label_8:
    0x00010ce4 ldr r3, [r4, 0x40]                                |     r3 = *((r4 + 0x40));
    0x00010ce6 mov.w r0, 0x200                                   |     r0 = 0x200;
    0x00010cea ldr.w sb, [r4, 0x18]                              |     sb = *((r4 + 0x18));
    0x00010cee adds r7, 1                                        |     r7++;
    0x00010cf0 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00010cf2 str.w sb, [r5, 0x14]                              |     __asm ("str.w sb, [r5, 0x14]");
                                                                 |     if (r3 == 0) {
    0x00010cf6 cbz r3, 0x10d22                                   |         goto label_9;
                                                                 |     }
    0x00010cf8 ldrd r1, r3, [r4, 0x48]                           |     __asm ("ldrd r1, r3, [r4, 0x48]");
    0x00010cfc cmp r1, 1                                         |     
    0x00010cfe sbcs r2, r3, 0                                    |     __asm ("sbcs r2, r3, 0");
                                                                 |     if (r1 < 1) {
    0x00010d02 blt 0x10d22                                       |         goto label_9;
                                                                 |     }
                                                                 | label_1:
    0x00010d04 ldr r2, [r4, 0x34]                                |     r2 = *((r4 + 0x34));
    0x00010d06 strd r1, r3, [r5]                                 |     __asm ("strd r1, r3, [r5]");
    0x00010d0a str r2, [r5, 0x18]                                |     *((r5 + 0x18)) = r2;
    0x00010d0c bl 0xd300                                         |     fcn_0000d300 (r0, r1, r2, r3, r4);
    0x00010d10 mov.w r2, 0x200                                   |     r2 = 0x200;
    0x00010d14 mov r6, r0                                        |     r6 = r0;
    0x00010d16 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00010d18 bne 0x10cb8                                       |         goto label_0;
                                                                 |     }
    0x00010d1a movs r0, 7                                        |     r0 = 7;
    0x00010d1c str r6, [r5, 0x10]                                |     *((r5 + 0x10)) = r6;
    0x00010d1e pop.w {r3, r4, r5, r6, r7, r8, sb, pc}            |     
                                                                 | label_9:
    0x00010d22 ldr.w r1, [r4, 0x94]                              |     r1 = *((r4 + 0x94));
    0x00010d26 movs r3, 0                                        |     r3 = 0;
    0x00010d28 b 0x10d04                                         |     goto label_1;
                                                                 | label_7:
    0x00010d2a movs r0, 7                                        |     r0 = 7;
    0x00010d2c b 0x10c6e                                         |     goto label_2;
                                                                 | label_5:
    0x00010d2e mov r0, r1                                        |     r0 = r1;
    0x00010d30 bl 0xd300                                         |     r0 = fcn_0000d300 (r0, r1, r2, r3, r4);
    0x00010d34 mov r6, r0                                        |     r6 = r0;
    0x00010d36 b 0x10c96                                         |     goto label_3;
                                                                 | label_6:
    0x00010d38 blx 0x6050                                        |     fcn_00006050 ();
    0x00010d3c movs r0, 7                                        |     r0 = 7;
    0x00010d3e b 0x10c6e                                         |     goto label_2;
                                                                 | }
    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x110ec */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) fcn.000110ec ()                              | void fcn_000110ec (int16_t arg1, int16_t arg2, int16_t arg3) {
                                                         |     int16_t var_50h;
                                                         |     int16_t var_54h;
                                                         |     int16_t var_ch;
                                                         |     r0 = arg1;
                                                         |     r1 = arg2;
                                                         |     r2 = arg3;
    0x000110ec push.w {r4, r5, r6, r7, r8, sb, lr}       |     
    0x000110f0 mov r5, r2                                |     r5 = r2;
    0x000110f2 ldr r2, [pc, 0x120]                       |     
    0x000110f4 sub sp, 0x14                              |     
    0x000110f6 mov r6, r1                                |     r6 = r1;
    0x000110f8 mov r4, r0                                |     r4 = r0;
    0x000110fa ldr r3, [pc, 0x11c]                       |     r3 = *(0x1121a);
    0x000110fc add r2, pc                                |     r2 = 0x22316;
    0x000110fe ldr r7, [r1]                              |     r7 = *(r1);
    0x00011100 ldr.w r1, [r0, 0x98]                      |     r1 = *((r0 + 0x98));
    0x00011104 ldr r3, [r2, r3]                          |     
    0x00011106 ldr r3, [r3]                              |     r3 = *(0x22316);
    0x00011108 str r3, [sp, 0xc]                         |     var_ch = r3;
    0x0001110a mov.w r3, 0                               |     r3 = 0;
    0x0001110e ldrb r3, [r0, 0xf]                        |     r3 = *((r0 + 0xf));
                                                         |     if (r3 == 0) {
    0x00011110 cbz r3, 0x11158                           |         goto label_3;
                                                         |     }
    0x00011112 ldr r3, [r0, 0x18]                        |     r3 = *((r0 + 0x18));
    0x00011114 cbz r3, 0x11158                           |     
                                                         |     while (r3 != 0) {
                                                         | label_0:
    0x00011116 str r1, [r6]                              |         *(r6) = r1;
                                                         | label_1:
    0x00011118 cmp r5, 0                                 |         
    0x0001111a ldr.w r3, [r4, 0xcc]                      |         r3 = *((r4 + 0xcc));
    0x0001111e ite lt                                    |         
                                                         |         if (r5 < 0) {
    0x00011120 ldrshlt r2, [r4, 0x8e]                    |             __asm ("ldrshlt r2, [r4, 0x8e]");
                                                         |         }
                                                         |         if (r5 >= 0) {
    0x00011124 sxth r2, r5                               |             __asm ("sxth r2, r5");
                                                         |         }
    0x00011126 strh.w r2, [r4, 0x8e]                     |         *((r4 + 0x8e)) = r2;
                                                         |         if (r3 != 0) {
    0x0001112a cbz r3, 0x11136                           |             
    0x0001112c ldr.w r1, [r4, 0x98]                      |             r1 = *((r4 + 0x98));
    0x00011130 ldr.w r0, [r4, 0xd4]                      |             r0 = *((r4 + 0xd4));
    0x00011134 blx r3                                    |             uint32_t (*r3)(uint32_t, uint32_t) (r0, r1);
                                                         |         }
    0x00011136 mov r0, r4                                |         r0 = r4;
    0x00011138 bl 0x7a14                                 |         fcn_00007a14 (r0);
    0x0001113c movs r0, 0                                |         r0 = 0;
                                                         | label_2:
    0x0001113e ldr r2, [pc, 0xdc]                        |         
    0x00011140 ldr r3, [pc, 0xd4]                        |         r3 = *(0x11218);
    0x00011142 add r2, pc                                |         r2 = 0x22364;
    0x00011144 ldr r3, [r2, r3]                          |         r3 = *(0x22364);
    0x00011146 ldr r2, [r3]                              |         r2 = *(0x22364);
    0x00011148 ldr r3, [sp, 0xc]                         |         r3 = var_ch;
    0x0001114a eors r2, r3                               |         r2 ^= r3;
    0x0001114c mov.w r3, 0                               |         r3 = 0;
                                                         |         if (r2 != r3) {
    0x00011150 bne 0x1120e                               |             goto label_4;
                                                         |         }
    0x00011152 add sp, 0x14                              |         
    0x00011154 pop.w {r4, r5, r6, r7, r8, sb, pc}        |         
                                                         | label_3:
    0x00011158 ldr.w r3, [r4, 0xdc]                      |         r3 = *((r4 + 0xdc));
    0x0001115c ldr r3, [r3, 0xc]                         |         r3 = *((r3 + 0xc));
    0x0001115e cmp r3, 0                                 |         
    0x00011160 bne 0x11116                               |         
                                                         |     }
    0x00011162 cmp r7, 0                                 |     
                                                         |     if (r7 == 0) {
    0x00011164 beq 0x11116                               |         goto label_0;
                                                         |     }
    0x00011166 cmp r1, r7                                |     
                                                         |     if (r1 == r7) {
    0x00011168 beq 0x11118                               |         goto label_1;
                                                         |     }
    0x0001116a ldrb r3, [r4, 0x10]                       |     r3 = *((r4 + 0x10));
    0x0001116c vmov.i32 d16, 0                           |     __asm ("vmov.i32 d16, 0");
    0x00011170 vstr d16, [sp]                            |     __asm ("vstr d16, [sp]");
                                                         |     if (r3 != 0) {
    0x00011174 cbz r3, 0x11186                           |         
    0x00011176 ldr r0, [r4, 0x3c]                        |         r0 = *((r4 + 0x3c));
    0x00011178 ldr r3, [r0]                              |         r3 = *(r0);
                                                         |         if (r3 == 0) {
    0x0001117a cbz r3, 0x11186                           |             goto label_5;
                                                         |         }
    0x0001117c ldr r3, [r3, 0x18]                        |         r3 = *((r3 + 0x18));
    0x0001117e mov r1, sp                                |         r1 = sp;
    0x00011180 blx r3                                    |         r0 = uint32_t (*r3)(uint32_t, uint32_t) (r1, r3);
    0x00011182 cmp r0, 0                                 |         
                                                         |         if (r0 != 0) {
    0x00011184 bne 0x111fc                               |             goto label_6;
                                                         |         }
                                                         |     }
                                                         | label_5:
    0x00011186 mov r0, r7                                |     r0 = r7;
    0x00011188 bl 0xdc94                                 |     r0 = fcn_0000dc94 (r0);
    0x0001118c mov r8, r0                                |     r8 = r0;
    0x0001118e cmp r0, 0                                 |     
                                                         |     if (r0 == 0) {
    0x00011190 beq 0x11204                               |         goto label_7;
                                                         |     }
    0x00011192 ldr r3, [r4, 0x58]                        |     r3 = *((r4 + 0x58));
                                                         |     if (r3 == 0) {
    0x00011194 cbz r3, 0x111a0                           |         goto label_8;
                                                         |     }
    0x00011196 movs r2, 1                                |     r2 = 1;
                                                         |     do {
    0x00011198 str r2, [r3, 0x10]                        |         *((r3 + 0x10)) = r2;
    0x0001119a ldr r3, [r3, 0x2c]                        |         r3 = *((r3 + 0x2c));
    0x0001119c cmp r3, 0                                 |         
    0x0001119e bne 0x11198                               |         
                                                         |     } while (r3 != 0);
                                                         | label_8:
    0x000111a0 ldr.w r0, [r4, 0xdc]                      |     r0 = *((r4 + 0xdc));
    0x000111a4 movs r1, 0                                |     r1 = 0;
    0x000111a6 bl 0x8e8c                                 |     fcn_00008e8c (r0, r1);
    0x000111aa ldr r0, [sp]                              |     r0 = *(sp);
    0x000111ac mov.w sb, 0                               |     sb = 0;
    0x000111b0 ldr r1, [sp, 4]                           |     r1 = var_54h;
    0x000111b2 mov r2, r7                                |     r2 = r7;
    0x000111b4 mov r3, sb                                |     r3 = sb;
    0x000111b6 adds r0, r7, r0                           |     r0 = r7 + r0;
    0x000111b8 adc r1, r1, 0                             |     __asm ("adc r1, r1, 0");
    0x000111bc subs r0, 1                                |     r0--;
    0x000111be sbc r1, r1, 0                             |     __asm ("sbc r1, r1, 0");
    0x000111c2 bl 0x5e500                                |     fcn_0005e500 (r0, r1, r2, r3);
    0x000111c6 str.w r7, [r4, 0x98]                      |     __asm ("str.w r7, [r4, 0x98]");
    0x000111ca str r0, [r4, 0x18]                        |     *((r4 + 0x18)) = r0;
    0x000111cc ldr.w r0, [r4, 0xd8]                      |     r0 = *((r4 + 0xd8));
    0x000111d0 bl 0x11040                                |     fcn_00011040 (r0);
    0x000111d4 str.w r8, [r4, 0xd8]                      |     __asm ("str.w r8, [r4, 0xd8]");
    0x000111d8 ldr.w r8, [r4, 0xdc]                      |     r8 = *((r4 + 0xdc));
    0x000111dc ldr.w r0, [r8, 0x28]                      |     r0 = *((r8 + 0x28));
                                                         |     if (r0 != 0) {
    0x000111e0 cbz r0, 0x111f0                           |         
    0x000111e2 ldr r3, [pc, 0x3c]                        |         
    0x000111e4 add r3, pc                                |         
    0x000111e6 ldr.w r3, [r3, 0x94]                      |         r3 = *(0x2249e);
    0x000111ea blx r3                                    |         uint32_t (*r3)(uint32_t) (r3);
    0x000111ec strd sb, sb, [r8, 0x28]                   |         __asm ("strd sb, sb, [r8, 0x28]");
                                                         |     }
    0x000111f0 ldr.w r3, [r4, 0x98]                      |     r3 = *((r4 + 0x98));
    0x000111f4 str.w r7, [r8, 0x14]                      |     __asm ("str.w r7, [r8, 0x14]");
    0x000111f8 str r3, [r6]                              |     *(r6) = r3;
    0x000111fa b 0x11118                                 |     goto label_1;
                                                         | label_6:
    0x000111fc ldr.w r3, [r4, 0x98]                      |     r3 = *((r4 + 0x98));
    0x00011200 str r3, [r6]                              |     *(r6) = r3;
    0x00011202 b 0x1113e                                 |     goto label_2;
                                                         | label_7:
    0x00011204 ldr.w r3, [r4, 0x98]                      |     r3 = *((r4 + 0x98));
    0x00011208 movs r0, 7                                |     r0 = 7;
    0x0001120a str r3, [r6]                              |     *(r6) = r3;
    0x0001120c b 0x1113e                                 |     goto label_2;
                                                         | label_4:
    0x0001120e blx 0x6498                                |     fcn_00006498 ();
    0x00011212 nop                                       |     
    0x00011214 ldr r4, [r3, 0x34]                        |     r4 = *((r3 + 0x34));
    0x00011216 movs r6, r0                               |     r6 = r0;
    0x00011218 lsls r0, r1, 0xe                          |     r0 = r1 << 0xe;
    0x0001121a movs r0, r0                               |     
    0x0001121c ldr r6, [r2, 0x30]                        |     r6 = *((r2 + 0x30));
    0x0001121e movs r6, r0                               |     r6 = r0;
    0x00011220 ldr r0, [r4, 0x60]                        |     r0 = *((r4 + 0x60));
    0x00011222 movs r6, r0                               |     r6 = r0;
                                                         | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x11224 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00011224 ()                                      | void fcn_00011224 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_ch_2;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_50h;
                                                                 |     int16_t var_54h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00011224 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x00011228 mov r5, r0                                        |     r5 = r0;
    0x0001122a ldr r4, [pc, 0x190]                               |     
    0x0001122c mov fp, r1                                        |     
    0x0001122e sub sp, 0x2c                                      |     
    0x00011230 mov r8, r2                                        |     r8 = r2;
    0x00011232 ldr r0, [pc, 0x18c]                               |     r0 = *(0x113c2);
    0x00011234 mov r7, r3                                        |     r7 = r3;
    0x00011236 add r4, pc                                        |     r4 = 0x225f8;
    0x00011238 ldr.w sb, [sp, 0x50]                              |     sb = var_50h;
    0x0001123c ldr.w sl, [sp, 0x54]                              |     sl = var_54h;
    0x00011240 movs r3, 0                                        |     r3 = 0;
    0x00011242 ldr r0, [r4, r0]                                  |     
    0x00011244 ldrd r4, r6, [r5, 0x48]                           |     __asm ("ldrd r4, r6, [r5, 0x48]");
    0x00011248 ldr.w r2, [r5, 0x94]                              |     r2 = *((r5 + 0x94));
    0x0001124c ldr r0, [r0]                                      |     r0 = *(0x225f8);
    0x0001124e str r0, [sp, 0x24]                                |     var_24h = r0;
    0x00011250 mov.w r0, 0                                       |     r0 = 0;
    0x00011254 orrs.w r1, r4, r6                                 |     r1 = r4 | r6;
                                                                 |     if (r1 != r4) {
    0x00011258 beq 0x1127c                                       |         
    0x0001125a subs r0, r4, 1                                    |         r0 = r4 - 1;
    0x0001125c str r2, [sp, 0xc]                                 |         var_ch_2 = r2;
    0x0001125e sbc r1, r6, 0                                     |         __asm ("sbc r1, r6, 0");
    0x00011262 bl 0x5e500                                        |         fcn_0005e500 (r0, r1, r2, r3);
    0x00011266 ldr r2, [sp, 0xc]                                 |         r2 = var_ch_2;
    0x00011268 adds r0, 1                                        |         r0++;
    0x0001126a adc r1, r1, 0                                     |         __asm ("adc r1, r1, 0");
    0x0001126e umull r4, r6, r0, r2                              |         r4:r6 = r0 * r2;
    0x00011272 mla r6, r2, r1, r6                                |         __asm ("mla r6, r2, r1, r6");
    0x00011276 adds r2, r4, r2                                   |         r2 = r4 + r2;
    0x00011278 adc r3, r6, 0                                     |         __asm ("adc r3, r6, 0");
                                                                 |     }
    0x0001127c cmp r8, r2                                        |     
    0x0001127e strd r4, r6, [r5, 0x48]                           |     __asm ("strd r4, r6, [r5, 0x48]");
    0x00011282 sbcs.w r3, r7, r3                                 |     __asm ("sbcs.w r3, r7, r3");
                                                                 |     if (r8 < r2) {
    0x00011286 blt 0x112b0                                       |         goto label_1;
                                                                 |     }
    0x00011288 cmp.w fp, 0                                       |     
    0x0001128c beq 0x112cc                                       |     
                                                                 |     while (r3 != r6) {
    0x0001128e ldr r0, [r5, 0x40]                                |         r0 = *((r5 + 0x40));
    0x00011290 add r7, sp, 0x1c                                  |         r7 += var_1ch;
    0x00011292 movs r2, 8                                        |         r2 = 8;
    0x00011294 mov r1, r7                                        |         r1 = r7;
    0x00011296 ldr r3, [r0]                                      |         r3 = *(r0);
    0x00011298 strd r4, r6, [sp]                                 |         __asm ("strd r4, r6, [sp]");
    0x0001129c ldr r3, [r3, 8]                                   |         r3 = *((r3 + 8));
    0x0001129e blx r3                                            |         r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
                                                                 |         if (r0 == 0) {
    0x000112a0 cbnz r0, 0x112b2                                  |             
    0x000112a2 ldr r2, [sp, 0x1c]                                |             r2 = var_1ch;
    0x000112a4 movw r3, 0xd5d9                                   |             
    0x000112a8 movt r3, 0xf905                                   |             r3 = 0xf905d5d9;
    0x000112ac cmp r2, r3                                        |             
                                                                 |             if (r2 == r3) {
    0x000112ae beq 0x11336                                       |                 goto label_4;
                                                                 |             }
                                                                 | label_1:
    0x000112b0 movs r0, 0x65                                     |             r0 = 0x65;
                                                                 |         }
                                                                 | label_0:
    0x000112b2 ldr r2, [pc, 0x110]                               |         
    0x000112b4 ldr r3, [pc, 0x108]                               |         r3 = *(0x113c0);
    0x000112b6 add r2, pc                                        |         r2 = 0x22680;
    0x000112b8 ldr r3, [r2, r3]                                  |         r3 = *(0x22680);
    0x000112ba ldr r2, [r3]                                      |         r2 = *(0x22680);
    0x000112bc ldr r3, [sp, 0x24]                                |         r3 = var_24h;
    0x000112be eors r2, r3                                       |         r2 ^= r3;
    0x000112c0 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x000112c4 bne 0x113b8                                       |             goto label_5;
                                                                 |         }
    0x000112c6 add sp, 0x2c                                      |         
    0x000112c8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
    0x000112cc ldrd r2, r3, [r5, 0x50]                           |         __asm ("ldrd r2, r3, [r5, 0x50]");
    0x000112d0 cmp r3, r6                                        |         
    0x000112d2 it eq                                             |         
                                                                 |         if (r3 == r6) {
    0x000112d4 cmpeq r2, r4                                      |             __asm ("cmpeq r2, r4");
                                                                 |         }
    0x000112d6 bne 0x1128e                                       |         
                                                                 |     }
                                                                 | label_2:
    0x000112d8 adds.w r2, r4, 8                                  |     r2 = r4 + 8;
    0x000112dc str.w sb, [sp]                                    |     __asm ("str.w sb, [sp]");
    0x000112e0 adc r3, r6, 0                                     |     __asm ("adc r3, r6, 0");
    0x000112e4 ldr r0, [r5, 0x40]                                |     r0 = *((r5 + 0x40));
    0x000112e6 bl 0x7898                                         |     r0 = fcn_00007898 (r0, r1, r2, r3);
    0x000112ea cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000112ec bne 0x112b2                                       |         goto label_0;
                                                                 |     }
    0x000112ee adds.w r2, r4, 0xc                                |     r2 = r4 + 0xc;
    0x000112f2 add.w r3, r5, 0x30                                |     r3 = r5 + 0x30;
    0x000112f6 str r3, [sp]                                      |     *(sp) = r3;
    0x000112f8 adc r3, r6, 0                                     |     __asm ("adc r3, r6, 0");
    0x000112fc ldr r0, [r5, 0x40]                                |     r0 = *((r5 + 0x40));
    0x000112fe bl 0x7898                                         |     r0 = fcn_00007898 (r0, r1, r2, r3);
    0x00011302 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00011304 bne 0x112b2                                       |         goto label_0;
                                                                 |     }
    0x00011306 adds.w r2, r4, 0x10                               |     r2 = r4 + 0x10;
    0x0001130a str.w sl, [sp]                                    |     __asm ("str.w sl, [sp]");
    0x0001130e adc r3, r6, 0                                     |     __asm ("adc r3, r6, 0");
    0x00011312 ldr r0, [r5, 0x40]                                |     r0 = *((r5 + 0x40));
    0x00011314 bl 0x7898                                         |     r0 = fcn_00007898 (r0, r1, r2, r3);
    0x00011318 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0001131a bne 0x112b2                                       |         goto label_0;
                                                                 |     }
    0x0001131c ldrd r1, r2, [r5, 0x48]                           |     __asm ("ldrd r1, r2, [r5, 0x48]");
    0x00011320 orrs.w r3, r1, r2                                 |     r3 = r1 | r2;
                                                                 |     if (r3 == r1) {
    0x00011324 beq 0x11346                                       |         goto label_6;
                                                                 |     }
                                                                 | label_3:
    0x00011326 ldr.w r3, [r5, 0x94]                              |     r3 = *((r5 + 0x94));
    0x0001132a adds r3, r3, r1                                   |     r3 += r1;
    0x0001132c adc r2, r2, 0                                     |     __asm ("adc r2, r2, 0");
    0x00011330 strd r3, r2, [r5, 0x48]                           |     __asm ("strd r3, r2, [r5, 0x48]");
    0x00011334 b 0x112b2                                         |     goto label_0;
                                                                 | label_4:
    0x00011336 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00011338 movw r3, 0xa120                                   |     
    0x0001133c movt r3, 0xd763                                   |     r3 = 0xd763a120;
    0x00011340 cmp r2, r3                                        |     
                                                                 |     if (r2 != r3) {
    0x00011342 bne 0x112b0                                       |         goto label_1;
                                                                 |     }
    0x00011344 b 0x112d8                                         |     goto label_2;
                                                                 | label_6:
    0x00011346 adds.w r2, r4, 0x14                               |     r2 = r4 + 0x14;
    0x0001134a add r3, sp, 0x18                                  |     r3 += var_18h;
    0x0001134c str r3, [sp]                                      |     *(sp) = r3;
    0x0001134e adc r3, r6, 0                                     |     __asm ("adc r3, r6, 0");
    0x00011352 ldr r0, [r5, 0x40]                                |     r0 = *((r5 + 0x40));
    0x00011354 bl 0x7898                                         |     r0 = fcn_00007898 (r0, r1, r2, r3);
    0x00011358 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0001135a bne 0x112b2                                       |         goto label_0;
                                                                 |     }
    0x0001135c adds.w r2, r4, 0x18                               |     r2 = r4 + 0x18;
    0x00011360 add r4, sp, 0x14                                  |     r4 += var_14h;
    0x00011362 ldr r0, [r5, 0x40]                                |     r0 = *((r5 + 0x40));
    0x00011364 adc r3, r6, 0                                     |     __asm ("adc r3, r6, 0");
    0x00011368 str r4, [sp]                                      |     *(sp) = r4;
    0x0001136a bl 0x7898                                         |     r0 = fcn_00007898 (r0, r1, r2, r3);
    0x0001136e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00011370 bne 0x112b2                                       |         goto label_0;
                                                                 |     }
    0x00011372 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
                                                                 |     if (r3 == 0) {
    0x00011374 cbnz r3, 0x1137c                                  |         
    0x00011376 ldr.w r3, [r5, 0x98]                              |         r3 = *((r5 + 0x98));
    0x0001137a str r3, [sp, 0x14]                                |         var_14h = r3;
                                                                 |     }
    0x0001137c cmp.w r3, 0x200                                   |     
                                                                 |     if (r3 <= 0x200) {
    0x00011380 blo 0x112b0                                       |         goto label_1;
                                                                 |     }
    0x00011382 ldr r6, [sp, 0x18]                                |     r6 = var_18h;
    0x00011384 movw r2, 0xffe0                                   |     r2 = 0xffe0;
    0x00011388 sub.w r1, r6, 0x20                                |     r1 = r6 - 0x20;
    0x0001138c cmp.w r3, 0x10000                                 |     
    0x00011390 it ls                                             |     
                                                                 |     if (r3 > 0x10000) {
    0x00011392 cmpls r1, r2                                      |         __asm ("cmpls r1, r2");
                                                                 |         goto label_7;
                                                                 |     }
                                                                 |     if (r3 > 0x10000) {
                                                                 | label_7:
    0x00011394 bhi 0x112b0                                       |         goto label_1;
                                                                 |     }
    0x00011396 subs r2, r3, 1                                    |     r2 = r3 - 1;
    0x00011398 ands r3, r2                                       |     r3 &= r2;
    0x0001139a subs r2, r6, 1                                    |     r2 = r6 - 1;
    0x0001139c ands r2, r6                                       |     r2 &= r6;
    0x0001139e orrs r3, r2                                       |     r3 |= r2;
                                                                 |     if (r3 != r2) {
    0x000113a0 bne 0x112b0                                       |         goto label_1;
                                                                 |     }
    0x000113a2 mov.w r2, -1                                      |     r2 = -1;
    0x000113a6 mov r1, r4                                        |     r1 = r4;
    0x000113a8 mov r0, r5                                        |     r0 = r5;
    0x000113aa bl 0x110ec                                        |     fcn_000110ec (r0, r1, r2);
    0x000113ae ldrd r1, r2, [r5, 0x48]                           |     __asm ("ldrd r1, r2, [r5, 0x48]");
    0x000113b2 str.w r6, [r5, 0x94]                              |     __asm ("str.w r6, [r5, 0x94]");
    0x000113b6 b 0x11326                                         |     goto label_3;
                                                                 | label_5:
    0x000113b8 blx 0x6498                                        |     fcn_00006498 ();
    0x000113bc ldr r2, [r4, 0x20]                                |     r2 = *((r4 + 0x20));
    0x000113be movs r6, r0                                       |     r6 = r0;
    0x000113c0 lsls r0, r1, 0xe                                  |     r0 = r1 << 0xe;
    0x000113c2 movs r0, r0                                       |     
    0x000113c4 ldr r2, [r4, 0x18]                                |     r2 = *((r4 + 0x18));
    0x000113c6 movs r6, r0                                       |     r6 = r0;
                                                                 | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x113c8 */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) fcn.000113c8 ()                                  | void fcn_000113c8 (int16_t arg1, int16_t arg2) {
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
    0x000113c8 bhs 0x2bdd8                                   |     
                                                             |     if (? == ?) {
    0x000113cc beq 0x11462                                   |         goto label_4;
                                                             |     }
    0x000113ce push.w {r4, r5, r6, r7, r8, sb, sl, lr}       |     
    0x000113d2 movs r5, 0                                    |     r5 = 0;
    0x000113d4 mov sb, r0                                    |     sb = r0;
    0x000113d6 mov sl, r1                                    |     sl = r1;
    0x000113d8 mov r6, r5                                    |     r6 = r5;
    0x000113da movs r7, 1                                    |     r7 = 1;
                                                             | label_1:
    0x000113dc ldr.w r4, [sb, 0x2c]                          |     r4 = *((sb + 0x2c));
    0x000113e0 ldr.w r3, [r4, r5, lsl 2]                     |     offset_0 = r5 << 2;
                                                             |     r3 = *((r4 + offset_0));
    0x000113e4 add.w r4, r4, r5, lsl 2                       |     r4 += (r5 << 2);
                                                             |     if (r3 != 0) {
    0x000113e8 cbnz r3, 0x11406                              |         goto label_5;
                                                             |     }
    0x000113ea b 0x1144e                                     |     goto label_6;
                                                             | label_0:
    0x000113ec ldr r0, [r3]                                  |     r0 = *(r3);
    0x000113ee bl 0x11040                                    |     fcn_00011040 (r0);
    0x000113f2 ldr.w r3, [r8, 0xc]                           |     r3 = *((r8 + 0xc));
                                                             |     if (r3 == 0) {
    0x000113f6 cbz r3, 0x11402                               |         goto label_7;
                                                             |     }
    0x000113f8 ldr.w r2, [r8]                                |     r2 = *(r8);
    0x000113fc ldr r3, [r2, 0x10]                            |     r3 = *((r2 + 0x10));
    0x000113fe subs r3, 1                                    |     r3--;
    0x00011400 str r3, [r2, 0x10]                            |     *((r2 + 0x10)) = r3;
                                                             |     do {
                                                             | label_7:
    0x00011402 ldr r3, [r4]                                  |         r3 = *(r4);
                                                             |         if (r3 == 0) {
    0x00011404 cbz r3, 0x1144a                               |             goto label_8;
                                                             |         }
                                                             | label_5:
    0x00011406 ldr r2, [r3, 8]                               |         r2 = *((r3 + 8));
    0x00011408 cmp r2, sl                                    |         
    0x0001140a it lo                                         |         
                                                             |         if (r2 >= sl) {
    0x0001140c addlo r4, r3, 0x10                            |             r4 = r3 + 0x10;
                                                             |         }
    0x00011410 blo 0x11402                                   |         
                                                             |     } while (r2 <= sl);
    0x00011412 ldr.w r2, [sb, 0x24]                          |     r2 = *((sb + 0x24));
    0x00011416 ldrd r1, r8, [r3, 0x10]                       |     __asm ("ldrd r1, r8, [r3, 0x10]");
    0x0001141a subs r2, 1                                    |     r2--;
    0x0001141c str.w r2, [sb, 0x24]                          |     __asm ("str.w r2, [sb, 0x24]");
    0x00011420 str r1, [r4]                                  |     *(r4) = r1;
    0x00011422 ldrb r2, [r3, 0xc]                            |     r2 = *((r3 + 0xc));
    0x00011424 cmp r2, 0                                     |     
                                                             |     if (r2 != 0) {
    0x00011426 bne 0x113ec                                   |         goto label_0;
                                                             |     }
    0x00011428 ldr r2, [r3, 0x1c]                            |     r2 = *((r3 + 0x1c));
    0x0001142a ldr.w r0, [r8]                                |     r0 = *(r8);
    0x0001142e ldr r1, [r3, 0x18]                            |     r1 = *((r3 + 0x18));
                                                             |     if (r2 == 0) {
    0x00011430 cbz r2, 0x11458                               |         goto label_9;
                                                             |     }
    0x00011432 str r1, [r2, 0x18]                            |     *((r2 + 0x18)) = r1;
                                                             |     if (r1 == 0) {
    0x00011434 cbz r1, 0x1145e                               |         goto label_10;
                                                             |     }
                                                             | label_2:
    0x00011436 str r2, [r1, 0x1c]                            |     *((r1 + 0x1c)) = r2;
                                                             | label_3:
    0x00011438 strb r7, [r3, 0xc]                            |     *((r3 + 0xc)) = r7;
    0x0001143a ldr.w r2, [r8, 0x20]                          |     r2 = *((r8 + 0x20));
    0x0001143e strd r6, r6, [r3, 0x18]                       |     __asm ("strd r6, r6, [r3, 0x18]");
    0x00011442 subs r2, 1                                    |     r2--;
    0x00011444 str.w r2, [r8, 0x20]                          |     __asm ("str.w r2, [r8, 0x20]");
    0x00011448 b 0x113ec                                     |     goto label_0;
                                                             | label_8:
    0x0001144a ldr.w r2, [sb, 0x28]                          |     r2 = *((sb + 0x28));
                                                             | label_6:
    0x0001144e adds r5, 1                                    |     r5++;
    0x00011450 cmp r2, r5                                    |     
                                                             |     if (r2 > r5) {
    0x00011452 bhi 0x113dc                                   |         goto label_1;
                                                             |     }
    0x00011454 pop.w {r4, r5, r6, r7, r8, sb, sl, pc}        |     
                                                             | label_9:
    0x00011458 str r1, [r0, 0x14]                            |     *((r0 + 0x14)) = r1;
    0x0001145a cmp r1, 0                                     |     
                                                             |     if (r1 != 0) {
    0x0001145c bne 0x11436                                   |         goto label_2;
                                                             |     }
                                                             | label_10:
    0x0001145e str r2, [r0, 0x18]                            |     *((r0 + 0x18)) = r2;
    0x00011460 b 0x11438                                     |     goto label_3;
                                                             | label_4:
    0x00011462 bx lr                                         |     return;
                                                             | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x11e2c */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00011e2c ()                                      | void fcn_00011e2c (int16_t arg1) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h_2;
                                                                 |     int16_t var_0h_2;
                                                                 |     int16_t var_4h;
                                                                 |     r0 = arg1;
    0x00011e2c ldr.w ip, [pc, 0x80]                              |     ip = *(0x00011eb0);
    0x00011e30 movw r3, 0xfefe                                   |     
    0x00011e34 ldr r1, [pc, 0x7c]                                |     
    0x00011e36 movt r3, 0x7fff                                   |     r3 = 0x7ffffefe;
    0x00011e3a push {r4, r5, lr}                                 |     
    0x00011e3c subs r2, r0, 1                                    |     r2 = r0 - 1;
    0x00011e3e add ip, pc                                        |     
    0x00011e40 cmp r2, r3                                        |     
    0x00011e42 sub sp, 0xc                                       |     
    0x00011e44 it hi                                             |     
                                                                 |     if (r2 <= r3) {
    0x00011e46 movhi r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00011e48 ldr.w r1, [ip, r1]                                |     r1 = *((ip + r1));
    0x00011e4c ldr r1, [r1]                                      |     r1 = *(0x11eb4);
    0x00011e4e str r1, [sp, 4]                                   |     var_4h = r1;
    0x00011e50 mov.w r1, 0                                       |     r1 = 0;
                                                                 |     if (r2 > r3) {
    0x00011e54 bhi 0x11e74                                       |         goto label_16;
                                                                 |     }
    0x00011e56 ldr r3, [pc, 0x60]                                |     
    0x00011e58 mov r4, r0                                        |     r4 = r0;
    0x00011e5a add r3, pc                                        |     r3 = 0x23d18;
    0x00011e5c ldr r2, [r3]                                      |     r2 = *(0x23d18);
                                                                 |     if (r2 != 0) {
    0x00011e5e cbnz r2, 0x11e8e                                  |         goto label_17;
                                                                 |     }
    0x00011e60 ldr r3, [r3, 0x24]                                |     r3 = *((r3 + 0x24));
    0x00011e62 blx r3                                            |     r0 = uint32_t (*r3)(uint32_t) (r3);
    0x00011e64 mov r3, r0                                        |     r3 = r0;
                                                                 |     do {
                                                                 |         if (r3 != 0) {
    0x00011e66 cbz r3, 0x11e74                                   |             
    0x00011e68 mov r0, r3                                        |             r0 = r3;
    0x00011e6a mov r2, r4                                        |             r2 = r4;
    0x00011e6c movs r1, 0                                        |             r1 = 0;
    0x00011e6e blx 0x5fcc                                        |             r0 = fcn_00005fcc ();
    0x00011e72 mov r3, r0                                        |             r3 = r0;
                                                                 |         }
                                                                 | label_16:
    0x00011e74 ldr r1, [pc, 0x44]                                |         
    0x00011e76 ldr r2, [pc, 0x3c]                                |         r2 = *(0x11eb6);
    0x00011e78 add r1, pc                                        |         r1 = 0x23d38;
    0x00011e7a ldr r2, [r1, r2]                                  |         r2 = *(0x23d38);
    0x00011e7c ldr r1, [r2]                                      |         r1 = *(0x23d38);
    0x00011e7e ldr r2, [sp, 4]                                   |         r2 = var_4h;
    0x00011e80 eors r1, r2                                       |         r1 ^= r2;
    0x00011e82 mov.w r2, 0                                       |         r2 = 0;
                                                                 |         if (r1 != r2) {
    0x00011e86 bne 0x11eaa                                       |             goto label_18;
                                                                 |         }
    0x00011e88 mov r0, r3                                        |         r0 = r3;
    0x00011e8a add sp, 0xc                                       |         
    0x00011e8c pop {r4, r5, pc}                                  |         
                                                                 | label_17:
    0x00011e8e ldr r5, [pc, 0x30]                                |         
    0x00011e90 add r5, pc                                        |         r5 = 0x23d56;
    0x00011e92 ldr r0, [r5, 0x50]                                |         r0 = *(0x23da6);
    0x00011e94 blx 0x6810                                        |         fcn_00006810 ();
    0x00011e98 mov r1, sp                                        |         r1 = sp;
    0x00011e9a mov r0, r4                                        |         r0 = r4;
    0x00011e9c bl 0xd248                                         |         fcn_0000d248 (r0, r1);
    0x00011ea0 ldr r0, [r5, 0x50]                                |         r0 = *(0x23da6);
    0x00011ea2 blx 0x63dc                                        |         fcn_000063dc ();
    0x00011ea6 ldr r3, [sp]                                      |         r3 = *(sp);
    0x00011ea8 b 0x11e66                                         |         
                                                                 |     } while (1);
                                                                 | label_18:
    0x00011eaa blx 0x6498                                        |     fcn_00006498 ();
    0x00011eae nop                                               |     
    0x00011eb0 ldrsh r2, [r3, r0]                                |     r2 = *((r3 + r0));
    0x00011eb2 movs r6, r0                                       |     r6 = r0;
    0x00011eb4 lsls r0, r1, 0xe                                  |     r0 = r1 << 0xe;
    0x00011eb6 movs r0, r0                                       |     
    0x00011eb8 str r2, [r5, 0x18]                                |     *((r5 + 0x18)) = r2;
    0x00011eba movs r6, r0                                       |     r6 = r0;
    0x00011ebc ldrb r0, [r4, r7]                                 |     r0 = *((r4 + r7));
    0x00011ebe movs r6, r0                                       |     r6 = r0;
    0x00011ec0 ldr r4, [r4, 0x70]                                |     r4 = *((r4 + 0x70));
    0x00011ec2 movs r6, r0                                       |     r6 = r0;
    0x00011ec4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00011ec8 mov r4, r0                                        |     r4 = r0;
    0x00011eca ldr.w r8, [r0]                                    |     r8 = *(r0);
    0x00011ece sub sp, 0xc                                       |     
    0x00011ed0 mov r6, r1                                        |     r6 = r1;
    0x00011ed2 str r2, [sp]                                      |     *(sp) = r2;
    0x00011ed4 ldr.w r0, [r8]                                    |     r0 = *(r8);
    0x00011ed8 blx 0x6810                                        |     fcn_00006810 ();
    0x00011edc ldr.w sb, [r4, 0x28]                              |     sb = *((r4 + 0x28));
    0x00011ee0 cmp.w sb, 0                                       |     
                                                                 |     if (sb != 0) {
    0x00011ee4 beq 0x11efa                                       |         
    0x00011ee6 mov r1, sb                                        |         r1 = sb;
    0x00011ee8 mov r0, r6                                        |         r0 = r6;
    0x00011eea bl 0x5debc                                        |         fcn_0005debc (r0, r1, r2);
    0x00011eee ldr r3, [r4, 0x2c]                                |         r3 = *((r4 + 0x2c));
    0x00011ef0 ldr.w r5, [r3, r1, lsl 2]                         |         offset_0 = r1 << 2;
                                                                 |         r5 = *((r3 + offset_0));
    0x00011ef4 cmp r5, 0                                         |         
                                                                 |         if (r5 != 0) {
    0x00011ef6 bne.w 0x12082                                     |             goto label_19;
                                                                 |         }
                                                                 |     }
                                                                 | label_0:
    0x00011efa ldr r3, [sp]                                      |     r3 = *(sp);
    0x00011efc cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00011efe beq.w 0x120e6                                     |         goto label_7;
                                                                 |     }
    0x00011f02 ldr r1, [sp]                                      |     r1 = *(sp);
    0x00011f04 ldrd r3, r2, [r4, 0x20]                           |     __asm ("ldrd r3, r2, [r4, 0x20]");
    0x00011f08 cmp r1, 1                                         |     
                                                                 |     if (r1 == 1) {
    0x00011f0a beq.w 0x120b8                                     |         goto label_20;
                                                                 |     }
                                                                 | label_3:
    0x00011f0e cmp sb, r2                                        |     
                                                                 |     if (sb < r2) {
    0x00011f10 bls.w 0x120ea                                     |         goto label_21;
                                                                 |     }
                                                                 | label_6:
    0x00011f14 ldr.w sl, [r4, 0xc]                               |     sl = *((r4 + 0xc));
    0x00011f18 cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x00011f1c beq 0x11fe2                                       |         goto label_10;
                                                                 |     }
    0x00011f1e ldr.w r5, [r8, 0x18]                              |     r5 = *((r8 + 0x18));
    0x00011f22 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00011f24 beq 0x11fe2                                       |         goto label_10;
                                                                 |     }
    0x00011f26 ldr r3, [r4, 0x24]                                |     r3 = *((r4 + 0x24));
    0x00011f28 ldr r2, [r4, 0x14]                                |     r2 = *((r4 + 0x14));
    0x00011f2a adds r3, 1                                        |     r3++;
    0x00011f2c cmp r3, r2                                        |     
                                                                 |     if (r3 < r2) {
    0x00011f2e bhs 0x11f5c                                       |         
    0x00011f30 ldr.w r2, [r8, 0x10]                              |         r2 = *((r8 + 0x10));
    0x00011f34 ldr.w r3, [r8, 4]                                 |         r3 = *((r8 + 4));
    0x00011f38 cmp r2, r3                                        |         
                                                                 |         if (r2 >= r3) {
    0x00011f3a bhs 0x11f5c                                       |             goto label_11;
                                                                 |         }
    0x00011f3c ldr r1, [pc, 0x2ec]                               |         
    0x00011f3e add r1, pc                                        |         r1 = 0x2416e;
    0x00011f40 ldr r3, [r1, 0x28]                                |         r3 = *(0x24196);
    0x00011f42 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00011f44 beq.w 0x121f8                                     |             goto label_22;
                                                                 |         }
    0x00011f48 ldrd r3, r2, [r4, 4]                              |         __asm ("ldrd r3, r2, [r4, 4]");
    0x00011f4c add r3, r2                                        |         r3 += r2;
    0x00011f4e ldr r2, [r1, 0x24]                                |         r2 = *((r1 + 0x24));
    0x00011f50 cmp r3, r2                                        |         
                                                                 |         if (r3 > r2) {
    0x00011f52 bgt.w 0x121f8                                     |             goto label_22;
                                                                 |         }
    0x00011f56 ldr r3, [r1, 0x44]                                |         r3 = *((r1 + 0x44));
    0x00011f58 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00011f5a beq 0x11fe2                                       |             goto label_10;
                                                                 |         }
                                                                 |     }
                                                                 | label_11:
    0x00011f5c ldr.w sb, [r5, 0x14]                              |     sb = *((r5 + 0x14));
    0x00011f60 ldr r0, [r5, 8]                                   |     r0 = *((r5 + 8));
    0x00011f62 ldr.w r1, [sb, 0x28]                              |     r1 = *((sb + 0x28));
    0x00011f66 bl 0x5debc                                        |     fcn_0005debc (r0, r1, r2);
    0x00011f6a ldr.w r2, [sb, 0x2c]                              |     r2 = *((sb + 0x2c));
    0x00011f6e ldr.w r3, [r2, r1, lsl 2]                         |     offset_1 = r1 << 2;
                                                                 |     r3 = *((r2 + offset_1));
    0x00011f72 add.w r2, r2, r1, lsl 2                           |     r2 += (r1 << 2);
    0x00011f76 cmp r5, r3                                        |     
                                                                 |     if (r5 == r3) {
    0x00011f78 beq 0x11f84                                       |         goto label_23;
                                                                 |     }
                                                                 |     do {
    0x00011f7a mov r2, r3                                        |         r2 = r3;
    0x00011f7c ldr r3, [r3, 0x10]                                |         r3 = *((r3 + 0x10));
    0x00011f7e cmp r5, r3                                        |         
    0x00011f80 bne 0x11f7a                                       |         
                                                                 |     } while (r5 != r3);
    0x00011f82 adds r2, 0x10                                     |     r2 += 0x10;
                                                                 | label_23:
    0x00011f84 ldr r3, [r5, 0x10]                                |     r3 = *((r5 + 0x10));
    0x00011f86 ldr.w r1, [sb]                                    |     r1 = *(sb);
    0x00011f8a str r3, [r2]                                      |     *(r2) = r3;
    0x00011f8c ldr.w r3, [sb, 0x24]                              |     r3 = *((sb + 0x24));
    0x00011f90 ldr r2, [r5, 0x18]                                |     r2 = *((r5 + 0x18));
    0x00011f92 subs r3, 1                                        |     r3--;
    0x00011f94 str.w r3, [sb, 0x24]                              |     __asm ("str.w r3, [sb, 0x24]");
    0x00011f98 ldr r3, [r5, 0x1c]                                |     r3 = *((r5 + 0x1c));
    0x00011f9a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00011f9c beq.w 0x12220                                     |         goto label_24;
                                                                 |     }
    0x00011fa0 str r2, [r3, 0x18]                                |     *((r3 + 0x18)) = r2;
    0x00011fa2 ldr r2, [r5, 0x18]                                |     r2 = *((r5 + 0x18));
                                                                 | label_13:
    0x00011fa4 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00011fa6 beq.w 0x1221c                                     |         goto label_25;
                                                                 |     }
    0x00011faa str r3, [r2, 0x1c]                                |     *((r2 + 0x1c)) = r3;
                                                                 | label_12:
    0x00011fac movs r3, 1                                        |     r3 = 1;
    0x00011fae strb r3, [r5, 0xc]                                |     *((r5 + 0xc)) = r3;
    0x00011fb0 ldrd r3, r2, [sb, 4]                              |     __asm ("ldrd r3, r2, [sb, 4]");
    0x00011fb4 ldr.w r0, [sb, 0x20]                              |     r0 = *((sb + 0x20));
    0x00011fb8 adds r1, r3, r2                                   |     r1 = r3 + r2;
    0x00011fba ldrd r3, r2, [r4, 4]                              |     __asm ("ldrd r3, r2, [r4, 4]");
    0x00011fbe subs r0, 1                                        |     r0--;
    0x00011fc0 add r3, r2                                        |     r3 += r2;
    0x00011fc2 movs r2, 0                                        |     r2 = 0;
    0x00011fc4 cmp r1, r3                                        |     
    0x00011fc6 strd r2, r2, [r5, 0x18]                           |     __asm ("strd r2, r2, [r5, 0x18]");
    0x00011fca str.w r0, [sb, 0x20]                              |     __asm ("str.w r0, [sb, 0x20]");
                                                                 |     if (r1 == r3) {
    0x00011fce beq.w 0x12184                                     |         goto label_26;
                                                                 |     }
    0x00011fd2 ldr r0, [r5]                                      |     r0 = *(r5);
    0x00011fd4 bl 0x11040                                        |     fcn_00011040 (r0);
    0x00011fd8 ldr.w r3, [sb, 0xc]                               |     r3 = *((sb + 0xc));
    0x00011fdc cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00011fde bne.w 0x121ec                                     |         goto label_27;
                                                                 |     }
                                                                 | label_10:
    0x00011fe2 ldr r3, [sp]                                      |     r3 = *(sp);
    0x00011fe4 cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x00011fe6 beq.w 0x1219c                                     |         goto label_28;
                                                                 |     }
    0x00011fea ldr r3, [r4]                                      |     r3 = *(r4);
    0x00011fec ldr r0, [r3]                                      |     r0 = *(r3);
    0x00011fee blx 0x63dc                                        |     fcn_000063dc ();
    0x00011ff2 ldrd r2, r3, [r4, 4]                              |     __asm ("ldrd r2, r3, [r4, 4]");
    0x00011ff6 add r3, r2                                        |     r3 += r2;
    0x00011ff8 add.w r0, r3, 0x20                                |     r0 = r3 + 0x20;
    0x00011ffc bl 0xdc94                                         |     fcn_0000dc94 (r0);
    0x00012000 ldr r3, [r4]                                      |     r3 = *(r4);
    0x00012002 mov r5, r0                                        |     r5 = r0;
    0x00012004 ldr.w sb, [r4, 4]                                 |     sb = *((r4 + 4));
    0x00012008 ldr r0, [r3]                                      |     r0 = *(r3);
    0x0001200a blx 0x6810                                        |     fcn_00006810 ();
    0x0001200e cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00012010 beq 0x120e6                                       |         goto label_7;
                                                                 |     }
                                                                 | label_9:
    0x00012012 ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
    0x00012014 str.w r5, [r5, sb]                                |     __asm ("str.w r5, [r5, sb]");
    0x00012018 add r5, sb                                        |     r5 += sb;
    0x0001201a add.w sb, r5, 0x20                                |     sb = r5 + 0x20;
    0x0001201e str.w sb, [r5, 4]                                 |     __asm ("str.w sb, [r5, 4]");
                                                                 |     if (r3 != 0) {
    0x00012022 cbz r3, 0x1202c                                   |         
    0x00012024 ldr r2, [r4]                                      |         r2 = *(r4);
    0x00012026 ldr r3, [r2, 0x10]                                |         r3 = *((r2 + 0x10));
    0x00012028 adds r3, 1                                        |         r3++;
    0x0001202a str r3, [r2, 0x10]                                |         *((r2 + 0x10)) = r3;
                                                                 |     }
    0x0001202c ldr r3, [sp]                                      |     r3 = *(sp);
    0x0001202e cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x00012030 beq.w 0x12206                                     |         goto label_29;
                                                                 |     }
                                                                 | label_8:
    0x00012034 ldr r1, [r4, 0x28]                                |     r1 = *((r4 + 0x28));
    0x00012036 mov r0, r6                                        |     r0 = r6;
    0x00012038 bl 0x5debc                                        |     fcn_0005debc (r0, r1, r2);
    0x0001203c ldr r3, [r4, 0x2c]                                |     r3 = *((r4 + 0x2c));
    0x0001203e ldr.w r2, [r3, r1, lsl 2]                         |     offset_2 = r1 << 2;
                                                                 |     r2 = *((r3 + offset_2));
    0x00012042 ldr r3, [r4, 0x24]                                |     r3 = *((r4 + 0x24));
    0x00012044 adds r3, 1                                        |     r3++;
    0x00012046 str r3, [r4, 0x24]                                |     *((r4 + 0x24)) = r3;
    0x00012048 movs r3, 0                                        |     r3 = 0;
    0x0001204a str r2, [r5, 0x10]                                |     *((r5 + 0x10)) = r2;
    0x0001204c movs r2, 1                                        |     r2 = 1;
    0x0001204e strd r3, r3, [r5, 0x18]                           |     __asm ("strd r3, r3, [r5, 0x18]");
    0x00012052 strb r2, [r5, 0xc]                                |     *((r5 + 0xc)) = r2;
    0x00012054 str r6, [r5, 8]                                   |     *((r5 + 8)) = r6;
    0x00012056 str r4, [r5, 0x14]                                |     *((r5 + 0x14)) = r4;
    0x00012058 str.w r3, [sb]                                    |     __asm ("str.w r3, [sb]");
    0x0001205c ldr r3, [r4, 0x2c]                                |     r3 = *((r4 + 0x2c));
    0x0001205e str.w r5, [r3, r1, lsl 2]                         |     __asm ("str.w r5, [r3, r1, lsl 2]");
                                                                 | label_2:
    0x00012062 ldr r3, [r4, 0x1c]                                |     r3 = *((r4 + 0x1c));
    0x00012064 cmp r3, r6                                        |     
    0x00012066 it lo                                             |     
                                                                 |     if (r3 >= r6) {
    0x00012068 strlo r6, [r4, 0x1c]                              |         *((r4 + 0x1c)) = r6;
                                                                 |     }
                                                                 | label_4:
    0x0001206a ldr.w r0, [r8]                                    |     r0 = *(r8);
    0x0001206e blx 0x63dc                                        |     fcn_000063dc ();
    0x00012072 mov r0, r5                                        |     r0 = r5;
    0x00012074 add sp, 0xc                                       |     
    0x00012076 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_1:
    0x0001207a ldr r5, [r5, 0x10]                                |     r5 = *((r5 + 0x10));
    0x0001207c cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x0001207e beq.w 0x11efa                                     |         goto label_0;
                                                                 |     }
                                                                 | label_19:
    0x00012082 ldr r3, [r5, 8]                                   |     r3 = *((r5 + 8));
    0x00012084 cmp r3, r6                                        |     
                                                                 |     if (r3 != r6) {
    0x00012086 bne 0x1207a                                       |         goto label_1;
                                                                 |     }
    0x00012088 ldrb r3, [r5, 0xc]                                |     r3 = *((r5 + 0xc));
    0x0001208a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0001208c bne 0x12062                                       |         goto label_2;
                                                                 |     }
    0x0001208e ldrd r1, r2, [r5, 0x18]                           |     __asm ("ldrd r1, r2, [r5, 0x18]");
    0x00012092 ldr r3, [r5, 0x14]                                |     r3 = *((r5 + 0x14));
    0x00012094 ldr r0, [r3]                                      |     r0 = *(r3);
    0x00012096 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00012098 beq.w 0x12224                                     |         goto label_30;
                                                                 |     }
    0x0001209c str r1, [r2, 0x18]                                |     *((r2 + 0x18)) = r1;
                                                                 | label_14:
    0x0001209e cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x000120a0 beq.w 0x12228                                     |         goto label_31;
                                                                 |     }
    0x000120a4 str r2, [r1, 0x1c]                                |     *((r1 + 0x1c)) = r2;
                                                                 | label_15:
    0x000120a6 movs r2, 1                                        |     r2 = 1;
    0x000120a8 movs r1, 0                                        |     r1 = 0;
    0x000120aa strb r2, [r5, 0xc]                                |     *((r5 + 0xc)) = r2;
    0x000120ac ldr r2, [r3, 0x20]                                |     r2 = *((r3 + 0x20));
    0x000120ae strd r1, r1, [r5, 0x18]                           |     __asm ("strd r1, r1, [r5, 0x18]");
    0x000120b2 subs r2, 1                                        |     r2--;
    0x000120b4 str r2, [r3, 0x20]                                |     *((r3 + 0x20)) = r2;
    0x000120b6 b 0x12062                                         |     goto label_2;
                                                                 | label_20:
    0x000120b8 ldr.w r1, [r8, 0xc]                               |     r1 = *((r8 + 0xc));
    0x000120bc subs r3, r2, r3                                   |     r3 = r2 - r3;
    0x000120be cmp r1, r3                                        |     
                                                                 |     if (r1 < r3) {
    0x000120c0 bls 0x120e6                                       |         goto label_7;
                                                                 |     }
    0x000120c2 ldr r1, [r4, 0x18]                                |     r1 = *((r4 + 0x18));
    0x000120c4 cmp r1, r3                                        |     
                                                                 |     if (r1 < r3) {
    0x000120c6 bls 0x120e6                                       |         goto label_7;
                                                                 |     }
    0x000120c8 ldr r0, [pc, 0x164]                               |     
    0x000120ca add r0, pc                                        |     r0 = 0x242fe;
    0x000120cc ldr r3, [r0, 0x28]                                |     r3 = *(0x24326);
    0x000120ce cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000120d0 beq 0x12176                                       |         goto label_32;
                                                                 |     }
    0x000120d2 ldrd r3, r1, [r4, 4]                              |     __asm ("ldrd r3, r1, [r4, 4]");
    0x000120d6 add r3, r1                                        |     r3 += r1;
    0x000120d8 ldr r1, [r0, 0x24]                                |     r1 = *((r0 + 0x24));
    0x000120da cmp r3, r1                                        |     
                                                                 |     if (r3 > r1) {
    0x000120dc bgt 0x12176                                       |         goto label_32;
                                                                 |     }
    0x000120de ldr r3, [r0, 0x44]                                |     r3 = *((r0 + 0x44));
    0x000120e0 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000120e2 beq.w 0x11f0e                                     |         goto label_3;
                                                                 |     }
                                                                 | label_7:
    0x000120e6 movs r5, 0                                        |     r5 = 0;
    0x000120e8 b 0x1206a                                         |     goto label_4;
                                                                 | label_21:
    0x000120ea ldr r3, [r4]                                      |     r3 = *(r4);
    0x000120ec lsl.w r5, sb, 1                                   |     r5 = sb << 1;
    0x000120f0 cmp.w r5, 0x100                                   |     
    0x000120f4 ldr r0, [r3]                                      |     r0 = *(r3);
    0x000120f6 it lo                                             |     
                                                                 |     if (r5 >= 0x100) {
    0x000120f8 movlo r5, 0x100                                   |         r5 = 0x100;
                                                                 |     }
    0x000120fc blx 0x63dc                                        |     fcn_000063dc ();
    0x00012100 ldr r3, [r4, 0x28]                                |     r3 = *((r4 + 0x28));
                                                                 |     if (r3 != 0) {
    0x00012102 cbz r3, 0x12110                                   |         
    0x00012104 ldr r3, [pc, 0x12c]                               |         
    0x00012106 add r3, pc                                        |         
    0x00012108 ldr.w r3, [r3, 0x1a8]                             |         r3 = *(0x244e6);
                                                                 |         if (r3 == 0) {
    0x0001210c cbz r3, 0x12110                                   |             goto label_33;
                                                                 |         }
    0x0001210e blx r3                                            |         uint32_t (*r3)() ();
                                                                 |     }
                                                                 | label_33:
    0x00012110 lsls r0, r5, 2                                    |     r0 = r5 << 2;
    0x00012112 bl 0x11e2c                                        |     fcn_00011e2c (r0);
    0x00012116 ldr r3, [r4, 0x28]                                |     r3 = *((r4 + 0x28));
    0x00012118 mov fp, r0                                        |     
                                                                 |     if (r3 != 0) {
    0x0001211a cbz r3, 0x12128                                   |         
    0x0001211c ldr r3, [pc, 0x118]                               |         
    0x0001211e add r3, pc                                        |         
    0x00012120 ldr.w r3, [r3, 0x1ac]                             |         r3 = *(0x24506);
                                                                 |         if (r3 == 0) {
    0x00012124 cbz r3, 0x12128                                   |             goto label_34;
                                                                 |         }
    0x00012126 blx r3                                            |         uint32_t (*r3)() ();
                                                                 |     }
                                                                 | label_34:
    0x00012128 ldr r3, [r4]                                      |     r3 = *(r4);
    0x0001212a ldr r0, [r3]                                      |     r0 = *(r3);
    0x0001212c blx 0x6810                                        |     fcn_00006810 ();
    0x00012130 cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x00012134 beq 0x121e2                                       |         goto label_35;
                                                                 |     }
    0x00012136 ldrd r3, r2, [r4, 0x28]                           |     __asm ("ldrd r3, r2, [r4, 0x28]");
    0x0001213a str r2, [sp, 4]                                   |     var_4h_2 = r2;
                                                                 |     if (r3 == 0) {
    0x0001213c cbz r3, 0x1216a                                   |         goto label_36;
                                                                 |     }
    0x0001213e ldr r2, [sp, 4]                                   |     r2 = var_4h_2;
    0x00012140 mov sb, r2                                        |     sb = r2;
    0x00012142 add.w sl, r2, r3, lsl 2                           |     sl = r2 + (r3 << 2);
                                                                 | label_5:
    0x00012146 ldr r7, [sb], 4                                   |     r7 = *(sb);
                                                                 |     sb += 4;
                                                                 |     if (r7 == 0) {
    0x0001214a cbz r7, 0x12166                                   |         goto label_37;
                                                                 |     }
                                                                 |     do {
    0x0001214c ldr r0, [r7, 8]                                   |         r0 = *((r7 + 8));
    0x0001214e mov r1, r5                                        |         r1 = r5;
    0x00012150 bl 0x5debc                                        |         fcn_0005debc (r0, r1, r2);
    0x00012154 mov r3, r7                                        |         r3 = r7;
    0x00012156 ldr r7, [r7, 0x10]                                |         r7 = *((r7 + 0x10));
    0x00012158 ldr.w r0, [fp, r1, lsl 2]                         |         offset_3 = r1 << 2;
                                                                 |         r0 = *((fp + offset_3));
    0x0001215c str r0, [r3, 0x10]                                |         *((r3 + 0x10)) = r0;
    0x0001215e str.w r3, [fp, r1, lsl 2]                         |         __asm ("str.w r3, [fp, r1, lsl 2]");
    0x00012162 cmp r7, 0                                         |         
    0x00012164 bne 0x1214c                                       |         
                                                                 |     } while (r7 != 0);
                                                                 | label_37:
    0x00012166 cmp sl, sb                                        |     
                                                                 |     if (sl != sb) {
    0x00012168 bne 0x12146                                       |         goto label_5;
                                                                 |     }
                                                                 | label_36:
    0x0001216a ldr r0, [sp, 4]                                   |     r0 = var_4h_2;
    0x0001216c blx 0x6050                                        |     fcn_00006050 ();
    0x00012170 strd r5, fp, [r4, 0x28]                           |     __asm ("strd r5, fp, [r4, 0x28]");
    0x00012174 b 0x11f14                                         |     goto label_6;
                                                                 | label_32:
    0x00012176 ldr r3, [pc, 0xc4]                                |     
    0x00012178 add r3, pc                                        |     
    0x0001217a ldr r3, [r3, 0x74]                                |     r3 = *(0x2442e);
    0x0001217c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0001217e beq.w 0x11f0e                                     |         goto label_3;
                                                                 |     }
    0x00012182 b 0x120e6                                         |     goto label_7;
                                                                 | label_26:
    0x00012184 ldr.w r2, [sb, 0xc]                               |     r2 = *((sb + 0xc));
    0x00012188 ldr.w r3, [r8, 0x10]                              |     r3 = *((r8 + 0x10));
    0x0001218c ldr.w sb, [r5, 4]                                 |     sb = *((r5 + 4));
    0x00012190 sub.w r2, r2, sl                                  |     r2 -= sl;
    0x00012194 subs r3, r3, r2                                   |     r3 -= r2;
    0x00012196 str.w r3, [r8, 0x10]                              |     __asm ("str.w r3, [r8, 0x10]");
    0x0001219a b 0x12034                                         |     goto label_8;
                                                                 | label_28:
    0x0001219c ldr r3, [pc, 0xa0]                                |     
    0x0001219e add r3, pc                                        |     
    0x000121a0 ldr.w r3, [r3, 0x1a8]                             |     r3 = *(0x2458a);
                                                                 |     if (r3 != 0) {
    0x000121a4 cbz r3, 0x121a8                                   |         
    0x000121a6 blx r3                                            |         uint32_t (*r3)() ();
                                                                 |     }
    0x000121a8 ldr r3, [r4]                                      |     r3 = *(r4);
    0x000121aa ldr r0, [r3]                                      |     r0 = *(r3);
    0x000121ac blx 0x63dc                                        |     fcn_000063dc ();
    0x000121b0 ldrd r2, r3, [r4, 4]                              |     __asm ("ldrd r2, r3, [r4, 4]");
    0x000121b4 add r3, r2                                        |     r3 += r2;
    0x000121b6 add.w r0, r3, 0x20                                |     r0 = r3 + 0x20;
    0x000121ba bl 0xdc94                                         |     fcn_0000dc94 (r0);
    0x000121be ldr r3, [r4]                                      |     r3 = *(r4);
    0x000121c0 mov r5, r0                                        |     r5 = r0;
    0x000121c2 ldr.w sb, [r4, 4]                                 |     sb = *((r4 + 4));
    0x000121c6 ldr r0, [r3]                                      |     r0 = *(r3);
    0x000121c8 blx 0x6810                                        |     fcn_00006810 ();
    0x000121cc cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x000121ce bne.w 0x12012                                     |         goto label_9;
                                                                 |     }
    0x000121d2 ldr r3, [pc, 0x70]                                |     
    0x000121d4 add r3, pc                                        |     
    0x000121d6 ldr.w r3, [r3, 0x1ac]                             |     r3 = *(0x245ca);
    0x000121da cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000121dc beq 0x120e6                                       |         goto label_7;
                                                                 |     }
    0x000121de blx r3                                            |     uint32_t (*r3)() ();
    0x000121e0 b 0x1206a                                         |     goto label_4;
                                                                 | label_35:
    0x000121e2 ldr r3, [r4, 0x2c]                                |     r3 = *((r4 + 0x2c));
    0x000121e4 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000121e6 beq.w 0x120e6                                     |         goto label_7;
                                                                 |     }
    0x000121ea b 0x11f14                                         |     goto label_6;
                                                                 | label_27:
    0x000121ec ldr.w r2, [sb]                                    |     r2 = *(sb);
    0x000121f0 ldr r3, [r2, 0x10]                                |     r3 = *((r2 + 0x10));
    0x000121f2 subs r3, 1                                        |     r3--;
    0x000121f4 str r3, [r2, 0x10]                                |     *((r2 + 0x10)) = r3;
    0x000121f6 b 0x11fe2                                         |     goto label_10;
                                                                 | label_22:
    0x000121f8 ldr r3, [pc, 0x4c]                                |     
    0x000121fa add r3, pc                                        |     
    0x000121fc ldr r3, [r3, 0x74]                                |     r3 = *(0x244ba);
    0x000121fe cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00012200 bne.w 0x11f5c                                     |         goto label_11;
                                                                 |     }
    0x00012204 b 0x11fe2                                         |     goto label_10;
                                                                 | label_29:
    0x00012206 ldr r3, [pc, 0x44]                                |     
    0x00012208 add r3, pc                                        |     
    0x0001220a ldr.w r3, [r3, 0x1ac]                             |     r3 = *(0x24606);
    0x0001220e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00012210 beq.w 0x12034                                     |         goto label_8;
                                                                 |     }
    0x00012214 blx r3                                            |     uint32_t (*r3)() ();
    0x00012216 ldr.w sb, [r5, 4]                                 |     sb = *((r5 + 4));
    0x0001221a b 0x12034                                         |     goto label_8;
                                                                 | label_25:
    0x0001221c str r3, [r1, 0x18]                                |     *((r1 + 0x18)) = r3;
    0x0001221e b 0x11fac                                         |     goto label_12;
                                                                 | label_24:
    0x00012220 str r2, [r1, 0x14]                                |     *((r1 + 0x14)) = r2;
    0x00012222 b 0x11fa4                                         |     goto label_13;
                                                                 | label_30:
    0x00012224 str r1, [r0, 0x14]                                |     *((r0 + 0x14)) = r1;
    0x00012226 b 0x1209e                                         |     goto label_14;
                                                                 | label_31:
    0x00012228 str r2, [r0, 0x18]                                |     *((r0 + 0x18)) = r2;
    0x0001222a b 0x120a6                                         |     goto label_15;
                                                                 | }
    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x123f8 */
                                                 | #include <stdint.h>
                                                 |  
                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                 |  
    ; (fcn) fcn.000123f8 ()                      | void fcn_000123f8 (int16_t arg1, int16_t arg2) {
                                                 |     r0 = arg1;
                                                 |     r1 = arg2;
    0x000123f8 push {r3, r4, r5, r6, r7, lr}     |     
                                                 |     if (r1 == 0) {
    0x000123fa cbz r1, 0x1245c                   |         goto label_3;
                                                 |     }
    0x000123fc ldrb r6, [r1]                     |     r6 = *(r1);
    0x000123fe mov r7, r1                        |     r7 = r1;
                                                 |     if (r6 == 0) {
    0x00012400 cbz r6, 0x12412                   |         goto label_4;
                                                 |     }
    0x00012402 mov r3, r1                        |     r3 = r1;
                                                 |     do {
    0x00012404 ldrb r2, [r3, 1]!                 |         r2 = *((r3 += 1));
    0x00012408 cmp r2, 0                         |         
    0x0001240a bne 0x12404                       |         
                                                 |     } while (r2 != 0);
    0x0001240c subs r3, r3, r7                   |     r3 -= r7;
    0x0001240e bic r6, r3, 0xc0000000            |     r6 = BIT_MASK (r3, 0xc0000000);
                                                 | label_4:
    0x00012412 ldrd r5, r4, [r0, 0x10]           |     __asm ("ldrd r5, r4, [r0, 0x10]");
    0x00012416 subs r4, 1                        |     r4--;
    0x00012418 cmp r4, 0                         |     
    0x0001241a lsl.w r3, r4, 4                   |     r3 = r4 << 4;
                                                 |     if (r4 < 0) {
    0x0001241e blt 0x1244a                       |         goto label_2;
                                                 |     }
    0x00012420 subs r3, 0x10                     |     r3 -= 0x10;
    0x00012422 add r5, r3                        |     r5 += r3;
                                                 | label_0:
    0x00012424 ldr r0, [r5, 0x10]                |     r0 = *((r5 + 0x10));
    0x00012426 mov r3, r0                        |     r3 = r0;
                                                 |     if (r0 == 0) {
    0x00012428 cbz r0, 0x1243e                   |         goto label_5;
                                                 |     }
    0x0001242a ldrb r3, [r0]                     |     r3 = *(r0);
                                                 |     if (r3 == 0) {
    0x0001242c cbz r3, 0x1243e                   |         goto label_5;
                                                 |     }
    0x0001242e mov r3, r0                        |     r3 = r0;
                                                 |     do {
    0x00012430 ldrb r2, [r3, 1]!                 |         r2 = *((r3 += 1));
    0x00012434 cmp r2, 0                         |         
    0x00012436 bne 0x12430                       |         
                                                 |     } while (r2 != 0);
    0x00012438 subs r3, r3, r0                   |     r3 -= r0;
    0x0001243a bic r3, r3, 0xc0000000            |     r3 = BIT_MASK (r3, 0xc0000000);
                                                 | label_5:
    0x0001243e cmp r3, r6                        |     
                                                 |     if (r3 == r6) {
    0x00012440 beq 0x1244e                       |         goto label_6;
                                                 |     }
                                                 | label_1:
    0x00012442 subs r4, 1                        |     r4--;
    0x00012444 subs r5, 0x10                     |     r5 -= 0x10;
    0x00012446 adds r3, r4, 1                    |     r3 = r4 + 1;
                                                 |     if (r3 != r4) {
    0x00012448 bne 0x12424                       |         goto label_0;
                                                 |     }
                                                 | label_2:
    0x0001244a mov r0, r4                        |     r0 = r4;
    0x0001244c pop {r3, r4, r5, r6, r7, pc}      |     
                                                 | label_6:
    0x0001244e mov r1, r7                        |     r1 = r7;
    0x00012450 blx 0x6164                        |     r0 = fcn_00006164 ();
    0x00012454 cmp r0, 0                         |     
                                                 |     if (r0 != 0) {
    0x00012456 bne 0x12442                       |         goto label_1;
                                                 |     }
    0x00012458 mov r0, r4                        |     r0 = r4;
    0x0001245a pop {r3, r4, r5, r6, r7, pc}      |     
                                                 | label_3:
    0x0001245c mov.w r4, -1                      |     r4 = -1;
    0x00012460 b 0x1244a                         |     goto label_2;
                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x127a4 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.000127a4 ()                                      | void fcn_000127a4 (int16_t arg1, int16_t arg3) {
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     r0 = arg1;
                                                                 |     r2 = arg3;
    0x000127a4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x000127a8 mov r7, r2                                        |     r7 = r2;
    0x000127aa ldr r2, [pc, 0xac]                                |     
    0x000127ac sub sp, 0x14                                      |     
    0x000127ae ldrb r5, [r0]                                     |     r5 = *(r0);
    0x000127b0 ldr r6, [pc, 0xa8]                                |     
    0x000127b2 add r2, pc                                        |     r2 = 0x25010;
    0x000127b4 ldr r4, [pc, 0xa8]                                |     r4 = *(0x12860);
    0x000127b6 add r2, r5                                        |     r2 += r5;
    0x000127b8 ldrb.w r2, [r2, 0x40]                             |     r2 = *((r2 + 0x40));
    0x000127bc add r6, pc                                        |     r6 = 0x2501c;
    0x000127be ldr r4, [r6, r4]                                  |     
    0x000127c0 lsls r3, r2, 0x1d                                 |     r3 = r2 << 0x1d;
    0x000127c2 ldr r4, [r4]                                      |     r4 = *(0x2501c);
    0x000127c4 str r4, [sp, 0xc]                                 |     var_ch = r4;
    0x000127c6 mov.w r4, 0                                       |     r4 = 0;
                                                                 |     if (r3 < r2) {
    0x000127ca bmi 0x12844                                       |         goto label_1;
                                                                 |     }
    0x000127cc mov sl, r0                                        |     sl = r0;
                                                                 |     if (r5 == 0) {
    0x000127ce cbz r5, 0x127e2                                   |         goto label_2;
                                                                 |     }
    0x000127d0 mov r5, r0                                        |     r5 = r0;
                                                                 |     do {
    0x000127d2 ldrb r2, [r5, 1]!                                 |         r2 = *((r5 += 1));
    0x000127d6 cmp r2, 0                                         |         
    0x000127d8 bne 0x127d2                                       |         
                                                                 |     } while (r2 != 0);
    0x000127da sub.w r5, r5, sl                                  |     r5 -= sl;
    0x000127de bic r5, r5, 0xc0000000                            |     r5 = BIT_MASK (r5, 0xc0000000);
                                                                 | label_2:
    0x000127e2 ldr r6, [pc, 0x80]                                |     
    0x000127e4 rsb.w fp, r1, 7                                   |     
    0x000127e8 ldr r3, [pc, 0x7c]                                |     
    0x000127ea movs r2, 2                                        |     r2 = 2;
    0x000127ec movs r4, 0                                        |     r4 = 0;
    0x000127ee add r6, pc                                        |     
    0x000127f0 add r3, pc                                        |     r3 = 0x2505c;
    0x000127f2 add.w r6, r6, 0x35c                               |     r6 = 0x253b4;
    0x000127f6 add.w sb, r3, 0x364                               |     sb = r3 + 0x364;
    0x000127fa add.w r8, r3, 0x37c                               |     r8 = r3 + 0x37c;
    0x000127fe str r3, [sp, 4]                                   |     var_4h = r3;
    0x00012800 b 0x1280c                                         |     
                                                                 |     while (r2 != r5) {
                                                                 | label_0:
    0x00012802 adds r4, 1                                        |         r4++;
    0x00012804 cmp r4, fp                                        |         
                                                                 |         if (r4 == fp) {
    0x00012806 beq 0x12828                                       |             goto label_3;
                                                                 |         }
    0x00012808 ldrb r2, [r6, 1]!                                 |         r2 = *((r6 += 1));
    0x0001280c cmp r2, r5                                        |         
    0x0001280e bne 0x12802                                       |         
                                                                 |     }
    0x00012810 ldrb.w r0, [r4, r8]                               |     r0 = *((r4 + r8));
    0x00012814 mov r1, sl                                        |     r1 = sl;
    0x00012816 add r0, sb                                        |     r0 += sb;
    0x00012818 blx 0x5db4                                        |     r0 = fcn_00005db4 ();
    0x0001281c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0001281e bne 0x12802                                       |         goto label_0;
                                                                 |     }
    0x00012820 ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x00012822 add r3, r4                                        |     r3 += r4;
    0x00012824 ldrb.w r7, [r3, 0x384]                            |     r7 = *((r3 + 0x384));
                                                                 |     do {
                                                                 | label_3:
    0x00012828 ldr r2, [pc, 0x40]                                |         
    0x0001282a ldr r3, [pc, 0x34]                                |         r3 = *(0x12862);
    0x0001282c add r2, pc                                        |         r2 = 0x2509c;
    0x0001282e ldr r3, [r2, r3]                                  |         r3 = *(0x2509c);
    0x00012830 ldr r2, [r3]                                      |         r2 = *(0x2509c);
    0x00012832 ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x00012834 eors r2, r3                                       |         r2 ^= r3;
    0x00012836 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0001283a bne 0x12854                                       |             goto label_4;
                                                                 |         }
    0x0001283c mov r0, r7                                        |         r0 = r7;
    0x0001283e add sp, 0x14                                      |         
    0x00012840 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_1:
    0x00012844 movs r3, 0                                        |         r3 = 0;
    0x00012846 add r1, sp, 8                                     |         r1 += var_8h;
    0x00012848 str r3, [sp, 8]                                   |         var_8h = r3;
    0x0001284a bl 0x864c                                         |         fcn_0000864c (r0, r1);
    0x0001284e ldrb.w r7, [sp, 8]                                |         r7 = var_8h;
    0x00012850 strb r0, [r1]                                     |         *(r1) = r0;
    0x00012852 b 0x12828                                         |         
                                                                 |     } while (1);
                                                                 | label_4:
    0x00012854 blx 0x6498                                        |     fcn_00006498 ();
    0x00012858 asrs r2, r1, 5                                    |     r2 = r1 >> 5;
    0x0001285a movs r5, r0                                       |     r5 = r0;
    0x0001285c strb r4, [r3, r2]                                 |     *((r3 + r2)) = r4;
    0x0001285e movs r6, r0                                       |     r6 = r0;
    0x00012860 lsls r0, r1, 0xe                                  |     r0 = r1 << 0xe;
    0x00012862 movs r0, r0                                       |     
    0x00012864 asrs r6, r1, 4                                    |     r6 = r1 >> 4;
    0x00012866 movs r5, r0                                       |     r5 = r0;
    0x00012868 asrs r4, r1, 4                                    |     r4 = r1 >> 4;
    0x0001286a movs r5, r0                                       |     r5 = r0;
    0x0001286c strb r4, [r5, r0]                                 |     *((r5 + r0)) = r4;
    0x0001286e movs r6, r0                                       |     r6 = r0;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x128cc */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.000128cc ()                                      | void fcn_000128cc (int16_t arg_0h, int16_t arg_ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_4h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x000128cc svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x000128d0 mov r4, r0                                        |     r4 = r0;
    0x000128d2 ldr r7, [r0]                                      |     r7 = *(r0);
    0x000128d4 sub sp, 0xc                                       |     
    0x000128d6 mov r5, r1                                        |     r5 = r1;
    0x000128d8 mov r6, r2                                        |     r6 = r2;
    0x000128da mov r8, r3                                        |     r8 = r3;
                                                                 |     if (r7 == 0) {
    0x000128dc cbz r7, 0x1290c                                   |         goto label_2;
                                                                 |     }
    0x000128de cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000128e0 beq.w 0x12ac8                                     |         goto label_5;
                                                                 |     }
    0x000128e4 ldr r1, [pc, 0x1f8]                               |     
    0x000128e6 adds r2, r5, r2                                   |     r2 = r5 + r2;
    0x000128e8 mov r3, r5                                        |     r3 = r5;
    0x000128ea movs r0, 0                                        |     r0 = 0;
    0x000128ec add r1, pc                                        |     r1 = 0x253d0;
                                                                 |     do {
    0x000128ee ldrb ip, [r3], 1                                  |         ip = *(r3);
                                                                 |         r3++;
    0x000128f2 add ip, r1                                        |         
    0x000128f4 cmp r3, r2                                        |         
    0x000128f6 ldrb.w ip, [ip, 0x150]                            |         ip = *((ip + 0x150));
    0x000128fa eor.w ip, ip, r0, lsl 3                           |         
    0x000128fe eor.w r0, r0, ip                                  |         r0 ^= ip;
    0x00012902 bne 0x128ee                                       |         
                                                                 |     } while (r3 != r2);
    0x00012904 mov r1, r7                                        |     r1 = r7;
    0x00012906 bl 0x5debc                                        |     fcn_0005debc (r0, r1, r2);
    0x0001290a mov r7, r1                                        |     r7 = r1;
                                                                 | label_2:
    0x0001290c mov r3, r7                                        |     r3 = r7;
    0x0001290e mov r2, r6                                        |     r2 = r6;
    0x00012910 mov r1, r5                                        |     r1 = r5;
    0x00012912 mov r0, r4                                        |     r0 = r4;
    0x00012914 bl 0x12870                                        |     r0 = fcn_00012870 (r0, r1, r2, r3);
                                                                 |     if (r0 != 0) {
    0x00012918 cbz r0, 0x12930                                   |         
    0x0001291a ldr r6, [r0, 8]                                   |         r6 = *((r0 + 8));
    0x0001291c cmp.w r8, 0                                       |         
                                                                 |         if (r8 == 0) {
    0x00012920 beq.w 0x12a74                                     |             goto label_6;
                                                                 |         }
    0x00012924 strd r8, r5, [r0, 8]                              |         __asm ("strd r8, r5, [r0, 8]");
                                                                 | label_1:
    0x00012928 mov r0, r6                                        |         r0 = r6;
    0x0001292a add sp, 0xc                                       |         
    0x0001292c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 |     }
    0x00012930 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x00012934 beq.w 0x12acc                                     |         goto label_7;
                                                                 |     }
    0x00012938 movs r0, 0x14                                     |     r0 = 0x14;
    0x0001293a bl 0xd300                                         |     r0 = fcn_0000d300 (r0, r1, r2, r3, r4);
    0x0001293e mov sb, r0                                        |     sb = r0;
    0x00012940 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00012942 beq.w 0x12acc                                     |         goto label_7;
                                                                 |     }
    0x00012946 ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x00012948 strd r8, r5, [r0, 8]                              |     __asm ("strd r8, r5, [r0, 8]");
    0x0001294c str r6, [r0, 0x10]                                |     *((r0 + 0x10)) = r6;
    0x0001294e adds r3, 1                                        |     r3++;
    0x00012950 cmp r3, 9                                         |     
    0x00012952 str r3, [r4, 4]                                   |     *((r4 + 4)) = r3;
                                                                 |     if (r3 < 9) {
    0x00012954 bls 0x12a3c                                       |         goto label_8;
                                                                 |     }
    0x00012956 ldr r2, [r4]                                      |     r2 = *(r4);
    0x00012958 cmp.w r3, r2, lsl 1                               |     
                                                                 |     if (r3 < r2) {
    0x0001295c bls 0x12a3c                                       |         goto label_8;
                                                                 |     }
    0x0001295e lsls r1, r3, 4                                    |     r1 = r3 << 4;
    0x00012960 cmp.w r1, 0x400                                   |     
    0x00012964 ite ls                                            |     
                                                                 |     if (r1 > 0x400) {
    0x00012966 lslls r8, r3, 1                                   |         r8 = r3 << 1;
                                                                 |     }
                                                                 |     if (r1 > 0x400) {
    0x0001296a mov.w r8, 0x80                                    |         r8 = 0x80;
                                                                 |     }
    0x0001296e cmp r2, r8                                        |     
                                                                 |     if (r2 == r8) {
    0x00012970 beq 0x12a3c                                       |         goto label_8;
                                                                 |     }
    0x00012972 ldr r3, [pc, 0x170]                               |     
    0x00012974 add r3, pc                                        |     
    0x00012976 ldr.w r3, [r3, 0x1a8]                             |     r3 = *(0x25606);
                                                                 |     if (r3 != 0) {
    0x0001297a cbz r3, 0x1297e                                   |         
    0x0001297c blx r3                                            |         uint32_t (*r3)() ();
                                                                 |     }
    0x0001297e lsl.w r0, r8, 3                                   |     r0 = r8 << 3;
    0x00012982 bl 0xd300                                         |     fcn_0000d300 (r0, r1, r2, r3, r4);
    0x00012986 ldr r3, [pc, 0x160]                               |     
    0x00012988 mov r8, r0                                        |     r8 = r0;
    0x0001298a add r3, pc                                        |     
    0x0001298c ldr.w r3, [r3, 0x1ac]                             |     r3 = *(0x25624);
                                                                 |     if (r3 != 0) {
    0x00012990 cbz r3, 0x12994                                   |         
    0x00012992 blx r3                                            |         uint32_t (*r3)(uint32_t) (r0);
                                                                 |     }
    0x00012994 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x00012998 beq 0x12a3c                                       |         goto label_8;
                                                                 |     }
    0x0001299a ldr r0, [r4, 0xc]                                 |     r0 = *((r4 + 0xc));
    0x0001299c blx 0x6050                                        |     fcn_00006050 ();
    0x000129a0 ldr r3, [pc, 0x148]                               |     
    0x000129a2 mov r0, r8                                        |     r0 = r8;
    0x000129a4 str.w r8, [r4, 0xc]                               |     __asm ("str.w r8, [r4, 0xc]");
    0x000129a8 add r3, pc                                        |     
    0x000129aa ldr r3, [r3, 0x30]                                |     r3 = *(0x254c8);
    0x000129ac blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x000129ae lsrs r3, r0, 3                                    |     r3 = r0 >> 3;
    0x000129b0 bic r2, r0, 7                                     |     r2 = BIT_MASK (r0, 7);
    0x000129b4 movs r1, 0                                        |     r1 = 0;
    0x000129b6 str r3, [r4]                                      |     *(r4) = r3;
    0x000129b8 mov r0, r8                                        |     r0 = r8;
    0x000129ba str r3, [sp, 4]                                   |     var_4h = r3;
    0x000129bc blx 0x5fcc                                        |     fcn_00005fcc ();
    0x000129c0 ldr.w fp, [r4, 8]                                 |     fp = *((r4 + 8));
    0x000129c4 movs r3, 0                                        |     r3 = 0;
    0x000129c6 str r3, [r4, 8]                                   |     *((r4 + 8)) = r3;
    0x000129c8 cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x000129cc beq 0x12a12                                       |         goto label_9;
                                                                 |     }
    0x000129ce ldr.w sl, [pc, 0x120]                             |     sl = *(0x00012af0);
    0x000129d2 add sl, pc                                        |     sl += pc;
                                                                 | label_0:
    0x000129d4 ldrd r2, r1, [fp, 0xc]                            |     __asm ("ldrd r2, r1, [arg_ch]");
    0x000129d8 cmp r1, 0                                         |     
                                                                 |     if (r1 <= 0) {
    0x000129da ble 0x12ada                                       |         goto label_10;
                                                                 |     }
    0x000129dc add r1, r2                                        |     r1 += r2;
    0x000129de movs r0, 0                                        |     r0 = 0;
                                                                 |     do {
    0x000129e0 ldrb r3, [r2], 1                                  |         r3 = *(r2);
                                                                 |         r2++;
    0x000129e4 add r3, sl                                        |         r3 += sl;
    0x000129e6 cmp r2, r1                                        |         
    0x000129e8 ldrb.w r3, [r3, 0x150]                            |         r3 = *((r3 + 0x150));
    0x000129ec eor.w r3, r3, r0, lsl 3                           |         r3 ^= (r0 << 3);
    0x000129f0 eor.w r0, r0, r3                                  |         r0 ^= r3;
    0x000129f4 bne 0x129e0                                       |         
                                                                 |     } while (r2 != r1);
    0x000129f6 ldr r1, [sp, 4]                                   |     r1 = var_4h;
    0x000129f8 bl 0x5debc                                        |     fcn_0005debc (r0, r1, r2);
    0x000129fc add.w r1, r8, r1, lsl 3                           |     r1 = r8 + (r1 << 3);
                                                                 | label_4:
    0x00012a00 ldr.w r7, [fp]                                    |     r7 = *(fp);
    0x00012a04 mov r2, fp                                        |     r2 = fp;
    0x00012a06 mov r0, r4                                        |     r0 = r4;
    0x00012a08 bl 0x7444                                         |     fcn_00007444 (r0, r1, r2);
                                                                 |     if (r7 != 0) {
    0x00012a0c cbz r7, 0x12a12                                   |         
    0x00012a0e mov fp, r7                                        |         
    0x00012a10 b 0x129d4                                         |         goto label_0;
                                                                 |     }
                                                                 | label_9:
    0x00012a12 mov r0, r6                                        |     r0 = r6;
                                                                 |     if (r6 == 0) {
    0x00012a14 cbz r6, 0x12a34                                   |         goto label_11;
                                                                 |     }
    0x00012a16 ldr r2, [pc, 0xdc]                                |     
    0x00012a18 add r6, r5                                        |     r6 += r5;
    0x00012a1a movs r0, 0                                        |     r0 = 0;
    0x00012a1c add r2, pc                                        |     r2 = 0x25516;
                                                                 |     do {
    0x00012a1e ldrb r3, [r5], 1                                  |         r3 = *(r5);
                                                                 |         r5++;
    0x00012a22 add r3, r2                                        |         r3 += r2;
    0x00012a24 cmp r5, r6                                        |         
    0x00012a26 ldrb.w r3, [r3, 0x150]                            |         r3 = *((r3 + 0x150));
    0x00012a2a eor.w r3, r3, r0, lsl 3                           |         r3 ^= (r0 << 3);
    0x00012a2e eor.w r0, r0, r3                                  |         r0 ^= r3;
    0x00012a32 bne 0x12a1e                                       |         
                                                                 |     } while (r5 != r6);
                                                                 | label_11:
    0x00012a34 ldr r1, [r4]                                      |     r1 = *(r4);
    0x00012a36 bl 0x5debc                                        |     fcn_0005debc (r0, r1, r2);
    0x00012a3a mov r7, r1                                        |     r7 = r1;
                                                                 | label_8:
    0x00012a3c ldr r6, [r4, 0xc]                                 |     r6 = *((r4 + 0xc));
                                                                 |     if (r6 != 0) {
    0x00012a3e cbz r6, 0x12a56                                   |         
    0x00012a40 add.w r1, r6, r7, lsl 3                           |         r1 = r6 + (r7 << 3);
    0x00012a44 mov r0, r4                                        |         r0 = r4;
    0x00012a46 mov r2, sb                                        |         r2 = sb;
    0x00012a48 movs r6, 0                                        |         r6 = 0;
    0x00012a4a bl 0x7444                                         |         fcn_00007444 (r0, r1, r2);
    0x00012a4e mov r0, r6                                        |         r0 = r6;
    0x00012a50 add sp, 0xc                                       |         
    0x00012a52 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 |     }
    0x00012a56 ldr r3, [r4, 8]                                   |     r3 = *((r4 + 8));
    0x00012a58 str.w r3, [sb]                                    |     __asm ("str.w r3, [sb]");
                                                                 |     if (r3 != 0) {
    0x00012a5c cbz r3, 0x12a62                                   |         
    0x00012a5e str.w sb, [r3, 4]                                 |         __asm ("str.w sb, [r3, 4]");
                                                                 |     }
    0x00012a62 movs r3, 0                                        |     r3 = 0;
    0x00012a64 mov r0, r6                                        |     r0 = r6;
    0x00012a66 str.w r3, [sb, 4]                                 |     __asm ("str.w r3, [sb, 4]");
    0x00012a6a str.w sb, [r4, 8]                                 |     __asm ("str.w sb, [r4, 8]");
    0x00012a6e add sp, 0xc                                       |     
    0x00012a70 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_6:
    0x00012a74 ldrd r2, r3, [r0]                                 |     __asm ("ldrd r2, r3, [r0]");
                                                                 |     if (r3 == 0) {
    0x00012a78 cbz r3, 0x12ad6                                   |         goto label_12;
                                                                 |     }
    0x00012a7a str r2, [r3]                                      |     *(r3) = r2;
                                                                 |     if (r2 != 0) {
                                                                 | label_3:
    0x00012a7c cbz r2, 0x12a80                                   |         
    0x00012a7e str r3, [r2, 4]                                   |         *((r2 + 4)) = r3;
                                                                 |     }
    0x00012a80 ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
                                                                 |     if (r3 != 0) {
    0x00012a82 cbz r3, 0x12a96                                   |         
    0x00012a84 lsls r7, r7, 3                                    |         r7 <<= 3;
    0x00012a86 adds r1, r3, r7                                   |         r1 = r3 + r7;
    0x00012a88 ldr r5, [r1, 4]                                   |         r5 = *((r1 + 4));
    0x00012a8a cmp r0, r5                                        |         
    0x00012a8c it eq                                             |         
                                                                 |         if (r0 != r5) {
    0x00012a8e streq r2, [r1, 4]                                 |             *((r1 + 4)) = r2;
                                                                 |         }
    0x00012a90 ldr r2, [r3, r7]                                  |         r2 = *((r3 + r7));
    0x00012a92 subs r2, 1                                        |         r2--;
    0x00012a94 str r2, [r3, r7]                                  |         *((r3 + r7)) = r2;
                                                                 |     }
    0x00012a96 blx 0x6050                                        |     fcn_00006050 ();
    0x00012a9a ldr r7, [r4, 4]                                   |     r7 = *((r4 + 4));
    0x00012a9c subs r7, 1                                        |     r7--;
    0x00012a9e str r7, [r4, 4]                                   |     *((r4 + 4)) = r7;
    0x00012aa0 cmp r7, 0                                         |     
                                                                 |     if (r7 != 0) {
    0x00012aa2 bne.w 0x12928                                     |         goto label_1;
                                                                 |     }
    0x00012aa6 ldrd r5, r0, [r4, 8]                              |     __asm ("ldrd r5, r0, [r4, 8]");
    0x00012aaa str r7, [r4, 8]                                   |     *((r4 + 8)) = r7;
    0x00012aac blx 0x6050                                        |     fcn_00006050 ();
    0x00012ab0 str r7, [r4, 0xc]                                 |     *((r4 + 0xc)) = r7;
    0x00012ab2 str r7, [r4]                                      |     *(r4) = r7;
                                                                 |     if (r5 == 0) {
    0x00012ab4 cbz r5, 0x12ac2                                   |         goto label_13;
                                                                 |     }
                                                                 |     do {
    0x00012ab6 mov r0, r5                                        |         r0 = r5;
    0x00012ab8 ldr r5, [r5]                                      |         r5 = *(r5);
    0x00012aba blx 0x6050                                        |         fcn_00006050 ();
    0x00012abe cmp r5, 0                                         |         
    0x00012ac0 bne 0x12ab6                                       |         
                                                                 |     } while (r5 != 0);
                                                                 | label_13:
    0x00012ac2 movs r3, 0                                        |     r3 = 0;
    0x00012ac4 str r3, [r4, 4]                                   |     *((r4 + 4)) = r3;
    0x00012ac6 b 0x12928                                         |     goto label_1;
                                                                 | label_5:
    0x00012ac8 mov r7, r2                                        |     r7 = r2;
    0x00012aca b 0x1290c                                         |     goto label_2;
                                                                 | label_7:
    0x00012acc mov r6, r8                                        |     r6 = r8;
    0x00012ace mov r0, r6                                        |     r0 = r6;
    0x00012ad0 add sp, 0xc                                       |     
    0x00012ad2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_12:
    0x00012ad6 str r2, [r4, 8]                                   |     *((r4 + 8)) = r2;
    0x00012ad8 b 0x12a7c                                         |     goto label_3;
                                                                 | label_10:
    0x00012ada mov r1, r8                                        |     r1 = r8;
    0x00012adc b 0x12a00                                         |     goto label_4;
                                                                 | }


r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x14314).
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-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x14be8).
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-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x15748 */
                                                     | #include <stdint.h>
                                                     |  
                                                     | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                     |  
    ; (fcn) fcn.00015748 ()                          | void fcn_00015748 (int16_t arg_3b8h, int16_t arg_3e0h, uint32_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                     |     int16_t var_4h_2;
                                                     |     int16_t var_34h;
                                                     |     int16_t var_3ch;
                                                     |     int16_t var_0h;
                                                     |     int16_t var_4h;
                                                     |     r0 = arg1;
                                                     |     r1 = arg2;
                                                     |     r2 = arg3;
                                                     |     r3 = arg4;
    0x00015748 push.w {r4, r5, r6, r7, r8, lr}       |     
    0x0001574c mov r6, r1                            |     r6 = r1;
    0x0001574e ldr r1, [pc, 0xe8]                    |     
    0x00015750 mov r5, r3                            |     r5 = r3;
    0x00015752 sub sp, 8                             |     
    0x00015754 ldr r3, [pc, 0xe4]                    |     r3 = *(0x1583c);
    0x00015756 add r1, pc                            |     r1 = 0x2af94;
    0x00015758 ldr r3, [r1, r3]                      |     
    0x0001575a ldr r3, [r3]                          |     r3 = *(0x2af94);
    0x0001575c str r3, [sp, 4]                       |     var_4h = r3;
    0x0001575e mov.w r3, 0                           |     r3 = 0;
    0x00015762 cmp r0, 0                             |     
                                                     |     if (r0 == 0) {
    0x00015764 beq 0x157f6                           |         goto label_6;
                                                     |     }
    0x00015766 ldrb r3, [r0]                         |     r3 = *(r0);
    0x00015768 mov r4, r0                            |     r4 = r0;
    0x0001576a cmp r3, 0                             |     
                                                     |     if (r3 == 0) {
    0x0001576c beq 0x157f6                           |         goto label_6;
                                                     |     }
    0x0001576e sub.w r8, r2, 2                       |     r8 = r2 - 2;
    0x00015772 movs r7, 0                            |     r7 = 0;
                                                     | label_0:
    0x00015774 sub.w r2, r3, 0x30                    |     r2 = r3 - 0x30;
    0x00015778 movs r0, 0                            |     r0 = 0;
    0x0001577a cmp r2, 9                             |     
                                                     |     if (r2 > 9) {
    0x0001577c bhi 0x15794                           |         goto label_7;
                                                     |     }
                                                     |     do {
    0x0001577e add.w r0, r0, r0, lsl 2               |         r0 += (r0 << 2);
    0x00015782 add.w r0, r3, r0, lsl 1               |         r0 = r3 + (r0 << 1);
    0x00015786 ldrb r3, [r4, 1]!                     |         r3 = *((r4 += 1));
    0x0001578a subs r0, 0x30                         |         r0 -= 0x30;
    0x0001578c sub.w r2, r3, 0x30                    |         r2 = r3 - 0x30;
    0x00015790 cmp r2, 9                             |         
    0x00015792 bls 0x1577e                           |         
                                                     |     } while (r2 < 9);
                                                     | label_7:
    0x00015794 movs r1, 0                            |     r1 = 0;
    0x00015796 adds r7, 1                            |     r7++;
    0x00015798 bl 0x73ac                             |     fcn_000073ac (r0, r1);
    0x0001579c strh r0, [r8, 2]!                     |     *((r8 += 2)) = r0;
    0x000157a0 ldrb r3, [r4]                         |     r3 = *(r4);
    0x000157a2 cmp r3, 0x20                          |     
    0x000157a4 itt eq                                |     
                                                     |     if (r3 != 0x20) {
    0x000157a6 ldrbeq r3, [r4, 1]                    |         r3 = *((r4 + 1));
                                                     |     }
                                                     |     if (r3 != 0x20) {
    0x000157a8 addeq r4, 1                           |         r4++;
                                                     |     }
    0x000157aa cmp r3, 0                             |     
    0x000157ac it ne                                 |     
                                                     |     if (r3 == 0) {
    0x000157ae cmpne r7, r6                          |         __asm ("cmpne r7, r6");
                                                     |         goto label_8;
                                                     |     }
                                                     |     if (r3 < 0) {
                                                     | label_8:
    0x000157b0 blt 0x15774                           |         goto label_0;
                                                     |     }
                                                     |     if (r3 == 0) {
    0x000157b2 cbz r3, 0x157f6                       |         goto label_6;
                                                     |     }
    0x000157b4 ldr r6, [pc, 0x88]                    |     
    0x000157b6 mov r8, sp                            |     r8 = sp;
    0x000157b8 ldr r7, [pc, 0x88]                    |     
    0x000157ba add r6, pc                            |     r6 = 0x2affe;
    0x000157bc add r7, pc                            |     r7 = 0x2b004;
                                                     | label_1:
    0x000157be mov r1, r4                            |     r1 = r4;
    0x000157c0 mov r0, r6                            |     r0 = r6;
    0x000157c2 blx 0x6244                            |     fcn_00006244 ();
    0x000157c4 vstr d27, [r0, -0x60]                 |     __asm ("vstr d27, [r0, -0x60]");
    0x000157c8 ldrb.w r3, [r5, 0x37]                 |     r3 = *((r5 + 0x37));
    0x000157cc orr r3, r3, 4                         |     r3 |= 4;
    0x000157d0 strb.w r3, [r5, 0x37]                 |     *((r5 + 0x37)) = r3;
                                                     | label_2:
    0x000157d4 ldrb r2, [r4]                         |     r2 = *(r4);
    0x000157d6 tst.w r2, 0xdf                        |     
                                                     |     if ((r2 & 0xdf) == 0) {
    0x000157da beq 0x157ee                           |         goto label_9;
                                                     |     }
                                                     |     do {
    0x000157dc ldrb r2, [r4, 1]!                     |         r2 = *((r4 += 1));
    0x000157e0 tst.w r2, 0xdf                        |         
    0x000157e4 bne 0x157dc                           |         
                                                     |     } while ((r2 & 0xdf) != 0);
    0x000157e6 cmp r2, 0x20                          |     
                                                     |     if (r2 != 0x20) {
    0x000157e8 bne 0x157f2                           |         goto label_10;
                                                     |     }
                                                     |     do {
    0x000157ea ldrb r2, [r4, 1]!                     |         r2 = *((r4 += 1));
                                                     | label_9:
    0x000157ee cmp r2, 0x20                          |         
    0x000157f0 beq 0x157ea                           |         
                                                     |     } while (r2 == 0x20);
                                                     | label_10:
    0x000157f2 cmp r2, 0                             |     
                                                     |     if (r2 != 0) {
    0x000157f4 bne 0x157be                           |         goto label_1;
                                                     |     }
                                                     | label_6:
    0x000157f6 ldr r2, [pc, 0x50]                    |     
    0x000157f8 ldr r3, [pc, 0x40]                    |     r3 = *(0x1583c);
    0x000157fa add r2, pc                            |     r2 = 0x2b048;
    0x000157fc ldr r3, [r2, r3]                      |     r3 = *(0x2b048);
    0x000157fe ldr r2, [r3]                          |     r2 = *(0x2b048);
    0x00015800 ldr r3, [sp, 4]                       |     r3 = var_4h;
    0x00015802 eors r2, r3                           |     r2 ^= r3;
    0x00015804 mov.w r3, 0                           |     r3 = 0;
                                                     |     if (r2 != r3) {
    0x00015808 bne 0x15832                           |         goto label_11;
                                                     |     }
    0x0001580a add sp, 8                             |     
    0x0001580c pop.w {r4, r5, r6, r7, r8, pc}        |     
    0x00015810 mov r1, r4                            |     r1 = r4;
    0x00015812 mov r0, r7                            |     r0 = r7;
    0x00015814 blx 0x6244                            |     r0 = fcn_00006244 ();
    0x00015818 cmp r0, 0                             |     
                                                     |     if (r0 != 0) {
    0x0001581a bne 0x157d4                           |         goto label_2;
                                                     |     }
    0x0001581c mov r1, r8                            |     r1 = r8;
    0x0001581e str r0, [sp]                          |     *(sp) = r0;
    0x00015820 adds r0, r4, 3                        |     r0 = r4 + 3;
    0x00015822 bl 0x864c                             |     fcn_0000864c (r0, r1);
    0x00015826 ldr r0, [sp]                          |     r0 = *(sp);
    0x00015828 asrs r1, r0, 0x1f                     |     r1 = r0 >> 0x1f;
    0x0001582a bl 0x73ac                             |     fcn_000073ac (r0, r1);
    0x0001582e strh r0, [r5, 0x30]                   |     *((r5 + 0x30)) = r0;
    0x00015830 b 0x157d4                             |     goto label_2;
                                                     | label_11:
    0x00015832 blx 0x6498                            |     fcn_00006498 ();
    0x00015836 nop                                   |     
    0x00015838 movs r5, 2                            |     r5 = 2;
    0x0001583a movs r6, r0                           |     r6 = r0;
    0x0001583c lsls r0, r1, 0xe                      |     r0 = r1 << 0xe;
    0x0001583e movs r0, r0                           |     
    0x00015840 str r0, [sp, 0x3b8]                   |     *(arg_3b8h) = r0;
    0x00015842 movs r4, r0                           |     r4 = r0;
    0x00015844 str r0, [sp, 0x3e0]                   |     *(arg_3e0h) = r0;
    0x00015846 movs r4, r0                           |     r4 = r0;
    0x00015848 movs r4, 0x5e                         |     r4 = 0x5e;
    0x0001584a movs r6, r0                           |     r6 = r0;
    0x0001584c push {r4, r5, r6, lr}                 |     
    0x0001584e mov r4, r2                            |     r4 = r2;
    0x00015850 ldr r2, [pc, 0xc0]                    |     
    0x00015852 sub sp, 0x40                          |     
    0x00015854 ldr r3, [pc, 0xc0]                    |     r3 = *(0x15918);
    0x00015856 add r2, pc                            |     r2 = 0x2b16e;
    0x00015858 ldr r3, [r2, r3]                      |     
    0x0001585a ldr r3, [r3]                          |     r3 = *(0x2b16e);
    0x0001585c str r3, [sp, 0x3c]                    |     var_3ch = r3;
    0x0001585e mov.w r3, 0                           |     r3 = 0;
                                                     |     if (r4 == 0) {
    0x00015862 cbz r4, 0x158bc                       |         goto label_5;
                                                     |     }
    0x00015864 ldr r1, [r4]                          |     r1 = *(r4);
                                                     |     if (r1 == 0) {
    0x00015866 cbz r1, 0x158bc                       |         goto label_5;
                                                     |     }
    0x00015868 ldr r3, [r4, 8]                       |     r3 = *((r4 + 8));
                                                     |     if (r3 == 0) {
    0x0001586a cbz r3, 0x158bc                       |         goto label_5;
                                                     |     }
    0x0001586c mov r5, r0                            |     r5 = r0;
    0x0001586e ldrd r0, r2, [r0]                     |     __asm ("ldrd r0, r2, [r0]");
    0x00015872 bl 0x1401c                            |     r0 = fcn_0001401c (r0, r1, r2);
    0x00015876 mov r6, r0                            |     r6 = r0;
                                                     |     if (r0 == 0) {
    0x00015878 cbz r0, 0x158bc                       |         goto label_5;
                                                     |     }
    0x0001587a ldr r1, [r4, 4]                       |     r1 = *((r4 + 4));
                                                     |     if (r1 == 0) {
    0x0001587c cbz r1, 0x158d6                       |         goto label_12;
                                                     |     }
    0x0001587e ldr r0, [r4]                          |     r0 = *(r4);
    0x00015880 blx 0x6164                            |     r0 = fcn_00006164 ();
    0x00015884 cmp r0, 0                             |     
                                                     |     if (r0 != 0) {
    0x00015886 bne 0x158f2                           |         goto label_13;
                                                     |     }
    0x00015888 ldr r5, [r6, 8]                       |     r5 = *((r6 + 8));
                                                     |     if (r5 != 0) {
    0x0001588a cbnz r5, 0x15892                      |         goto label_14;
                                                     |     }
    0x0001588c b 0x158d6                             |     goto label_12;
                                                     |     do {
    0x0001588e ldr r5, [r5, 0x14]                    |         r5 = *((r5 + 0x14));
                                                     |         if (r5 == 0) {
    0x00015890 cbz r5, 0x158d6                       |             goto label_12;
                                                     |         }
                                                     | label_14:
    0x00015892 ldrb.w r3, [r5, 0x37]                 |         r3 = *((r5 + 0x37));
    0x00015896 and r3, r3, 3                         |         r3 &= 3;
    0x0001589a cmp r3, 2                             |         
    0x0001589c bne 0x1588e                           |         
                                                     |     } while (r3 != 2);
    0x0001589e ldr r0, [r4, 8]                       |     r0 = *((r4 + 8));
                                                     | label_3:
    0x000158a0 ldrb.w r3, [r5, 0x37]                 |     r3 = *((r5 + 0x37));
    0x000158a4 ldrh r1, [r5, 0x32]                   |     r1 = *((r5 + 0x32));
    0x000158a6 ldr r2, [r5, 8]                       |     r2 = *((r5 + 8));
    0x000158a8 bfc r3, 2, 1                          |     value_0 = BIT_MASK (1, );
                                                     |     value_0 = ~value_0;
                                                     |     r3 &= value_0;
    0x000158ac strb.w r3, [r5, 0x37]                 |     *((r5 + 0x37)) = r3;
    0x000158b0 adds r1, 1                            |     r1++;
    0x000158b2 mov r3, r5                            |     r3 = r5;
    0x000158b4 bl 0x15748                            |     fcn_00015748 (r0, r1, r2, r3, r4, r5);
    0x000158b8 ldr r3, [r5, 0x24]                    |     r3 = *((r5 + 0x24));
                                                     |     if (r3 == 0) {
    0x000158ba cbz r3, 0x15906                       |         goto label_15;
                                                     |     }
                                                     |     do {
                                                     | label_5:
    0x000158bc ldr r2, [pc, 0x5c]                    |         
    0x000158be ldr r3, [pc, 0x58]                    |         r3 = *(0x1591a);
    0x000158c0 add r2, pc                            |         r2 = 0x2b1e0;
    0x000158c2 ldr r3, [r2, r3]                      |         r3 = *(0x2b1e0);
    0x000158c4 ldr r2, [r3]                          |         r2 = *(0x2b1e0);
    0x000158c6 ldr r3, [sp, 0x3c]                    |         r3 = var_3ch;
    0x000158c8 eors r2, r3                           |         r2 ^= r3;
    0x000158ca mov.w r3, 0                           |         r3 = 0;
                                                     |         if (r2 != r3) {
    0x000158ce bne 0x15910                           |             goto label_16;
                                                     |         }
    0x000158d0 movs r0, 0                            |         r0 = 0;
    0x000158d2 add sp, 0x40                          |         
    0x000158d4 pop {r4, r5, r6, pc}                  |         
                                                     | label_12:
    0x000158d6 ldr r0, [r4, 8]                       |         r0 = *((r4 + 8));
                                                     | label_4:
    0x000158d8 ldrh r1, [r6, 0x2a]                   |         r1 = *((r6 + 0x2a));
    0x000158da add r3, sp, 4                         |         r3 += var_4h_2;
    0x000158dc add.w r2, r6, 0x1c                    |         r2 = r6 + 0x1c;
    0x000158e0 strh.w r1, [sp, 0x34]                 |         var_34h = r1;
    0x000158e4 movs r1, 1                            |         r1 = 1;
    0x000158e6 bl 0x15748                            |         fcn_00015748 (r0, r1, r2, r3, r4, r5);
    0x000158ea ldrh.w r3, [sp, 0x34]                 |         r3 = var_34h;
    0x000158ee strh r3, [r6, 0x2a]                   |         *((r6 + 0x2a)) = r3;
    0x000158f0 b 0x158bc                             |         
                                                     |     } while (1);
                                                     | label_13:
    0x000158f2 ldr r2, [r5, 4]                       |     r2 = *((r5 + 4));
    0x000158f4 ldr r0, [r5]                          |     r0 = *(r5);
    0x000158f6 ldr r1, [r4, 4]                       |     r1 = *((r4 + 4));
    0x000158f8 bl 0x13fac                            |     r0 = fcn_00013fac (r0, r1, r2);
    0x000158fc mov r5, r0                            |     r5 = r0;
    0x000158fe ldr r0, [r4, 8]                       |     r0 = *((r4 + 8));
    0x00015900 cmp r5, 0                             |     
                                                     |     if (r5 != 0) {
    0x00015902 bne 0x158a0                           |         goto label_3;
                                                     |     }
    0x00015904 b 0x158d8                             |     goto label_4;
                                                     | label_15:
    0x00015906 ldr r3, [r5, 8]                       |     r3 = *((r5 + 8));
    0x00015908 ldrsh.w r3, [r3]                      |     r3 = *(r3);
    0x0001590c strh r3, [r6, 0x1c]                   |     *((r6 + 0x1c)) = r3;
    0x0001590e b 0x158bc                             |     goto label_5;
                                                     | label_16:
    0x00015910 blx 0x6498                            |     fcn_00006498 ();
    0x00015914 movs r4, 2                            |     r4 = 2;
    0x00015916 movs r6, r0                           |     r6 = r0;
    0x00015918 lsls r0, r1, 0xe                      |     r0 = r1 << 0xe;
    0x0001591a movs r0, r0                           |     
    0x0001591c movs r3, 0x98                         |     r3 = 0x98;
    0x0001591e movs r6, r0                           |     r6 = r0;
                                                     | }
    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x16584 */
                                                     | #include <stdint.h>
                                                     |  
    ; (fcn) fcn.00016584 ()                          | void fcn_00016584 (int16_t arg1, int16_t arg3) {
                                                     |     r0 = arg1;
                                                     |     r2 = arg3;
    0x00016584 mvnsmi lr, sp, lsr 18                 |     __asm ("mvnsmi lr, sp, lsr 18");
    0x00016588 mov r4, r0                            |     r4 = r0;
    0x0001658a ldrd r8, r5, [r0, 0x94]               |     __asm ("ldrd r8, r5, [r0, 0x94]");
    0x0001658e sub sp, 8                             |     
    0x00016590 ldr r3, [r0, 0x60]                    |     r3 = *((r0 + 0x60));
    0x00016592 cmp r5, r8                            |     
    0x00016594 ldr.w r6, [r0, 0xd8]                  |     r6 = *((r0 + 0xd8));
    0x00016598 it hs                                 |     
                                                     |     if (r5 < r8) {
    0x0001659a movhs r5, r8                          |         r5 = r8;
                                                     |     }
    0x0001659c ldr r0, [r0, 0x48]                    |     r0 = *((r0 + 0x48));
    0x0001659e cmp r3, 0                             |     
    0x000165a0 ldr r1, [r4, 0x4c]                    |     r1 = *((r4 + 0x4c));
                                                     |     if (r3 <= 0) {
    0x000165a2 ble 0x165c0                           |         goto label_1;
                                                     |     }
    0x000165a4 add.w ip, r3, r3, lsl 1               |     
    0x000165a8 ldr r3, [r4, 0x5c]                    |     r3 = *((r4 + 0x5c));
    0x000165aa add.w ip, r3, ip, lsl 4               |     
                                                     |     do {
    0x000165ae ldrd r2, r7, [r3, 8]                  |         __asm ("ldrd r2, r7, [r3, 8]");
    0x000165b2 orrs r7, r2                           |         r7 |= r2;
    0x000165b4 it eq                                 |         
                                                     |         if (r7 == r2) {
    0x000165b6 strdeq r0, r1, [r3, 8]                |             __asm ("strdeq r0, r1, [r3, 8]");
                                                     |         }
    0x000165ba adds r3, 0x30                         |         r3 += 0x30;
    0x000165bc cmp ip, r3                            |         
    0x000165be bne 0x165ae                           |         
                                                     |     } while (ip != r3);
                                                     | label_1:
    0x000165c0 orrs.w r3, r0, r1                     |     r3 = r0 | r1;
                                                     |     if (r3 != r0) {
    0x000165c4 beq 0x165e4                           |         
    0x000165c6 subs r0, 1                            |         r0--;
    0x000165c8 mov.w r3, 0                           |         r3 = 0;
    0x000165cc sbc r1, r1, 0                         |         __asm ("sbc r1, r1, 0");
    0x000165d0 mov r2, r8                            |         r2 = r8;
    0x000165d2 bl 0x5e500                            |         fcn_0005e500 (r0, r1, r2, r3);
    0x000165d6 adds r0, 1                            |         r0++;
    0x000165d8 adc r3, r1, 0                         |         __asm ("adc r3, r1, 0");
    0x000165dc umull r0, r1, r0, r8                  |         r0:r1 = r0 * r8;
    0x000165e0 mla r1, r8, r3, r1                    |         __asm ("mla r1, r8, r3, r1");
                                                     |     }
    0x000165e4 ldrb r3, [r4, 7]                      |     r3 = *((r4 + 7));
    0x000165e6 strd r0, r1, [r4, 0x48]               |     __asm ("strd r0, r1, [r4, 0x48]");
    0x000165ea str r0, [r4, 0x50]                    |     *((r4 + 0x50)) = r0;
    0x000165ec str r1, [r4, 0x54]                    |     *((r4 + 0x54)) = r1;
                                                     |     if (r3 == 0) {
    0x000165ee cbnz r3, 0x16604                      |         
    0x000165f0 ldrb r3, [r4, 5]                      |         r3 = *((r4 + 5));
    0x000165f2 cmp r3, 4                             |         
                                                     |         if (r3 == 4) {
    0x000165f4 beq 0x16604                           |             goto label_2;
                                                     |         }
    0x000165f6 ldr r0, [r4, 0x3c]                    |         r0 = *((r4 + 0x3c));
    0x000165f8 ldr r3, [r0]                          |         r3 = *(r0);
    0x000165fa ldr r3, [r3, 0x30]                    |         r3 = *((r3 + 0x30));
    0x000165fc blx r3                                |         r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x000165fe ands r0, r0, 0x200                    |         r0 &= 0x200;
                                                     |         if (r0 == r0) {
    0x00016602 beq 0x166ac                           |             goto label_3;
                                                     |         }
                                                     |     }
                                                     | label_2:
    0x00016604 ldr r3, [pc, 0xac]                    |     
    0x00016606 add r3, pc                            |     r3 = 0x2ccbe;
    0x00016608 ldm r3!, {r0, r1, r2}                 |     r0 = *(r3!);
                                                     |     r1 = *((r3! + 4));
                                                     |     r2 = *((r3! + 8));
    0x0001660a str r0, [r6]                          |     *(r6) = r0;
    0x0001660c str r1, [r6, 4]                       |     *((r6 + 4)) = r1;
    0x0001660e str r2, [r6, 8]                       |     *((r6 + 8)) = r2;
                                                     | label_0:
    0x00016610 add.w r1, r4, 0x30                    |     r1 = r4 + 0x30;
    0x00016614 movs r0, 4                            |     r0 = 4;
    0x00016616 blx 0x67ac                            |     fcn_000067ac ();
    0x0001661a ldr r3, [r4, 0x30]                    |     r3 = *((r4 + 0x30));
    0x0001661c movs r7, 0                            |     r7 = 0;
    0x0001661e movs r1, 0                            |     r1 = 0;
    0x00016620 add.w r0, r6, 0x1c                    |     r0 = r6 + 0x1c;
    0x00016624 strb r3, [r6, 0xf]                    |     *((r6 + 0xf)) = r3;
    0x00016626 lsrs r2, r3, 0x18                     |     r2 = r3 >> 0x18;
    0x00016628 strb r2, [r6, 0xc]                    |     *((r6 + 0xc)) = r2;
    0x0001662a lsrs r2, r3, 0x10                     |     r2 = r3 >> 0x10;
    0x0001662c lsrs r3, r3, 8                        |     r3 >>= 8;
    0x0001662e strb r2, [r6, 0xd]                    |     *((r6 + 0xd)) = r2;
    0x00016630 strb r3, [r6, 0xe]                    |     *((r6 + 0xe)) = r3;
    0x00016632 ldr r3, [r4, 0x1c]                    |     r3 = *((r4 + 0x1c));
    0x00016634 strb r3, [r6, 0x13]                   |     *((r6 + 0x13)) = r3;
    0x00016636 lsrs r2, r3, 0x18                     |     r2 = r3 >> 0x18;
    0x00016638 strb r2, [r6, 0x10]                   |     *((r6 + 0x10)) = r2;
    0x0001663a lsrs r2, r3, 0x10                     |     r2 = r3 >> 0x10;
    0x0001663c lsrs r3, r3, 8                        |     r3 >>= 8;
    0x0001663e strb r2, [r6, 0x11]                   |     *((r6 + 0x11)) = r2;
    0x00016640 strb r3, [r6, 0x12]                   |     *((r6 + 0x12)) = r3;
    0x00016642 ldr.w r3, [r4, 0x94]                  |     r3 = *((r4 + 0x94));
    0x00016646 strb r3, [r6, 0x17]                   |     *((r6 + 0x17)) = r3;
    0x00016648 lsrs r2, r3, 0x18                     |     r2 = r3 >> 0x18;
    0x0001664a strb r2, [r6, 0x14]                   |     *((r6 + 0x14)) = r2;
    0x0001664c lsrs r2, r3, 0x10                     |     r2 = r3 >> 0x10;
    0x0001664e lsrs r3, r3, 8                        |     r3 >>= 8;
    0x00016650 strb r2, [r6, 0x15]                   |     *((r6 + 0x15)) = r2;
    0x00016652 strb r3, [r6, 0x16]                   |     *((r6 + 0x16)) = r3;
    0x00016654 ldr.w r3, [r4, 0x98]                  |     r3 = *((r4 + 0x98));
    0x00016658 strb r3, [r6, 0x1b]                   |     *((r6 + 0x1b)) = r3;
    0x0001665a lsrs r2, r3, 0x18                     |     r2 = r3 >> 0x18;
    0x0001665c strb r2, [r6, 0x18]                   |     *((r6 + 0x18)) = r2;
    0x0001665e lsrs r2, r3, 0x10                     |     r2 = r3 >> 0x10;
    0x00016660 lsrs r3, r3, 8                        |     r3 >>= 8;
    0x00016662 strb r2, [r6, 0x19]                   |     *((r6 + 0x19)) = r2;
    0x00016664 sub.w r2, r5, 0x1c                    |     r2 = r5 - 0x1c;
    0x00016668 strb r3, [r6, 0x1a]                   |     *((r6 + 0x1a)) = r3;
    0x0001666a blx 0x5fcc                            |     fcn_00005fcc ();
                                                     |     do {
    0x0001666e ldr.w r3, [r4, 0x94]                  |         r3 = *((r4 + 0x94));
    0x00016672 mov r2, r5                            |         r2 = r5;
    0x00016674 mov r1, r6                            |         r1 = r6;
    0x00016676 cmp r3, r7                            |         
    0x00016678 add r7, r5                            |         r7 += r5;
                                                     |         if (r3 < r7) {
    0x0001667a bls 0x166a4                           |             goto label_4;
                                                     |         }
    0x0001667c ldr r0, [r4, 0x40]                    |         r0 = *((r4 + 0x40));
    0x0001667e vldr d16, [r4, 0x48]                  |         __asm ("vldr d16, [r4, 0x48]");
    0x00016682 ldr r3, [r0]                          |         r3 = *(r0);
    0x00016684 vstr d16, [sp]                        |         __asm ("vstr d16, [sp]");
    0x00016688 ldr r3, [r3, 0xc]                     |         r3 = *((r3 + 0xc));
    0x0001668a blx r3                                |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0001668c ldrd r3, r2, [r4, 0x48]               |         __asm ("ldrd r3, r2, [r4, 0x48]");
    0x00016690 adds r3, r3, r5                       |         r3 += r5;
    0x00016692 adc r2, r2, 0                         |         __asm ("adc r2, r2, 0");
    0x00016696 strd r3, r2, [r4, 0x48]               |         __asm ("strd r3, r2, [r4, 0x48]");
    0x0001669a cmp r0, 0                             |         
    0x0001669c beq 0x1666e                           |         
                                                     |     } while (r0 == 0);
    0x0001669e add sp, 8                             |     
    0x000166a0 pop.w {r4, r5, r6, r7, r8, pc}        |     
                                                     | label_4:
    0x000166a4 movs r0, 0                            |     r0 = 0;
    0x000166a6 add sp, 8                             |     
    0x000166a8 pop.w {r4, r5, r6, r7, r8, pc}        |     
                                                     | label_3:
    0x000166ac str r0, [r6]                          |     *(r6) = r0;
    0x000166ae str r0, [r6, 4]                       |     *((r6 + 4)) = r0;
    0x000166b0 str r0, [r6, 8]                       |     *((r6 + 8)) = r0;
    0x000166b2 b 0x16610                             |     goto label_0;
                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x168c0 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
                                                                 |                                ((n & 0x0000ff00) <<  8) | \
                                                                 |                                ((n & 0x00ff0000) >>  8) | \
                                                                 |                                ((n & 0xff000000) >> 24)))
                                                                 |  
    ; (fcn) fcn.000168c0 ()                                      | void fcn_000168c0 (int16_t arg1) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     r0 = arg1;
    0x000168c0 ldr r2, [pc, 0x2f8]                               |     
    0x000168c2 ldr r3, [pc, 0x2fc]                               |     r3 = *(0x16bc2);
    0x000168c4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x000168c8 sub sp, 0x1c                                      |     
    0x000168ca add r2, pc                                        |     r2 = 0x2d48a;
    0x000168cc ldr r5, [r0, 0x10]                                |     r5 = *((r0 + 0x10));
    0x000168ce mov r4, r0                                        |     r4 = r0;
    0x000168d0 ldr r3, [r2, r3]                                  |     
    0x000168d2 ldr r3, [r3]                                      |     r3 = *(0x2d48a);
    0x000168d4 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x000168d6 mov.w r3, 0                                       |     r3 = 0;
    0x000168da ldrb r3, [r5, 0x10]                               |     r3 = *((r5 + 0x10));
    0x000168dc cmp r3, 2                                         |     
                                                                 |     if (r3 == 2) {
    0x000168de beq 0x1696c                                       |         goto label_10;
                                                                 |     }
                                                                 | label_0:
    0x000168e0 ldrh r2, [r4, 0x18]                               |     r2 = *((r4 + 0x18));
    0x000168e2 movw r3, 0xffdf                                   |     r3 = 0xffdf;
    0x000168e6 ands r3, r2                                       |     r3 &= r2;
    0x000168e8 lsls r2, r2, 0x1e                                 |     r2 <<= 0x1e;
    0x000168ea it mi                                             |     
                                                                 |     if (r2 < r2) {
    0x000168ec strhmi r3, [r4, 0x18]                             |         __asm ("strhmi r3, [r4, 0x18]");
                                                                 |     }
                                                                 |     if (r2 >= r2) {
    0x000168ee bpl 0x16984                                       |         goto label_11;
                                                                 |     }
                                                                 | label_1:
    0x000168f0 ldr r0, [r5, 0x38]                                |     r0 = *((r5 + 0x38));
    0x000168f2 ldr r6, [r4, 0x14]                                |     r6 = *((r4 + 0x14));
                                                                 |     if (r0 == 0) {
    0x000168f4 cbz r0, 0x16908                                   |         goto label_12;
                                                                 |     }
    0x000168f6 ldr r2, [r0]                                      |     r2 = *(r0);
    0x000168f8 clz r3, r6                                        |     r3 &= r6;
    0x000168fc lsrs r3, r3, 5                                    |     r3 >>= 5;
    0x000168fe cmp r6, r2                                        |     
    0x00016900 it hi                                             |     
                                                                 |     if (r6 <= r2) {
    0x00016902 orrhi r3, r3, 1                                   |         r3 |= 1;
                                                                 |     }
    0x00016906 cbz r3, 0x16934                                   |     
                                                                 |     while (r0 == 0) {
                                                                 | label_12:
    0x00016908 ldr.w r3, [r5, 0xe0]                              |         r3 = *((r5 + 0xe0));
    0x0001690c cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0001690e beq 0x16992                                       |             goto label_13;
                                                                 |         }
    0x00016910 ldr r7, [r5, 0x60]                                |         r7 = *((r5 + 0x60));
    0x00016912 ldr r6, [r4, 0x14]                                |         r6 = *((r4 + 0x14));
                                                                 | label_5:
    0x00016914 cmp r7, 0                                         |         
    0x00016916 it le                                             |         
                                                                 |         if (r7 > 0) {
    0x00016918 movle r7, 0                                       |             r7 = 0;
                                                                 |         }
                                                                 |         if (r7 <= 0) {
    0x0001691a ble 0x16946                                       |             goto label_6;
                                                                 |         }
    0x0001691c ldr r0, [r4, 0x10]                                |         r0 = *((r4 + 0x10));
    0x0001691e mov r1, r6                                        |         r1 = r6;
    0x00016920 bl 0xb398                                         |         r0 = fcn_0000b398 (r0, r1, r2);
    0x00016924 mov r7, r0                                        |         r7 = r0;
                                                                 |         if (r0 == 0) {
    0x00016926 cbz r0, 0x16946                                   |             goto label_6;
                                                                 |         }
    0x00016928 mov r0, r4                                        |         r0 = r4;
    0x0001692a bl 0xf138                                         |         fcn_0000f138 (r0);
    0x0001692e ldr r6, [r4, 0x14]                                |         r6 = *((r4 + 0x14));
    0x00016930 mov r7, r0                                        |         r7 = r0;
    0x00016932 b 0x16946                                         |         goto label_6;
    0x00016934 mov r1, r6                                        |         r1 = r6;
    0x00016936 bl 0xa0d4                                         |         r0 = fcn_0000a0d4 (r0, r1, r2);
    0x0001693a cmp r0, 0                                         |         
    0x0001693c beq 0x16908                                       |         
                                                                 |     }
    0x0001693e ldr r7, [r5, 0x60]                                |     r7 = *((r5 + 0x60));
    0x00016940 cmp r7, 0                                         |     
                                                                 |     if (r7 != 0) {
    0x00016942 bne.w 0x16b1c                                     |         goto label_14;
                                                                 |     }
                                                                 | label_6:
    0x00016946 ldr r3, [r5, 0x18]                                |     r3 = *((r5 + 0x18));
    0x00016948 cmp r3, r6                                        |     
    0x0001694a it lo                                             |     
    0x0001694c strlo r6, [r5, 0x18]                              |     *((r5 + 0x18)) = r6;
                                                                 |     while (r7 != 0) {
                                                                 | label_2:
    0x0001694e ldr r2, [pc, 0x274]                               |         
    0x00016950 ldr r3, [pc, 0x26c]                               |         r3 = *(0x16bc0);
    0x00016952 add r2, pc                                        |         r2 = 0x2d51c;
    0x00016954 ldr r3, [r2, r3]                                  |         r3 = *(0x2d51c);
    0x00016956 ldr r2, [r3]                                      |         r2 = *(0x2d51c);
    0x00016958 ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x0001695a eors r2, r3                                       |         r2 ^= r3;
    0x0001695c mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00016960 bne.w 0x16bb8                                     |             goto label_15;
                                                                 |         }
    0x00016964 mov r0, r7                                        |         r0 = r7;
    0x00016966 add sp, 0x1c                                      |         
    0x00016968 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_10:
    0x0001696c ldr r7, [r5, 0x28]                                |         r7 = *((r5 + 0x28));
    0x0001696e cmp r7, 0                                         |         
    0x00016970 bne 0x1694e                                       |         
                                                                 |     }
    0x00016972 ldr.w r3, [r5, 0xe0]                              |     r3 = *((r5 + 0xe0));
    0x00016976 ldr r6, [r5]                                      |     r6 = *(r5);
    0x00016978 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0001697a beq.w 0x16ab4                                     |         goto label_16;
                                                                 |     }
                                                                 | label_4:
    0x0001697e movs r3, 3                                        |     r3 = 3;
    0x00016980 strb r3, [r5, 0x10]                               |     *((r5 + 0x10)) = r3;
    0x00016982 b 0x168e0                                         |     goto label_0;
                                                                 | label_11:
    0x00016984 orr r3, r3, 2                                     |     r3 |= 2;
    0x00016988 mov r0, r4                                        |     r0 = r4;
    0x0001698a strh r3, [r4, 0x18]                               |     *((r4 + 0x18)) = r3;
    0x0001698c bl 0x76ac                                         |     fcn_000076ac (r0);
    0x00016990 b 0x168f0                                         |     goto label_1;
                                                                 | label_13:
    0x00016992 ldr r3, [r5, 0x1c]                                |     r3 = *((r5 + 0x1c));
    0x00016994 cmp r3, r6                                        |     
                                                                 |     if (r3 <= r6) {
    0x00016996 blo.w 0x16b08                                     |         goto label_17;
                                                                 |     }
    0x0001699a ldr r0, [r5, 0x40]                                |     r0 = *((r5 + 0x40));
    0x0001699c ldr r3, [r0]                                      |     r3 = *(r0);
    0x0001699e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000169a0 beq.w 0x16b08                                     |         goto label_17;
                                                                 |     }
    0x000169a4 ldr.w r7, [r5, 0xc8]                              |     r7 = *((r5 + 0xc8));
    0x000169a8 ldr.w r8, [r5, 0x48]                              |     r8 = *((r5 + 0x48));
    0x000169ac ldr.w sb, [r5, 0x4c]                              |     sb = *((r5 + 0x4c));
    0x000169b0 ldr.w sl, [r4, 4]                                 |     sl = *((r4 + 4));
                                                                 |     if (r7 != 0) {
    0x000169b4 cbz r7, 0x169cc                                   |         
    0x000169b6 mov r1, sl                                        |         r1 = sl;
    0x000169b8 ldr.w r0, [r5, 0xd4]                              |         r0 = *((r5 + 0xd4));
    0x000169bc mov r2, r6                                        |         r2 = r6;
    0x000169be movs r3, 7                                        |         r3 = 7;
    0x000169c0 blx r7                                            |         r0 = uint32_t (*r7)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x000169c2 mov sl, r0                                        |         sl = r0;
    0x000169c4 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x000169c6 beq.w 0x16b86                                     |             goto label_18;
                                                                 |         }
    0x000169ca ldr r0, [r5, 0x40]                                |         r0 = *((r5 + 0x40));
                                                                 |     }
    0x000169cc ldr.w r3, [r5, 0x98]                              |     r3 = *((r5 + 0x98));
    0x000169d0 ldr r6, [r5, 0x30]                                |     r6 = *((r5 + 0x30));
    0x000169d2 subs r3, 0xc8                                     |     r3 -= 0xc8;
    0x000169d4 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x000169d6 ble 0x169e4                                       |         goto label_19;
                                                                 |     }
                                                                 |     do {
    0x000169d8 ldrb.w r2, [sl, r3]                               |         r2 = *((sl + r3));
    0x000169dc subs r3, 0xc8                                     |         r3 -= 0xc8;
    0x000169de cmp r3, 0                                         |         
    0x000169e0 add r6, r2                                        |         r6 += r2;
    0x000169e2 bgt 0x169d8                                       |         
                                                                 |     } while (r3 > 0);
                                                                 | label_19:
    0x000169e4 ldr r3, [r4, 0x14]                                |     r3 = *((r4 + 0x14));
    0x000169e6 add.w fp, sp, 0x10                                |     
    0x000169ea movs r2, 4                                        |     r2 = 4;
    0x000169ec mov r1, fp                                        |     r1 = fp;
    0x000169ee rev r3, r3                                        |     r3 = SWAP32 (r3);
    0x000169f0 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x000169f2 ldrh r3, [r4, 0x18]                               |     r3 = *((r4 + 0x18));
    0x000169f4 orr r3, r3, 4                                     |     r3 |= 4;
    0x000169f8 strh r3, [r4, 0x18]                               |     *((r4 + 0x18)) = r3;
    0x000169fa ldr r3, [r0]                                      |     r3 = *(r0);
    0x000169fc strd r8, sb, [sp]                                 |     __asm ("strd r8, sb, [sp]");
    0x00016a00 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x00016a02 blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
    0x00016a04 mov r7, r0                                        |     r7 = r0;
    0x00016a06 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00016a08 bne 0x1694e                                       |         goto label_2;
                                                                 |     }
    0x00016a0a ldr r0, [r5, 0x40]                                |     r0 = *((r5 + 0x40));
    0x00016a0c adds.w r7, r8, 4                                  |     r7 = r8 + 4;
    0x00016a10 ldr.w r2, [r5, 0x98]                              |     r2 = *((r5 + 0x98));
    0x00016a14 mov r1, sl                                        |     r1 = sl;
    0x00016a16 ldr r3, [r0]                                      |     r3 = *(r0);
    0x00016a18 str r7, [sp]                                      |     *(sp) = r7;
    0x00016a1a adc r7, sb, 0                                     |     __asm ("adc r7, sb, 0");
    0x00016a1e str r7, [sp, 4]                                   |     var_4h = r7;
    0x00016a20 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x00016a22 blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00016a24 mov r7, r0                                        |     r7 = r0;
    0x00016a26 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00016a28 bne 0x1694e                                       |         goto label_2;
                                                                 |     }
    0x00016a2a ldr.w r7, [r5, 0x98]                              |     r7 = *((r5 + 0x98));
    0x00016a2e rev r6, r6                                        |     r6 = SWAP32 (r6);
    0x00016a30 ldr r0, [r5, 0x40]                                |     r0 = *((r5 + 0x40));
    0x00016a32 mov r1, fp                                        |     r1 = fp;
    0x00016a34 str r6, [sp, 0x10]                                |     var_10h = r6;
    0x00016a36 movs r2, 4                                        |     r2 = 4;
    0x00016a38 adds.w r8, r7, r8                                 |     r8 = r7 + r8;
    0x00016a3c ldr r6, [r0]                                      |     r6 = *(r0);
    0x00016a3e adc.w r7, sb, r7, asr 31                          |     __asm ("adc.w r7, sb, r7, asr 31");
    0x00016a42 adds.w r3, r8, 4                                  |     r3 = r8 + 4;
    0x00016a46 adc r7, r7, 0                                     |     __asm ("adc r7, r7, 0");
    0x00016a4a strd r3, r7, [sp]                                 |     __asm ("strd r3, r7, [sp]");
    0x00016a4e ldr r3, [r6, 0xc]                                 |     r3 = *((r6 + 0xc));
    0x00016a50 blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00016a52 mov r7, r0                                        |     r7 = r0;
    0x00016a54 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00016a56 bne.w 0x1694e                                     |         goto label_2;
                                                                 |     }
    0x00016a5a ldr.w r3, [r5, 0x98]                              |     r3 = *((r5 + 0x98));
    0x00016a5e ldr r2, [r5, 0x48]                                |     r2 = *((r5 + 0x48));
    0x00016a60 ldr r1, [r4, 0x14]                                |     r1 = *((r4 + 0x14));
    0x00016a62 adds r3, 8                                        |     r3 += 8;
    0x00016a64 ldr r0, [r5, 0x38]                                |     r0 = *((r5 + 0x38));
    0x00016a66 adds r2, r2, r3                                   |     r2 += r3;
    0x00016a68 str r2, [r5, 0x48]                                |     *((r5 + 0x48)) = r2;
    0x00016a6a ldr r2, [r5, 0x2c]                                |     r2 = *((r5 + 0x2c));
    0x00016a6c add.w r2, r2, 1                                   |     r2++;
    0x00016a70 str r2, [r5, 0x2c]                                |     *((r5 + 0x2c)) = r2;
    0x00016a72 ldr r2, [r5, 0x4c]                                |     r2 = *((r5 + 0x4c));
    0x00016a74 adc.w r2, r2, r3, asr 31                          |     __asm ("adc.w r2, r2, r3, asr 31");
    0x00016a78 str r2, [r5, 0x4c]                                |     *((r5 + 0x4c)) = r2;
    0x00016a7a bl 0xefdc                                         |     fcn_0000efdc (r0, r1, r2);
    0x00016a7e ldr r1, [r5, 0x60]                                |     r1 = *((r5 + 0x60));
    0x00016a80 mov sb, r0                                        |     sb = r0;
    0x00016a82 ldr r6, [r4, 0x14]                                |     r6 = *((r4 + 0x14));
    0x00016a84 cmp r1, 0                                         |     
                                                                 |     if (r1 <= 0) {
    0x00016a86 ble.w 0x16bae                                     |         goto label_20;
                                                                 |     }
    0x00016a8a mov r8, r7                                        |     r8 = r7;
    0x00016a8c b 0x16a96                                         |     
                                                                 |     while (r6 > r2) {
                                                                 | label_3:
    0x00016a8e add.w r8, r8, 1                                   |         r8++;
    0x00016a92 cmp r8, r1                                        |         
                                                                 |         if (r8 >= r1) {
    0x00016a94 bge 0x16b8a                                       |             goto label_21;
                                                                 |         }
    0x00016a96 ldr r3, [r5, 0x5c]                                |         r3 = *((r5 + 0x5c));
    0x00016a98 add.w r2, r8, r8, lsl 1                           |         r2 = r8 + (r8 << 1);
    0x00016a9c add.w r3, r3, r2, lsl 4                           |         r3 += (r2 << 4);
    0x00016aa0 ldr r2, [r3, 0x14]                                |         r2 = *((r3 + 0x14));
    0x00016aa2 cmp r6, r2                                        |         
    0x00016aa4 bhi 0x16a8e                                       |         
                                                                 |     }
    0x00016aa6 mov r1, r6                                        |     r1 = r6;
    0x00016aa8 ldr r0, [r3, 0x10]                                |     r0 = *((r3 + 0x10));
    0x00016aaa bl 0xefdc                                         |     fcn_0000efdc (r0, r1, r2);
    0x00016aae ldr r1, [r5, 0x60]                                |     r1 = *((r5 + 0x60));
    0x00016ab0 orrs r7, r0                                       |     r7 |= r0;
    0x00016ab2 b 0x16a8e                                         |     goto label_3;
                                                                 | label_16:
    0x00016ab4 ldrb r3, [r5, 5]                                  |     r3 = *((r5 + 5));
    0x00016ab6 cmp r3, 2                                         |     
                                                                 |     if (r3 == 2) {
    0x00016ab8 beq.w 0x1697e                                     |         goto label_4;
                                                                 |     }
    0x00016abc mov.w r0, 0x200                                   |     r0 = 0x200;
    0x00016ac0 ldr.w r8, [r5, 0x18]                              |     r8 = *((r5 + 0x18));
    0x00016ac4 bl 0x11e2c                                        |     r0 = fcn_00011e2c (r0);
    0x00016ac8 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00016aca beq 0x16b84                                       |         goto label_22;
                                                                 |     }
    0x00016acc str.w r8, [r0]                                    |     __asm ("str.w r8, [r0]");
    0x00016ad0 ldr.w r8, [r5, 0x40]                              |     r8 = *((r5 + 0x40));
    0x00016ad4 str r0, [r5, 0x38]                                |     *((r5 + 0x38)) = r0;
    0x00016ad6 ldr.w r1, [r8]                                    |     r1 = *(r8);
                                                                 |     if (r1 == 0) {
    0x00016ada cbz r1, 0x16b2e                                   |         goto label_23;
                                                                 |     }
                                                                 | label_7:
    0x00016adc vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00016ae0 movs r3, 0                                        |     r3 = 0;
    0x00016ae2 mov r0, r5                                        |     r0 = r5;
    0x00016ae4 str r3, [r5, 0x2c]                                |     *((r5 + 0x2c)) = r3;
    0x00016ae6 strb r3, [r5, 0x13]                               |     *((r5 + 0x13)) = r3;
    0x00016ae8 vstr d16, [r5, 0x48]                              |     __asm ("vstr d16, [r5, 0x48]");
    0x00016aec vstr d16, [r5, 0x50]                              |     __asm ("vstr d16, [r5, 0x50]");
    0x00016af0 bl 0x16584                                        |     r0 = fcn_00016584 (r0, r1);
    0x00016af4 mov r7, r0                                        |     r7 = r0;
    0x00016af6 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00016af8 beq.w 0x1697e                                     |         goto label_4;
                                                                 |     }
                                                                 | label_8:
    0x00016afc ldr r0, [r5, 0x38]                                |     r0 = *((r5 + 0x38));
    0x00016afe bl 0x1042c                                        |     fcn_0001042c (r0, r1, r2, r3);
    0x00016b02 movs r3, 0                                        |     r3 = 0;
    0x00016b04 str r3, [r5, 0x38]                                |     *((r5 + 0x38)) = r3;
    0x00016b06 b 0x1694e                                         |     goto label_2;
                                                                 | label_17:
    0x00016b08 ldrb r3, [r5, 0x10]                               |     r3 = *((r5 + 0x10));
    0x00016b0a ldr r7, [r5, 0x60]                                |     r7 = *((r5 + 0x60));
    0x00016b0c ldr r6, [r4, 0x14]                                |     r6 = *((r4 + 0x14));
    0x00016b0e cmp r3, 4                                         |     
    0x00016b10 ittt ne                                           |     
                                                                 |     if (r3 != 4) {
    0x00016b12 ldrhne r3, [r4, 0x18]                             |         __asm ("ldrhne r3, [r4, 0x18]");
                                                                 |     }
                                                                 |     if (r3 == 4) {
    0x00016b14 orrne r3, r3, 4                                   |         r3 |= 4;
                                                                 |     }
                                                                 |     if (r3 != 4) {
    0x00016b18 strh r3, [r4, 0x18]                               |         *((r4 + 0x18)) = r3;
                                                                 |     }
    0x00016b1a b 0x16914                                         |     goto label_5;
                                                                 | label_14:
    0x00016b1c ldr r0, [r4, 0x10]                                |     r0 = *((r4 + 0x10));
    0x00016b1e mov r1, r6                                        |     r1 = r6;
    0x00016b20 bl 0xb398                                         |     r0 = fcn_0000b398 (r0, r1, r2);
    0x00016b24 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00016b26 bne.w 0x16914                                     |         goto label_5;
                                                                 |     }
    0x00016b2a mov r7, r0                                        |     r7 = r0;
    0x00016b2c b 0x16946                                         |     goto label_6;
                                                                 | label_23:
    0x00016b2e ldrb r3, [r5, 5]                                  |     r3 = *((r5 + 5));
    0x00016b30 cmp r3, 4                                         |     
                                                                 |     if (r3 == 4) {
    0x00016b32 beq 0x16b98                                       |         goto label_24;
                                                                 |     }
    0x00016b34 ldrb r3, [r5, 0xc]                                |     r3 = *((r5 + 0xc));
                                                                 |     if (r3 == 0) {
    0x00016b36 cbz r3, 0x16b54                                   |         goto label_25;
                                                                 |     }
    0x00016b38 movw r3, 0x100e                                   |     r3 = 0x100e;
                                                                 | label_9:
    0x00016b3c movs r0, 0                                        |     r0 = 0;
    0x00016b3e ldr.w r1, [r5, 0xac]                              |     r1 = *((r5 + 0xac));
    0x00016b42 mov r2, r8                                        |     r2 = r8;
    0x00016b44 str r0, [sp]                                      |     *(sp) = r0;
    0x00016b46 mov r0, r6                                        |     r0 = r6;
    0x00016b48 ldr r6, [r6, 0x18]                                |     r6 = *((r6 + 0x18));
    0x00016b4a blx r6                                            |     r0 = uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00016b4c mov r7, r0                                        |     r7 = r0;
    0x00016b4e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00016b50 beq 0x16adc                                       |         goto label_7;
                                                                 |     }
    0x00016b52 b 0x16afc                                         |     goto label_8;
                                                                 | label_25:
    0x00016b54 ldr r3, [r5, 0x18]                                |     r3 = *((r5 + 0x18));
    0x00016b56 str r7, [sp, 0xc]                                 |     var_ch = r7;
                                                                 |     if (r3 == 0) {
    0x00016b58 cbz r3, 0x16b7e                                   |         goto label_26;
                                                                 |     }
    0x00016b5a ldr r0, [r5, 0x3c]                                |     r0 = *((r5 + 0x3c));
    0x00016b5c add r2, sp, 0xc                                   |     r2 += var_ch;
    0x00016b5e movs r1, 0x14                                     |     r1 = 0x14;
    0x00016b60 ldr r3, [r0]                                      |     r3 = *(r0);
    0x00016b62 ldr r3, [r3, 0x28]                                |     r3 = *((r3 + 0x28));
    0x00016b64 blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00016b66 cmp r0, 0xc                                       |     
    0x00016b68 mov r7, r0                                        |     r7 = r0;
                                                                 |     if (r0 == 0xc) {
    0x00016b6a beq 0x16b7a                                       |         goto label_27;
                                                                 |     }
    0x00016b6c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00016b6e bne 0x16afc                                       |         goto label_8;
                                                                 |     }
    0x00016b70 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00016b72 mov.w r7, 0x408                                   |     r7 = 0x408;
    0x00016b76 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00016b78 bne 0x16afc                                       |         goto label_8;
                                                                 |     }
                                                                 | label_27:
    0x00016b7a ldr.w r8, [r5, 0x40]                              |     r8 = *((r5 + 0x40));
                                                                 | label_26:
    0x00016b7e movw r3, 0x806                                    |     r3 = 0x806;
    0x00016b82 b 0x16b3c                                         |     goto label_9;
                                                                 | label_22:
    0x00016b84 str r7, [r5, 0x38]                                |     *((r5 + 0x38)) = r7;
                                                                 | label_18:
    0x00016b86 movs r7, 7                                        |     r7 = 7;
    0x00016b88 b 0x1694e                                         |     goto label_2;
                                                                 | label_21:
    0x00016b8a orrs.w r7, r7, sb                                 |     r7 |= sb;
                                                                 |     if (r7 != r7) {
    0x00016b8e bne.w 0x1694e                                     |         goto label_2;
                                                                 |     }
    0x00016b92 ldr r6, [r4, 0x14]                                |     r6 = *((r4 + 0x14));
    0x00016b94 mov r7, r1                                        |     r7 = r1;
    0x00016b96 b 0x16914                                         |     goto label_5;
                                                                 | label_24:
    0x00016b98 movs r2, 0x24                                     |     r2 = 0x24;
    0x00016b9a add.w r0, r8, 4                                   |     r0 = r8 + 4;
    0x00016b9e blx 0x5fcc                                        |     fcn_00005fcc ();
    0x00016ba2 ldr r3, [pc, 0x24]                                |     
    0x00016ba4 add r3, pc                                        |     r3 = 0x2d772;
    0x00016ba6 adds r3, 0xfc                                     |     r3 += 0xfc;
    0x00016ba8 str.w r3, [r8]                                    |     __asm ("str.w r3, [r8]");
    0x00016bac b 0x16adc                                         |     goto label_7;
                                                                 | label_20:
    0x00016bae cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00016bb0 beq.w 0x16946                                     |         goto label_6;
                                                                 |     }
    0x00016bb4 mov r7, sb                                        |     r7 = sb;
    0x00016bb6 b 0x1694e                                         |     goto label_2;
                                                                 | label_15:
    0x00016bb8 blx 0x6498                                        |     fcn_00006498 ();
    0x00016bbc asrs r6, r1, 0xe                                  |     r6 = r1 >> 0xe;
    0x00016bbe movs r6, r0                                       |     r6 = r0;
    0x00016bc0 lsls r0, r1, 0xe                                  |     r0 = r1 << 0xe;
    0x00016bc2 movs r0, r0                                       |     
    0x00016bc4 asrs r6, r0, 0xc                                  |     r6 = r0 >> 0xc;
    0x00016bc6 movs r6, r0                                       |     r6 = r0;
    0x00016bc8 lsls r0, r1, 0x19                                 |     r0 = r1 << 0x19;
    0x00016bca movs r6, r0                                       |     r6 = r0;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x18548 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00018548 ()                                      | void fcn_00018548 (int16_t arg1, int16_t arg2, int16_t arg3, uint32_t arg4) {
                                                                 |     int16_t var_4h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00018548 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x0001854c mov r5, r3                                        |     r5 = r3;
    0x0001854e ldrd r4, r3, [r1]                                 |     __asm ("ldrd r4, r3, [r1]");
    0x00018552 sub sp, 0xc                                       |     
    0x00018554 mov r6, r2                                        |     r6 = r2;
    0x00018556 mov r7, r1                                        |     r7 = r1;
    0x00018558 add.w sl, r4, r2                                  |     sl = r4 + r2;
    0x0001855c cmp sl, r3                                        |     
                                                                 |     if (sl > r3) {
    0x0001855e bhi 0x185dc                                       |         goto label_2;
                                                                 |     }
                                                                 | label_0:
    0x00018560 add.w fp, r4, -1                                  |     
    0x00018564 cmp fp, r5                                        |     
                                                                 |     if (fp < r5) {
    0x00018566 blt 0x1863a                                       |         goto label_3;
                                                                 |     }
    0x00018568 lsls r3, r6, 3                                    |     r3 = r6 << 3;
    0x0001856a add.w r4, r4, r4, lsl 3                           |     r4 += (r4 << 3);
    0x0001856e add.w r8, r3, r6                                  |     r8 = r3 + r6;
    0x00018572 add.w r4, r7, r4, lsl 3                           |     r4 = r7 + (r4 << 3);
    0x00018576 lsl.w r8, r8, 3                                   |     r8 <<= 3;
    0x0001857a add.w sb, r5, -1                                  |     sb = r5 + -1;
    0x0001857e str r3, [sp, 4]                                   |     var_4h = r3;
    0x00018580 sub.w r8, r8, 0x40                                |     r8 -= 0x40;
                                                                 |     do {
    0x00018584 sub.w r1, r4, 0x40                                |         r1 = r4 - 0x40;
    0x00018588 add.w r0, r4, r8                                  |         r0 = r4 + r8;
    0x0001858c movs r2, 0x48                                     |         r2 = 0x48;
    0x0001858e add.w fp, fp, -1                                  |         
    0x00018592 blx 0x6214                                        |         fcn_00006214 ();
    0x00018596 cmp fp, sb                                        |         
    0x00018598 sub.w r4, r4, 0x48                                |         r4 -= 0x48;
    0x0001859c bne 0x18584                                       |         
                                                                 |     } while (fp != sb);
                                                                 | label_1:
    0x0001859e add.w r3, r5, r5, lsl 3                           |     r3 = r5 + (r5 << 3);
    0x000185a2 ldr r2, [sp, 4]                                   |     r2 = var_4h;
    0x000185a4 movs r1, 0                                        |     r1 = 0;
    0x000185a6 str.w sl, [r7]                                    |     __asm ("str.w sl, [r7]");
    0x000185aa lsls r4, r3, 3                                    |     r4 = r3 << 3;
    0x000185ac add r2, r6                                        |     r2 += r6;
    0x000185ae add.w r0, r4, 8                                   |     r0 = r4 + 8;
    0x000185b0 movs r0, r1                                       |     r0 = r1;
    0x000185b2 lsls r2, r2, 3                                    |     r2 <<= 3;
    0x000185b4 add r0, r7                                        |     r0 += r7;
    0x000185b6 add r6, r5                                        |     r6 += r5;
    0x000185b8 blx 0x5fcc                                        |     fcn_00005fcc ();
    0x000185bc cmp r5, r6                                        |     
    0x000185be itt lt                                            |     
                                                                 |     if (r5 >= r6) {
    0x000185c0 addlt r3, r7, r4                                  |         r3 = r7 + r4;
                                                                 |     }
                                                                 |     if (r5 >= r6) {
    0x000185c2 movlt r2, -1                                      |         r2 = -1;
                                                                 |     }
                                                                 |     if (r5 >= r6) {
    0x000185c6 bge 0x185d4                                       |         goto label_4;
                                                                 |     }
                                                                 |     do {
    0x000185c8 adds r5, 1                                        |         r5++;
    0x000185ca str r2, [r3, 0x30]                                |         *((r3 + 0x30)) = r2;
    0x000185cc cmp r5, r6                                        |         
    0x000185ce add.w r3, r3, 0x48                                |         r3 += 0x48;
    0x000185d2 bne 0x185c8                                       |         
                                                                 |     } while (r5 != r6);
                                                                 |     do {
                                                                 | label_4:
    0x000185d4 mov r0, r7                                        |         r0 = r7;
    0x000185d6 add sp, 0xc                                       |         
    0x000185d8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_2:
    0x000185dc add.w sl, sl, -1                                  |         sl += -1;
    0x000185e0 mov r8, r0                                        |         r8 = r0;
    0x000185e2 add.w sl, sl, sl, lsl 3                           |         sl += (sl << 3);
    0x000185e6 lsl.w r2, sl, 3                                   |         r2 = sl << 3;
    0x000185ea adds r2, 0x50                                     |         r2 += 0x50;
    0x000185ec bl 0x17264                                        |         r0 = fcn_00017264 (r0, r1, r2);
    0x000185f0 mov sb, r0                                        |         sb = r0;
    0x000185f2 cmp r0, 0                                         |         
    0x000185f4 beq 0x185d4                                       |         
                                                                 |     } while (r0 == 0);
    0x000185f6 ldr.w r3, [r8, 0x10c]                             |     r3 = *((r8 + 0x10c));
    0x000185fa cmp r0, r3                                        |     
                                                                 |     if (r0 > r3) {
    0x000185fc blo 0x1860c                                       |         
    0x000185fe ldr.w r3, [r8, 0x110]                             |         r3 = *((r8 + 0x110));
    0x00018602 cmp r0, r3                                        |         
                                                                 |         if (r0 < r3) {
    0x00018604 bhs 0x1860c                                       |             
    0x00018606 ldrh.w r3, [r8, 0xf0]                             |             r3 = *((r8 + 0xf0));
    0x0001860a b 0x18618                                         |             
                                                                 |         }
                                                                 |     } else {
    0x0001860c ldr r3, [pc, 0x30]                                |         
    0x0001860e mov r0, sb                                        |         r0 = sb;
    0x00018610 add r3, pc                                        |         
    0x00018612 ldr r3, [r3, 0x30]                                |         r3 = *(0x30c84);
    0x00018614 blx r3                                            |         r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00018616 mov r3, r0                                        |         r3 = r0;
                                                                 |     }
    0x00018618 movw r2, 0x8e39                                   |     
    0x0001861c subs r3, 0x50                                     |     r3 -= 0x50;
                                                                 |     /* if there is a right shift of 1, then it's a division by 1/9 */
    0x0001861e movt r2, 0x38e3                                   |     r2 = 0x38e38e39;
    0x00018622 ldr.w r4, [sb]                                    |     r4 = *(sb);
    0x00018626 umull r2, r3, r2, r3                              |     r2:r3 = r2 * r3;
    0x0001862a mov r7, sb                                        |     r7 = sb;
    0x0001862c add.w sl, r4, r6                                  |     sl = r4 + r6;
    0x00018630 lsrs r3, r3, 4                                    |     r3 >>= 4;
    0x00018632 adds r3, 1                                        |     r3++;
    0x00018634 str.w r3, [sb, 4]                                 |     __asm ("str.w r3, [sb, 4]");
    0x00018638 b 0x18560                                         |     goto label_0;
                                                                 | label_3:
    0x0001863a lsls r3, r6, 3                                    |     r3 = r6 << 3;
    0x0001863c str r3, [sp, 4]                                   |     var_4h = r3;
    0x0001863e b 0x1859e                                         |     goto label_1;
                                                                 | }
    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x18cb0 */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) fcn.00018cb0 ()                      | void fcn_00018cb0 (int16_t arg1, int16_t arg2) {
                                                 |     int16_t var_0h;
                                                 |     r0 = arg1;
                                                 |     r1 = arg2;
    0x00018cb0 push {r4, r5, r6, r7, lr}         |     
    0x00018cb2 mov r4, r0                        |     r4 = r0;
    0x00018cb4 ldrb r3, [r0, 0x13]               |     r3 = *((r0 + 0x13));
    0x00018cb6 sub sp, 0xc                       |     
    0x00018cb8 mov r6, r1                        |     r6 = r1;
                                                 |     if (r3 == 0) {
    0x00018cba cbz r3, 0x18d1e                   |         goto label_1;
                                                 |     }
    0x00018cbc subs r3, 1                        |     r3--;
    0x00018cbe uxtb r3, r3                       |     r3 = (int8_t) r3;
    0x00018cc0 adds r2, r3, 6                    |     r2 = r3 + 6;
    0x00018cc2 strb r3, [r0, 0x13]               |     *((r0 + 0x13)) = r3;
    0x00018cc4 ldr.w r5, [r0, r2, lsl 2]         |     offset_0 = r2 << 2;
                                                 |     r5 = *((r0 + offset_0));
                                                 | label_0:
    0x00018cc8 ldr r3, [r4]                      |     r3 = *(r4);
    0x00018cca movs r1, 0x19                     |     r1 = 0x19;
    0x00018ccc ldr r7, [r4, 8]                   |     r7 = *((r4 + 8));
    0x00018cce ldr r3, [r3, 0x10]                |     r3 = *((r3 + 0x10));
    0x00018cd0 mov r0, r7                        |     r0 = r7;
    0x00018cd2 add.w r3, r3, r6, lsl 4           |     r3 += (r6 << 4);
    0x00018cd6 ldr r3, [r3, 0xc]                 |     r3 = *((r3 + 0xc));
    0x00018cd8 ldr r2, [r3]                      |     r2 = *(r3);
    0x00018cda movs r3, 0                        |     r3 = 0;
    0x00018cdc str r3, [sp]                      |     *(sp) = r3;
    0x00018cde mov r3, r5                        |     r3 = r5;
    0x00018ce0 adds r2, 1                        |     r2++;
    0x00018ce2 bl 0x18bf8                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00018ce6 movs r3, 1                        |     r3 = 1;
    0x00018ce8 mov r2, r6                        |     r2 = r6;
    0x00018cea mov r0, r7                        |     r0 = r7;
    0x00018cec movs r1, 0x33                     |     r1 = 0x33;
    0x00018cee str r5, [sp]                      |     *(sp) = r5;
    0x00018cf0 bl 0x18bf8                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
                                                 |     if (r5 == 0) {
    0x00018cf4 cbz r5, 0x18d1a                   |         goto label_2;
                                                 |     }
    0x00018cf6 ldrb r0, [r4, 0x13]               |     r0 = *((r4 + 0x13));
    0x00018cf8 cmp r0, 7                         |     
                                                 |     if (r0 > 7) {
    0x00018cfa bhi 0x18d1a                       |         goto label_2;
                                                 |     }
    0x00018cfc add.w r3, r4, 0x74                |     r3 = r4 + 0x74;
    0x00018d00 add.w r1, r4, 0x13c               |     r1 = r4 + 0x13c;
                                                 |     do {
    0x00018d04 ldr r2, [r3, 0xc]                 |         r2 = *((r3 + 0xc));
    0x00018d06 cmp r5, r2                        |         
                                                 |         if (r5 == r2) {
    0x00018d08 beq 0x18d26                       |             goto label_3;
                                                 |         }
    0x00018d0a adds r3, 0x14                     |         r3 += 0x14;
    0x00018d0c cmp r3, r1                        |         
    0x00018d0e bne 0x18d04                       |         
                                                 |     } while (r3 != r1);
    0x00018d10 adds r3, r0, 1                    |     r3 = r0 + 1;
    0x00018d12 adds r0, 6                        |     r0 += 6;
    0x00018d14 strb r3, [r4, 0x13]               |     *((r4 + 0x13)) = r3;
    0x00018d16 str.w r5, [r4, r0, lsl 2]         |     __asm ("str.w r5, [r4, r0, lsl 2]");
                                                 |     do {
                                                 | label_2:
    0x00018d1a add sp, 0xc                       |         
    0x00018d1c pop {r4, r5, r6, r7, pc}          |         
                                                 | label_1:
    0x00018d1e ldr r5, [r0, 0x48]                |         r5 = *((r0 + 0x48));
    0x00018d20 adds r5, 1                        |         r5++;
    0x00018d22 str r5, [r0, 0x48]                |         *((r0 + 0x48)) = r5;
    0x00018d24 b 0x18cc8                         |         goto label_0;
                                                 | label_3:
    0x00018d26 movs r2, 1                        |         r2 = 1;
    0x00018d28 strb r2, [r3, 6]                  |         *((r3 + 6)) = r2;
    0x00018d2a b 0x18d1a                         |         
                                                 |     } while (1);
                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x18dcc */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00018dcc ()                                      | void fcn_00018dcc (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;
                                                                 |     r0 = arg1;
    0x00018dcc ldr r3, [r0]                                      |     r3 = *(r0);
    0x00018dce push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00018dd2 sub sp, 0x2c                                      |     
    0x00018dd4 ldr r6, [r0, 4]                                   |     r6 = *((r0 + 4));
    0x00018dd6 mov r5, r0                                        |     r5 = r0;
    0x00018dd8 ldr r4, [r3, 8]                                   |     r4 = *((r3 + 8));
    0x00018dda str r0, [sp, 0x18]                                |     var_18h = r0;
    0x00018ddc mov r0, r3                                        |     r0 = r3;
    0x00018dde str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00018de0 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00018de2 str r6, [sp, 0x14]                                |     var_14h = r6;
    0x00018de4 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00018de6 bl 0xae68                                         |     fcn_0000ae68 (r0);
    0x00018dea ldrb.w r3, [r5, 0x29]                             |     r3 = *((r5 + 0x29));
    0x00018dee cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00018df0 beq.w 0x18f64                                     |         goto label_21;
                                                                 |     }
    0x00018df4 add.w r8, r3, r3, lsl 3                           |     r8 = r3 + (r3 << 3);
    0x00018df8 ldr r0, [r4, 0x18]                                |     r0 = *((r4 + 0x18));
    0x00018dfa ldr r2, [r4, 0x20]                                |     r2 = *((r4 + 0x20));
    0x00018dfc add.w sb, r3, -1                                  |     sb = r3 + -1;
    0x00018e00 lsl.w r8, r8, 3                                   |     r8 <<= 3;
    0x00018e04 mov.w fp, 0                                       |     
    0x00018e08 mov ip, r0                                        |     
    0x00018e0a add r5, r8                                        |     r5 += r8;
    0x00018e0c add r8, r6                                        |     r8 += r6;
    0x00018e0e b 0x18e2e                                         |     
                                                                 |     while (r3 == 0) {
    0x00018e10 ldr.w r2, [r5, 0x298]                             |         r2 = *((r5 + 0x298));
    0x00018e14 cmp r2, 0                                         |         
                                                                 |         if (r2 != 0) {
    0x00018e16 bne 0x18ef6                                       |             goto label_22;
                                                                 |         }
                                                                 | label_0:
    0x00018e18 ldr r2, [r4, 0x20]                                |         r2 = *((r4 + 0x20));
    0x00018e1a mov ip, r0                                        |         
                                                                 | label_1:
    0x00018e1c add.w sb, sb, -1                                  |         sb += -1;
    0x00018e20 subs r5, 0x48                                     |         r5 -= 0x48;
    0x00018e22 cmp.w sb, -1                                      |         
    0x00018e26 sub.w r8, r8, 0x48                                |         r8 -= 0x48;
                                                                 |         if (sb == -1) {
    0x00018e2a beq.w 0x18f6a                                     |             goto label_23;
                                                                 |         }
    0x00018e2e ldr.w r3, [r5, 0x2b0]                             |         r3 = *((r5 + 0x2b0));
    0x00018e32 ldr.w sl, [r5, 0x2d0]                             |         sl = *((r5 + 0x2d0));
    0x00018e36 mvns r3, r3                                       |         r3 = ~r3;
                                                                 |         if (r3 >= r3) {
    0x00018e38 bmi 0x18e44                                       |             
    0x00018e3a ldr r1, [r0, 0x70]                                |             r1 = *((r0 + 0x70));
                                                                 |             if (r1 == 0) {
    0x00018e3c cbz r1, 0x18e44                                   |                 goto label_24;
                                                                 |             }
    0x00018e3e str.w r2, [r1, r3, lsl 2]                         |             __asm ("str.w r2, [r1, r3, lsl 2]");
    0x00018e42 ldr r2, [r4, 0x20]                                |             r2 = *((r4 + 0x20));
                                                                 |         }
                                                                 | label_24:
    0x00018e44 ldrb.w r1, [r5, 0x2bd]                            |         r1 = *((r5 + 0x2bd));
    0x00018e48 subs r3, r2, 1                                    |         r3 = r2 - 1;
    0x00018e4a str r3, [r0, 0x58]                                |         *((r0 + 0x58)) = r3;
    0x00018e4c cmp r1, 0x9d                                      |         
                                                                 |         if (r1 != 0x9d) {
    0x00018e4e beq 0x18e7c                                       |             
    0x00018e50 ldrb.w r0, [r5, 0x2be]                            |             r0 = *((r5 + 0x2be));
    0x00018e54 ldrd r2, r3, [r5, 0x2c0]                          |             __asm ("ldrd r2, r3, aav.0x000000ff");
    0x00018e58 str r0, [sp]                                      |             *(sp) = r0;
    0x00018e5a mov r0, r4                                        |             r0 = r4;
    0x00018e5c bl 0x18bf8                                        |             fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00018e60 ldr r3, [r4, 4]                                   |             r3 = *((r4 + 4));
    0x00018e62 cmp r3, 0                                         |             
                                                                 |             if (r3 == 0) {
    0x00018e64 beq 0x18f5c                                       |                 goto label_25;
                                                                 |             }
    0x00018e66 ldr r2, [r4, 0x20]                                |             r2 = *((r4 + 0x20));
    0x00018e68 ldrb.w r1, [r5, 0x2bf]                            |             r1 = *((r5 + 0x2bf));
    0x00018e6c add.w r0, r2, r2, lsl 2                           |             r0 = r2 + (r2 << 2);
    0x00018e70 add.w r3, r3, r0, lsl 2                           |             r3 += (r0 << 2);
    0x00018e74 strb r1, [r3, -0x11]                              |             *((r3 - 0x11)) = r1;
    0x00018e78 ldr r0, [r4, 0x18]                                |             r0 = *((r4 + 0x18));
    0x00018e7a mov ip, r0                                        |             
                                                                 |         }
                                                                 | label_2:
    0x00018e7c ldr.w r3, [sl, 0x24]                              |         r3 = *((sl + 0x24));
    0x00018e80 lsls r1, r3, 0x14                                 |         r1 = r3 << 0x14;
                                                                 |         if (r1 < r3) {
    0x00018e82 bpl 0x18e8e                                       |             
    0x00018e84 ldr.w r7, [r5, 0x2c8]                             |             r7 = *((r5 + 0x2c8));
    0x00018e88 cmp r7, 0                                         |             
                                                                 |             if (r7 > 0) {
    0x00018e8a bgt.w 0x19114                                     |                 goto label_26;
                                                                 |             }
                                                                 |         }
                                                                 | label_11:
    0x00018e8e ldr.w r3, [r5, 0x2a4]                             |         r3 = *((r5 + 0x2a4));
    0x00018e92 mvns r3, r3                                       |         r3 = ~r3;
                                                                 |         if (r3 >= r3) {
    0x00018e94 bmi 0x18ea0                                       |             
    0x00018e96 ldr r1, [r0, 0x70]                                |             r1 = *((r0 + 0x70));
                                                                 |             if (r1 == 0) {
    0x00018e98 cbz r1, 0x18ea0                                   |                 goto label_27;
                                                                 |             }
    0x00018e9a str.w r2, [r1, r3, lsl 2]                         |             __asm ("str.w r2, [r1, r3, lsl 2]");
    0x00018e9e ldr r2, [r4, 0x20]                                |             r2 = *((r4 + 0x20));
                                                                 |         }
                                                                 | label_27:
    0x00018ea0 ldr.w r3, [r5, 0x2ac]                             |         r3 = *((r5 + 0x2ac));
    0x00018ea4 subs r2, 1                                        |         r2--;
    0x00018ea6 str r2, [r0, 0x58]                                |         *((r0 + 0x58)) = r2;
    0x00018ea8 cmp r3, 0                                         |         
    0x00018eaa beq 0x18e10                                       |         
                                                                 |     }
    0x00018eac movs r1, 0x10                                     |     r1 = 0x10;
    0x00018eae movs r2, 0                                        |     r2 = 0;
    0x00018eb0 mov r0, r4                                        |     r0 = r4;
    0x00018eb2 str.w fp, [sp]                                    |     __asm ("str.w fp, [sp]");
    0x00018eb6 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00018eba ldr r2, [r4, 0x20]                                |     r2 = *((r4 + 0x20));
    0x00018ebc ldr.w r3, [r5, 0x2ac]                             |     r3 = *((r5 + 0x2ac));
    0x00018ec0 subs r6, r2, 1                                    |     r6 = r2 - 1;
    0x00018ec2 cmp r3, r2                                        |     
    0x00018ec4 itt lo                                            |     
                                                                 |     if (r3 >= r2) {
    0x00018ec6 ldrlo r1, [r4, 4]                                 |         r1 = *((r4 + 4));
                                                                 |     }
                                                                 |     if (r3 >= r2) {
    0x00018ec8 addlo r0, r3, r3, lsl 2                           |         r0 = r3 + (r3 << 2);
                                                                 |     }
    0x00018ecc sub.w r3, r3, 2                                   |     r3 -= 2;
    0x00018ed0 it lo                                             |     
                                                                 |     if (r3 >= r2) {
    0x00018ed2 addlo r1, r1, r0, lsl 2                           |         r1 += (r0 << 2);
                                                                 |     }
    0x00018ed6 ldr r0, [r4, 0x18]                                |     r0 = *((r4 + 0x18));
    0x00018ed8 it lo                                             |     
                                                                 |     if (r3 >= r2) {
    0x00018eda strlo r2, [r1, 8]                                 |         *((r1 + 8)) = r2;
                                                                 |     }
    0x00018edc cmp r3, r2                                        |     
    0x00018ede itttt lo                                          |     
                                                                 |     if (r3 >= r2) {
    0x00018ee0 ldrlo r1, [r4, 4]                                 |         r1 = *((r4 + 4));
                                                                 |     }
                                                                 |     if (r3 >= r2) {
    0x00018ee2 addlo r3, r3, r3, lsl 2                           |         r3 += (r3 << 2);
                                                                 |     }
                                                                 |     if (r3 >= r2) {
    0x00018ee6 addlo r1, r1, r3, lsl 2                           |         r1 += (r3 << 2);
                                                                 |     }
                                                                 |     if (r3 < r2) {
    0x00018eea str r2, [r1, 8]                                   |         *((r1 + 8)) = r2;
                                                                 |     }
    0x00018eec ldr.w r2, [r5, 0x298]                             |     r2 = *((r5 + 0x298));
    0x00018ef0 str r6, [r0, 0x58]                                |     *((r0 + 0x58)) = r6;
    0x00018ef2 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00018ef4 beq 0x18e18                                       |         goto label_0;
                                                                 |     }
                                                                 | label_22:
    0x00018ef6 movs r3, 0                                        |     r3 = 0;
    0x00018ef8 movs r1, 0x87                                     |     r1 = 0x87;
    0x00018efa mov r0, r4                                        |     r0 = r4;
    0x00018efc str.w fp, [sp]                                    |     __asm ("str.w fp, [sp]");
    0x00018f00 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00018f04 ldr.w r2, [sl, 0x24]                              |     r2 = *((sl + 0x24));
    0x00018f08 mov r6, r0                                        |     r6 = r0;
    0x00018f0a ands r3, r2, 0x40                                 |     r3 = r2 & 0x40;
                                                                 |     if (r3 == r2) {
    0x00018f0e beq.w 0x19100                                     |         goto label_28;
                                                                 |     }
                                                                 | label_10:
    0x00018f12 lsls r3, r2, 0x16                                 |     r3 = r2 << 0x16;
                                                                 |     if (r3 < r2) {
    0x00018f14 bmi.w 0x190ec                                     |         goto label_29;
                                                                 |     }
                                                                 | label_9:
    0x00018f18 ldrb.w r2, [r5, 0x2bd]                            |     r2 = *((r5 + 0x2bd));
    0x00018f1c mov r0, r4                                        |     r0 = r4;
    0x00018f1e ldr.w r3, [r5, 0x2b4]                             |     r3 = *((r5 + 0x2b4));
    0x00018f22 cmp r2, 0x12                                      |     
    0x00018f24 itete eq                                          |     
                                                                 |     if (r2 != 0x12) {
    0x00018f26 ldreq r2, [r5, 0x2c0]                             |         r2 = *((r5 + 0x2c0));
                                                                 |     }
                                                                 |     if (r2 != 0x12) {
    0x00018f2a moveq r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (r2 == 0x12) {
    0x00018f2c movne r1, 0x11                                    |         r1 = 0x11;
                                                                 |     }
                                                                 |     if (r2 != 0x12) {
    0x00018f2e movs r1, 0x10                                     |         r1 = 0x10;
                                                                 |     }
    0x00018f30 ite eq                                            |     
                                                                 |     if (r1 != 0x10) {
    0x00018f32 streq fp, [sp]                                    |         *(sp) = fp;
                                                                 |     }
                                                                 |     if (r1 != 0x10) {
    0x00018f36 str.w fp, [sp]                                    |         __asm ("str.w fp, [sp]");
                                                                 |     }
    0x00018f3a bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00018f3e ldr r2, [r4, 0x20]                                |     r2 = *((r4 + 0x20));
    0x00018f40 ldr r0, [r4, 0x18]                                |     r0 = *((r4 + 0x18));
    0x00018f42 cmp r6, r2                                        |     
    0x00018f44 itt lo                                            |     
                                                                 |     if (r6 >= r2) {
    0x00018f46 ldrlo r3, [r4, 4]                                 |         r3 = *((r4 + 4));
                                                                 |     }
                                                                 |     if (r6 >= r2) {
    0x00018f48 addlo r6, r6, r6, lsl 2                           |         r6 += (r6 << 2);
                                                                 |     }
    0x00018f4c mov ip, r0                                        |     
    0x00018f4e itt lo                                            |     
                                                                 |     if (r6 >= r2) {
    0x00018f50 addlo r3, r3, r6, lsl 2                           |         r3 += (r6 << 2);
                                                                 |     }
                                                                 |     if (r6 < r2) {
    0x00018f54 str r2, [r3, 8]                                   |         *((r3 + 8)) = r2;
                                                                 |     }
    0x00018f56 subs r3, r2, 1                                    |     r3 = r2 - 1;
    0x00018f58 str r3, [r0, 0x58]                                |     *((r0 + 0x58)) = r3;
    0x00018f5a b 0x18e1c                                         |     goto label_1;
                                                                 | label_25:
    0x00018f5c ldr r0, [r4, 0x18]                                |     r0 = *((r4 + 0x18));
    0x00018f5e ldr r2, [r4, 0x20]                                |     r2 = *((r4 + 0x20));
    0x00018f60 mov ip, r0                                        |     
    0x00018f62 b 0x18e7c                                         |     goto label_2;
                                                                 | label_21:
    0x00018f64 ldr.w ip, [r4, 0x18]                              |     ip = *((r4 + 0x18));
    0x00018f68 ldr r2, [r4, 0x20]                                |     r2 = *((r4 + 0x20));
                                                                 | label_23:
    0x00018f6a ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00018f6c ldr r3, [r3, 0x34]                                |     r3 = *((r3 + 0x34));
    0x00018f6e mvns r3, r3                                       |     r3 = ~r3;
                                                                 |     if (r3 >= r3) {
    0x00018f70 bmi 0x18f7e                                       |         
    0x00018f72 ldr.w r1, [ip, 0x70]                              |         r1 = *((ip + 0x70));
                                                                 |         if (r1 == 0) {
    0x00018f76 cbz r1, 0x18f7e                                   |             goto label_30;
                                                                 |         }
    0x00018f78 str.w r2, [r1, r3, lsl 2]                         |         __asm ("str.w r2, [r1, r3, lsl 2]");
    0x00018f7c ldr r2, [r4, 0x20]                                |         r2 = *((r4 + 0x20));
                                                                 |     }
                                                                 | label_30:
    0x00018f7e subs r2, 1                                        |     r2--;
    0x00018f80 str.w r2, [ip, 0x58]                              |     __asm ("str.w r2, [ip, 0x58]");
    0x00018f84 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00018f86 ldrb.w r3, [r2, 0x29]                             |     r3 = *((r2 + 0x29));
    0x00018f8a add.w r5, r2, 0x2e0                               |     r5 = r2 + 0x2e0;
    0x00018f8e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00018f90 beq 0x19004                                       |         goto label_31;
                                                                 |     }
    0x00018f92 ldr r2, [pc, 0x32c]                               |     
    0x00018f94 mov.w sb, 0                                       |     sb = 0;
    0x00018f98 str r4, [sp, 0xc]                                 |     var_ch = r4;
    0x00018f9a ldr r4, [sp, 0x18]                                |     r4 = var_18h;
    0x00018f9c add r2, pc                                        |     
    0x00018f9e add.w r2, r2, 0x324                               |     r2 = 0x32586;
    0x00018fa2 str r2, [sp, 0x20]                                |     var_20h = r2;
    0x00018fa4 ldr r2, [pc, 0x31c]                               |     
    0x00018fa6 add r2, pc                                        |     r2 = 0x3226e;
    0x00018fa8 str r2, [sp, 0x24]                                |     var_24h = r2;
                                                                 |     do {
    0x00018faa ldrb.w r1, [r5, 0x24]                             |         r1 = *((r5 + 0x24));
    0x00018fae ldr r6, [sp, 0x14]                                |         r6 = var_14h;
    0x00018fb0 ldr.w r8, [r5, 0x38]                              |         r8 = *((r5 + 0x38));
    0x00018fb4 lsls r0, r1, 3                                    |         r0 = r1 << 3;
    0x00018fb6 adds r2, r0, r1                                   |         r2 = r0 + r1;
    0x00018fb8 add.w r2, r6, r2, lsl 3                           |         r2 = r6 + (r2 << 3);
    0x00018fbc ldrb.w r7, [r2, 0x2d]                             |         r7 = *((r2 + 0x2d));
    0x00018fc0 ldr r6, [r2, 0x18]                                |         r6 = *((r2 + 0x18));
    0x00018fc2 lsls r7, r7, 0x1d                                 |         r7 <<= 0x1d;
                                                                 |         if (r7 < r7) {
    0x00018fc4 bpl 0x18fd2                                       |             
    0x00018fc6 ldr r2, [sp, 0x10]                                |             r2 = var_10h;
    0x00018fc8 ldrb.w r2, [r2, 0x40]                             |             r2 = *((r2 + 0x40));
    0x00018fcc cmp r2, 0                                         |             
                                                                 |             if (r2 == 0) {
    0x00018fce beq.w 0x191b2                                     |                 goto label_32;
                                                                 |             }
                                                                 |         }
    0x00018fd2 ldrb.w r3, [r6, 0x2c]                             |         r3 = *((r6 + 0x2c));
    0x00018fd6 ldr.w r7, [r8, 0x24]                              |         r7 = *((r8 + 0x24));
    0x00018fda lsls r2, r3, 0x1e                                 |         r2 = r3 << 0x1e;
                                                                 |         if (r2 >= r3) {
    0x00018fdc bmi 0x18fe2                                       |             
    0x00018fde ldr r3, [r6, 0xc]                                 |             r3 = *((r6 + 0xc));
                                                                 |             if (r3 == 0) {
    0x00018fe0 cbz r3, 0x19022                                   |                 goto label_33;
                                                                 |             }
                                                                 |         }
                                                                 | label_5:
    0x00018fe2 tst.w r7, 0x240                                   |         
                                                                 |         if ((r7 & 0x240) == 0) {
    0x00018fe6 beq 0x1901a                                       |             goto label_34;
                                                                 |         }
    0x00018fe8 ldr.w r7, [r8, 0x1c]                              |         r7 = *((r8 + 0x1c));
                                                                 |         if (r7 != 0) {
                                                                 | label_4:
    0x00018fec cbz r7, 0x18ff6                                   |             
    0x00018fee ldr r3, [sp, 0x10]                                |             r3 = var_10h;
    0x00018ff0 ldrb.w r3, [r3, 0x40]                             |             r3 = *((r3 + 0x40));
                                                                 |             if (r3 == 0) {
    0x00018ff4 cbz r3, 0x19048                                   |                 goto label_35;
                                                                 |             }
                                                                 |         }
                                                                 | label_3:
    0x00018ff6 ldrb.w r3, [r4, 0x29]                             |         r3 = *((r4 + 0x29));
                                                                 | label_12:
    0x00018ffa add.w sb, sb, 1                                   |         sb++;
    0x00018ffe adds r5, 0x48                                     |         r5 += 0x48;
    0x00019000 cmp r3, sb                                        |         
    0x00019002 bgt 0x18faa                                       |         
                                                                 |     } while (r3 > sb);
                                                                 | label_31:
    0x00019004 ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x00019006 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00019008 ldr r0, [sp, 0x10]                                |     r0 = var_10h;
    0x0001900a ldr r3, [r1, 0x38]                                |     r3 = *((r1 + 0x38));
    0x0001900c str.w r3, [r2, 0x1a8]                             |     __asm ("str.w r3, aav.0x000000ff");
    0x00019010 add sp, 0x2c                                      |     
    0x00019012 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |     
    0x00019016 b.w 0x13658                                       |     void (*0x13658)() ();
                                                                 | label_34:
    0x0001901a lsls r0, r7, 0x12                                 |     r0 = r7 << 0x12;
                                                                 |     if (r0 >= r7) {
    0x0001901c bpl 0x18ff6                                       |         goto label_3;
                                                                 |     }
    0x0001901e ldr r7, [r5, 0x30]                                |     r7 = *((r5 + 0x30));
    0x00019020 b 0x18fec                                         |     goto label_4;
                                                                 | label_33:
    0x00019022 ldrh r3, [r4, 0x22]                               |     r3 = *((r4 + 0x22));
    0x00019024 lsls r3, r3, 0x1b                                 |     r3 <<= 0x1b;
                                                                 |     if (r3 < r3) {
    0x00019026 bmi 0x18fe2                                       |         goto label_5;
                                                                 |     }
    0x00019028 ldrb.w r3, [r4, 0x26]                             |     r3 = *((r4 + 0x26));
                                                                 |     if (r3 == 0) {
    0x0001902c cbnz r3, 0x19036                                  |         
    0x0001902e ands r3, r7, 0x40                                 |         r3 = r7 & 0x40;
                                                                 |         if (r3 == r7) {
    0x00019032 beq.w 0x19286                                     |             goto label_36;
                                                                 |         }
                                                                 |     }
                                                                 | label_19:
    0x00019036 and r7, r7, 0x4300                                |     r7 &= 0x4300;
    0x0001903a cmp.w r7, 0x200                                   |     
                                                                 |     if (r7 == 0x200) {
    0x0001903e beq.w 0x1926e                                     |         goto label_37;
                                                                 |     }
                                                                 | label_18:
    0x00019042 ldr.w r7, [r8, 0x24]                              |     r7 = *((r8 + 0x24));
    0x00019046 b 0x18fe2                                         |     goto label_5;
                                                                 | label_35:
    0x00019048 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x0001904a ldr r0, [sp, 0xc]                                 |     r0 = var_ch;
    0x0001904c ldr r2, [r5, 0x20]                                |     r2 = *((r5 + 0x20));
    0x0001904e ldr.w ip, [r3, 0x20]                              |     ip = *((r3 + 0x20));
    0x00019052 ldr r3, [r0]                                      |     r3 = *(r0);
    0x00019054 cmp r2, 0                                         |     
    0x00019056 ite lt                                            |     
                                                                 |     if (r2 >= 0) {
    0x00019058 addlt r1, ip, -1                                  |         r1 = ip + -1;
                                                                 |     }
                                                                 |     if (r2 >= 0) {
    0x0001905c mov r1, r2                                        |         r1 = r2;
                                                                 |     }
    0x0001905e ldrb.w r3, [r3, 0x40]                             |     r3 = *((r3 + 0x40));
    0x00019062 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00019064 bne.w 0x1924e                                     |         goto label_38;
                                                                 |     }
    0x00019068 ldr r3, [r0, 4]                                   |     r3 = *((r0 + 4));
    0x0001906a add.w r1, r1, r1, lsl 2                           |     r1 += (r1 << 2);
    0x0001906e add.w r3, r3, r1, lsl 2                           |     r3 += (r1 << 2);
                                                                 | label_15:
    0x00019072 cmp r2, ip                                        |     
    0x00019074 itt lt                                            |     
                                                                 |     if (r2 >= ip) {
    0x00019076 ldrlt lr, [r5, 4]                                 |         
                                                                 |     }
                                                                 |     if (r2 < ip) {
    0x0001907a adds r3, 0x14                                     |         r3 += 0x14;
                                                                 |     }
                                                                 |     if (r3 < 0x14) {
    0x0001907c blt 0x19098                                       |         goto label_39;
                                                                 |     }
    0x0001907e b 0x18ff6                                         |     goto label_3;
                                                                 | label_7:
    0x00019080 cmp r1, 0x65                                      |     
    0x00019082 itttt eq                                          |     
                                                                 |     if (r1 != 0x65) {
    0x00019084 ldreq r1, [r5, 8]                                 |         r1 = *((r5 + 8));
                                                                 |     }
                                                                 |     if (r1 != 0x65) {
    0x00019086 streq r1, [r3, -0x10]                             |         *((r3 - 0x10)) = r1;
                                                                 |     }
                                                                 |     if (r1 != 0x65) {
    0x0001908a moveq r1, 0x6e                                    |         r1 = 0x6e;
                                                                 |     }
                                                                 |     if (r1 == 0x65) {
    0x0001908c strb r1, [r3, -0x14]                              |         *((r3 - 0x14)) = r1;
                                                                 |     }
                                                                 | label_6:
    0x00019090 adds r2, 1                                        |     r2++;
    0x00019092 adds r3, 0x14                                     |     r3 += 0x14;
    0x00019094 cmp r2, ip                                        |     
                                                                 |     if (r2 == ip) {
    0x00019096 beq 0x18ff6                                       |         goto label_3;
                                                                 |     }
                                                                 | label_39:
    0x00019098 ldr r1, [r3, -0x10]                               |     r1 = *((r3 - 0x10));
    0x0001909c cmp r1, lr                                        |     
                                                                 |     if (r1 != lr) {
    0x0001909e bne 0x19090                                       |         goto label_6;
                                                                 |     }
    0x000190a0 ldrb r1, [r3, -0x14]                              |     r1 = *((r3 - 0x14));
    0x000190a4 cmp r1, 0x2e                                      |     
                                                                 |     if (r1 != 0x2e) {
    0x000190a6 bne 0x19080                                       |         goto label_7;
                                                                 |     }
    0x000190a8 ldrb.w r1, [r6, 0x2c]                             |     r1 = *((r6 + 0x2c));
    0x000190ac ldr r8, [r3, -0xc]                                |     r8 = *((r3 - 0xc));
    0x000190b0 lsls r1, r1, 0x1a                                 |     r1 <<= 0x1a;
                                                                 |     if (r1 < r1) {
    0x000190b2 bmi.w 0x1929c                                     |         goto label_40;
                                                                 |     }
    0x000190b6 sxth.w r8, r8                                     |     __asm ("sxth.w r8, r8");
                                                                 | label_20:
    0x000190ba ldrh.w sl, [r7, 0x34]                             |     sl = *((r7 + 0x34));
    0x000190be cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x000190c2 beq 0x19090                                       |         goto label_6;
                                                                 |     }
    0x000190c4 ldr r1, [r7, 4]                                   |     r1 = *((r7 + 4));
    0x000190c6 subs r0, r1, 2                                    |     r0 = r1 - 2;
    0x000190c8 movs r1, 0                                        |     r1 = 0;
    0x000190ca b 0x190d2                                         |     goto label_41;
                                                                 | label_8:
    0x000190cc adds r1, 1                                        |     r1++;
    0x000190ce cmp r1, sl                                        |     
                                                                 |     if (r1 == sl) {
    0x000190d0 beq 0x19090                                       |         goto label_6;
                                                                 |     }
                                                                 | label_41:
    0x000190d2 ldrsh fp, [r0, 2]!                                |     fp = *((r0 += 2));
    0x000190d6 cmp fp, r8                                        |     
                                                                 |     if (fp != r8) {
    0x000190d8 bne 0x190cc                                       |         goto label_8;
                                                                 |     }
    0x000190da sxth r1, r1                                       |     __asm ("sxth r1, r1");
    0x000190dc cmp r1, 0                                         |     
                                                                 |     if (r1 < 0) {
    0x000190de blt 0x19090                                       |         goto label_6;
                                                                 |     }
    0x000190e0 str r1, [r3, -0xc]                                |     *((r3 - 0xc)) = r1;
    0x000190e4 ldr r1, [r5, 8]                                   |     r1 = *((r5 + 8));
    0x000190e6 str r1, [r3, -0x10]                               |     *((r3 - 0x10)) = r1;
    0x000190ea b 0x19090                                         |     goto label_6;
                                                                 | label_29:
    0x000190ec ldr.w r2, [r5, 0x2a0]                             |     r2 = *((r5 + 0x2a0));
    0x000190f0 movs r3, 0                                        |     r3 = 0;
    0x000190f2 movs r1, 0x66                                     |     r1 = 0x66;
    0x000190f4 mov r0, r4                                        |     r0 = r4;
    0x000190f6 str.w fp, [sp]                                    |     __asm ("str.w fp, [sp]");
    0x000190fa bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000190fe b 0x18f18                                         |     goto label_9;
                                                                 | label_28:
    0x00019100 ldr r2, [r8, -0x18]                               |     r2 = *((r8 - 0x18));
    0x00019104 movs r1, 0x66                                     |     r1 = 0x66;
    0x00019106 mov r0, r4                                        |     r0 = r4;
    0x00019108 str r3, [sp]                                      |     *(sp) = r3;
    0x0001910a bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0001910e ldr.w r2, [sl, 0x24]                              |     r2 = *((sl + 0x24));
    0x00019112 b 0x18f12                                         |     goto label_10;
                                                                 | label_26:
    0x00019114 ldr.w r3, [r5, 0x2a8]                             |     r3 = *((r5 + 0x2a8));
    0x00019118 mvns r3, r3                                       |     r3 = ~r3;
                                                                 |     if (r3 < r3) {
    0x0001911a bmi.w 0x19252                                     |         goto label_42;
                                                                 |     }
    0x0001911e ldr r1, [r0, 0x70]                                |     r1 = *((r0 + 0x70));
    0x00019120 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00019122 beq.w 0x19252                                     |         goto label_42;
                                                                 |     }
    0x00019126 str.w r2, [r1, r3, lsl 2]                         |     __asm ("str.w r2, [r1, r3, lsl 2]");
    0x0001912a ldrd r7, r1, [r5, 0x2c8]                          |     __asm ("ldrd r7, r1, aav.0x000000ff");
    0x0001912e ldr r2, [r4, 0x20]                                |     r2 = *((r4 + 0x20));
    0x00019130 cmp r7, 0                                         |     
    0x00019132 add.w r6, r7, r7, lsl 1                           |     r6 = r7 + (r7 << 1);
    0x00019136 add.w r3, r2, -1                                  |     r3 = r2 + -1;
    0x0001913a str r3, [r0, 0x58]                                |     *((r0 + 0x58)) = r3;
    0x0001913c add.w r6, r1, r6, lsl 2                           |     r6 = r1 + (r6 << 2);
    0x00019140 sub.w r6, r6, 0xc                                 |     r6 -= 0xc;
                                                                 |     if (r7 <= 0) {
    0x00019144 ble 0x191a6                                       |         goto label_43;
                                                                 |     }
                                                                 | label_16:
    0x00019146 subs r6, 0xc                                      |     r6 -= 0xc;
    0x00019148 mov r0, ip                                        |     r0 = ip;
    0x0001914a str r7, [sp, 0xc]                                 |     var_ch = r7;
    0x0001914c str r5, [sp, 0x20]                                |     var_20h = r5;
                                                                 |     do {
    0x0001914e ldr r5, [r6, 0x10]                                |         r5 = *((r6 + 0x10));
    0x00019150 subs r6, 0xc                                      |         r6 -= 0xc;
    0x00019152 adds r1, r5, 1                                    |         r1 = r5 + 1;
    0x00019154 cmp r1, r2                                        |         
    0x00019156 itttt lo                                          |         
                                                                 |         if (r1 >= r2) {
    0x00019158 ldrlo r7, [r4, 4]                                 |             r7 = *((r4 + 4));
                                                                 |         }
                                                                 |         if (r1 >= r2) {
    0x0001915a addlo r1, r1, r1, lsl 2                           |             r1 += (r1 << 2);
                                                                 |         }
                                                                 |         if (r1 >= r2) {
    0x0001915e addlo r1, r7, r1, lsl 2                           |             r1 = r7 + (r1 << 2);
                                                                 |         }
                                                                 |         if (r1 < r2) {
    0x00019162 str r2, [r1, 8]                                   |             *((r1 + 8)) = r2;
                                                                 |         }
    0x00019164 str r3, [r0, 0x58]                                |         *((r0 + 0x58)) = r3;
    0x00019166 mov r3, r5                                        |         r3 = r5;
    0x00019168 ldrb.w r1, [r6, 0x20]                             |         r1 = *((r6 + 0x20));
    0x0001916c mov r0, r4                                        |         r0 = r4;
    0x0001916e ldr r2, [r6, 0x18]                                |         r2 = *((r6 + 0x18));
    0x00019170 str.w fp, [sp]                                    |         __asm ("str.w fp, [sp]");
    0x00019174 bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00019178 ldr r3, [r6, 0x1c]                                |         r3 = *((r6 + 0x1c));
    0x0001917a ldr r2, [r4, 0x20]                                |         r2 = *((r4 + 0x20));
    0x0001917c ldr r0, [r4, 0x18]                                |         r0 = *((r4 + 0x18));
    0x0001917e subs r3, 1                                        |         r3--;
    0x00019180 cmp r3, r2                                        |         
    0x00019182 ittt lo                                           |         
                                                                 |         if (r3 >= r2) {
    0x00019184 ldrlo r1, [r4, 4]                                 |             r1 = *((r4 + 4));
                                                                 |         }
                                                                 |         if (r3 >= r2) {
    0x00019186 addlo r3, r3, r3, lsl 2                           |             r3 += (r3 << 2);
                                                                 |         }
                                                                 |         if (r3 < r2) {
    0x0001918a add.w r1, r1, r3, lsl 2                           |             r1 += (r3 << 2);
                                                                 |         }
    0x0001918e add.w r3, r2, -1                                  |         r3 = r2 + -1;
    0x00019192 it lo                                             |         
                                                                 |         if (r3 >= r2) {
    0x00019194 strlo r2, [r1, 8]                                 |             *((r1 + 8)) = r2;
                                                                 |         }
    0x00019196 ldr r1, [sp, 0xc]                                 |         r1 = var_ch;
    0x00019198 str r3, [r0, 0x58]                                |         *((r0 + 0x58)) = r3;
    0x0001919a subs r1, 1                                        |         r1--;
    0x0001919c str r1, [sp, 0xc]                                 |         var_ch = r1;
    0x0001919e bne 0x1914e                                       |         
                                                                 |     } while (r1 != 1);
    0x000191a0 ldr r5, [sp, 0x20]                                |     r5 = var_20h;
    0x000191a2 ldr.w r1, [r5, 0x2cc]                             |     r1 = *((r5 + 0x2cc));
                                                                 | label_43:
    0x000191a6 ldr r0, [sp, 0x10]                                |     r0 = var_10h;
    0x000191a8 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x000191ac ldr r0, [r4, 0x18]                                |     r0 = *((r4 + 0x18));
    0x000191ae ldr r2, [r4, 0x20]                                |     r2 = *((r4 + 0x20));
    0x000191b0 b 0x18e8e                                         |     goto label_11;
                                                                 | label_32:
    0x000191b2 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x000191b4 ldr r6, [r5, 0x20]                                |     r6 = *((r5 + 0x20));
    0x000191b6 ldr r7, [r2, 0x20]                                |     r7 = *((r2 + 0x20));
    0x000191b8 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x000191ba cmp r6, 0                                         |     
    0x000191bc ite ge                                            |     
                                                                 |     if (r6 < 0) {
    0x000191be movge ip, r6                                      |         
                                                                 |     }
                                                                 |     if (r6 >= 0) {
    0x000191c0 addlt ip, r7, -1                                  |         
                                                                 |     }
    0x000191c4 ldr r2, [r2]                                      |     r2 = *(r2);
    0x000191c6 ldrb.w r2, [r2, 0x40]                             |     r2 = *((r2 + 0x40));
    0x000191ca cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x000191cc bne 0x19266                                       |         goto label_44;
                                                                 |     }
    0x000191ce ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x000191d0 add.w ip, ip, ip, lsl 2                           |     
    0x000191d4 ldr r2, [r2, 4]                                   |     r2 = *((r2 + 4));
    0x000191d6 add.w r2, r2, ip, lsl 2                           |     r2 += (ip << 2);
                                                                 | label_17:
    0x000191da cmp r6, r7                                        |     
                                                                 |     if (r6 >= r7) {
    0x000191dc bge.w 0x18ffa                                     |         goto label_12;
                                                                 |     }
    0x000191e0 adds r3, r0, r1                                   |     r3 = r0 + r1;
    0x000191e2 ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x000191e4 ldr.w ip, [r5, 4]                                 |     ip = *((r5 + 4));
    0x000191e8 adds r2, 0x14                                     |     r2 += 0x14;
    0x000191ea mov.w sl, 0x1c                                    |     sl = 0x1c;
    0x000191ee movs r0, 0                                        |     r0 = 0;
    0x000191f0 mov.w r8, 0x21                                    |     r8 = 0x21;
    0x000191f4 mov lr, r4                                        |     lr = r4;
    0x000191f6 add.w r3, r1, r3, lsl 3                           |     r3 = r1 + (r3 << 3);
    0x000191fa b 0x19214                                         |     goto label_14;
                                                                 | label_13:
    0x000191fc cmp r1, 0x65                                      |     
    0x000191fe ittt eq                                           |     
                                                                 |     if (r1 != 0x65) {
    0x00019200 strbeq sl, [r2, -0x14]                            |         *((r2 - 0x14)) = sl;
                                                                 |     }
                                                                 |     if (r1 != 0x65) {
    0x00019204 streq r0, [r2, -0x10]                             |         *((r2 - 0x10)) = r0;
                                                                 |     }
    0x00019208 str r0, [r2, -0x8]                                |     *((r2 - 0x8)) = r0;
                                                                 |     while (r1 != ip) {
    0x0001920c adds r6, 1                                        |         r6++;
    0x0001920e adds r2, 0x14                                     |         r2 += 0x14;
    0x00019210 cmp r6, r7                                        |         
                                                                 |         if (r6 == r7) {
    0x00019212 beq 0x19246                                       |             goto label_45;
                                                                 |         }
                                                                 | label_14:
    0x00019214 ldr r1, [r2, -0x10]                               |         r1 = *((r2 - 0x10));
    0x00019218 cmp r1, ip                                        |         
    0x0001921a bne 0x1920c                                       |         
                                                                 |     }
    0x0001921c ldrb r1, [r2, -0x14]                              |     r1 = *((r2 - 0x14));
    0x00019220 cmp r1, 0x2e                                      |     
                                                                 |     if (r1 != 0x2e) {
    0x00019222 bne 0x191fc                                       |         goto label_13;
                                                                 |     }
    0x00019224 ldr r1, [r2, -0xc]                                |     r1 = *((r2 - 0xc));
    0x00019228 adds r6, 1                                        |     r6++;
    0x0001922a strb r8, [r2, -0x14]                              |     *((r2 - 0x14)) = r8;
    0x0001922e cmp r6, r7                                        |     
    0x00019230 ldr r4, [r3, 0x28]                                |     r4 = *((r3 + 0x28));
    0x00019232 add r1, r4                                        |     r1 += r4;
    0x00019234 str r1, [r2, -0x10]                               |     *((r2 - 0x10)) = r1;
    0x00019238 ldr r1, [r2, -0x8]                                |     r1 = *((r2 - 0x8));
    0x0001923c strd r1, r0, [r2, -0xc]                           |     __asm ("strd r1, r0, [r2, -0xc]");
    0x00019240 add.w r2, r2, 0x14                                |     r2 += 0x14;
                                                                 |     if (r6 != r7) {
    0x00019244 bne 0x19214                                       |         goto label_14;
                                                                 |     }
                                                                 | label_45:
    0x00019246 ldrb.w r3, [lr, 0x29]                             |     r3 = *((lr + 0x29));
    0x0001924a mov r4, lr                                        |     r4 = lr;
    0x0001924c b 0x18ffa                                         |     goto label_12;
                                                                 | label_38:
    0x0001924e ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00019250 b 0x19072                                         |     goto label_15;
                                                                 | label_42:
    0x00019252 add.w r3, r7, r7, lsl 1                           |     r3 = r7 + (r7 << 1);
    0x00019256 ldr.w r6, [r5, 0x2cc]                             |     r6 = *((r5 + 0x2cc));
    0x0001925a lsls r3, r3, 2                                    |     r3 <<= 2;
    0x0001925c subs r3, 0xc                                      |     r3 -= 0xc;
    0x0001925e add r6, r3                                        |     r6 += r3;
    0x00019260 subs r3, r2, 1                                    |     r3 = r2 - 1;
    0x00019262 str r3, [r0, 0x58]                                |     *((r0 + 0x58)) = r3;
    0x00019264 b 0x19146                                         |     goto label_16;
                                                                 | label_44:
    0x00019266 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00019268 add.w r2, r2, 0x324                               |     r2 += 0x324;
    0x0001926c b 0x191da                                         |     goto label_17;
                                                                 | label_37:
    0x0001926e ldr r2, [r5, 8]                                   |     r2 = *((r5 + 8));
    0x00019270 ldr r3, [r4, 0x40]                                |     r3 = *((r4 + 0x40));
    0x00019272 cmp r2, r3                                        |     
                                                                 |     if (r2 == r3) {
    0x00019274 beq.w 0x19042                                     |         goto label_18;
                                                                 |     }
    0x00019278 movs r3, 0                                        |     r3 = 0;
    0x0001927a ldr r0, [sp, 0xc]                                 |     r0 = var_ch;
    0x0001927c movs r1, 0x3b                                     |     r1 = 0x3b;
    0x0001927e str r3, [sp]                                      |     *(sp) = r3;
    0x00019280 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00019284 b 0x19042                                         |     goto label_18;
                                                                 | label_36:
    0x00019286 adds r2, r0, r1                                   |     r2 = r0 + r1;
    0x00019288 ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x0001928a ldr r0, [sp, 0xc]                                 |     r0 = var_ch;
    0x0001928c add.w r2, r1, r2, lsl 3                           |     r2 = r1 + (r2 << 3);
    0x00019290 movs r1, 0x3b                                     |     r1 = 0x3b;
    0x00019292 ldr r2, [r2, 0x30]                                |     r2 = *((r2 + 0x30));
    0x00019294 str r3, [sp]                                      |     *(sp) = r3;
    0x00019296 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0001929a b 0x19036                                         |     goto label_19;
                                                                 | label_40:
    0x0001929c ldr r1, [r6, 8]                                   |     r1 = *((r6 + 8));
                                                                 |     if (r1 != 0) {
    0x0001929e cbnz r1, 0x192a6                                  |         goto label_46;
                                                                 |     }
    0x000192a0 b 0x192ba                                         |     goto label_47;
                                                                 |     do {
    0x000192a2 ldr r1, [r1, 0x14]                                |         r1 = *((r1 + 0x14));
                                                                 |         if (r1 == 0) {
    0x000192a4 cbz r1, 0x192ba                                   |             goto label_47;
                                                                 |         }
                                                                 | label_46:
    0x000192a6 ldrb.w r0, [r1, 0x37]                             |         r0 = *((r1 + 0x37));
    0x000192aa and r0, r0, 3                                     |         r0 &= 3;
    0x000192ae cmp r0, 2                                         |         
    0x000192b0 bne 0x192a2                                       |         
                                                                 |     } while (r0 != 2);
    0x000192b2 ldr r1, [r1, 4]                                   |     r1 = *((r1 + 4));
    0x000192b4 ldrsh.w r8, [r1, r8, lsl 1]                       |     offset_0 = r8 << 1;
                                                                 |     r8 = *((r1 + offset_0));
    0x000192b8 b 0x190ba                                         |     goto label_20;
                                                                 | label_47:
    0x000192ba movs r3, 0                                        |     r3 = 0;
    0x000192bc ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x000192be udf 0xff                                          |     __asm ("udf 0xff");
                                                                 | }
    ; assembly                               | /* r2dec pseudo code output */
                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x195b0 */
                                             | #include <stdint.h>
                                             |  
    ; (fcn) fcn.000195b0 ()                  | void fcn_000195b0 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                             |     int16_t var_0h;
                                             |     int16_t var_8h;
                                             |     int32_t var_8h_2;
                                             |     r0 = arg1;
                                             |     r1 = arg2;
                                             |     r2 = arg3;
                                             |     r3 = arg4;
    0x000195b0 push {r4, r5, r6, r7, lr}     |     
    0x000195b2 sub sp, 0x14                  |     
    0x000195b4 ldr r4, [r0, 8]               |     r4 = *((r0 + 8));
    0x000195b6 mov r5, r0                    |     r5 = r0;
    0x000195b8 mov r7, r1                    |     r7 = r1;
    0x000195ba strd r2, r3, [sp, 8]          |     __asm ("strd r2, r3, [var_8h]");
    0x000195be cbz r4, 0x1962a               |     
                                             |     while (1) {
    0x000195c0 ldr r6, [r5, 0x48]            |         r6 = *((r5 + 0x48));
    0x000195c2 movs r1, 8                    |         r1 = 8;
    0x000195c4 ldr r0, [r5]                  |         r0 = *(r5);
    0x000195c6 adds r6, 1                    |         r6++;
    0x000195c8 str r6, [r5, 0x48]            |         *((r5 + 0x48)) = r6;
    0x000195ca bl 0xd3a0                     |         r0 = fcn_0000d3a0 (r0, r1);
    0x000195ce mov r5, r0                    |         r5 = r0;
                                             |         if (r0 != 0) {
    0x000195d0 cbz r0, 0x195da               |             
    0x000195d2 add r3, sp, 8                 |             r3 += var_8h;
    0x000195d4 ldm r3!, {r0, r1}             |             r0 = *(r3!);
                                             |             r1 = *((r3! + 4));
    0x000195d6 str r0, [r5]                  |             *(r5) = r0;
    0x000195d8 str r1, [r5, 4]               |             *((r5 + 4)) = r1;
                                             |         }
    0x000195da movs r2, 0                    |         r2 = 0;
    0x000195dc mov r3, r6                    |         r3 = r6;
    0x000195de movs r1, 0x1a                 |         r1 = 0x1a;
    0x000195e0 str r2, [sp]                  |         *(sp) = r2;
    0x000195e2 mov r0, r4                    |         r0 = r4;
    0x000195e4 bl 0x18bf8                    |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000195e8 mvn r3, 0xc                   |         r3 = ~0xc;
    0x000195ec mov r1, r0                    |         r1 = r0;
    0x000195ee mov r2, r5                    |         r2 = r5;
    0x000195f0 mov r0, r4                    |         r0 = r4;
    0x000195f2 bl 0x1021c                    |         fcn_0001021c (r0, r1, r2, r3);
    0x000195f6 movs r1, 1                    |         r1 = 1;
    0x000195f8 mov r0, r4                    |         r0 = r4;
    0x000195fa bl 0x100e4                    |         fcn_000100e4 (r0, r1);
    0x000195fe ldr r3, [r4]                  |         r3 = *(r4);
    0x00019600 ldrb.w r3, [r3, 0x40]         |         r3 = *((r3 + 0x40));
                                             |         if (r3 == 0) {
    0x00019604 cbnz r3, 0x19616              |             
    0x00019606 ldr r0, [r4, 0x10]            |             r0 = *((r4 + 0x10));
    0x00019608 mov r1, r7                    |             r1 = r7;
    0x0001960a str r3, [sp]                  |             *(sp) = r3;
    0x0001960c mov.w r2, -1                  |             r2 = -1;
    0x00019610 movs r3, 1                    |             r3 = 1;
    0x00019612 bl 0x17978                    |             fcn_00017978 (r0, r1, r2, r3, r4);
                                             |         }
    0x00019616 movs r5, 0                    |         r5 = 0;
    0x00019618 movs r3, 1                    |         r3 = 1;
    0x0001961a mov r2, r6                    |         r2 = r6;
    0x0001961c movs r1, 0x23                 |         r1 = 0x23;
    0x0001961e mov r0, r4                    |         r0 = r4;
    0x00019620 str r5, [sp]                  |         *(sp) = r5;
    0x00019622 bl 0x18bf8                    |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00019626 add sp, 0x14                  |         
    0x00019628 pop {r4, r5, r6, r7, pc}      |         
    0x0001962a bl 0x192c8                    |         r0 = fcn_000192c8 (r0);
    0x0001962e mov r4, r0                    |         r4 = r0;
    0x00019630 b 0x195c0                     |         
                                             |     }
                                             | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x19894 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00019894 ()                                      | void fcn_00019894 (int16_t arg_12h, int16_t arg_13h, int16_t arg_bp_48h, int16_t arg_38h, int16_t arg_3ch, int16_t arg_40h, int16_t arg_44h, int16_t arg_48h, int16_t arg1, int16_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;
    0x00019894 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00019898 sub sp, 0x14                                      |     
    0x0001989a ldr r7, [r0, 8]                                   |     r7 = *((r0 + 8));
    0x0001989c mov fp, r0                                        |     
    0x0001989e mov sb, r1                                        |     sb = r1;
    0x000198a0 mov r5, r3                                        |     r5 = r3;
    0x000198a2 str r2, [sp, 0xc]                                 |     var_ch = r2;
    0x000198a4 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x000198a6 beq.w 0x19a28                                     |         goto label_9;
                                                                 |     }
    0x000198aa ldr.w r4, [sb, 8]                                 |     r4 = *((sb + 8));
    0x000198ae cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x000198b0 beq.w 0x19a38                                     |         goto label_10;
                                                                 |     }
                                                                 | label_7:
    0x000198b4 ldr r3, [sp, 0x48]                                |     r3 = *(arg_48h);
    0x000198b6 mov.w sl, 0                                       |     sl = 0;
    0x000198ba mov r8, sl                                        |     r8 = sl;
    0x000198bc mov r2, sl                                        |     r2 = sl;
    0x000198be mov sl, sb                                        |     sl = sb;
    0x000198c0 ldr.w sb, [sp, 0x48]                              |     sb = *(arg_48h);
    0x000198c4 cmp r3, 0                                         |     
    0x000198c6 ite ne                                            |     
                                                                 |     if (r3 == 0) {
    0x000198c8 movne r3, 0x10                                    |         r3 = 0x10;
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x000198ca moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x000198cc orr r3, r3, 1                                     |     r3 |= 1;
    0x000198d0 str r3, [sp, 8]                                   |     var_8h = r3;
    0x000198d2 ldr r3, [sp, 0x3c]                                |     r3 = *(arg_3ch);
    0x000198d4 subs r6, r3, 4                                    |     r6 = r3 - 4;
    0x000198d6 b 0x198e8                                         |     goto label_2;
                                                                 | label_0:
    0x000198d8 cmp r3, 2                                         |     
                                                                 |     if (r3 == 2) {
    0x000198da beq.w 0x199f2                                     |         goto label_11;
                                                                 |     }
                                                                 | label_1:
    0x000198de movs r2, 1                                        |     r2 = 1;
                                                                 |     do {
    0x000198e0 ldr r4, [r4, 0x14]                                |         r4 = *((r4 + 0x14));
    0x000198e2 adds r5, 1                                        |         r5++;
    0x000198e4 cmp r4, 0                                         |         
                                                                 |         if (r4 == 0) {
    0x000198e6 beq 0x1995a                                       |             goto label_12;
                                                                 |         }
                                                                 | label_2:
    0x000198e8 ldr r3, [r6, 4]!                                  |         r3 = *((r6 += 4));
    0x000198ec cmp r3, 0                                         |         
    0x000198ee beq 0x198e0                                       |         
                                                                 |     } while (r3 == 0);
    0x000198f0 ldr r2, [r4, 0x24]                                |     r2 = *((r4 + 0x24));
                                                                 |     if (r2 != 0) {
    0x000198f2 cbz r2, 0x19908                                   |         
    0x000198f4 mov r2, r3                                        |         r2 = r3;
    0x000198f6 ldr r3, [r7, 0x20]                                |         r3 = *((r7 + 0x20));
    0x000198f8 movs r1, 0x4c                                     |         r1 = 0x4c;
    0x000198fa mov r0, r7                                        |         r0 = r7;
    0x000198fc str.w r8, [sp]                                    |         __asm ("str.w r8, [sp]");
    0x00019900 adds r3, 2                                        |         r3 += 2;
    0x00019902 bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00019906 ldr r3, [r6]                                      |         r3 = *(r6);
                                                                 |     }
    0x00019908 mov r2, r5                                        |     r2 = r5;
    0x0001990a movs r1, 0x6c                                     |     r1 = 0x6c;
    0x0001990c mov r0, r7                                        |     r0 = r7;
    0x0001990e str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x00019912 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00019916 ldrb.w r3, [r4, 0x37]                             |     r3 = *((r4 + 0x37));
    0x0001991a and r3, r3, 3                                     |     r3 &= 3;
    0x0001991e cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x00019922 beq 0x198d8                                       |         goto label_0;
                                                                 |     }
    0x00019924 cmp r3, 2                                         |     
    0x00019926 it ne                                             |     
                                                                 |     if (r3 == 2) {
    0x00019928 movne r1, 0x10                                    |         r1 = 0x10;
                                                                 |     }
                                                                 |     if (r3 == 2) {
    0x0001992a bne 0x1993c                                       |         
    0x0001992c ldrb.w r3, [sl, 0x2c]                             |         r3 = *((sl + 0x2c));
    0x00019930 tst.w r3, 0x20                                    |         
    0x00019934 ldr r3, [sp, 8]                                   |         r3 = var_8h;
    0x00019936 ite eq                                            |         
                                                                 |         if ((r3 & 0x20) != 0) {
    0x00019938 moveq r1, 0x10                                    |             r1 = 0x10;
                                                                 |         }
                                                                 |         if ((r3 & 0x20) != 0) {
    0x0001993a movne r1, r3                                      |             r1 = r3;
                                                                 |             goto label_3;
                                                                 |         }
                                                                 |     }
                                                                 | label_3:
    0x0001993c ldr r3, [r7, 4]                                   |     r3 = *((r7 + 4));
    0x0001993e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00019940 beq 0x198de                                       |         goto label_1;
                                                                 |     }
    0x00019942 ldr r2, [r7, 0x20]                                |     r2 = *((r7 + 0x20));
    0x00019944 adds r5, 1                                        |     r5++;
    0x00019946 add.w r2, r2, r2, lsl 2                           |     r2 += (r2 << 2);
    0x0001994a add.w r3, r3, r2, lsl 2                           |     r3 += (r2 << 2);
    0x0001994e movs r2, 1                                        |     r2 = 1;
    0x00019950 strb r1, [r3, -0x11]                              |     *((r3 - 0x11)) = r1;
    0x00019954 ldr r4, [r4, 0x14]                                |     r4 = *((r4 + 0x14));
    0x00019956 cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x00019958 bne 0x198e8                                       |         goto label_2;
                                                                 |     }
                                                                 | label_12:
    0x0001995a mov sb, sl                                        |     sb = sl;
    0x0001995c mov sl, r2                                        |     sl = r2;
                                                                 | label_8:
    0x0001995e ldrb.w r4, [sb, 0x2c]                             |     r4 = *((sb + 0x2c));
    0x00019962 ands r4, r4, 0x20                                 |     r4 &= 0x20;
                                                                 |     if (r4 == r4) {
    0x00019966 bne 0x199ec                                       |         
    0x00019968 ldrb.w r3, [fp, 0x13]                             |         r3 = *(arg_13h);
    0x0001996c ldr r2, [sp, 0x38]                                |         r2 = *(arg_38h);
    0x0001996e adds r6, r2, 1                                    |         r6 = r2 + 1;
    0x00019970 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00019972 beq 0x19a00                                       |             goto label_13;
                                                                 |         }
    0x00019974 subs r3, 1                                        |         r3--;
    0x00019976 uxtb r3, r3                                       |         r3 = (int8_t) r3;
    0x00019978 strb.w r3, [fp, 0x13]                             |         *(arg_13h) = r3;
    0x0001997c adds r3, 6                                        |         r3 += 6;
    0x0001997e ldr.w r5, [fp, r3, lsl 2]                         |         offset_0 = r3 << 2;
                                                                 |         r5 = *((fp + offset_0));
                                                                 | label_4:
    0x00019982 str r5, [sp]                                      |         *(sp) = r5;
    0x00019984 mov r2, r6                                        |         r2 = r6;
    0x00019986 ldrsh.w r3, [sb, 0x26]                            |         r3 = *((sb + 0x26));
    0x0001998a movs r1, 0x30                                     |         r1 = 0x30;
    0x0001998c mov r0, r7                                        |         r0 = r7;
    0x0001998e bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00019992 cmp.w sl, 0                                       |         
                                                                 |         if (sl == 0) {
    0x00019996 beq 0x19a0c                                       |             goto label_14;
                                                                 |         }
                                                                 | label_5:
    0x00019998 ldrsh.w r2, [sb, 0x26]                            |         r2 = *((sb + 0x26));
    0x0001999c mov r1, r6                                        |         r1 = r6;
    0x0001999e mov r0, fp                                        |         r0 = fp;
    0x000199a0 bl 0xaea0                                         |         fcn_0000aea0 (r0, r1, r2);
    0x000199a4 ldrb.w r3, [fp, 0x12]                             |         r3 = *(arg_12h);
                                                                 |         if (r3 == 0) {
    0x000199a8 cbnz r3, 0x199b4                                  |             
    0x000199aa ldr r3, [sp, 0x40]                                |             r3 = *(arg_40h);
    0x000199ac cmp r3, 0                                         |             
    0x000199ae ite ne                                            |             
                                                                 |             if (r3 == 0) {
    0x000199b0 movne r4, 5                                       |                 r4 = 5;
                                                                 |             }
                                                                 |             if (r3 == 0) {
    0x000199b2 moveq r4, 3                                       |                 r4 = 3;
                                                                 |                 goto label_15;
                                                                 |             }
                                                                 |         }
                                                                 | label_15:
    0x000199b4 ldr r3, [sp, 0x44]                                |         r3 = *(arg_44h);
                                                                 |         if (r3 != 0) {
    0x000199b6 cbz r3, 0x199bc                                   |             
    0x000199b8 orr r4, r4, 8                                     |             r4 |= 8;
                                                                 |         }
    0x000199bc ldr r3, [sp, 0x48]                                |         r3 = *(arg_48h);
                                                                 |         if (r3 != 0) {
    0x000199be cbz r3, 0x199c4                                   |             
    0x000199c0 orr r4, r4, 0x10                                  |             r4 |= 0x10;
                                                                 |         }
    0x000199c4 ldr r3, [sp, 0x38]                                |         r3 = *(arg_38h);
    0x000199c6 movs r1, 0x49                                     |         r1 = 0x49;
    0x000199c8 ldr r2, [sp, 0xc]                                 |         r2 = var_ch;
    0x000199ca mov r0, r7                                        |         r0 = r7;
    0x000199cc str r3, [sp]                                      |         *(sp) = r3;
    0x000199ce mov r3, r5                                        |         r3 = r5;
    0x000199d0 bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000199d4 ldrb.w r3, [fp, 0x12]                             |         r3 = *(arg_12h);
                                                                 |         if (r3 == 0) {
    0x000199d8 cbz r3, 0x19a18                                   |             goto label_16;
                                                                 |         }
                                                                 | label_6:
    0x000199da ldr r3, [r7, 4]                                   |         r3 = *((r7 + 4));
                                                                 |         if (r3 == 0) {
    0x000199dc cbz r3, 0x199ec                                   |             goto label_17;
                                                                 |         }
    0x000199de ldr r2, [r7, 0x20]                                |         r2 = *((r7 + 0x20));
    0x000199e0 add.w r2, r2, r2, lsl 2                           |         r2 += (r2 << 2);
    0x000199e4 add.w r3, r3, r2, lsl 2                           |         r3 += (r2 << 2);
    0x000199e8 strb r4, [r3, -0x11]                              |         *((r3 - 0x11)) = r4;
                                                                 |     }
                                                                 | label_17:
    0x000199ec add sp, 0x14                                      |     
    0x000199ee pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_11:
    0x000199f2 ldrb.w r3, [sl, 0x2c]                             |     r3 = *((sl + 0x2c));
    0x000199f6 lsls r3, r3, 0x1a                                 |     r3 <<= 0x1a;
                                                                 |     if (r3 >= r3) {
    0x000199f8 bpl.w 0x198de                                     |         goto label_1;
                                                                 |     }
    0x000199fc ldr r1, [sp, 8]                                   |     r1 = var_8h;
    0x000199fe b 0x1993c                                         |     goto label_3;
                                                                 | label_13:
    0x00019a00 ldr.w r5, [fp, 0x48]                              |     r5 = *(arg_bp_48h);
    0x00019a04 adds r5, 1                                        |     r5++;
    0x00019a06 str.w r5, [fp, 0x48]                              |     __asm ("str.w r5, [arg_bp_48h]");
    0x00019a0a b 0x19982                                         |     goto label_4;
                                                                 | label_14:
    0x00019a0c mov r2, sl                                        |     r2 = sl;
    0x00019a0e mov r1, sb                                        |     r1 = sb;
    0x00019a10 mov r0, r7                                        |     r0 = r7;
    0x00019a12 bl 0x197e4                                        |     fcn_000197e4 (r0, r1, r2);
    0x00019a16 b 0x19998                                         |     goto label_5;
                                                                 | label_16:
    0x00019a18 ldr.w r2, [sb]                                    |     r2 = *(sb);
    0x00019a1c mov.w r1, -1                                      |     r1 = -1;
    0x00019a20 mov r0, r7                                        |     r0 = r7;
    0x00019a22 bl 0x1021c                                        |     fcn_0001021c (r0, r1, r2, r3);
    0x00019a26 b 0x199da                                         |     goto label_6;
                                                                 | label_9:
    0x00019a28 bl 0x192c8                                        |     fcn_000192c8 (r0);
    0x00019a2c ldr.w r4, [sb, 8]                                 |     r4 = *((sb + 8));
    0x00019a30 mov r7, r0                                        |     r7 = r0;
    0x00019a32 cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x00019a34 bne.w 0x198b4                                     |         goto label_7;
                                                                 |     }
                                                                 | label_10:
    0x00019a38 mov sl, r4                                        |     sl = r4;
    0x00019a3a b 0x1995e                                         |     goto label_8;
                                                                 | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x19dd4 */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) fcn.00019dd4 ()                                  | void fcn_00019dd4 (int16_t arg_20h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
                                                             |     r2 = arg3;
                                                             |     r3 = arg4;
    0x00019dd4 push.w {r4, r5, r6, r7, r8, sb, sl, lr}       |     
    0x00019dd8 mov r7, r2                                    |     r7 = r2;
    0x00019dda ldr.w r6, [r0, 0x198]                         |     r6 = *(arg_20hx198);
    0x00019dde mov r5, r1                                    |     r5 = r1;
    0x00019de0 mov r8, r3                                    |     r8 = r3;
    0x00019de2 cmp r6, 0                                     |     
    0x00019de4 it eq                                         |     
                                                             |     if (r6 != 0) {
    0x00019de6 moveq r6, r0                                  |         r6 = r0;
                                                             |     }
    0x00019de8 ldrd r2, sb, [r6, 0x18c]                      |     __asm ("ldrd r2, sb, aav.0x000000ff");
    0x00019dec cmp r2, 0                                     |     
                                                             |     if (r2 <= 0) {
    0x00019dee ble 0x19e22                                   |         goto label_1;
                                                             |     }
    0x00019df0 mov r0, sb                                    |     r0 = sb;
    0x00019df2 mov.w ip, 0                                   |     
    0x00019df6 b 0x19e00                                     |     
                                                             |     while (r3 != r5) {
                                                             | label_0:
    0x00019df8 cmp r2, ip                                    |         
    0x00019dfa add.w r0, r0, 0x10                            |         r0 += 0x10;
                                                             |         if (r2 == ip) {
    0x00019dfe beq 0x19e22                                   |             goto label_1;
                                                             |         }
    0x00019e00 ldr r3, [r0]                                  |         r3 = *(r0);
    0x00019e02 add.w ip, ip, 1                               |         
    0x00019e06 cmp r3, r5                                    |         
    0x00019e08 bne 0x19df8                                   |         
                                                             |     }
    0x00019e0a ldr r3, [r0, 4]                               |     r3 = *((r0 + 4));
    0x00019e0c cmp r3, r7                                    |     
                                                             |     if (r3 != r7) {
    0x00019e0e bne 0x19df8                                   |         goto label_0;
                                                             |     }
    0x00019e10 ldrb r3, [r0, 8]                              |     r3 = *((r0 + 8));
    0x00019e12 orrs.w r3, r8, r3                             |     r3 = r8 | r3;
    0x00019e16 ite ne                                        |     
                                                             |     if (r3 == r8) {
    0x00019e18 movne r3, 1                                   |         r3 = 1;
                                                             |     }
                                                             |     if (r3 != r8) {
    0x00019e1a moveq r3, 0                                   |         r3 = 0;
                                                             |     }
    0x00019e1c strb r3, [r0, 8]                              |     *((r0 + 8)) = r3;
    0x00019e1e pop.w {r4, r5, r6, r7, r8, sb, sl, pc}        |     
                                                             | label_1:
    0x00019e22 ldr.w sl, [r6]                                |     sl = *(r6);
    0x00019e26 adds r2, 1                                    |     r2++;
    0x00019e28 lsls r2, r2, 4                                |     r2 <<= 4;
    0x00019e2a mov r1, sb                                    |     r1 = sb;
    0x00019e2c mov r0, sl                                    |     r0 = sl;
    0x00019e2e bl 0x17264                                    |     r0 = fcn_00017264 (r0, r1, r2);
    0x00019e32 mov r4, r0                                    |     r4 = r0;
                                                             |     if (r0 != 0) {
    0x00019e34 cbz r0, 0x19e58                               |         
    0x00019e36 ldr.w r3, [r6, 0x18c]                         |         r3 = *((r6 + 0x18c));
    0x00019e3a str.w r0, [r6, 0x190]                         |         __asm ("str.w r0, aav.0x000000ff");
    0x00019e3e adds r2, r3, 1                                |         r2 = r3 + 1;
    0x00019e40 lsls r3, r3, 4                                |         r3 <<= 4;
    0x00019e42 str.w r2, [r6, 0x18c]                         |         __asm ("str.w r2, aav.0x000000ff");
    0x00019e46 add r4, r3                                    |         r4 += r3;
    0x00019e48 str r5, [r0, r3]                              |         *((r0 + r3)) = r5;
    0x00019e4a ldr r3, [sp, 0x20]                            |         r3 = *(arg_20h);
    0x00019e4c str r7, [r4, 4]                               |         *((r4 + 4)) = r7;
    0x00019e4e strb.w r8, [r4, 8]                            |         *((r4 + 8)) = r8;
    0x00019e52 str r3, [r4, 0xc]                             |         *((r4 + 0xc)) = r3;
    0x00019e54 pop.w {r4, r5, r6, r7, r8, sb, sl, pc}        |         
                                                             |     }
    0x00019e58 mov r1, sb                                    |     r1 = sb;
    0x00019e5a mov r0, sl                                    |     r0 = sl;
    0x00019e5c bl 0xe12c                                     |     fcn_0000e12c (r0, r1);
    0x00019e60 ldr r3, [r6]                                  |     r3 = *(r6);
    0x00019e62 movs r2, 1                                    |     r2 = 1;
    0x00019e64 strd r4, r4, [r6, 0x18c]                      |     __asm ("strd r4, r4, aav.0x000000ff");
    0x00019e68 strb.w r2, [r3, 0x40]                         |     *((r3 + 0x40)) = r2;
    0x00019e6c 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-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x19f18 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00019f18 ()                                      | void fcn_00019f18 (int16_t arg_ch, int16_t arg_40h, int16_t arg_44h, int16_t arg_48h, int16_t arg_50h, int16_t arg_54h, 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_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_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;
    0x00019f18 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00019f1c mov r5, r0                                        |     r5 = r0;
    0x00019f1e ldr r4, [r0, 8]                                   |     r4 = *((r0 + 8));
    0x00019f20 sub sp, 0x1c                                      |     
    0x00019f22 mov r8, r3                                        |     r8 = r3;
    0x00019f24 mov fp, r1                                        |     
    0x00019f26 mov r7, r2                                        |     r7 = r2;
    0x00019f28 ldr r0, [r4, 0x18]                                |     r0 = *((r4 + 0x18));
    0x00019f2a ldr.w sb, [r4, 0x20]                              |     sb = *((r4 + 0x20));
    0x00019f2e bl 0x19ed0                                        |     fcn_00019ed0 (r0);
    0x00019f32 ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x00019f34 mov r6, r0                                        |     r6 = r0;
                                                                 |     if (r3 != 0) {
    0x00019f36 cbnz r3, 0x19f78                                  |         goto label_15;
                                                                 |     }
                                                                 | label_0:
    0x00019f38 ldr r3, [r5]                                      |     r3 = *(r5);
    0x00019f3a ldrb.w r3, [r3, 0x40]                             |     r3 = *((r3 + 0x40));
                                                                 |     if (r3 != 0) {
    0x00019f3e cbnz r3, 0x19f6c                                  |         goto label_16;
                                                                 |     }
    0x00019f40 ldr.w r1, [fp, 0xc]                               |     r1 = *(arg_ch);
    0x00019f44 cmp r1, 0                                         |     
    0x00019f46 bgt 0x19f62                                       |     
                                                                 |     while (1) {
    0x00019f48 ldrb.w r3, [r8]                                   |         r3 = *(r8);
    0x00019f4c subs r3, 0xa                                      |         r3 -= 0xa;
    0x00019f4e cmp r3, 4                                         |         
                                                                 |         if (r3 > 4) {
    0x00019f50 bhi.w 0x1a260                                     |             goto label_17;
                                                                 |         }
                                                                 |         /* switch table (6 cases) at 0x19f58 */
    0x00019f54 tbh [pc, r3, lsl 1]                               |         __asm ("tbh [pc, r3, lsl 1]");
    0x00019f62 mov r2, r6                                        |         r2 = r6;
    0x00019f64 mov r0, r4                                        |         r0 = r4;
    0x00019f66 bl 0x19b28                                        |         fcn_00019b28 (r0, r1, r2);
    0x00019f6a b 0x19f48                                         |         
                                                                 |     }
                                                                 | label_16:
    0x00019f6c mov.w sb, 0                                       |     sb = 0;
    0x00019f70 mov r0, sb                                        |     r0 = sb;
    0x00019f72 add sp, 0x1c                                      |     
    0x00019f74 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_15:
    0x00019f78 movs r3, 0                                        |     r3 = 0;
    0x00019f7a ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x00019f7c movs r1, 0x2d                                     |     r1 = 0x2d;
    0x00019f7e str r3, [sp]                                      |     *(sp) = r3;
    0x00019f80 mov r0, r4                                        |     r0 = r4;
    0x00019f82 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00019f86 ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x00019f88 ldrd r2, r1, [r7, 8]                              |     __asm ("ldrd r2, r1, [r7, 8]");
    0x00019f8c str r0, [sp, 0x14]                                |     var_14h = r0;
    0x00019f8e add.w sl, r3, 1                                   |     sl = r3 + 1;
    0x00019f92 ldr r3, [sp, 0x48]                                |     r3 = *(arg_48h);
                                                                 |     if (r3 != 0) {
    0x00019f94 cbz r3, 0x19f9e                                   |         
    0x00019f96 ldr r3, [r3]                                      |         r3 = *(r3);
    0x00019f98 ldr r0, [sp, 0x48]                                |         r0 = *(arg_48h);
    0x00019f9a adds r3, 1                                        |         r3++;
    0x00019f9c str r3, [r0]                                      |         *(r0) = r3;
                                                                 |     }
    0x00019f9e ldr r3, [sp, 0x48]                                |     r3 = *(arg_48h);
    0x00019fa0 mov r0, r4                                        |     r0 = r4;
    0x00019fa2 strd r1, r3, [sp]                                 |     __asm ("strd r1, r3, [sp]");
    0x00019fa6 mvn r3, 5                                         |     r3 = ~5;
    0x00019faa str r3, [sp, 8]                                   |     var_8h = r3;
    0x00019fac movs r1, 0x29                                     |     r1 = 0x29;
    0x00019fae mov r3, sl                                        |     r3 = sl;
    0x00019fb0 bl 0x1977c                                        |     r0 = fcn_0001977c (r0, r1, r2, r3, r4, r5);
    0x00019fb4 adds r2, r0, 2                                    |     r2 = r0 + 2;
    0x00019fb6 movs r1, 0x2a                                     |     r1 = 0x2a;
    0x00019fb8 mov r3, r6                                        |     r3 = r6;
    0x00019fba str r2, [sp]                                      |     *(sp) = r2;
    0x00019fbc mov r0, r4                                        |     r0 = r4;
    0x00019fbe bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00019fc2 ldr r3, [r4, 0x20]                                |     r3 = *((r4 + 0x20));
    0x00019fc4 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x00019fc6 ldr r0, [r4, 0x18]                                |     r0 = *((r4 + 0x18));
    0x00019fc8 cmp r2, r3                                        |     
    0x00019fca ittt lo                                           |     
                                                                 |     if (r2 >= r3) {
    0x00019fcc ldrlo r1, [r4, 4]                                 |         r1 = *((r4 + 4));
                                                                 |     }
                                                                 |     if (r2 >= r3) {
    0x00019fce addlo r2, r2, r2, lsl 2                           |         r2 += (r2 << 2);
                                                                 |     }
                                                                 |     if (r2 < r3) {
    0x00019fd2 add.w r1, r1, r2, lsl 2                           |         r1 += (r2 << 2);
                                                                 |     }
    0x00019fd6 add.w r2, r3, -1                                  |     r2 = r3 + -1;
    0x00019fda it lo                                             |     
                                                                 |     if (r2 >= r3) {
    0x00019fdc strlo r3, [r1, 8]                                 |         *((r1 + 8)) = r3;
                                                                 |     }
    0x00019fde mov r3, sl                                        |     r3 = sl;
    0x00019fe0 ldr r1, [r7, 0xc]                                 |     r1 = *((r7 + 0xc));
    0x00019fe2 str r2, [r0, 0x58]                                |     *((r0 + 0x58)) = r2;
    0x00019fe4 mov r0, r4                                        |     r0 = r4;
    0x00019fe6 subs r1, 1                                        |     r1--;
    0x00019fe8 str r1, [sp]                                      |     *(sp) = r1;
    0x00019fea movs r1, 0x21                                     |     r1 = 0x21;
    0x00019fec ldr r2, [r7, 8]                                   |     r2 = *((r7 + 8));
    0x00019fee bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00019ff2 movs r2, 0                                        |     r2 = 0;
    0x00019ff4 ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x00019ff6 str r2, [sp]                                      |     *(sp) = r2;
    0x00019ff8 movs r1, 0x19                                     |     r1 = 0x19;
    0x00019ffa movs r2, 1                                        |     r2 = 1;
    0x00019ffc mov r0, r4                                        |     r0 = r4;
    0x00019ffe bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0001a002 b 0x19f38                                         |     goto label_0;
    0x0001a004 ldrb r3, [r5, 0x13]                               |     r3 = *((r5 + 0x13));
    0x0001a006 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0001a008 beq.w 0x1a228                                     |         goto label_18;
                                                                 |     }
    0x0001a00c subs r2, r3, 1                                    |     r2 = r3 - 1;
    0x0001a00e uxtb r2, r2                                       |     r2 = (int8_t) r2;
    0x0001a010 adds r1, r2, 6                                    |     r1 = r2 + 6;
    0x0001a012 strb r2, [r5, 0x13]                               |     *((r5 + 0x13)) = r2;
    0x0001a014 ldr.w r1, [r5, r1, lsl 2]                         |     offset_0 = r1 << 2;
                                                                 |     r1 = *((r5 + offset_0));
    0x0001a018 str r1, [sp, 0x14]                                |     var_14h = r1;
    0x0001a01a cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0001a01c beq.w 0x1a25a                                     |         goto label_19;
                                                                 |     }
    0x0001a020 subs r3, 2                                        |     r3 -= 2;
    0x0001a022 uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x0001a024 strb r3, [r5, 0x13]                               |     *((r5 + 0x13)) = r3;
    0x0001a026 adds r3, 6                                        |     r3 += 6;
    0x0001a028 ldr.w sl, [r5, r3, lsl 2]                         |     offset_1 = r3 << 2;
                                                                 |     sl = *((r5 + offset_1));
                                                                 | label_5:
    0x0001a02c ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0001a02e movs r1, 0x30                                     |     r1 = 0x30;
    0x0001a030 mov r0, r4                                        |     r0 = r4;
    0x0001a032 str r3, [sp]                                      |     *(sp) = r3;
    0x0001a034 ldrd r2, r3, [r7, 8]                              |     __asm ("ldrd r2, r3, [r7, 8]");
    0x0001a038 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0001a03c movs r3, 0                                        |     r3 = 0;
    0x0001a03e movs r1, 0x46                                     |     r1 = 0x46;
    0x0001a040 str r3, [sp]                                      |     *(sp) = r3;
    0x0001a042 mov r0, r4                                        |     r0 = r4;
    0x0001a044 ldr.w r2, [r8, 4]                                 |     r2 = *((r8 + 4));
    0x0001a048 mov r3, sl                                        |     r3 = sl;
    0x0001a04a bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0001a04e ldr.w r2, [r8, 4]                                 |     r2 = *((r8 + 4));
    0x0001a052 movs r1, 0x49                                     |     r1 = 0x49;
    0x0001a054 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0001a056 mov r0, r4                                        |     r0 = r4;
    0x0001a058 str.w sl, [sp]                                    |     __asm ("str.w sl, [sp]");
    0x0001a05c bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0001a060 ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
                                                                 |     if (r3 != 0) {
    0x0001a062 cbz r3, 0x1a074                                   |         
    0x0001a064 ldr r2, [r4, 0x20]                                |         r2 = *((r4 + 0x20));
    0x0001a066 add.w r2, r2, r2, lsl 2                           |         r2 += (r2 << 2);
    0x0001a06a add.w r3, r3, r2, lsl 2                           |         r3 += (r2 << 2);
    0x0001a06e movs r2, 8                                        |         r2 = 8;
    0x0001a070 strb r2, [r3, -0x11]                              |         *((r3 - 0x11)) = r2;
                                                                 |     }
    0x0001a074 cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x0001a078 beq 0x1a0a2                                       |         goto label_20;
                                                                 |     }
    0x0001a07a ldrb r0, [r5, 0x13]                               |     r0 = *((r5 + 0x13));
    0x0001a07c cmp r0, 7                                         |     
                                                                 |     if (r0 > 7) {
    0x0001a07e bhi 0x1a0e0                                       |         goto label_1;
                                                                 |     }
    0x0001a080 add.w r3, r5, 0x74                                |     r3 = r5 + 0x74;
    0x0001a084 add.w r7, r5, 0x13c                               |     r7 = r5 + 0x13c;
    0x0001a088 mov r2, r3                                        |     r2 = r3;
                                                                 |     do {
    0x0001a08a ldr r1, [r2, 0xc]                                 |         r1 = *((r2 + 0xc));
    0x0001a08c cmp sl, r1                                        |         
                                                                 |         if (sl == r1) {
    0x0001a08e beq.w 0x1a24c                                     |             goto label_21;
                                                                 |         }
    0x0001a092 adds r2, 0x14                                     |         r2 += 0x14;
    0x0001a094 cmp r2, r7                                        |         
    0x0001a096 bne 0x1a08a                                       |         
                                                                 |     } while (r2 != r7);
    0x0001a098 adds r3, r0, 1                                    |     r3 = r0 + 1;
    0x0001a09a adds r0, 6                                        |     r0 += 6;
    0x0001a09c strb r3, [r5, 0x13]                               |     *((r5 + 0x13)) = r3;
    0x0001a09e str.w sl, [r5, r0, lsl 2]                         |     __asm ("str.w sl, [r5, r0, lsl 2]");
                                                                 | label_20:
    0x0001a0a2 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
                                                                 |     if (r3 == 0) {
    0x0001a0a4 cbz r3, 0x1a0e0                                   |         goto label_1;
                                                                 |     }
    0x0001a0a6 ldrb r0, [r5, 0x13]                               |     r0 = *((r5 + 0x13));
    0x0001a0a8 cmp r0, 7                                         |     
                                                                 |     if (r0 > 7) {
    0x0001a0aa bhi 0x1a0e0                                       |         goto label_1;
                                                                 |     }
    0x0001a0ac add.w r3, r5, 0x74                                |     r3 = r5 + 0x74;
                                                                 | label_7:
    0x0001a0b0 ldr r7, [sp, 0x14]                                |     r7 = var_14h;
    0x0001a0b2 add.w r1, r3, 0xc8                                |     r1 = r3 + 0xc8;
                                                                 |     do {
    0x0001a0b6 ldr r2, [r3, 0xc]                                 |         r2 = *((r3 + 0xc));
    0x0001a0b8 cmp r2, r7                                        |         
                                                                 |         if (r2 == r7) {
    0x0001a0ba beq.w 0x1a246                                     |             goto label_22;
                                                                 |         }
    0x0001a0be adds r3, 0x14                                     |         r3 += 0x14;
    0x0001a0c0 cmp r1, r3                                        |         
    0x0001a0c2 bne 0x1a0b6                                       |         
                                                                 |     } while (r1 != r3);
    0x0001a0c4 adds r3, r0, 1                                    |     r3 = r0 + 1;
    0x0001a0c6 adds r0, 6                                        |     r0 += 6;
    0x0001a0c8 strb r3, [r5, 0x13]                               |     *((r5 + 0x13)) = r3;
    0x0001a0ca ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0001a0cc str.w r3, [r5, r0, lsl 2]                         |     __asm ("str.w r3, [r5, r0, lsl 2]");
    0x0001a0d0 b 0x1a0e0                                         |     goto label_1;
    0x0001a0d2 ldr.w r2, [r8, 4]                                 |     r2 = *((r8 + 4));
    0x0001a0d6 mov r0, r5                                        |     r0 = r5;
    0x0001a0d8 ldr r1, [r7, 8]                                   |     r1 = *((r7 + 8));
    0x0001a0da movs r3, 1                                        |     r3 = 1;
    0x0001a0dc bl 0x18d88                                        |     fcn_00018d88 (r0, r1, r2, r3);
                                                                 |     do {
                                                                 | label_1:
    0x0001a0e0 ldr.w r2, [fp, 8]                                 |         r2 = *(arg_48h);
    0x0001a0e4 cmp r2, 0                                         |         
                                                                 |         if (r2 != 0) {
    0x0001a0e6 bne 0x1a1e0                                       |             goto label_23;
                                                                 |         }
                                                                 | label_2:
    0x0001a0e8 mvns r6, r6                                       |         r6 = ~r6;
    0x0001a0ea ldr r1, [r4, 0x18]                                |         r1 = *((r4 + 0x18));
                                                                 |         if (r6 >= r6) {
    0x0001a0ec bmi 0x1a0f8                                       |             
    0x0001a0ee ldr r3, [r1, 0x70]                                |             r3 = *((r1 + 0x70));
                                                                 |             if (r3 == 0) {
    0x0001a0f0 cbz r3, 0x1a0f8                                   |                 goto label_24;
                                                                 |             }
    0x0001a0f2 ldr r2, [r4, 0x20]                                |             r2 = *((r4 + 0x20));
    0x0001a0f4 str.w r2, [r3, r6, lsl 2]                         |             __asm ("str.w r2, [r3, r6, lsl 2]");
                                                                 |         }
                                                                 | label_24:
    0x0001a0f8 ldr r2, [r4, 0x20]                                |         r2 = *((r4 + 0x20));
    0x0001a0fa movs r3, 0                                        |         r3 = 0;
    0x0001a0fc mov r0, r4                                        |         r0 = r4;
    0x0001a0fe subs r2, 1                                        |         r2--;
    0x0001a100 str r2, [r1, 0x58]                                |         *((r1 + 0x58)) = r2;
    0x0001a102 movs r1, 0x12                                     |         r1 = 0x12;
    0x0001a104 ldr r2, [sp, 0x40]                                |         r2 = *(arg_40h);
    0x0001a106 str r3, [sp]                                      |         *(sp) = r3;
    0x0001a108 bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0001a10c mov r0, sb                                        |         r0 = sb;
    0x0001a10e add sp, 0x1c                                      |         
    0x0001a110 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
    0x0001a114 ldr.w r3, [fp]                                    |         r3 = *(fp);
    0x0001a118 ldrb.w sl, [r8, 1]                                |         sl = *((r8 + 1));
    0x0001a11c ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x0001a11e ldr r0, [r3]                                      |         r0 = *(r3);
    0x0001a120 bl 0xb8a4                                         |         r0 = fcn_0000b8a4 (r0);
    0x0001a124 cmp r0, 0                                         |         
    0x0001a126 it ne                                             |         
                                                                 |         if (r0 != 0) {
    0x0001a128 cmpne sl, 0                                       |             __asm ("cmpne sl, 0");
                                                                 |         }
                                                                 |         if (r0 == 0) {
    0x0001a12c beq 0x1a1f2                                       |             goto label_25;
                                                                 |         }
    0x0001a12e cmp.w sl, 0x62                                    |         
    0x0001a132 it ls                                             |         
                                                                 |         if (sl <= 0x62) {
    0x0001a134 cmpls r0, 0x62                                    |             __asm ("cmpls r0, 0x62");
                                                                 |         }
    0x0001a136 ite hi                                            |         
                                                                 |         if (sl <= 0x62) {
    0x0001a138 movhi r0, 1                                       |             r0 = 1;
                                                                 |         }
                                                                 |         if (sl > 0x62) {
    0x0001a13a movls r0, 0                                       |             r0 = 0;
                                                                 |         }
    0x0001a13c adds r0, 0x62                                     |         r0 += 0x62;
                                                                 | label_3:
    0x0001a13e strb.w r0, [r8, 1]                                |         *((r8 + 1)) = r0;
    0x0001a142 ldrb r3, [r5, 0x13]                               |         r3 = *((r5 + 0x13));
    0x0001a144 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0001a146 beq 0x1a23a                                       |             goto label_26;
                                                                 |         }
    0x0001a148 subs r3, 1                                        |         r3--;
    0x0001a14a uxtb r3, r3                                       |         r3 = (int8_t) r3;
    0x0001a14c strb r3, [r5, 0x13]                               |         *((r5 + 0x13)) = r3;
    0x0001a14e adds r3, 6                                        |         r3 += 6;
    0x0001a150 ldr.w sl, [r5, r3, lsl 2]                         |         offset_2 = r3 << 2;
                                                                 |         sl = *((r5 + offset_2));
                                                                 | label_6:
    0x0001a154 movs r3, 1                                        |         r3 = 1;
    0x0001a156 str.w sl, [sp]                                    |         __asm ("str.w sl, [sp]");
    0x0001a15a add.w r2, r8, r3                                  |         r2 = r8 + r3;
    0x0001a15e str r3, [sp, 8]                                   |         var_8h = r3;
    0x0001a160 str r2, [sp, 4]                                   |         var_4h = r2;
    0x0001a162 movs r1, 0x30                                     |         r1 = 0x30;
    0x0001a164 ldr r2, [r7, 8]                                   |         r2 = *((r7 + 8));
    0x0001a166 mov r0, r4                                        |         r0 = r4;
    0x0001a168 bl 0x1977c                                        |         fcn_0001977c (r0, r1, r2, r3, r4, r5);
    0x0001a16c movs r3, 1                                        |         r3 = 1;
    0x0001a16e ldr r1, [r7, 8]                                   |         r1 = *((r7 + 8));
    0x0001a170 mov r2, r3                                        |         r2 = r3;
    0x0001a172 mov r0, r5                                        |         r0 = r5;
    0x0001a174 bl 0xaea0                                         |         fcn_0000aea0 (r0, r1, r2);
    0x0001a178 movs r3, 0                                        |         r3 = 0;
    0x0001a17a ldr.w r2, [r8, 4]                                 |         r2 = *((r8 + 4));
    0x0001a17c movs r0, 4                                        |         r0 = 4;
    0x0001a17e movs r1, 0x6c                                     |         r1 = 0x6c;
    0x0001a180 str r3, [sp]                                      |         *(sp) = r3;
    0x0001a182 mov r0, r4                                        |         r0 = r4;
    0x0001a184 mov r3, sl                                        |         r3 = sl;
    0x0001a186 bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0001a18a cmp.w sl, 0                                       |         
    0x0001a18e beq 0x1a0e0                                       |         
                                                                 |     } while (sl == 0);
    0x0001a190 ldrb r0, [r5, 0x13]                               |     r0 = *((r5 + 0x13));
    0x0001a192 cmp r0, 7                                         |     
                                                                 |     if (r0 > 7) {
    0x0001a194 bhi 0x1a0e0                                       |         goto label_1;
                                                                 |     }
    0x0001a196 add.w r3, r5, 0x74                                |     r3 = r5 + 0x74;
    0x0001a19a add.w r1, r5, 0x13c                               |     r1 = r5 + 0x13c;
                                                                 |     do {
    0x0001a19e ldr r2, [r3, 0xc]                                 |         r2 = *((r3 + 0xc));
    0x0001a1a0 cmp sl, r2                                        |         
                                                                 |         if (sl == r2) {
    0x0001a1a2 beq 0x1a246                                       |             goto label_22;
                                                                 |         }
    0x0001a1a4 adds r3, 0x14                                     |         r3 += 0x14;
    0x0001a1a6 cmp r1, r3                                        |         
    0x0001a1a8 bne 0x1a19e                                       |         
                                                                 |     } while (r1 != r3);
    0x0001a1aa adds r3, r0, 1                                    |     r3 = r0 + 1;
    0x0001a1ac adds r0, 6                                        |     r0 += 6;
    0x0001a1ae strb r3, [r5, 0x13]                               |     *((r5 + 0x13)) = r3;
    0x0001a1b0 str.w sl, [r5, r0, lsl 2]                         |     __asm ("str.w sl, [r5, r0, lsl 2]");
    0x0001a1b4 b 0x1a0e0                                         |     goto label_1;
    0x0001a1b6 ldr.w r2, [r8, 8]                                 |     r2 = *((r8 + 8));
                                                                 |     if (r2 == 0) {
    0x0001a1ba cbz r2, 0x1a202                                   |         goto label_27;
                                                                 |     }
    0x0001a1bc ldr.w r3, [r8, 0xc]                               |     r3 = *((r8 + 0xc));
                                                                 | label_4:
    0x0001a1c0 ldr r1, [r7, 8]                                   |     r1 = *((r7 + 8));
    0x0001a1c2 mov r0, r5                                        |     r0 = r5;
    0x0001a1c4 bl 0x18d88                                        |     fcn_00018d88 (r0, r1, r2, r3);
    0x0001a1c8 movs r3, 0                                        |     r3 = 0;
    0x0001a1ca ldr.w r2, [r8, 4]                                 |     r2 = *((r8 + 4));
    0x0001a1ce movs r1, 0x16                                     |     r1 = 0x16;
    0x0001a1d0 mov r0, r4                                        |     r0 = r4;
    0x0001a1d2 str r3, [sp]                                      |     *(sp) = r3;
    0x0001a1d4 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0001a1d8 ldr.w r2, [fp, 8]                                 |     r2 = *(arg_48h);
    0x0001a1dc cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0001a1de beq 0x1a0e8                                       |         goto label_2;
                                                                 |     }
                                                                 | label_23:
    0x0001a1e0 mov.w r3, -1                                      |     r3 = -1;
    0x0001a1e4 movs r1, 0x89                                     |     r1 = 0x89;
    0x0001a1e6 str r3, [sp]                                      |     *(sp) = r3;
    0x0001a1e8 mov r0, r4                                        |     r0 = r4;
    0x0001a1ea ldr r3, [sp, 0x4c]                                |     r3 = *(arg_ch);
    0x0001a1ec bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0001a1f0 b 0x1a0e8                                         |     goto label_2;
                                                                 | label_25:
    0x0001a1f2 orr.w r3, sl, r0                                  |     r3 = sl | r0;
    0x0001a1f6 uxtb r3, r3                                       |     r3 = (int8_t) r3;
                                                                 |     if (r3 != 0) {
    0x0001a1f8 cbz r3, 0x1a224                                   |         
    0x0001a1fa add sl, r0                                        |         sl += r0;
    0x0001a1fc uxtb.w r0, sl                                     |         r0 = (int8_t) sl;
    0x0001a200 b 0x1a13e                                         |         goto label_3;
                                                                 | label_27:
    0x0001a202 ldrd r1, r2, [r5, 0x38]                           |         __asm ("ldrd r1, r2, [r5, 0x38]");
    0x0001a206 ldr r3, [r7, 0xc]                                 |         r3 = *((r7 + 0xc));
    0x0001a208 cmp r3, r1                                        |         
    0x0001a20a iteee gt                                          |         
                                                                 |         if (r3 <= r1) {
    0x0001a20c ldrgt r1, [r5, 0x48]                              |             r1 = *((r5 + 0x48));
                                                                 |         }
                                                                 |         if (r3 > r1) {
    0x0001a20e suble r1, r1, r3                                  |             r1 -= r3;
                                                                 |         }
                                                                 |         if (r3 > r1) {
    0x0001a210 strle r1, [r5, 0x38]                              |             *((r5 + 0x38)) = r1;
                                                                 |         }
                                                                 |         if (r3 > r1) {
    0x0001a212 addle r1, r3, r2                                  |             r1 = r3 + r2;
                                                                 |         }
    0x0001a214 iteee le                                          |         
                                                                 |         if (r3 > r1) {
    0x0001a216 strle r1, [r5, 0x3c]                              |             *((r5 + 0x3c)) = r1;
                                                                 |         }
                                                                 |         if (r3 <= r1) {
    0x0001a218 addgt r2, r1, 1                                   |             r2 = r1 + 1;
                                                                 |         }
                                                                 |         if (r3 <= r1) {
    0x0001a21a addgt r1, r1, r3                                  |             r1 += r3;
                                                                 |         }
                                                                 |         if (r3 <= r1) {
    0x0001a21c strgt r1, [r5, 0x48]                              |             *((r5 + 0x48)) = r1;
                                                                 |         }
    0x0001a21e strd r2, r3, [r8, 8]                              |         __asm ("strd r2, r3, [r8, 8]");
    0x0001a222 b 0x1a1c0                                         |         goto label_4;
                                                                 |     }
    0x0001a224 movs r0, 0x62                                     |     r0 = 0x62;
    0x0001a226 b 0x1a13e                                         |     goto label_3;
                                                                 | label_18:
    0x0001a228 ldr r3, [r5, 0x48]                                |     r3 = *((r5 + 0x48));
    0x0001a22a adds r3, 1                                        |     r3++;
    0x0001a22c mov sl, r3                                        |     sl = r3;
    0x0001a22e str r3, [sp, 0x14]                                |     var_14h = r3;
                                                                 | label_8:
    0x0001a230 add.w sl, sl, 1                                   |     sl++;
    0x0001a234 str.w sl, [r5, 0x48]                              |     __asm ("str.w sl, [r5, 0x48]");
    0x0001a238 b 0x1a02c                                         |     goto label_5;
                                                                 | label_26:
    0x0001a23a ldr r3, [r5, 0x48]                                |     r3 = *((r5 + 0x48));
    0x0001a23c add.w sl, r3, 1                                   |     sl = r3 + 1;
    0x0001a240 str.w sl, [r5, 0x48]                              |     __asm ("str.w sl, [r5, 0x48]");
    0x0001a244 b 0x1a154                                         |     goto label_6;
                                                                 | label_22:
    0x0001a246 movs r2, 1                                        |     r2 = 1;
    0x0001a248 strb r2, [r3, 6]                                  |     *((r3 + 6)) = r2;
    0x0001a24a b 0x1a0e0                                         |     goto label_1;
                                                                 | label_21:
    0x0001a24c movs r1, 1                                        |     r1 = 1;
    0x0001a24e strb r1, [r2, 6]                                  |     *((r2 + 6)) = r1;
    0x0001a250 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x0001a252 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0001a254 bne.w 0x1a0b0                                     |         goto label_7;
                                                                 |     }
    0x0001a258 b 0x1a0e0                                         |     goto label_1;
                                                                 | label_19:
    0x0001a25a ldr.w sl, [r5, 0x48]                              |     sl = *((r5 + 0x48));
    0x0001a25e b 0x1a230                                         |     goto label_8;
                                                                 | label_17:
    0x0001a260 movs r3, 0                                        |     r3 = 0;
    0x0001a262 movs r1, 0x23                                     |     r1 = 0x23;
    0x0001a264 str r3, [sp]                                      |     *(sp) = r3;
    0x0001a266 mov r0, r4                                        |     r0 = r4;
    0x0001a268 ldr r2, [r7, 8]                                   |     r2 = *((r7 + 8));
    0x0001a26a ldr r3, [r7, 0xc]                                 |     r3 = *((r7 + 0xc));
    0x0001a26c bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0001a270 ldrd r1, r2, [r7, 8]                              |     __asm ("ldrd r1, r2, [r7, 8]");
    0x0001a274 mov r0, r5                                        |     r0 = r5;
    0x0001a276 bl 0xaea0                                         |     fcn_0000aea0 (r0, r1, r2);
    0x0001a27a b 0x1a0e0                                         |     goto label_1;
                                                                 | label_13:
    0x000228e4 add sp, 0x74                                      |     
    0x000228e6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_9:
    0x000229f8 ldr.w r0, [sl, 0x18]                              |     r0 = *((sl + 0x18));
    0x000229fc bl 0x19ed0                                        |     fcn_00019ed0 (r0);
    0x00022a00 lsls r1, r7, 2                                    |     r1 = r7 << 2;
    0x00022a02 str r0, [sp, 0x50]                                |     *(arg_50h) = r0;
    0x00022a04 ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x00022a06 bl 0xd3a0                                         |     fcn_0000d3a0 (r0, r1);
    0x00022a0a str r0, [sp, 0x54]                                |     *(arg_54h) = r0;
    0x00022a0c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00022a0e bne.w 0x22c16                                     |         goto label_28;
                                                                 |     }
                                                                 |     do {
                                                                 | label_10:
    0x00022a12 ldr r5, [r5, 0x14]                                |         r5 = *((r5 + 0x14));
    0x00022a14 cmp r5, 0                                         |         
                                                                 |         if (r5 == 0) {
    0x00022a16 beq.w 0x22d74                                     |             goto label_29;
                                                                 |         }
    0x00022a1a ldr r3, [sp, 0x40]                                |         r3 = *(arg_40h);
    0x00022a1c ldr r2, [sp, 0x20]                                |         r2 = var_20h;
    0x00022a1e cmp r2, r5                                        |         
    0x00022a20 ite eq                                            |         
                                                                 |         if (r2 != r5) {
    0x00022a22 moveq r3, 0                                       |             r3 = 0;
                                                                 |         }
                                                                 |         if (r2 == r5) {
    0x00022a24 andne r3, r3, 1                                   |             r3 &= 1;
                                                                 |         }
    0x00022a28 cmp r3, 0                                         |         
    0x00022a2a bne 0x22a12                                       |         
                                                                 |     } while (r3 != 0);
    0x00022a2c ldr r3, [r5, 0x24]                                |     r3 = *((r5 + 0x24));
    0x00022a2e cmp r3, 0                                         |     
    0x00022a30 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00022a32 it eq                                             |     
                                                                 |     if (r3 != 0) {
    0x00022a34 moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00022a36 str r3, [sp, 0x34]                                |     var_34h = r3;
    0x00022a38 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00022a3a ldrb.w r2, [r3, 0x2c]                             |     r2 = *((r3 + 0x2c));
    0x00022a3e ldrb.w r3, [r5, 0x37]                             |     r3 = *((r5 + 0x37));
    0x00022a42 lsls r2, r2, 0x1a                                 |     r2 <<= 0x1a;
                                                                 |     if (r2 < r2) {
    0x00022a44 bpl 0x22a50                                       |         
    0x00022a46 and r2, r3, 3                                     |         r2 = r3 & 3;
    0x00022a4a cmp r2, 2                                         |         
                                                                 |         if (r2 == 2) {
    0x00022a4c beq.w 0x22d6a                                     |             goto label_30;
                                                                 |         }
                                                                 |     }
    0x00022a50 lsls r3, r3, 0x1c                                 |     r3 <<= 0x1c;
    0x00022a52 ldrh r6, [r5, 0x34]                               |     r6 = *((r5 + 0x34));
    0x00022a54 it mi                                             |     
                                                                 |     if (r3 < r3) {
    0x00022a56 ldrhmi r7, [r5, 0x32]                             |         __asm ("ldrhmi r7, [r5, 0x32]");
                                                                 |     }
    0x00022a58 ldr r2, [r5]                                      |     r2 = *(r5);
    0x00022a5a ite pl                                            |     
                                                                 |     if (r3 < r3) {
    0x00022a5c addpl r7, r6, -1                                  |         r7 = r6 + -1;
                                                                 |     }
                                                                 |     if (r3 < r3) {
    0x00022a60 add.w r7, r7, -1                                  |         r7 += -1;
                                                                 |     }
                                                                 | label_12:
    0x00022a64 movs r4, 0                                        |     r4 = 0;
    0x00022a66 ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x00022a68 movs r1, 0x61                                     |     r1 = 0x61;
    0x00022a6a str r2, [sp, 4]                                   |     var_4h = r2;
    0x00022a6c mov r0, sl                                        |     r0 = sl;
    0x00022a6e mov r2, r4                                        |     r2 = r4;
    0x00022a70 str r4, [sp, 8]                                   |     var_8h = r4;
    0x00022a72 str r4, [sp]                                      |     *(sp) = r4;
    0x00022a74 bl 0x1977c                                        |     fcn_0001977c (r0, r1, r2, r3, r4, r5);
    0x00022a78 ldr r0, [sp, 0x10]                                |     r0 = var_10h;
    0x00022a7a ldr r1, [sp, 0x4c]                                |     r1 = *(arg_ch);
    0x00022a7c ldr r3, [r5, 0x2c]                                |     r3 = *((r5 + 0x2c));
    0x00022a7e ldr r2, [r0, 0x48]                                |     r2 = *((r0 + 0x48));
    0x00022a80 str r1, [sp]                                      |     *(sp) = r1;
    0x00022a82 ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x00022a84 adds r1, r7, r1                                   |     r1 = r7 + r1;
    0x00022a86 cmp r2, r1                                        |     
    0x00022a88 it lt                                             |     
                                                                 |     if (r2 >= r1) {
    0x00022a8a movlt r2, r1                                      |         r2 = r1;
                                                                 |     }
    0x00022a8c movs r1, 0x35                                     |     r1 = 0x35;
    0x00022a8e str r2, [r0, 0x48]                                |     *((r0 + 0x48)) = r2;
    0x00022a90 mov r2, r8                                        |     r2 = r8;
    0x00022a92 mov r0, sl                                        |     r0 = sl;
    0x00022a94 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00022a98 ldr r0, [sp, 0x10]                                |     r0 = var_10h;
    0x00022a9a mov r1, r5                                        |     r1 = r5;
    0x00022a9c bl 0x220e4                                        |     fcn_000220e4 (r0, r1);
    0x00022aa0 mov r2, r6                                        |     r2 = r6;
    0x00022aa2 mov r3, fp                                        |     r3 = fp;
    0x00022aa4 movs r1, 0x19                                     |     r1 = 0x19;
    0x00022aa6 mov r0, sl                                        |     r0 = sl;
    0x00022aa8 str r4, [sp]                                      |     *(sp) = r4;
    0x00022aaa bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00022aae ldrh r2, [r5, 0x32]                               |     r2 = *((r5 + 0x32));
    0x00022ab0 mov r3, sb                                        |     r3 = sb;
    0x00022ab2 movs r1, 0x19                                     |     r1 = 0x19;
    0x00022ab4 mov r0, sl                                        |     r0 = sl;
    0x00022ab6 str r4, [sp]                                      |     *(sp) = r4;
    0x00022ab8 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00022abc ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00022abe mov r2, r4                                        |     r2 = r4;
    0x00022ac0 movs r1, 1                                        |     r1 = 1;
    0x00022ac2 mov r0, sl                                        |     r0 = sl;
    0x00022ac4 str r3, [sp]                                      |     *(sp) = r3;
    0x00022ac6 mov r3, fp                                        |     r3 = fp;
    0x00022ac8 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00022acc mvn r3, 4                                         |     r3 = ~4;
    0x00022ad0 ldr r2, [sp, 0x48]                                |     r2 = *(arg_48h);
    0x00022ad2 mov.w r1, -1                                      |     r1 = -1;
    0x00022ad4 adds r1, 0xff                                     |     r1 += 0xff;
    0x00022ad6 mov r0, sl                                        |     r0 = sl;
    0x00022ad8 bl 0x1021c                                        |     fcn_0001021c (r0, r1, r2, r3);
    0x00022adc ldr.w r3, [sl, 4]                                 |     r3 = *((sl + 4));
                                                                 |     if (r3 != 0) {
    0x00022ae0 cbz r3, 0x22af4                                   |         
    0x00022ae2 ldr.w r2, [sl, 0x20]                              |         r2 = *((sl + 0x20));
    0x00022ae6 add.w r2, r2, r2, lsl 2                           |         r2 += (r2 << 2);
    0x00022aea add.w r3, r3, r2, lsl 2                           |         r3 += (r2 << 2);
    0x00022aee movs r2, 2                                        |         r2 = 2;
    0x00022af0 strb r2, [r3, -0x11]                              |         *((r3 - 0x11)) = r2;
                                                                 |     }
    0x00022af4 movs r4, 0                                        |     r4 = 0;
    0x00022af6 mov r2, r8                                        |     r2 = r8;
    0x00022af8 mov r3, r4                                        |     r3 = r4;
    0x00022afa movs r1, 0x6a                                     |     r1 = 0x6a;
    0x00022afc mov r0, sl                                        |     r0 = sl;
    0x00022afe str r4, [sp]                                      |     *(sp) = r4;
    0x00022b00 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00022b04 mov r3, fp                                        |     r3 = fp;
    0x00022b06 str r0, [sp, 0x3c]                                |     var_3ch = r0;
    0x00022b08 mov r2, r4                                        |     r2 = r4;
    0x00022b0a movs r1, 0x19                                     |     r1 = 0x19;
    0x00022b0c mov r0, sl                                        |     r0 = sl;
    0x00022b0e str r4, [sp]                                      |     *(sp) = r4;
    0x00022b10 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00022b14 ldr.w r3, [sl, 0x20]                              |     r3 = *((sl + 0x20));
    0x00022b18 cmp r7, r4                                        |     
    0x00022b1a str r3, [sp, 0x38]                                |     var_38h = r3;
                                                                 |     if (r7 > r4) {
    0x00022b1c bgt.w 0x229f8                                     |         goto label_9;
                                                                 |     }
                                                                 | label_11:
    0x00022b20 movs r2, 1                                        |     r2 = 1;
    0x00022b22 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00022b24 mov r1, r2                                        |     r1 = r2;
    0x00022b26 mov r0, sl                                        |     r0 = sl;
    0x00022b28 str.w sb, [sp]                                    |     __asm ("str.w sb, [sp]");
    0x00022b2c bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00022b30 ldr r2, [sp, 0x60]                                |     r2 = *(arg_60h);
    0x00022b32 mvn r3, 4                                         |     r3 = ~4;
    0x00022b36 mov.w r1, -1                                      |     r1 = -1;
    0x00022b3a mov r0, sl                                        |     r0 = sl;
    0x00022b3c add.w r2, r2, 0x2b8                               |     r2 += 0x2b8;
    0x00022b40 bl 0x1021c                                        |     fcn_0001021c (r0, r1, r2, r3);
    0x00022b44 ldr.w r3, [sl, 4]                                 |     r3 = *((sl + 4));
                                                                 |     if (r3 != 0) {
    0x00022b48 cbz r3, 0x22b5c                                   |         
    0x00022b4a ldr.w r2, [sl, 0x20]                              |         r2 = *((sl + 0x20));
    0x00022b4e add.w r2, r2, r2, lsl 2                           |         r2 += (r2 << 2);
    0x00022b52 add.w r3, r3, r2, lsl 2                           |         r3 += (r2 << 2);
    0x00022b56 movs r2, 2                                        |         r2 = 2;
    0x00022b58 strb r2, [r3, -0x11]                              |         *((r3 - 0x11)) = r2;
                                                                 |     }
    0x00022b5c movs r4, 0                                        |     r4 = 0;
    0x00022b5e ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x00022b60 mov r2, r8                                        |     r2 = r8;
    0x00022b62 movs r1, 9                                        |     r1 = 9;
    0x00022b64 mov r0, sl                                        |     r0 = sl;
    0x00022b66 str r4, [sp]                                      |     *(sp) = r4;
    0x00022b68 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00022b6c ldr r3, [sp, 0x5c]                                |     r3 = *(arg_5ch);
    0x00022b6e mov r2, r4                                        |     r2 = r4;
    0x00022b70 movs r1, 1                                        |     r1 = 1;
    0x00022b72 mov r0, sl                                        |     r0 = sl;
    0x00022b74 str r3, [sp]                                      |     *(sp) = r3;
    0x00022b76 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00022b78 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00022b7c mvn r3, 4                                         |     r3 = ~4;
    0x00022b80 ldr r2, [sp, 0x64]                                |     r2 = *(arg_64h);
    0x00022b82 mov.w r1, -1                                      |     r1 = -1;
    0x00022b86 mov r0, sl                                        |     r0 = sl;
    0x00022b88 bl 0x1021c                                        |     fcn_0001021c (r0, r1, r2, r3);
    0x00022b8c ldr.w r3, [sl, 4]                                 |     r3 = *((sl + 4));
                                                                 |     if (r3 != 0) {
    0x00022b90 cbz r3, 0x22ba4                                   |         
    0x00022b92 ldr.w r2, [sl, 0x20]                              |         r2 = *((sl + 0x20));
    0x00022b96 add.w r2, r2, r2, lsl 2                           |         r2 += (r2 << 2);
    0x00022b9a add.w r3, r3, r2, lsl 2                           |         r3 += (r2 << 2);
    0x00022b9e movs r2, 1                                        |         r2 = 1;
    0x00022ba0 strb r2, [r3, -0x11]                              |         *((r3 - 0x11)) = r2;
                                                                 |     }
    0x00022ba4 ldr r3, [sp, 0x68]                                |     r3 = *(arg_68h);
    0x00022ba6 movs r4, 0                                        |     r4 = 0;
    0x00022ba8 ldr r2, [sp, 0x58]                                |     r2 = *(arg_58h);
    0x00022baa movs r1, 0x30                                     |     r1 = 0x30;
    0x00022bac str r4, [sp, 8]                                   |     var_8h = r4;
    0x00022bae mov r0, sl                                        |     r0 = sl;
    0x00022bb0 strd sb, r3, [sp]                                 |     __asm ("strd sb, r3, [sp]");
    0x00022bb4 movs r3, 3                                        |     r3 = 3;
    0x00022bb6 bl 0x1977c                                        |     fcn_0001977c (r0, r1, r2, r3, r4, r5);
    0x00022bba str r4, [sp]                                      |     *(sp) = r4;
    0x00022bbc movs r1, 0x46                                     |     r1 = 0x46;
    0x00022bbe ldr r4, [sp, 0x30]                                |     r4 = var_30h;
    0x00022bc0 mov r0, sl                                        |     r0 = sl;
    0x00022bc2 ldr r3, [sp, 0x98]                                |     r3 = *(arg_98h);
    0x00022bc4 mov r2, r4                                        |     r2 = r4;
    0x00022bc6 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00022bca ldr r3, [sp, 0x98]                                |     r3 = *(arg_98h);
    0x00022bcc movs r1, 0x49                                     |     r1 = 0x49;
    0x00022bce mov r2, r4                                        |     r2 = r4;
    0x00022bd0 mov r0, sl                                        |     r0 = sl;
    0x00022bd2 str r3, [sp]                                      |     *(sp) = r3;
    0x00022bd4 mov r3, sb                                        |     r3 = sb;
    0x00022bd6 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00022bda ldr.w r1, [sl, 4]                                 |     r1 = *((sl + 4));
    0x00022bde ldr.w r3, [sl, 0x20]                              |     r3 = *((sl + 0x20));
                                                                 |     if (r1 != 0) {
    0x00022be2 cbz r1, 0x22bf2                                   |         
    0x00022be4 add.w r2, r3, r3, lsl 2                           |         r2 = r3 + (r3 << 2);
    0x00022be8 movs r0, 8                                        |         r0 = 8;
    0x00022bea add.w r2, r1, r2, lsl 2                           |         r2 = r1 + (r2 << 2);
    0x00022bee strb r0, [r2, -0x11]                              |         *((r2 - 0x11)) = r0;
                                                                 |     }
    0x00022bf2 ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x00022bf4 cmp r2, r3                                        |     
    0x00022bf6 itt lo                                            |     
                                                                 |     if (r2 >= r3) {
    0x00022bf8 addlo r2, r2, r2, lsl 2                           |         r2 += (r2 << 2);
                                                                 |     }
                                                                 |     if (r2 < r3) {
    0x00022bfc add.w r1, r1, r2, lsl 2                           |         r1 += (r2 << 2);
                                                                 |     }
    0x00022c00 ldr.w r2, [sl, 0x18]                              |     r2 = *((sl + 0x18));
    0x00022c04 it lo                                             |     
                                                                 |     if (r2 >= r3) {
    0x00022c06 strlo r3, [r1, 8]                                 |         *((r1 + 8)) = r3;
                                                                 |     }
    0x00022c08 subs r3, 1                                        |     r3--;
    0x00022c0a str r3, [r2, 0x58]                                |     *((r2 + 0x58)) = r3;
    0x00022c0c b 0x22a12                                         |     goto label_10;
                                                                 | label_28:
    0x00022c16 movs r1, 0x10                                     |     r1 = 0x10;
    0x00022c18 mov r0, sl                                        |     r0 = sl;
    0x00022c1a bl 0x1973c                                        |     fcn_0001973c (r0, r1);
    0x00022c1e ldr.w r3, [sl, 0x20]                              |     r3 = *((sl + 0x20));
    0x00022c22 cmp r7, 1                                         |     
    0x00022c24 str r3, [sp, 0x38]                                |     var_38h = r3;
                                                                 |     if (r7 == 1) {
    0x00022c26 beq.w 0x22e24                                     |         goto label_31;
                                                                 |     }
                                                                 | label_14:
    0x00022c2a ldr r3, [sp, 0x54]                                |     r3 = *(arg_54h);
    0x00022c2c mov r6, sb                                        |     r6 = sb;
    0x00022c2e movs r4, 0                                        |     r4 = 0;
    0x00022c30 str r7, [sp, 0x28]                                |     var_28h = r7;
    0x00022c32 subs r3, 4                                        |     r3 -= 4;
    0x00022c34 mov sb, r3                                        |     sb = r3;
    0x00022c36 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00022c38 b 0x22c3c                                         |     
                                                                 |     while (r2 != r3) {
    0x00022c3a mov r4, r3                                        |         r4 = r3;
    0x00022c3c ldr r3, [r5, 0x20]                                |         r3 = *((r5 + 0x20));
    0x00022c3e ldr r0, [sp, 0x10]                                |         r0 = var_10h;
    0x00022c40 ldr.w r1, [r3, r4, lsl 2]                         |         offset_3 = r4 << 2;
                                                                 |         r1 = *((r3 + offset_3));
    0x00022c44 bl 0x21fac                                        |         fcn_00021fac (r0, r1);
    0x00022c48 movs r3, 0                                        |         r3 = 0;
    0x00022c4a mov r7, r0                                        |         r7 = r0;
    0x00022c4c mov r2, r4                                        |         r2 = r4;
    0x00022c4e movs r1, 0x19                                     |         r1 = 0x19;
    0x00022c50 str r3, [sp]                                      |         *(sp) = r3;
    0x00022c52 mov r0, sl                                        |         r0 = sl;
    0x00022c54 mov r3, fp                                        |         r3 = fp;
    0x00022c56 bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00022c5a mov r3, r4                                        |         r3 = r4;
    0x00022c5c mov r2, r8                                        |         r2 = r8;
    0x00022c5e movs r1, 0x2e                                     |         r1 = 0x2e;
    0x00022c60 mov r0, sl                                        |         r0 = sl;
    0x00022c62 str r6, [sp]                                      |         *(sp) = r6;
    0x00022c64 bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00022c68 ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x00022c6a mov r2, r6                                        |         r2 = r6;
    0x00022c6c movs r1, 0x4e                                     |         r1 = 0x4e;
    0x00022c6e mov r0, sl                                        |         r0 = sl;
    0x00022c70 str r7, [sp, 4]                                   |         var_4h = r7;
    0x00022c72 add r3, r4                                        |         r3 += r4;
    0x00022c74 str r3, [sp]                                      |         *(sp) = r3;
    0x00022c76 mvn r3, 3                                         |         r3 = ~3;
    0x00022c7a str r3, [sp, 8]                                   |         var_8h = r3;
    0x00022c7c movs r3, 0                                        |         r3 = 0;
    0x00022c7e bl 0x1977c                                        |         fcn_0001977c (r0, r1, r2, r3, r4, r5);
    0x00022c82 ldr.w r3, [sl, 4]                                 |         r3 = *((sl + 4));
    0x00022c86 str r0, [sb, 4]!                                  |         *((sb += 4)) = r0;
                                                                 |         if (r3 != 0) {
    0x00022c8a cbz r3, 0x22c9e                                   |             
    0x00022c8c ldr.w r2, [sl, 0x20]                              |             r2 = *((sl + 0x20));
    0x00022c90 add.w r2, r2, r2, lsl 2                           |             r2 += (r2 << 2);
    0x00022c94 add.w r3, r3, r2, lsl 2                           |             r3 += (r2 << 2);
    0x00022c98 movs r2, 0x80                                     |             r2 = 0x80;
    0x00022c9a strb r2, [r3, -0x11]                              |             *((r3 - 0x11)) = r2;
                                                                 |         }
    0x00022c9e ldr r2, [sp, 0x28]                                |         r2 = var_28h;
    0x00022ca0 adds r3, r4, 1                                    |         r3 = r4 + 1;
    0x00022ca2 cmp r2, r3                                        |         
    0x00022ca4 bne 0x22c3a                                       |         
                                                                 |     }
    0x00022ca6 mov sb, r6                                        |     sb = r6;
    0x00022ca8 movs r6, 0                                        |     r6 = 0;
    0x00022caa mov r3, fp                                        |     r3 = fp;
    0x00022cac movs r1, 0x19                                     |     r1 = 0x19;
    0x00022cae str r6, [sp]                                      |     *(sp) = r6;
    0x00022cb0 mov r0, sl                                        |     r0 = sl;
    0x00022cb2 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00022cb6 movs r1, 0x10                                     |     r1 = 0x10;
    0x00022cb8 mov r2, r6                                        |     r2 = r6;
    0x00022cba ldr r3, [sp, 0x50]                                |     r3 = *(arg_50h);
    0x00022cbc mov r0, sl                                        |     r0 = sl;
    0x00022cbe str r6, [sp]                                      |     *(sp) = r6;
    0x00022cc0 movs r6, 0                                        |     r6 = 0;
    0x00022cc2 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00022cc6 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x00022cc8 ldr.w r2, [sl, 0x20]                              |     r2 = *((sl + 0x20));
    0x00022ccc str r5, [sp, 0x28]                                |     var_28h = r5;
    0x00022cce subs r3, 1                                        |     r3--;
    0x00022cd0 ldr r5, [sp, 0x14]                                |     r5 = var_14h;
    0x00022cd2 cmp r3, r2                                        |     
    0x00022cd4 add.w r7, r2, -1                                  |     r7 = r2 + -1;
    0x00022cd8 itt lo                                            |     
                                                                 |     if (r3 >= r2) {
    0x00022cda ldrlo r1, [sl, 4]                                 |         r1 = *((sl + 4));
                                                                 |     }
                                                                 |     if (r3 < r2) {
    0x00022cde add.w r3, r3, r3, lsl 2                           |         r3 += (r3 << 2);
                                                                 |     }
    0x00022ce2 mov r0, r2                                        |     r0 = r2;
    0x00022ce4 itt lo                                            |     
                                                                 |     if (r3 >= r2) {
    0x00022ce6 addlo r1, r1, r3, lsl 2                           |         r1 += (r3 << 2);
                                                                 |     }
                                                                 |     if (r3 < r2) {
    0x00022cea str r2, [r1, 8]                                   |         *((r1 + 8)) = r2;
                                                                 |     }
    0x00022cec mov r2, r7                                        |     r2 = r7;
    0x00022cee ldr.w r1, [sl, 0x18]                              |     r1 = *((sl + 0x18));
    0x00022cf2 str r7, [r1, 0x58]                                |     *((r1 + 0x58)) = r7;
    0x00022cf4 mov r7, r4                                        |     r7 = r4;
    0x00022cf6 b 0x22d02                                         |     
                                                                 |     while (r7 != r6) {
    0x00022cf8 ldr.w r0, [sl, 0x20]                              |         r0 = *((sl + 0x20));
    0x00022cfc ldr.w r1, [sl, 0x18]                              |         r1 = *((sl + 0x18));
    0x00022d00 subs r2, r0, 1                                    |         r2 = r0 - 1;
    0x00022d02 ldr r4, [sp, 0x1c]                                |         r4 = var_1ch;
    0x00022d04 ldr r3, [r4, 4]!                                  |         r3 = *((r4 += 4));
    0x00022d08 cmp r3, r0                                        |         
    0x00022d0a str r4, [sp, 0x1c]                                |         var_1ch = r4;
    0x00022d0c it lo                                             |         
                                                                 |         if (r3 >= r0) {
    0x00022d0e ldrlo r4, [sl, 4]                                 |             r4 = *((sl + 4));
                                                                 |         }
    0x00022d12 add.w r3, r3, r3, lsl 2                           |         r3 += (r3 << 2);
    0x00022d16 itt lo                                            |         
                                                                 |         if (r3 >= r0) {
    0x00022d18 addlo r3, r4, r3, lsl 2                           |             r3 = r4 + (r3 << 2);
                                                                 |         }
                                                                 |         if (r3 < r0) {
    0x00022d1c str r0, [r3, 8]                                   |             *((r3 + 8)) = r0;
                                                                 |         }
    0x00022d1e mov r3, r6                                        |         r3 = r6;
    0x00022d20 str r2, [r1, 0x58]                                |         *((r1 + 0x58)) = r2;
    0x00022d22 adds r1, r6, r5                                   |         r1 = r6 + r5;
    0x00022d24 str r1, [sp]                                      |         *(sp) = r1;
    0x00022d26 mov r2, r8                                        |         r2 = r8;
    0x00022d28 movs r1, 0x2e                                     |         r1 = 0x2e;
    0x00022d2a mov r0, sl                                        |         r0 = sl;
    0x00022d2c bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00022d30 cmp r7, r6                                        |         
    0x00022d32 add.w r3, r6, 1                                   |         r3 = r6 + 1;
    0x00022d36 mov r6, r3                                        |         r6 = r3;
    0x00022d38 bne 0x22cf8                                       |         
                                                                 |     }
    0x00022d3a ldr r3, [sp, 0x50]                                |     r3 = *(arg_50h);
    0x00022d3c ldr r5, [sp, 0x28]                                |     r5 = var_28h;
    0x00022d3e ldr.w r2, [sl, 0x18]                              |     r2 = *((sl + 0x18));
    0x00022d42 mvns r3, r3                                       |     r3 = ~r3;
                                                                 |     if (r3 >= r3) {
    0x00022d44 bmi 0x22d52                                       |         
    0x00022d46 ldr r1, [r2, 0x70]                                |         r1 = *((r2 + 0x70));
                                                                 |         if (r1 == 0) {
    0x00022d48 cbz r1, 0x22d52                                   |             goto label_32;
                                                                 |         }
    0x00022d4a ldr.w r0, [sl, 0x20]                              |         r0 = *((sl + 0x20));
    0x00022d4e str.w r0, [r1, r3, lsl 2]                         |         __asm ("str.w r0, [r1, r3, lsl 2]");
                                                                 |     }
                                                                 | label_32:
    0x00022d52 ldr.w r3, [sl, 0x20]                              |     r3 = *((sl + 0x20));
    0x00022d56 ldr r1, [sp, 0x54]                                |     r1 = *(arg_54h);
    0x00022d58 ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x00022d5a subs r3, 1                                        |     r3--;
    0x00022d5c str r3, [r2, 0x58]                                |     *((r2 + 0x58)) = r3;
    0x00022d5e bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x00022d62 b 0x22b20                                         |     goto label_11;
                                                                 | label_30:
    0x00022d6a ldrh r6, [r5, 0x32]                               |     r6 = *((r5 + 0x32));
    0x00022d6c ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00022d6e subs r7, r6, 1                                    |     r7 = r6 - 1;
    0x00022d70 ldr r2, [r3]                                      |     r2 = *(r3);
    0x00022d72 b 0x22a64                                         |     goto label_12;
                                                                 | label_29:
    0x00022d74 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00022d76 and r3, r3, 1                                     |     r3 &= 1;
    0x00022d7a ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00022d7c cmp r2, 0                                         |     
    0x00022d7e ite ne                                            |     
                                                                 |     if (r2 == 0) {
    0x00022d80 movne r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r2 != 0) {
    0x00022d82 andeq r3, r3, 1                                   |         r3 &= 1;
                                                                 |     }
    0x00022d86 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00022d88 beq.w 0x228e4                                     |         goto label_13;
                                                                 |     }
    0x00022d8c ldr r5, [sp, 0x5c]                                |     r5 = *(arg_5ch);
    0x00022d8e movs r4, 0                                        |     r4 = 0;
    0x00022d90 ldr r2, [sp, 0x9c]                                |     r2 = *(arg_9ch);
    0x00022d92 movs r1, 0x31                                     |     r1 = 0x31;
    0x00022d94 str r4, [sp]                                      |     *(sp) = r4;
    0x00022d96 mov r0, sl                                        |     r0 = sl;
    0x00022d98 mov r3, r5                                        |     r3 = r5;
    0x00022d9a bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00022d9e mov r2, r5                                        |     r2 = r5;
    0x00022da0 mov r3, r4                                        |     r3 = r4;
    0x00022da2 movs r1, 0x2d                                     |     r1 = 0x2d;
    0x00022da4 str r4, [sp]                                      |     *(sp) = r4;
    0x00022da6 mov r0, sl                                        |     r0 = sl;
    0x00022da8 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00022dac mov r2, r4                                        |     r2 = r4;
    0x00022dae ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x00022db0 movs r1, 0x1c                                     |     r1 = 0x1c;
    0x00022db2 str r4, [sp]                                      |     *(sp) = r4;
    0x00022db4 mov r5, r0                                        |     r5 = r0;
    0x00022db6 mov r0, sl                                        |     r0 = sl;
    0x00022db8 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00022dbc ldr r3, [pc, 0xb4]                                |     
    0x00022dbe movs r1, 0x30                                     |     r1 = 0x30;
    0x00022dc0 ldr r6, [sp, 0x6c]                                |     r6 = *(arg_6ch);
    0x00022dc2 mov r0, sl                                        |     r0 = sl;
    0x00022dc4 ldr r2, [sp, 0x58]                                |     r2 = *(arg_58h);
    0x00022dc6 add r3, pc                                        |     r3 = 0x45c3e;
    0x00022dc8 str r4, [sp, 8]                                   |     var_8h = r4;
    0x00022dca str r3, [sp, 4]                                   |     var_4h = r3;
    0x00022dcc movs r3, 3                                        |     r3 = 3;
    0x00022dce str r6, [sp]                                      |     *(sp) = r6;
    0x00022dd0 bl 0x1977c                                        |     fcn_0001977c (r0, r1, r2, r3, r4, r5);
    0x00022dd4 str r4, [sp]                                      |     *(sp) = r4;
    0x00022dd6 movs r1, 0x46                                     |     r1 = 0x46;
    0x00022dd8 ldr r4, [sp, 0x30]                                |     r4 = var_30h;
    0x00022dda mov r0, sl                                        |     r0 = sl;
    0x00022ddc ldr r3, [sp, 0x98]                                |     r3 = *(arg_98h);
    0x00022dde mov r2, r4                                        |     r2 = r4;
    0x00022de0 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00022de4 ldr r1, [sp, 0x98]                                |     r1 = *(arg_98h);
    0x00022de6 mov r3, r6                                        |     r3 = r6;
    0x00022de8 mov r2, r4                                        |     r2 = r4;
    0x00022dea mov r0, sl                                        |     r0 = sl;
    0x00022dec str r1, [sp]                                      |     *(sp) = r1;
    0x00022dee movs r1, 0x49                                     |     r1 = 0x49;
    0x00022df0 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00022df4 ldr.w r2, [sl, 4]                                 |     r2 = *((sl + 4));
    0x00022df8 ldr.w r3, [sl, 0x20]                              |     r3 = *((sl + 0x20));
                                                                 |     if (r2 != 0) {
    0x00022dfc cbz r2, 0x22e0c                                   |         
    0x00022dfe add.w r1, r3, r3, lsl 2                           |         r1 = r3 + (r3 << 2);
    0x00022e02 movs r0, 8                                        |         r0 = 8;
    0x00022e04 add.w r1, r2, r1, lsl 2                           |         r1 = r2 + (r1 << 2);
    0x00022e08 strb r0, [r1, -0x11]                              |         *((r1 - 0x11)) = r0;
                                                                 |     }
    0x00022e0c cmp r5, r3                                        |     
    0x00022e0e ittt lo                                           |     
                                                                 |     if (r5 >= r3) {
    0x00022e10 addlo r5, r5, r5, lsl 2                           |         r5 += (r5 << 2);
                                                                 |     }
                                                                 |     if (r5 >= r3) {
    0x00022e14 addlo r2, r2, r5, lsl 2                           |         r2 += (r5 << 2);
                                                                 |     }
                                                                 |     if (r5 < r3) {
    0x00022e18 str r3, [r2, 8]                                   |         *((r2 + 8)) = r3;
                                                                 |     }
    0x00022e1a subs r3, 1                                        |     r3--;
    0x00022e1c ldr.w r2, [sl, 0x18]                              |     r2 = *((sl + 0x18));
    0x00022e20 str r3, [r2, 0x58]                                |     *((r2 + 0x58)) = r3;
    0x00022e22 b 0x228e4                                         |     goto label_13;
                                                                 | label_31:
    0x00022e24 ldrh r3, [r5, 0x32]                               |     r3 = *((r5 + 0x32));
    0x00022e26 cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x00022e28 bne.w 0x22c2a                                     |         goto label_14;
                                                                 |     }
    0x00022e2c ldrb.w r3, [r5, 0x36]                             |     r3 = *((r5 + 0x36));
    0x00022e30 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00022e32 beq.w 0x22c2a                                     |         goto label_14;
                                                                 |     }
    0x00022e36 ldr r3, [sp, 0x50]                                |     r3 = *(arg_50h);
    0x00022e38 movs r1, 0x4d                                     |     r1 = 0x4d;
    0x00022e3a ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x00022e3c mov r0, sl                                        |     r0 = sl;
    0x00022e3e str r4, [sp]                                      |     *(sp) = r4;
    0x00022e40 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00022e44 b 0x22c2a                                         |     goto label_14;
                                                                 | }
    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1a768 */
                                                     | #include <stdint.h>
                                                     |  
    ; (fcn) fcn.0001a768 ()                          | void fcn_0001a768 (int16_t arg1, int16_t arg2, int16_t arg3) {
                                                     |     r0 = arg1;
                                                     |     r1 = arg2;
                                                     |     r2 = arg3;
    0x0001a768 push {r3, r4, r5, r6, r7, lr}         |     
    0x0001a76a mov r4, r0                            |     r4 = r0;
    0x0001a76c ldr r3, [r0, 0xc]                     |     r3 = *((r0 + 0xc));
    0x0001a76e mov r5, r2                            |     r5 = r2;
    0x0001a770 ldr r7, [r0, 0x10]                    |     r7 = *((r0 + 0x10));
    0x0001a772 add.w ip, r3, r2                      |     
    0x0001a776 cmp ip, r7                            |     
                                                     |     if (ip >= r7) {
    0x0001a778 bge 0x1a78a                           |         goto label_1;
                                                     |     }
    0x0001a77a ldr r0, [r0, 8]                       |     r0 = *((r0 + 8));
    0x0001a77c add r0, r3                            |     r0 += r3;
    0x0001a77e blx 0x6214                            |     fcn_00006214 ();
    0x0001a780 stcl p8, c6, [sl, -0x38c]             |     __asm ("stcl p8, c6, aav.0x000000ff");
    0x0001a784 add r3, r5                            |     r3 += r5;
    0x0001a786 str r3, [r4, 0xc]                     |     *((r4 + 0xc)) = r3;
                                                     |     do {
                                                     | label_0:
    0x0001a788 pop {r3, r4, r5, r6, r7, pc}          |         
                                                     | label_1:
    0x0001a78a ldrb r3, [r0, 0x19]                   |         r3 = *((r0 + 0x19));
    0x0001a78c cmp r3, 0                             |         
    0x0001a78e bne 0x1a788                           |         
                                                     |     } while (r3 != 0);
    0x0001a790 mov r6, r1                            |     r6 = r1;
    0x0001a792 mov r1, r2                            |     r1 = r2;
    0x0001a794 bl 0x1a698                            |     r0 = fcn_0001a698 (r0, r1);
    0x0001a798 subs r5, r0, 0                        |     r5 = r0 - 0;
                                                     |     if (r5 <= r0) {
    0x0001a79a ble 0x1a788                           |         goto label_0;
                                                     |     }
    0x0001a79c ldrd r0, r3, [r4, 8]                  |     __asm ("ldrd r0, r3, [r4, 8]");
    0x0001a7a0 mov r1, r6                            |     r1 = r6;
    0x0001a7a2 mov r2, r5                            |     r2 = r5;
    0x0001a7a4 add r0, r3                            |     r0 += r3;
    0x0001a7a6 blx 0x6214                            |     fcn_00006214 ();
    0x0001a7aa ldr r3, [r4, 0xc]                     |     r3 = *((r4 + 0xc));
    0x0001a7ac add r3, r5                            |     r3 += r5;
    0x0001a7ae str r3, [r4, 0xc]                     |     *((r4 + 0xc)) = r3;
    0x0001a7b0 pop {r3, r4, r5, r6, r7, pc}          |     
                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1a7b4 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.0001a7b4 ()                                      | void fcn_0001a7b4 (int16_t arg1, int16_t arg2, int16_t arg3) {
                                                                 |     int32_t var_0h;
                                                                 |     int32_t var_0h_2;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int32_t var_14h;
                                                                 |     int32_t var_14h_2;
                                                                 |     int32_t var_1ch;
                                                                 |     int32_t var_1ch_2;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
    0x0001a7b4 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x0001a7b8 movs r3, 0xc8                                     |     r3 = 0xc8;
    0x0001a7ba sub sp, 0x34                                      |     
    0x0001a7bc mov r5, r2                                        |     r5 = r2;
    0x0001a7be movs r4, 0                                        |     r4 = 0;
    0x0001a7c0 mov sb, r0                                        |     sb = r0;
    0x0001a7c2 ldr r6, [r2, 0xc]                                 |     r6 = *((r2 + 0xc));
    0x0001a7c4 ldr r2, [pc, 0x110]                               |     
    0x0001a7c6 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x0001a7c8 ldr r3, [pc, 0x110]                               |     r3 = *(0x1a8dc);
    0x0001a7ca add r2, pc                                        |     r2 = 0x350a6;
    0x0001a7cc str r1, [sp, 0xc]                                 |     var_ch = r1;
    0x0001a7ce ldr r3, [r2, r3]                                  |     
    0x0001a7d0 ldr r2, [r0]                                      |     r2 = *(r0);
    0x0001a7d2 ldr r3, [r3]                                      |     r3 = *(0x350a6);
    0x0001a7d4 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x0001a7d6 mov.w r3, 0                                       |     r3 = 0;
    0x0001a7da ldrh r3, [r5, 0x32]                               |     r3 = *((r5 + 0x32));
    0x0001a7dc str r2, [sp, 0x10]                                |     var_10h = r2;
    0x0001a7de movs r2, 1                                        |     r2 = 1;
    0x0001a7e0 strd r4, r4, [sp, 0x14]                           |     __asm ("strd r4, r4, [var_14h]");
    0x0001a7e4 strd r4, r4, [sp, 0x1c]                           |     __asm ("strd r4, r4, [var_1ch]");
    0x0001a7e8 strh.w r2, [sp, 0x28]                             |     var_28h = r2;
    0x0001a7ec cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0001a7ee beq 0x1a884                                       |         goto label_3;
                                                                 |     }
    0x0001a7f0 ldr r3, [r5, 4]                                   |     r3 = *((r5 + 4));
    0x0001a7f2 add.w sl, sp, 0x10                                |     sl += var_10h;
    0x0001a7f6 ldr r2, [r6, 4]                                   |     r2 = *((r6 + 4));
                                                                 | label_1:
    0x0001a7f8 ldr r7, [pc, 0xe4]                                |     
    0x0001a7fa ldrsh.w r3, [r3]                                  |     r3 = *(r3);
    0x0001a7fe ldr.w r8, [pc, 0xe4]                              |     
    0x0001a802 add r7, pc                                        |     r7 = 0x350e6;
    0x0001a804 add.w r3, r3, r3, lsl 1                           |     r3 += (r3 << 1);
    0x0001a808 add r8, pc                                        |     r8 = 0x350f2;
    0x0001a80a ldr.w fp, [r2, r3, lsl 3]                         |     offset_0 = r3 << 3;
                                                                 |     fp = *((r2 + offset_0));
                                                                 | label_0:
    0x0001a80e ldr r1, [r6]                                      |     r1 = *(r6);
    0x0001a810 mov r2, r1                                        |     r2 = r1;
                                                                 |     if (r1 == 0) {
    0x0001a812 cbz r1, 0x1a828                                   |         goto label_4;
                                                                 |     }
    0x0001a814 ldrb r2, [r1]                                     |     r2 = *(r1);
                                                                 |     if (r2 == 0) {
    0x0001a816 cbz r2, 0x1a828                                   |         goto label_4;
                                                                 |     }
    0x0001a818 mov r2, r1                                        |     r2 = r1;
                                                                 |     do {
    0x0001a81a ldrb r0, [r2, 1]!                                 |         r0 = *((r2 += 1));
    0x0001a81e cmp r0, 0                                         |         
    0x0001a820 bne 0x1a81a                                       |         
                                                                 |     } while (r0 != 0);
    0x0001a822 subs r2, r2, r1                                   |     r2 -= r1;
                                                                 | label_2:
    0x0001a824 bic r2, r2, 0xc0000000                            |     r2 = BIT_MASK (r2, 0xc0000000);
                                                                 | label_4:
    0x0001a828 mov r0, sl                                        |     r0 = sl;
    0x0001a82a bl 0x1a768                                        |     fcn_0001a768 (r0, r1, r2);
    0x0001a82e movs r2, 1                                        |     r2 = 1;
    0x0001a830 mov r1, r7                                        |     r1 = r7;
    0x0001a832 mov r0, sl                                        |     r0 = sl;
    0x0001a834 bl 0x1a768                                        |     fcn_0001a768 (r0, r1, r2);
    0x0001a838 mov r2, fp                                        |     r2 = fp;
    0x0001a83a cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x0001a83e beq 0x1a858                                       |         goto label_5;
                                                                 |     }
    0x0001a840 ldrb.w r2, [fp]                                   |     r2 = *(fp);
                                                                 |     if (r2 == 0) {
    0x0001a844 cbz r2, 0x1a858                                   |         goto label_5;
                                                                 |     }
    0x0001a846 mov r2, fp                                        |     r2 = fp;
                                                                 |     do {
    0x0001a848 ldrb r1, [r2, 1]!                                 |         r1 = *((r2 += 1));
    0x0001a84c cmp r1, 0                                         |         
    0x0001a84e bne 0x1a848                                       |         
                                                                 |     } while (r1 != 0);
    0x0001a850 sub.w r2, r2, fp                                  |     r2 -= fp;
    0x0001a854 bic r2, r2, 0xc0000000                            |     r2 = BIT_MASK (r2, 0xc0000000);
                                                                 | label_5:
    0x0001a858 mov r1, fp                                        |     r1 = fp;
    0x0001a85a mov r0, sl                                        |     r0 = sl;
    0x0001a85c bl 0x1a768                                        |     fcn_0001a768 (r0, r1, r2);
    0x0001a860 ldrh r3, [r5, 0x32]                               |     r3 = *((r5 + 0x32));
    0x0001a862 adds r4, 1                                        |     r4++;
    0x0001a864 cmp r3, r4                                        |     
                                                                 |     if (r3 > r4) {
    0x0001a866 ble 0x1a888                                       |         
    0x0001a868 ldr r0, [r5, 4]                                   |         r0 = *((r5 + 4));
    0x0001a86a movs r2, 2                                        |         r2 = 2;
    0x0001a86c ldr r3, [r6, 4]                                   |         r3 = *((r6 + 4));
    0x0001a86e mov r1, r8                                        |         r1 = r8;
    0x0001a870 ldrsh.w r0, [r0, r4, lsl 1]                       |         offset_1 = r4 << 1;
                                                                 |         r0 = *((r0 + offset_1));
    0x0001a874 add.w r0, r0, r0, lsl 1                           |         r0 += (r0 << 1);
    0x0001a878 ldr.w fp, [r3, r0, lsl 3]                         |         offset_2 = r0 << 3;
                                                                 |         fp = *((r3 + offset_2));
    0x0001a87c mov r0, sl                                        |         r0 = sl;
    0x0001a87e bl 0x1a768                                        |         fcn_0001a768 (r0, r1, r2);
    0x0001a882 b 0x1a80e                                         |         goto label_0;
                                                                 | label_3:
    0x0001a884 add.w sl, sp, 0x10                                |         sl += var_10h;
                                                                 |     }
    0x0001a888 mov r0, sl                                        |     r0 = sl;
    0x0001a88a bl 0x171d4                                        |     fcn_000171d4 (r0);
    0x0001a88c stc2 p8, c15, [r3], 0x254                         |     __asm ("stc2 p8, c15, [r3], aav.0x000000ff");
    0x0001a890 ands r7, r6                                       |     r7 &= r6;
    0x0001a892 movw r1, 0x813                                    |     r1 = 0x813;
    0x0001a896 movw r5, 0x613                                    |     r5 = 0x613;
    0x0001a89a mov r3, r0                                        |     r3 = r0;
    0x0001a89c ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x0001a89e mov r0, sb                                        |     r0 = sb;
    0x0001a8a0 and r4, r4, 3                                     |     r4 &= 3;
    0x0001a8a4 cmp r4, 2                                         |     
    0x0001a8a6 it eq                                             |     
                                                                 |     if (r4 != 2) {
    0x0001a8a8 moveq r1, r5                                      |         r1 = r5;
                                                                 |     }
    0x0001a8aa mov.w r4, -1                                      |     r4 = -1;
    0x0001a8ae movs r5, 2                                        |     r5 = 2;
    0x0001a8b0 strd r4, r5, [sp]                                 |     __asm ("strd r4, r5, [sp]");
    0x0001a8b4 bl 0x19494                                        |     fcn_00019494 (r0, r1, r2, r3, r4, r5);
    0x0001a8b8 ldr r2, [pc, 0x2c]                                |     
    0x0001a8ba ldr r3, [pc, 0x20]                                |     r3 = *(0x1a8de);
    0x0001a8bc add r2, pc                                        |     r2 = 0x351a8;
    0x0001a8be ldr r3, [r2, r3]                                  |     r3 = *(0x351a8);
    0x0001a8c0 ldr r2, [r3]                                      |     r2 = *(0x351a8);
    0x0001a8c2 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0001a8c4 eors r2, r3                                       |     r2 ^= r3;
    0x0001a8c6 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 == r3) {
    0x0001a8ca bne 0x1a8d2                                       |         
    0x0001a8cc add sp, 0x34                                      |         
    0x0001a8ce pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 |     }
    0x0001a8d2 blx 0x6498                                        |     fcn_00006498 ();
    0x0001a8d6 nop                                               |     
                                                                 |     if (r2 < r3) {
    0x0001a8d8 bmi 0x1a7f8                                       |         goto label_1;
                                                                 |     }
    0x0001a8da movs r5, r0                                       |     r5 = r0;
    0x0001a8dc lsls r0, r1, 0xe                                  |     r0 = r1 << 0xe;
    0x0001a8de movs r0, r0                                       |     
    0x0001a8e0 rors r6, r4                                       |     __asm ("rors r6, r4");
    0x0001a8e2 movs r4, r0                                       |     r4 = r0;
    0x0001a8e4 rors r4, r3                                       |     __asm ("rors r4, r3");
    0x0001a8e6 movs r4, r0                                       |     r4 = r0;
                                                                 |     if (r4 <= r0) {
    0x0001a8e8 blo 0x1a824                                       |         goto label_2;
                                                                 |     }
    0x0001a8ea movs r5, r0                                       |     r5 = r0;
                                                                 | }
    ; assembly                               | /* r2dec pseudo code output */
                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1a944 */
                                             | #include <stdint.h>
                                             |  
    ; (fcn) fcn.0001a944 ()                  | void fcn_0001a944 (int16_t arg1, uint32_t arg2, uint32_t arg4) {
                                             |     r0 = arg1;
                                             |     r1 = arg2;
                                             |     r3 = arg4;
    0x0001a944 ldrd r2, r3, [r0, 0xc]        |     __asm ("ldrd r2, r3, [r0, 0xc]");
    0x0001a948 push {r4, lr}                 |     
    0x0001a94a mov r4, r0                    |     r4 = r0;
    0x0001a94c add.w lr, r2, r1              |     lr = r2 + r1;
    0x0001a950 cmp lr, r3                    |     
                                             |     if (lr >= r3) {
    0x0001a952 bge 0x1a97a                   |         goto label_2;
                                             |     }
    0x0001a954 cmp r1, 0                     |     
    0x0001a956 add.w r3, r1, -1              |     r3 = r1 + -1;
                                             |     if (r1 <= 0) {
    0x0001a95a ble 0x1a978                   |         goto label_0;
                                             |     }
                                             | label_1:
    0x0001a95c mov.w ip, 0x20                |     
    0x0001a960 b 0x1a964                     |     
                                             |     while (r3 > 0) {
    0x0001a962 ldr r2, [r4, 0xc]             |         r2 = *((r4 + 0xc));
    0x0001a964 ldr r1, [r4, 8]               |         r1 = *((r4 + 8));
    0x0001a966 cmp r3, 0                     |         
    0x0001a968 add.w r0, r2, 1               |         r0 = r2 + 1;
    0x0001a96c add.w r3, r3, -1              |         r3 += -1;
    0x0001a970 str r0, [r4, 0xc]             |         *((r4 + 0xc)) = r0;
    0x0001a972 strb.w ip, [r1, r2]           |         *((r1 + r2)) = ip;
    0x0001a976 bgt 0x1a962                   |         
                                             |     }
                                             |     do {
                                             | label_0:
    0x0001a978 pop {r4, pc}                  |         
                                             | label_2:
    0x0001a97a ldrb r3, [r0, 0x19]           |         r3 = *((r0 + 0x19));
    0x0001a97c cmp r3, 0                     |         
    0x0001a97e bne 0x1a978                   |         
                                             |     } while (r3 != 0);
    0x0001a980 bl 0x1a698                    |     r0 = fcn_0001a698 (r0, r1);
    0x0001a984 subs r3, r0, 0                |     r3 = r0 - 0;
                                             |     if (r3 <= r0) {
    0x0001a986 ble 0x1a978                   |         goto label_0;
                                             |     }
    0x0001a988 ldr r2, [r4, 0xc]             |     r2 = *((r4 + 0xc));
    0x0001a98a subs r3, 1                    |     r3--;
    0x0001a98c b 0x1a95c                     |     goto label_1;
                                             | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1a990 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.0001a990 ()                                      | void fcn_0001a990 (int16_t arg_1h, int16_t arg_40h, int16_t arg_b30h, int16_t arg_b3ch, int16_t arg_b40h, int16_t arg_c8h, int16_t arg_cch, int16_t arg1, uint32_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_3h;
                                                                 |     int16_t var_1h;
                                                                 |     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;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     int16_t var_40h;
                                                                 |     int32_t var_40h_2;
                                                                 |     int16_t var_48h;
                                                                 |     int16_t var_49h;
                                                                 |     int16_t var_4ch;
                                                                 |     int16_t var_54h;
                                                                 |     int16_t var_55h;
                                                                 |     int16_t var_6ch;
                                                                 |     int16_t var_78h;
                                                                 |     int16_t var_9ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x0001a990 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x0001a994 mov r4, r2                                        |     r4 = r2;
    0x0001a996 vpush {d8, d9, d10, d11, d12, d13}                |     __asm ("vpush {d8, d9, d10, d11, d12, d13}");
    0x0001a99a sub sp, 0xa4                                      |     
    0x0001a99c ldr r2, [pc, 0x2f8]                               |     
    0x0001a99e str r0, [sp, 0x14]                                |     var_14h = r0;
    0x0001a9a0 mov r0, r3                                        |     r0 = r3;
    0x0001a9a2 str r3, [sp, 8]                                   |     var_8h = r3;
    0x0001a9a4 ldr r3, [pc, 0x2f4]                               |     r3 = *(0x1ac9c);
    0x0001a9a6 add r2, pc                                        |     r2 = 0x35642;
    0x0001a9a8 ldr r3, [r2, r3]                                  |     
    0x0001a9aa ldr r3, [r3]                                      |     r3 = *(0x35642);
    0x0001a9ac str r3, [sp, 0x9c]                                |     var_9ch = r3;
    0x0001a9ae mov.w r3, 0                                       |     r3 = 0;
    0x0001a9b2 cmp r1, 0                                         |     
                                                                 |     if (arg_1h == ) {
    0x0001a9b4 beq.w 0x1b0ae                                     |         goto label_78;
                                                                 |     }
    0x0001a9b8 uxtb r3, r1                                       |     r3 = (int8_t) r1;
    0x0001a9ba ands r1, r1, 2                                    |     r1 &= 2;
    0x0001a9be it ne                                             |     
                                                                 |     if (r1 == r1) {
    0x0001a9c0 movne r2, r0                                      |         r2 = r0;
                                                                 |     }
    0x0001a9c2 str r1, [sp, 0x1c]                                |     var_1ch = r1;
    0x0001a9c4 it ne                                             |     
                                                                 |     if (r1 == r1) {
    0x0001a9c6 ldrne r1, [r2], 4                                 |         r1 = *(r2);
                                                                 |         r2 += 4;
                                                                 |     }
    0x0001a9ca and r3, r3, 1                                     |     r3 &= 1;
    0x0001a9ce it eq                                             |     
                                                                 |     if (r1 != r1) {
    0x0001a9d0 ldreq r2, [sp, 0x1c]                              |         r2 = var_1ch;
                                                                 |     }
    0x0001a9d2 str r3, [sp, 0x28]                                |     var_28h = r3;
    0x0001a9d4 itte ne                                           |     
                                                                 |     if (r1 == r1) {
    0x0001a9d6 strne r1, [sp, 0x2c]                              |         var_2ch = r1;
                                                                 |     }
                                                                 |     if (r1 == r1) {
    0x0001a9d8 strne r2, [sp, 8]                                 |         var_8h = r2;
                                                                 |     }
                                                                 |     if (r1 != r1) {
    0x0001a9da streq r2, [sp, 0x2c]                              |         var_2ch = r2;
                                                                 |     }
                                                                 | label_16:
    0x0001a9dc ldrb r3, [r4]                                     |     r3 = *(r4);
    0x0001a9de cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0001a9e0 beq.w 0x1ae7a                                     |         goto label_10;
                                                                 |     }
    0x0001a9e4 vldr d8, [pc, 0x288]                              |     __asm ("vldr d8, aav.0x000000ff");
    0x0001a9e8 mov.w fp, 0                                       |     
    0x0001a9ec vldr d12, [pc, 0x288]                             |     __asm ("vldr d12, aav.0x000000ff");
    0x0001a9f0 movw r2, 0x851f                                   |     
    0x0001a9f4 vldr d11, [pc, 0x288]                             |     __asm ("vldr d11, aav.0x000000ff");
    0x0001a9f8 mov r7, fp                                        |     r7 = fp;
    0x0001a9fa vldr d9, [pc, 0x28c]                              |     __asm ("vldr d9, aav.0x000000ff");
                                                                 |     /* if there is a right shift of 5, then it's a division by 1/100 */
    0x0001a9fe movt r2, 0x51eb                                   |     r2 = 0x51eb851f;
    0x0001aa02 vldr d10, [pc, 0x28c]                             |     __asm ("vldr d10, aav.0x000000ff");
    0x0001aa06 str r2, [sp, 0x30]                                |     var_30h = r2;
                                                                 | label_4:
    0x0001aa08 cmp r3, 0x25                                      |     
                                                                 |     if (r3 != 0x25) {
    0x0001aa0a bne.w 0x1afd8                                     |         goto label_79;
                                                                 |     }
    0x0001aa0e ldrb r1, [r4, 1]                                  |     r1 = *((r4 + 1));
    0x0001aa10 adds r4, 1                                        |     r4++;
    0x0001aa12 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0001aa14 beq.w 0x1b002                                     |         goto label_80;
                                                                 |     }
                                                                 | label_9:
    0x0001aa18 mov.w sl, 0                                       |     sl = 0;
    0x0001aa1c mov r3, sl                                        |     r3 = sl;
    0x0001aa1e mov r2, sl                                        |     r2 = sl;
    0x0001aa20 str.w sl, [sp, 4]                                 |     __asm ("str.w sl, [var_4h]");
    0x0001aa24 str.w sl, [sp, 0x10]                              |     __asm ("str.w sl, [var_10h]");
    0x0001aa28 str.w sl, [sp]                                    |     __asm ("str.w sl, [sp]");
                                                                 | label_0:
    0x0001aa2c sub.w r0, r1, 0x20                                |     r0 = r1 - 0x20;
    0x0001aa30 cmp r0, 0x10                                      |     
                                                                 |     if (r0 <= 0x10) {
    0x0001aa32 bhi 0x1aa4a                                       |         
                                                                 |         /* switch table (17 cases) at 0x1aa38 */
    0x0001aa34 tbb [pc, r0]                                      |         __asm ("tbb aav.0x000000ff");
                                                                 |     }
    0x0001aa4a cmp r1, 0x2a                                      |     
                                                                 |     if (r1 != 0x2a) {
    0x0001aa4c bne.w 0x1b012                                     |         goto label_81;
                                                                 |     }
    0x0001aa50 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x0001aa52 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x0001aa54 bne.w 0x1b056                                     |         goto label_82;
                                                                 |     }
    0x0001aa58 ldr r1, [sp, 8]                                   |     r1 = var_8h;
    0x0001aa5a ldr fp, [r1], 4                                   |     fp = *(r1);
                                                                 |     r1 += 4;
    0x0001aa5e str r1, [sp, 8]                                   |     var_8h = r1;
                                                                 | label_14:
    0x0001aa60 cmp.w fp, 0                                       |     
    0x0001aa64 ittt lt                                           |     
                                                                 |     if (fp < 0) {
    0x0001aa66 rsblt fp, fp, 0                                   |         __asm ("rsblt fp, fp, 0");
                                                                 |     }
                                                                 |     if (fp >= 0) {
    0x0001aa6a movlt r1, 1                                       |         r1 = 1;
                                                                 |     }
                                                                 |     if (fp < 0) {
    0x0001aa6c str r1, [sp]                                      |         *(sp) = r1;
                                                                 |     }
                                                                 | label_13:
    0x0001aa6e ldrb r1, [r4, 1]                                  |     r1 = *((r4 + 1));
    0x0001aa70 adds r4, 1                                        |     r4++;
                                                                 | label_11:
    0x0001aa72 cmp r1, 0x2e                                      |     
    0x0001aa74 it ne                                             |     
                                                                 |     if (r1 == 0x2e) {
    0x0001aa76 movne r6, -1                                      |         r6 = -1;
                                                                 |     }
                                                                 |     if (r1 == 0x2e) {
    0x0001aa7a bne 0x1aa9e                                       |         
    0x0001aa7c ldrb r1, [r4, 1]                                  |         r1 = *((r4 + 1));
    0x0001aa7e cmp r1, 0x2a                                      |         
                                                                 |         if (r1 != 0x2a) {
    0x0001aa80 bne.w 0x1b084                                     |             goto label_83;
                                                                 |         }
    0x0001aa84 ldr r1, [sp, 0x1c]                                |         r1 = var_1ch;
    0x0001aa86 cmp r1, 0                                         |         
                                                                 |         if (r1 != 0) {
    0x0001aa88 bne.w 0x1b206                                     |             goto label_84;
                                                                 |         }
    0x0001aa8c ldr r1, [sp, 8]                                   |         r1 = var_8h;
    0x0001aa8e ldr r6, [r1], 4                                   |         r6 = *(r1);
                                                                 |         r1 += 4;
    0x0001aa92 cmp r6, 0                                         |         
    0x0001aa94 str r1, [sp, 8]                                   |         var_8h = r1;
    0x0001aa96 it lt                                             |         
                                                                 |         if (r6 < 0) {
    0x0001aa98 rsblt r6, r6, 0                                   |             __asm ("rsblt r6, r6, 0");
                                                                 |         }
                                                                 | label_26:
    0x0001aa9a ldrb r1, [r4, 2]                                  |         r1 = *((r4 + 2));
    0x0001aa9c adds r4, 2                                        |         r4 += 2;
                                                                 |     }
                                                                 | label_15:
    0x0001aa9e cmp r1, 0x6c                                      |     
                                                                 |     if (r1 != 0x6c) {
    0x0001aaa0 bne 0x1ab3e                                       |         goto label_85;
                                                                 |     }
    0x0001aaa2 ldrb r1, [r4, 1]                                  |     r1 = *((r4 + 1));
    0x0001aaa4 cmp r1, 0x6c                                      |     
    0x0001aaa6 iteet eq                                          |     
                                                                 |     if (r1 != 0x6c) {
    0x0001aaa8 ldrbeq r1, [r4, 2]                                |         r1 = *((r4 + 2));
                                                                 |     }
                                                                 |     if (r1 == 0x6c) {
    0x0001aaaa addne r4, 1                                       |         r4++;
                                                                 |     }
                                                                 |     if (r1 == 0x6c) {
    0x0001aaac movne ip, 0                                       |         
                                                                 |     }
                                                                 |     if (r1 == 0x6c) {
    0x0001aab0 adds r4, 2                                        |         r4 += 2;
                                                                 |     }
    0x0001aab2 itete ne                                          |     
                                                                 |     if (r4 == 2) {
    0x0001aab4 movne r0, 1                                       |         r0 = 1;
                                                                 |     }
                                                                 |     if (r4 != 2) {
    0x0001aab6 moveq ip, 1                                       |         
                                                                 |     }
                                                                 |     if (r4 != 2) {
    0x0001aaba streq r0, [sp, 0x20]                              |         var_20h = r0;
                                                                 |     }
                                                                 |     if (r4 == 2) {
    0x0001aabc str.w ip, [sp, 0x20]                              |         __asm ("str.w ip, [var_20h]");
                                                                 |     }
                                                                 | label_1:
    0x0001aac0 ldr r0, [pc, 0x1dc]                               |     
    0x0001aac2 mov.w lr, 0x64                                    |     lr = 0x64;
    0x0001aac6 movs r5, 0                                        |     r5 = 0;
    0x0001aac8 add r0, pc                                        |     r0 = 0x3576c;
    0x0001aaca addw r0, r0, 0x914                                |     __asm ("addw r0, r0, aav.0x000000ff");
    0x0001aace b 0x1aadc                                         |     
                                                                 |     while (lr != r1) {
    0x0001aad0 adds r5, 1                                        |         r5++;
    0x0001aad2 cmp r5, 0x17                                      |         
                                                                 |         if (r5 == 0x17) {
    0x0001aad4 beq.w 0x1ae7a                                     |             goto label_10;
                                                                 |         }
    0x0001aad8 ldrb lr, [r0, 6]!                                 |         
    0x0001aadc cmp lr, r1                                        |         
    0x0001aade bne 0x1aad0                                       |         
                                                                 |     }
    0x0001aae0 ldr r1, [sp, 0x28]                                |     r1 = var_28h;
    0x0001aae2 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0001aae4 beq.w 0x1b03a                                     |         goto label_86;
                                                                 |     }
    0x0001aae8 lsls r1, r5, 1                                    |     r1 = r5 << 1;
    0x0001aaea str r1, [sp, 0xc]                                 |     var_ch = r1;
                                                                 | label_12:
    0x0001aaec ldr r1, [pc, 0x1b4]                               |     
    0x0001aaee ldr r0, [sp, 0xc]                                 |     r0 = var_ch;
    0x0001aaf0 add r1, pc                                        |     r1 = 0x35798;
    0x0001aaf2 add r0, r5                                        |     r0 += r5;
    0x0001aaf4 add.w r1, r1, r0, lsl 1                           |     r1 += (r0 << 1);
    0x0001aaf8 ldrb.w r1, [r1, 0x917]                            |     r1 = *((r1 + 0x917));
    0x0001aafc str r1, [sp, 0x18]                                |     var_18h = r1;
    0x0001aafe subs r1, 1                                        |     r1--;
    0x0001ab00 cmp r1, 0xf                                       |     
                                                                 |     if (r1 > 0xf) {
    0x0001ab02 bhi.w 0x1ae7a                                     |         goto label_10;
                                                                 |     }
                                                                 |     /* switch table (17 cases) at 0x1ab0a */
    0x0001ab06 tbh [pc, r1, lsl 1]                               |     __asm ("tbh [pc, r1, lsl 1]");
    0x0001ab2a mov.w sl, 1                                       |     sl = 1;
                                                                 | label_2:
    0x0001ab2e ldrb r1, [r4, 1]!                                 |     r1 = *((r4 += 1));
    0x0001ab32 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x0001ab34 bne.w 0x1aa2c                                     |         goto label_0;
                                                                 |     }
    0x0001ab38 mov fp, r1                                        |     
    0x0001ab3a mov.w r6, -1                                      |     r6 = -1;
                                                                 | label_85:
    0x0001ab3e mov.w ip, 0                                       |     
    0x0001ab42 str.w ip, [sp, 0x20]                              |     __asm ("str.w ip, [var_20h]");
    0x0001ab46 b 0x1aac0                                         |     goto label_1;
    0x0001ab48 movs r1, 1                                        |     r1 = 1;
    0x0001ab4a str r1, [sp, 4]                                   |     var_4h = r1;
    0x0001ab4c b 0x1ab2e                                         |     goto label_2;
    0x0001ab4e movs r3, 1                                        |     r3 = 1;
    0x0001ab50 b 0x1ab2e                                         |     goto label_2;
    0x0001ab52 movs r2, 1                                        |     r2 = 1;
    0x0001ab54 b 0x1ab2e                                         |     goto label_2;
    0x0001ab56 movs r1, 1                                        |     r1 = 1;
    0x0001ab58 str r1, [sp]                                      |     *(sp) = r1;
    0x0001ab5a b 0x1ab2e                                         |     goto label_2;
    0x0001ab5c movs r1, 1                                        |     r1 = 1;
    0x0001ab5e str r1, [sp, 0x10]                                |     var_10h = r1;
    0x0001ab60 b 0x1ab2e                                         |     goto label_2;
    0x0001ab62 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0001ab64 cmp r3, 0xf                                       |     
    0x0001ab66 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0001ab68 ite eq                                            |     
                                                                 |     if (r3 != 0xf) {
    0x0001ab6a moveq r8, 0x22                                    |         r8 = 0x22;
                                                                 |     }
                                                                 |     if (r3 != 0xf) {
    0x0001ab6e mov.w r8, 0x27                                    |         r8 = 0x27;
                                                                 |     }
    0x0001ab72 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0001ab74 bne.w 0x1b1e2                                     |         goto label_87;
                                                                 |     }
    0x0001ab78 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x0001ab7a ldr sb, [r3], 4                                   |     sb = *(r3);
                                                                 |     r3 += 4;
    0x0001ab7e str r3, [sp, 4]                                   |     var_4h = r3;
                                                                 | label_25:
    0x0001ab80 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0001ab82 sub.w sl, r3, 0xb                                 |     sl = r3 - 0xb;
    0x0001ab86 clz sl, sl                                        |     sl &= sl;
    0x0001ab8a lsr.w sl, sl, 5                                   |     sl >>= 5;
    0x0001ab8e cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x0001ab92 beq.w 0x1b736                                     |         goto label_88;
                                                                 |     }
    0x0001ab96 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0001ab98 beq.w 0x1b9dc                                     |         goto label_89;
                                                                 |     }
                                                                 | label_38:
    0x0001ab9c add.w r3, sb, -1                                  |     r3 = sb + -1;
    0x0001aba0 movs r0, 0                                        |     r0 = 0;
    0x0001aba2 mov r1, r3                                        |     r1 = r3;
    0x0001aba4 mov r5, r0                                        |     r5 = r0;
    0x0001aba6 b 0x1abb6                                         |     
                                                                 |     while (r2 != 0) {
    0x0001aba8 cmp r8, r2                                        |         
    0x0001abaa add.w r5, r5, 1                                   |         r5++;
    0x0001abae it eq                                             |         
                                                                 |         if (r8 != r2) {
    0x0001abb0 addeq r0, 1                                       |             r0++;
                                                                 |         }
    0x0001abb2 cmp r5, r6                                        |         
                                                                 |         if (r5 == r6) {
    0x0001abb4 beq 0x1abbe                                       |             goto label_90;
                                                                 |         }
    0x0001abb6 ldrb r2, [r1, 1]!                                 |         r2 = *((r1 += 1));
    0x0001abba cmp r2, 0                                         |         
    0x0001abbc bne 0x1aba8                                       |         
                                                                 |     }
                                                                 | label_90:
    0x0001abbe adds r2, r5, 1                                    |     r2 = r5 + 1;
    0x0001abc0 add.w r2, r2, sl, lsl 1                           |     r2 += (sl << 1);
    0x0001abc4 add r0, r2                                        |     r0 += r2;
    0x0001abc6 cmp r0, 0x46                                      |     
    0x0001abc8 ittt le                                           |     
                                                                 |     if (r0 > 0x46) {
    0x0001abca movle r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (r0 > 0x46) {
    0x0001abcc addle r7, sp, 0x54                                |         r7 += var_54h;
                                                                 |     }
                                                                 |     if (r0 > 0x46) {
    0x0001abce strle r2, [sp, 0x10]                              |         var_10h = r2;
                                                                 |     }
                                                                 |     if (r0 > 0x46) {
    0x0001abd0 bgt.w 0x1b116                                     |         goto label_91;
                                                                 |     }
    0x0001abd4 cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x0001abd8 beq.w 0x1b130                                     |         goto label_92;
                                                                 |     }
                                                                 | label_18:
    0x0001abdc strb.w r8, [r7]                                   |     *(r7) = r8;
    0x0001abe0 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x0001abe2 beq.w 0x1ba10                                     |         goto label_93;
                                                                 |     }
    0x0001abe6 movs r6, 1                                        |     r6 = 1;
                                                                 |     do {
                                                                 | label_19:
    0x0001abe8 mov r2, r3                                        |         r2 = r3;
    0x0001abea ldrb r1, [r3, 1]!                                 |         r1 = *((r3 += 1));
    0x0001abee adds r2, 2                                        |         r2 += 2;
    0x0001abf0 adds r0, r6, 1                                    |         r0 = r6 + 1;
    0x0001abf2 sub.w r2, r2, sb                                  |         r2 -= sb;
    0x0001abf6 cmp r8, r1                                        |         
    0x0001abf8 strb r1, [r7, r6]                                 |         *((r7 + r6)) = r1;
    0x0001abfa itet eq                                           |         
                                                                 |         if (r8 != r1) {
    0x0001abfc addeq r6, 2                                       |             r6 += 2;
                                                                 |         }
                                                                 |         if (r8 == r1) {
    0x0001abfe movne r6, r0                                      |             r6 = r0;
                                                                 |         }
                                                                 |         if (r8 != r1) {
    0x0001ac00 strbeq r8, [r7, r0]                               |             *((r7 + r0)) = r8;
                                                                 |         }
    0x0001ac04 cmp r5, r2                                        |         
    0x0001ac06 bgt 0x1abe8                                       |         
                                                                 |     } while (r5 > r2);
    0x0001ac08 mov r1, r6                                        |     r1 = r6;
    0x0001ac0a cmp.w sl, 0                                       |     
                                                                 |     if (sl != 0) {
    0x0001ac0e bne.w 0x1b2fc                                     |         goto label_94;
                                                                 |     }
    0x0001ac12 ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x0001ac14 sub.w r8, fp, r6                                  |     r8 = fp - r6;
    0x0001ac18 adds r2, r7, r6                                   |     r2 = r7 + r6;
    0x0001ac1a str r3, [sp, 8]                                   |     var_8h = r3;
                                                                 | label_20:
    0x0001ac1c movs r3, 0                                        |     r3 = 0;
    0x0001ac1e strb r3, [r2]                                     |     *(r2) = r3;
                                                                 | label_3:
    0x0001ac20 ldr r3, [sp]                                      |     r3 = *(sp);
    0x0001ac22 eor r5, r3, 1                                     |     r5 = r3 ^ 1;
    0x0001ac26 b 0x1ae2c                                         |     goto label_5;
    0x0001ac28 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x0001ac2a cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x0001ac2c bne.w 0x1b1c6                                     |         goto label_95;
                                                                 |     }
    0x0001ac30 ldr r1, [sp, 8]                                   |     r1 = var_8h;
    0x0001ac32 adds r1, 7                                        |     r1 += 7;
    0x0001ac34 bic r1, r1, 7                                     |     r1 = BIT_MASK (r1, 7);
    0x0001ac38 vldmia r1!, {d13}                                 |     __asm ("vldmia r1!, {d13}");
    0x0001ac3c str r1, [sp, 8]                                   |     var_8h = r1;
                                                                 | label_37:
    0x0001ac3e adds r7, r6, 1                                    |     r7 = r6 + 1;
    0x0001ac40 itt eq                                            |     
                                                                 |     if (r7 != r6) {
    0x0001ac42 moveq r1, 1                                       |         r1 = 1;
                                                                 |     }
                                                                 |     if (r7 != r6) {
    0x0001ac44 moveq r6, 6                                       |         r6 = 6;
                                                                 |     }
                                                                 |     if (r7 != r6) {
    0x0001ac46 beq 0x1ac50                                       |         
                                                                 | label_23:
    0x0001ac48 cmp r6, 0                                         |         
    0x0001ac4a ite le                                            |         
                                                                 |         if (r6 > 0) {
    0x0001ac4c movle r1, 0                                       |             r1 = 0;
                                                                 |         }
                                                                 |         if (r6 > 0) {
    0x0001ac4e movgt r1, 1                                       |             r1 = 1;
                                                                 |             goto label_96;
                                                                 |         }
                                                                 |     }
                                                                 | label_96:
    0x0001ac50 vcmpe.f64 d13, 0                                  |     __asm ("vcmpe.f64 d13, 0");
    0x0001ac54 vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
                                                                 |     if (r6 < 0) {
    0x0001ac58 bmi.w 0x1b310                                     |         goto label_97;
                                                                 |     }
                                                                 | label_24:
    0x0001ac5c ldr r0, [sp, 0x10]                                |     r0 = var_10h;
    0x0001ac5e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0001ac60 beq.w 0x1b44e                                     |         goto label_98;
                                                                 |     }
    0x0001ac64 movs r2, 0x2b                                     |     r2 = 0x2b;
    0x0001ac66 str r2, [sp, 0x20]                                |     var_20h = r2;
    0x0001ac68 b 0x1b318                                         |     goto label_34;
    0x0001aca8 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0001acaa cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0001acac bne.w 0x1b144                                     |         goto label_99;
                                                                 |     }
    0x0001acb0 ldr r1, [sp, 8]                                   |     r1 = var_8h;
    0x0001acb2 ldr r7, [r1], 4                                   |     r7 = *(r1);
                                                                 |     r1 += 4;
    0x0001acb6 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x0001acb8 beq.w 0x1b760                                     |         goto label_100;
                                                                 |     }
    0x0001acbc ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0001acbe cmp r3, 7                                         |     
    0x0001acc0 ite eq                                            |     
                                                                 |     if (r3 != 7) {
    0x0001acc2 moveq r3, r7                                      |         r3 = r7;
                                                                 |     }
                                                                 |     if (r3 == 7) {
    0x0001acc4 movne r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x0001acc6 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x0001acc8 adds r3, r6, 1                                    |     r3 = r6 + 1;
                                                                 |     if (r3 != r6) {
    0x0001acca bne.w 0x1b172                                     |         goto label_39;
                                                                 |     }
                                                                 | label_21:
    0x0001acce ldrb r6, [r7]                                     |     r6 = *(r7);
    0x0001acd0 mov r3, r7                                        |     r3 = r7;
    0x0001acd2 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0001acd4 beq.w 0x1ba1c                                     |         goto label_101;
                                                                 |     }
                                                                 |     do {
    0x0001acd8 ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x0001acdc cmp r2, 0                                         |         
    0x0001acde bne 0x1acd8                                       |         
                                                                 |     } while (r2 != 0);
    0x0001ace0 subs r3, r3, r7                                   |     r3 -= r7;
    0x0001ace2 str r1, [sp, 8]                                   |     var_8h = r1;
    0x0001ace4 bic r6, r3, 0xc0000000                            |     r6 = BIT_MASK (r3, 0xc0000000);
    0x0001ace8 sub.w r8, fp, r6                                  |     r8 = fp - r6;
    0x0001acec b 0x1ac20                                         |     goto label_3;
    0x0001acee ldr.w r3, [pc, 0xa88]                             |     
    0x0001acf2 ldr r1, [sp, 0xc]                                 |     r1 = var_ch;
    0x0001acf4 add r3, pc                                        |     r3 = 0x36472;
    0x0001acf6 add r1, r5                                        |     r1 += r5;
    0x0001acf8 add.w r3, r3, r1, lsl 1                           |     r3 += (r1 << 1);
    0x0001acfc ldrb.w r3, [r3, 0x916]                            |     r3 = *((r3 + 0x916));
    0x0001ad00 tst.w r3, 1                                       |     
    0x0001ad04 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
                                                                 |     if ((r3 & 1) == 0) {
    0x0001ad06 beq.w 0x1b0c2                                     |         goto label_102;
                                                                 |     }
    0x0001ad0a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0001ad0c bne.w 0x1b3fa                                     |         goto label_103;
                                                                 |     }
    0x0001ad10 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x0001ad12 cmp.w ip, 0                                       |     
                                                                 |     if (ip == 0) {
    0x0001ad16 beq.w 0x1b7c8                                     |         goto label_104;
                                                                 |     }
    0x0001ad1a adds r3, 7                                        |     r3 += 7;
    0x0001ad1c bic r3, r3, 7                                     |     r3 = BIT_MASK (r3, 7);
    0x0001ad20 ldr.w sb, [r3, 4]                                 |     sb = *((r3 + 4));
    0x0001ad24 ldr r8, [r3], 8                                   |     r8 = *(r3);
                                                                 |     r3 += 8;
    0x0001ad28 str r3, [sp, 8]                                   |     var_8h = r3;
                                                                 | label_31:
    0x0001ad2a cmp.w sb, 0                                       |     
                                                                 |     if (sb < 0) {
    0x0001ad2e blt.w 0x1b45a                                     |         goto label_105;
                                                                 |     }
                                                                 | label_7:
    0x0001ad32 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0001ad34 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0001ad36 beq.w 0x1b454                                     |         goto label_106;
                                                                 |     }
    0x0001ad3a movs r3, 0x2b                                     |     r3 = 0x2b;
    0x0001ad3c str r3, [sp, 0x20]                                |     var_20h = r3;
    0x0001ad3e orrs.w r3, r8, sb                                 |     r3 = r8 | sb;
                                                                 |     if (r3 == r8) {
    0x0001ad42 beq.w 0x1b0ee                                     |         goto label_32;
                                                                 |     }
                                                                 | label_8:
    0x0001ad46 cmp.w sl, 0                                       |     
                                                                 |     if (sl != 0) {
    0x0001ad4a beq 0x1ad5e                                       |         
    0x0001ad4c ldr r3, [sp, 0x20]                                |         r3 = var_20h;
    0x0001ad4e cmp r3, 0                                         |         
    0x0001ad50 ite eq                                            |         
                                                                 |         if (r3 != 0) {
    0x0001ad52 moveq r3, fp                                      |             r3 = fp;
                                                                 |         }
                                                                 |         if (r3 == 0) {
    0x0001ad54 subne r3, fp, 1                                   |             r3 = fp - 1;
                                                                 |         }
    0x0001ad58 cmp r6, r3                                        |         
    0x0001ad5a it lt                                             |         
                                                                 |         if (r6 < r3) {
    0x0001ad5c movlt r6, r3                                      |             r6 = r3;
                                                                 |             goto label_107;
                                                                 |         }
                                                                 |     }
                                                                 | label_107:
    0x0001ad5e cmp r6, 0x3b                                      |     
                                                                 |     if (r6 > 0x3b) {
    0x0001ad60 bgt.w 0x1b2e6                                     |         goto label_108;
                                                                 |     }
    0x0001ad64 movs r3, 0x45                                     |     r3 = 0x45;
    0x0001ad66 add r0, sp, 0x54                                  |     r0 += var_54h;
    0x0001ad68 movs r2, 0                                        |     r2 = 0;
    0x0001ad6a str r2, [sp, 0x10]                                |     var_10h = r2;
                                                                 | label_28:
    0x0001ad6c adds r3, r0, r3                                   |     r3 = r0 + r3;
    0x0001ad6e str r3, [sp, 0x24]                                |     var_24h = r3;
    0x0001ad70 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0001ad72 cmp r3, 0x10                                      |     
    0x0001ad74 it ne                                             |     
                                                                 |     if (r3 == 0x10) {
    0x0001ad76 ldrne r7, [sp, 0x24]                              |         r7 = var_24h;
                                                                 |     }
                                                                 |     if (r3 == 0x10) {
    0x0001ad78 beq.w 0x1b238                                     |         goto label_109;
                                                                 |     }
                                                                 | label_27:
    0x0001ad7c ldr.w r2, [pc, 0x9fc]                             |     
    0x0001ad80 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x0001ad82 str r4, [sp, 0x18]                                |     var_18h = r4;
    0x0001ad84 add r2, pc                                        |     r2 = 0x36504;
    0x0001ad86 add r3, r5                                        |     r3 += r5;
    0x0001ad88 mov r1, r2                                        |     r1 = r2;
    0x0001ad8a add.w r3, r2, r3, lsl 1                           |     r3 = r2 + (r3 << 1);
    0x0001ad8e ldrb.w r2, [r3, 0x918]                            |     r2 = *((r3 + 0x918));
    0x0001ad92 ldrb.w sl, [r3, 0x915]                            |     sl = *((r3 + 0x915));
    0x0001ad96 adds r2, r1, r2                                   |     r2 = r1 + r2;
    0x0001ad98 mov r4, r2                                        |     r4 = r2;
                                                                 |     do {
    0x0001ad9a mov r0, r8                                        |         r0 = r8;
    0x0001ad9c mov r1, sb                                        |         r1 = sb;
    0x0001ad9e mov r2, sl                                        |         r2 = sl;
    0x0001ada0 movs r3, 0                                        |         r3 = 0;
    0x0001ada2 bl 0x5e5a0                                        |         fcn_0005e5a0 (r0, r1, r2, r3);
    0x0001ada6 add r2, r4                                        |         r2 += r4;
    0x0001ada8 ldrb.w r3, [r2, 0x9ac]                            |         r3 = *((r2 + 0x9ac));
    0x0001adac mov r2, r8                                        |         r2 = r8;
    0x0001adae cmp r2, sl                                        |         
    0x0001adb0 mov r8, r0                                        |         r8 = r0;
    0x0001adb2 strb r3, [r7, -0x1]!                              |         *((r7 -= 0x1)) = r3;
    0x0001adb6 mov r3, sb                                        |         r3 = sb;
    0x0001adb8 sbcs r3, r3, 0                                    |         __asm ("sbcs r3, r3, 0");
    0x0001adbc mov sb, r1                                        |         sb = r1;
    0x0001adbe bhs 0x1ad9a                                       |         
                                                                 |     } while (r2 >= sl);
    0x0001adc0 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x0001adc2 ldr r4, [sp, 0x18]                                |     r4 = var_18h;
    0x0001adc4 sub.w r8, r3, r7                                  |     r8 = r3 - r7;
    0x0001adc8 sub.w r2, r6, r8                                  |     r2 = r6 - r8;
    0x0001adcc cmp r2, 0                                         |     
                                                                 |     if (r2 > 0) {
    0x0001adce ble 0x1adde                                       |         
    0x0001add0 sub.w r8, r8, r6                                  |         r8 -= r6;
    0x0001add4 subs r0, r7, r2                                   |         r0 = r7 - r2;
    0x0001add6 add r7, r8                                        |         r7 += r8;
    0x0001add8 movs r1, 0x30                                     |         r1 = 0x30;
    0x0001adda blx 0x5fcc                                        |         fcn_00005fcc ();
                                                                 |     }
    0x0001adde ldr r3, [sp, 0x20]                                |     r3 = var_20h;
                                                                 |     if (r3 != 0) {
    0x0001ade0 cbz r3, 0x1ade8                                   |         
    0x0001ade2 strb r3, [r7, -0x1]                               |         *((r7 - 0x1)) = r3;
    0x0001ade6 subs r7, 1                                        |         r7--;
                                                                 |     }
    0x0001ade8 ldr r3, [sp, 4]                                   |     r3 = var_4h;
                                                                 |     if (r3 != 0) {
    0x0001adea cbz r3, 0x1ae04                                   |         
    0x0001adec ldr r2, [sp, 0xc]                                 |         r2 = var_ch;
    0x0001adee ldr.w r3, [pc, 0x990]                             |         
    0x0001adf2 add r2, r5                                        |         r2 += r5;
    0x0001adf4 add r3, pc                                        |         r3 = 0x3657a;
    0x0001adf6 add.w r2, r3, r2, lsl 1                           |         r2 = r3 + (r2 << 1);
    0x0001adfa ldrb.w r2, [r2, 0x919]                            |         r2 = *((r2 + 0x919));
    0x0001adfe cmp r2, 0                                         |         
                                                                 |         if (r2 != 0) {
    0x0001ae00 bne.w 0x1b7e6                                     |             goto label_110;
                                                                 |         }
                                                                 |     }
                                                                 | label_42:
    0x0001ae04 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x0001ae06 subs r6, r3, r7                                   |     r6 = r3 - r7;
    0x0001ae08 ldr r3, [sp]                                      |     r3 = *(sp);
    0x0001ae0a sub.w r8, fp, r6                                  |     r8 = fp - r6;
    0x0001ae0e eor r5, r3, 1                                     |     r5 = r3 ^ 1;
    0x0001ae12 b 0x1ae2c                                         |     goto label_5;
    0x0001ae14 movs r3, 0x25                                     |     r3 = 0x25;
    0x0001ae16 add.w r8, fp, -1                                  |     r8 = fp + -1;
    0x0001ae1a strb.w r3, [sp, 0x54]                             |     var_54h = r3;
    0x0001ae1e movs r6, 1                                        |     r6 = 1;
    0x0001ae20 ldr r3, [sp]                                      |     r3 = *(sp);
    0x0001ae22 add r7, sp, 0x54                                  |     r7 += var_54h;
    0x0001ae24 eor r5, r3, 1                                     |     r5 = r3 ^ 1;
    0x0001ae28 movs r3, 0                                        |     r3 = 0;
    0x0001ae2a str r3, [sp, 0x10]                                |     var_10h = r3;
                                                                 | label_5:
    0x0001ae2c cmp.w r8, 0                                       |     
    0x0001ae30 ite le                                            |     
                                                                 |     if (r8 > 0) {
    0x0001ae32 movle sb, 0                                       |         sb = 0;
                                                                 |     }
                                                                 |     if (r8 > 0) {
    0x0001ae36 mov.w sb, 1                                       |         sb = 1;
                                                                 |     }
    0x0001ae3a ands.w r5, r5, sb                                 |     r5 &= sb;
                                                                 |     if (r5 != r5) {
    0x0001ae3e beq 0x1ae4a                                       |         
    0x0001ae40 ldr r0, [sp, 0x14]                                |         r0 = var_14h;
    0x0001ae42 mov r1, r8                                        |         r1 = r8;
    0x0001ae44 mov sb, r5                                        |         sb = r5;
    0x0001ae46 bl 0x1a944                                        |         fcn_0001a944 (r0, r1, r2);
                                                                 |     }
    0x0001ae4a ldr r5, [sp, 0x14]                                |     r5 = var_14h;
    0x0001ae4c mov r2, r6                                        |     r2 = r6;
    0x0001ae4e mov r1, r7                                        |     r1 = r7;
    0x0001ae50 mov r0, r5                                        |     r0 = r5;
    0x0001ae52 bl 0x1a768                                        |     fcn_0001a768 (r0, r1, r2);
    0x0001ae56 ldr r3, [sp]                                      |     r3 = *(sp);
    0x0001ae58 tst.w sb, r3                                      |     
                                                                 |     if ((sb & r3) != 0) {
    0x0001ae5c beq 0x1ae66                                       |         
    0x0001ae5e mov r1, r8                                        |         r1 = r8;
    0x0001ae60 mov r0, r5                                        |         r0 = r5;
    0x0001ae62 bl 0x1a944                                        |         fcn_0001a944 (r0, r1, r2);
                                                                 |     }
    0x0001ae66 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
                                                                 |     if (r3 != 0) {
    0x0001ae68 cbz r3, 0x1ae70                                   |         
    0x0001ae6a mov r0, r3                                        |         r0 = r3;
    0x0001ae6c blx 0x6050                                        |         fcn_00006050 ();
                                                                 |     }
                                                                 | label_6:
    0x0001ae70 ldrb r3, [r4, 1]                                  |     r3 = *((r4 + 1));
    0x0001ae72 adds r4, 1                                        |     r4++;
    0x0001ae74 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0001ae76 bne.w 0x1aa08                                     |         goto label_4;
                                                                 |     }
                                                                 | label_10:
    0x0001ae7a ldr.w r2, [pc, 0x908]                             |     r2 = *(0x0001b784);
    0x0001ae7e ldr.w r3, [pc, 0x908]                             |     r3 = *(0x1b78a);
    0x0001ae82 add r2, pc                                        |     r2 += pc;
    0x0001ae84 ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x0001ae86 ldr r2, [r3]                                      |     r2 = *(0x1b78a);
    0x0001ae88 ldr r3, [sp, 0x9c]                                |     r3 = var_9ch;
    0x0001ae8a eors r2, r3                                       |     r2 ^= r3;
    0x0001ae8c mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x0001ae90 bne.w 0x1ba18                                     |         goto label_111;
                                                                 |     }
    0x0001ae94 add sp, 0xa4                                      |     
    0x0001ae96 vpop {d8, d9, d10, d11, d12, d13}                 |     __asm ("vpop {d8, d9, d10, d11, d12, d13}");
    0x0001ae9a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
    0x0001ae9e ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0001aea0 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0001aea2 bne.w 0x1b19c                                     |         goto label_112;
                                                                 |     }
    0x0001aea6 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x0001aea8 ldr r1, [r3], 4                                   |     r1 = *(r3);
                                                                 |     r3 += 4;
    0x0001aeac str r3, [sp, 8]                                   |     var_8h = r3;
    0x0001aeae uxtb r1, r1                                       |     r1 = (int8_t) r1;
                                                                 | label_22:
    0x0001aeb0 ldr r3, [sp]                                      |     r3 = *(sp);
    0x0001aeb2 adds r2, r6, 1                                    |     r2 = r6 + 1;
    0x0001aeb4 strb.w r1, [sp, 0x54]                             |     var_54h = r1;
    0x0001aeb8 eor r5, r3, 1                                     |     r5 = r3 ^ 1;
                                                                 |     if (r2 != r6) {
    0x0001aebc bne.w 0x1b3de                                     |         goto label_113;
                                                                 |     }
    0x0001aec0 movs r3, 0                                        |     r3 = 0;
    0x0001aec2 add.w r8, fp, -1                                  |     r8 = fp + -1;
    0x0001aec6 movs r6, 1                                        |     r6 = 1;
    0x0001aec8 add r7, sp, 0x54                                  |     r7 += var_54h;
    0x0001aeca str r3, [sp, 0x10]                                |     var_10h = r3;
    0x0001aecc b 0x1ae2c                                         |     goto label_5;
    0x0001aece ldr r5, [sp, 0x1c]                                |     r5 = var_1ch;
    0x0001aed0 cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x0001aed2 bne.w 0x1b0b6                                     |         goto label_114;
                                                                 |     }
    0x0001aed6 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x0001aed8 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x0001aeda ldr r2, [r3], 4                                   |     r2 = *(r3);
                                                                 |     r3 += 4;
    0x0001aede ldr r1, [r0, 0xc]                                 |     r1 = *((r0 + 0xc));
    0x0001aee0 str r3, [sp, 8]                                   |     var_8h = r3;
    0x0001aee2 str r1, [r2]                                      |     *(r2) = r1;
    0x0001aee4 mov r2, r5                                        |     r2 = r5;
    0x0001aee6 mov r1, r7                                        |     r1 = r7;
    0x0001aee8 bl 0x1a768                                        |     fcn_0001a768 (r0, r1, r2);
    0x0001aeec b 0x1ae70                                         |     goto label_6;
    0x0001aeee ldr.w r3, [pc, 0x89c]                             |     
    0x0001aef2 ldr r1, [sp, 0xc]                                 |     r1 = var_ch;
    0x0001aef4 add r3, pc                                        |     r3 = 0x36686;
    0x0001aef6 add r1, r5                                        |     r1 += r5;
    0x0001aef8 add.w r3, r3, r1, lsl 1                           |     r3 += (r1 << 1);
    0x0001aefc ldrb.w r3, [r3, 0x916]                            |     r3 = *((r3 + 0x916));
    0x0001af00 tst.w r3, 1                                       |     
    0x0001af04 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
                                                                 |     if ((r3 & 1) == 0) {
    0x0001af06 beq.w 0x1b0fa                                     |         goto label_115;
                                                                 |     }
    0x0001af0a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0001af0c bne.w 0x1b3fa                                     |         goto label_103;
                                                                 |     }
    0x0001af10 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x0001af12 adds r3, 4                                        |     r3 += 4;
                                                                 | label_40:
    0x0001af14 ldr r1, [sp, 8]                                   |     r1 = var_8h;
    0x0001af16 ldr.w r8, [r1]                                    |     r8 = *(r1);
    0x0001af1a str r3, [sp, 8]                                   |     var_8h = r3;
    0x0001af1c asr.w sb, r8, 0x1f                                |     sb = r8 >> 0x1f;
    0x0001af20 cmp.w sb, 0                                       |     
                                                                 |     if (sb >= 0) {
    0x0001af24 bge.w 0x1ad32                                     |         goto label_7;
                                                                 |     }
                                                                 | label_35:
    0x0001af28 rsbs.w r8, r8, 0                                  |     r8 -= ;
    0x0001af2c mov.w r3, 0x2d                                    |     r3 = 0x2d;
    0x0001af30 sbc.w sb, sb, sb, lsl 1                           |     __asm ("sbc.w sb, sb, sb, lsl 1");
    0x0001af34 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x0001af36 b 0x1ad46                                         |     goto label_8;
    0x0001af38 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x0001af3a ldr.w r8, [r3, 4]                                 |     r8 = *((r3 + 4));
    0x0001af3e mov sb, r3                                        |     sb = r3;
    0x0001af40 ldr r5, [sb], 8                                   |     r5 = *(sb);
                                                                 |     sb += 8;
    0x0001af44 lsl.w r6, r8, 3                                   |     r6 = r8 << 3;
    0x0001af48 add.w r3, r6, r8                                  |     r3 = r6 + r8;
    0x0001af4c add.w r3, r5, r3, lsl 3                           |     r3 = r5 + (r3 << 3);
    0x0001af50 ldr r1, [r3, 0xc]                                 |     r1 = *((r3 + 0xc));
                                                                 |     if (r1 == 0) {
    0x0001af52 cbz r1, 0x1af80                                   |         goto label_116;
                                                                 |     }
    0x0001af54 ldrb r2, [r1]                                     |     r2 = *(r1);
                                                                 |     if (r2 == 0) {
    0x0001af56 cbz r2, 0x1af68                                   |         goto label_117;
                                                                 |     }
    0x0001af58 mov r3, r1                                        |     r3 = r1;
                                                                 |     do {
    0x0001af5a ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x0001af5e cmp r2, 0                                         |         
    0x0001af60 bne 0x1af5a                                       |         
                                                                 |     } while (r2 != 0);
    0x0001af62 subs r3, r3, r1                                   |     r3 -= r1;
    0x0001af64 bic r2, r3, 0xc0000000                            |     r2 = BIT_MASK (r3, 0xc0000000);
                                                                 | label_117:
    0x0001af68 ldr.w sl, [sp, 0x14]                              |     sl = var_14h;
    0x0001af6c mov r0, sl                                        |     r0 = sl;
    0x0001af6e bl 0x1a768                                        |     fcn_0001a768 (r0, r1, r2);
    0x0001af72 ldr.w r1, [pc, 0x81c]                             |     r1 = *(0x0001b790);
    0x0001af76 movs r2, 1                                        |     r2 = 1;
    0x0001af78 mov r0, sl                                        |     r0 = sl;
    0x0001af7a add r1, pc                                        |     r1 += pc;
    0x0001af7c bl 0x1a768                                        |     fcn_0001a768 (r0, r1, r2);
                                                                 | label_116:
    0x0001af80 add r6, r8                                        |     r6 += r8;
    0x0001af82 add.w r5, r5, r6, lsl 3                           |     r5 += (r6 << 3);
    0x0001af86 ldr r1, [r5, 0x10]                                |     r1 = *((r5 + 0x10));
    0x0001af88 mov r2, r1                                        |     r2 = r1;
                                                                 |     if (r1 == 0) {
    0x0001af8a cbz r1, 0x1afa0                                   |         goto label_118;
                                                                 |     }
    0x0001af8c ldrb r2, [r1]                                     |     r2 = *(r1);
                                                                 |     if (r2 == 0) {
    0x0001af8e cbz r2, 0x1afa0                                   |         goto label_118;
                                                                 |     }
    0x0001af90 mov r3, r1                                        |     r3 = r1;
                                                                 |     do {
    0x0001af92 ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x0001af96 cmp r2, 0                                         |         
    0x0001af98 bne 0x1af92                                       |         
                                                                 |     } while (r2 != 0);
    0x0001af9a subs r3, r3, r1                                   |     r3 -= r1;
    0x0001af9c bic r2, r3, 0xc0000000                            |     r2 = BIT_MASK (r3, 0xc0000000);
                                                                 | label_118:
    0x0001afa0 str.w sb, [sp, 8]                                 |     __asm ("str.w sb, [var_8h]");
                                                                 | label_43:
    0x0001afa4 ldr r5, [sp, 0x14]                                |     r5 = var_14h;
    0x0001afa6 mov r0, r5                                        |     r0 = r5;
    0x0001afa8 bl 0x1a768                                        |     fcn_0001a768 (r0, r1, r2);
    0x0001afac movs r2, 0                                        |     r2 = 0;
    0x0001afae mov r1, r7                                        |     r1 = r7;
    0x0001afb0 mov r0, r5                                        |     r0 = r5;
    0x0001afb2 bl 0x1a768                                        |     fcn_0001a768 (r0, r1, r2);
    0x0001afb6 b 0x1ae70                                         |     goto label_6;
    0x0001afb8 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x0001afba ldr r1, [r3], 4                                   |     r1 = *(r3);
                                                                 |     r3 += 4;
    0x0001afbe cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0001afc0 beq.w 0x1b44a                                     |         goto label_119;
                                                                 |     }
    0x0001afc4 ldr r2, [r1, 4]                                   |     r2 = *((r1 + 4));
    0x0001afc6 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0001afc8 bne.w 0x1b812                                     |         goto label_120;
                                                                 |     }
                                                                 | label_33:
    0x0001afcc ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x0001afce mov r1, r7                                        |     r1 = r7;
    0x0001afd0 str r3, [sp, 8]                                   |     var_8h = r3;
    0x0001afd2 bl 0x1a768                                        |     fcn_0001a768 (r0, r1, r2);
    0x0001afd6 b 0x1ae70                                         |     goto label_6;
                                                                 | label_79:
    0x0001afd8 mov r0, r4                                        |     r0 = r4;
    0x0001afda b 0x1afe2                                         |     
                                                                 |     while (r3 != 0x25) {
    0x0001afdc cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0001afde beq.w 0x1b938                                     |             goto label_121;
                                                                 |         }
    0x0001afe2 ldrb r3, [r0, 1]!                                 |         r3 = *((r0 += 1));
    0x0001afe6 cmp r3, 0x25                                      |         
    0x0001afe8 bne 0x1afdc                                       |         
                                                                 |     }
    0x0001afea subs r2, r0, r4                                   |     r2 = r0 - r4;
    0x0001afec mov r1, r4                                        |     r1 = r4;
    0x0001afee mov r7, r4                                        |     r7 = r4;
    0x0001aff0 mov r4, r0                                        |     r4 = r0;
    0x0001aff2 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x0001aff4 adds r4, 1                                        |     r4++;
    0x0001aff6 bl 0x1a768                                        |     fcn_0001a768 (r0, r1, r2);
    0x0001affa ldrb r1, [r4]                                     |     r1 = *(r4);
    0x0001affc cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x0001affe bne.w 0x1aa18                                     |         goto label_9;
                                                                 |     }
                                                                 | label_80:
    0x0001b002 ldr.w r1, [pc, 0x790]                             |     r1 = *(0x0001b794);
    0x0001b006 movs r2, 1                                        |     r2 = 1;
    0x0001b008 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x0001b00a add r1, pc                                        |     r1 += pc;
    0x0001b00c bl 0x1a768                                        |     fcn_0001a768 (r0, r1, r2);
    0x0001b010 b 0x1ae7a                                         |     goto label_10;
                                                                 | label_81:
    0x0001b012 sub.w r0, r1, 0x30                                |     r0 = r1 - 0x30;
    0x0001b016 mov.w fp, 0                                       |     
    0x0001b01a cmp r0, 9                                         |     
                                                                 |     if (r0 > 9) {
    0x0001b01c bhi.w 0x1aa72                                     |         goto label_11;
                                                                 |     }
                                                                 |     do {
    0x0001b020 add.w fp, fp, fp, lsl 2                           |         
    0x0001b024 add.w r1, r1, fp, lsl 1                           |         r1 += (fp << 1);
    0x0001b028 sub.w fp, r1, 0x30                                |         
    0x0001b02c ldrb r1, [r4, 1]!                                 |         r1 = *((r4 += 1));
    0x0001b030 sub.w r0, r1, 0x30                                |         r0 = r1 - 0x30;
    0x0001b034 cmp r0, 9                                         |         
    0x0001b036 bls 0x1b020                                       |         
                                                                 |     } while (r0 < 9);
    0x0001b038 b 0x1aa72                                         |     goto label_11;
                                                                 | label_86:
    0x0001b03a ldr.w r1, [pc, 0x75c]                             |     
    0x0001b03e lsls r0, r5, 1                                    |     r0 = r5 << 1;
    0x0001b040 str r0, [sp, 0xc]                                 |     var_ch = r0;
    0x0001b042 add r0, r5                                        |     r0 += r5;
    0x0001b044 add r1, pc                                        |     r1 = 0x367e2;
    0x0001b046 add.w r1, r1, r0, lsl 1                           |     r1 += (r0 << 1);
    0x0001b04a ldrb.w r1, [r1, 0x916]                            |     r1 = *((r1 + 0x916));
    0x0001b04e lsls r1, r1, 0x1e                                 |     r1 <<= 0x1e;
                                                                 |     if (r1 < r1) {
    0x0001b050 bmi.w 0x1ae7a                                     |         goto label_10;
                                                                 |     }
    0x0001b054 b 0x1aaec                                         |     goto label_12;
                                                                 | label_82:
    0x0001b056 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0001b058 ldrd r1, r5, [r0]                                 |     __asm ("ldrd r1, r5, [r0]");
    0x0001b05c cmp r1, r5                                        |     
    0x0001b05e it le                                             |     
                                                                 |     if (r1 <= r5) {
    0x0001b060 movle fp, 0                                       |         goto label_122;
                                                                 |     }
                                                                 |     if (r1 <= r5) {
                                                                 | label_122:
    0x0001b064 ble.w 0x1aa6e                                     |         goto label_13;
                                                                 |     }
    0x0001b068 ldr r1, [r0, 8]                                   |     r1 = *((r0 + 8));
    0x0001b06a str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x0001b06c mov r3, r0                                        |     r3 = r0;
    0x0001b06e str r2, [sp, 0x18]                                |     var_18h = r2;
    0x0001b070 ldr.w r0, [r1, r5, lsl 2]                         |     offset_0 = r5 << 2;
                                                                 |     r0 = *((r1 + offset_0));
    0x0001b074 adds r5, 1                                        |     r5++;
    0x0001b076 str r5, [r3, 4]                                   |     *((r3 + 4)) = r5;
    0x0001b078 blx 0x6718                                        |     fcn_00006718 ();
    0x0001b07c ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x0001b07e mov fp, r0                                        |     
    0x0001b080 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x0001b082 b 0x1aa60                                         |     goto label_14;
                                                                 | label_83:
    0x0001b084 sub.w r0, r1, 0x30                                |     r0 = r1 - 0x30;
    0x0001b088 adds r4, 1                                        |     r4++;
    0x0001b08a cmp r0, 9                                         |     
    0x0001b08c mov.w r6, 0                                       |     r6 = 0;
                                                                 |     if (r0 > 9) {
    0x0001b090 bhi.w 0x1aa9e                                     |         goto label_15;
                                                                 |     }
                                                                 |     do {
    0x0001b094 add.w r6, r6, r6, lsl 2                           |         r6 += (r6 << 2);
    0x0001b098 add.w r1, r1, r6, lsl 1                           |         r1 += (r6 << 1);
    0x0001b09c sub.w r6, r1, 0x30                                |         r6 = r1 - 0x30;
    0x0001b0a0 ldrb r1, [r4, 1]!                                 |         r1 = *((r4 += 1));
    0x0001b0a4 sub.w r0, r1, 0x30                                |         r0 = r1 - 0x30;
    0x0001b0a8 cmp r0, 9                                         |         
    0x0001b0aa bls 0x1b094                                       |         
                                                                 |     } while (r0 < 9);
    0x0001b0ac b 0x1aa9e                                         |     goto label_15;
                                                                 | label_78:
    0x0001b0ae strd r1, r1, [sp, 0x28]                           |     __asm ("strd r1, r1, [var_28h]");
    0x0001b0b2 str r1, [sp, 0x1c]                                |     var_1ch = r1;
    0x0001b0b4 b 0x1a9dc                                         |     goto label_16;
                                                                 | label_114:
    0x0001b0b6 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x0001b0b8 movs r2, 0                                        |     r2 = 0;
    0x0001b0ba mov r1, r7                                        |     r1 = r7;
    0x0001b0bc bl 0x1a768                                        |     fcn_0001a768 (r0, r1, r2);
    0x0001b0c0 b 0x1ae70                                         |     goto label_6;
                                                                 | label_102:
    0x0001b0c2 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0001b0c4 bne.w 0x1b420                                     |         goto label_123;
                                                                 |     }
    0x0001b0c8 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x0001b0ca cmp.w ip, 0                                       |     
                                                                 |     if (ip == 0) {
    0x0001b0ce beq.w 0x1b7ce                                     |         goto label_124;
                                                                 |     }
    0x0001b0d2 adds r3, 7                                        |     r3 += 7;
    0x0001b0d4 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x0001b0d6 bic r3, r3, 7                                     |     r3 = BIT_MASK (r3, 7);
    0x0001b0da ldr.w sb, [r3, 4]                                 |     sb = *((r3 + 4));
    0x0001b0dc str r0, [sp, 0x10]                                |     *((sp + 0x10)) = r0;
    0x0001b0de ldr r8, [r3], 8                                   |     r8 = *(r3);
                                                                 |     r3 += 8;
    0x0001b0e2 str r2, [sp, 0x20]                                |     var_20h = r2;
    0x0001b0e4 str r3, [sp, 8]                                   |     var_8h = r3;
                                                                 | label_17:
    0x0001b0e6 orrs.w r3, r8, sb                                 |     r3 = r8 | sb;
                                                                 |     if (r3 != r8) {
    0x0001b0ea bne.w 0x1ad46                                     |         goto label_8;
                                                                 |     }
                                                                 | label_32:
    0x0001b0ee mov.w r8, 0                                       |     r8 = 0;
    0x0001b0f2 mov sb, r8                                        |     sb = r8;
    0x0001b0f4 str.w r8, [sp, 4]                                 |     __asm ("str.w r8, [var_4h]");
    0x0001b0f8 b 0x1ad46                                         |     goto label_8;
                                                                 | label_115:
    0x0001b0fa cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0001b0fc bne.w 0x1b420                                     |         goto label_123;
                                                                 |     }
    0x0001b100 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x0001b102 adds r3, 4                                        |     r3 += 4;
                                                                 | label_41:
    0x0001b104 ldr r2, [sp, 8]                                   |     r2 = var_8h;
    0x0001b106 mov.w sb, 0                                       |     sb = 0;
    0x0001b10a str r3, [sp, 8]                                   |     var_8h = r3;
    0x0001b10c str.w sb, [sp, 0x20]                              |     __asm ("str.w sb, [var_20h]");
    0x0001b110 ldr.w r8, [r2]                                    |     r8 = *(r2);
    0x0001b114 b 0x1b0e6                                         |     goto label_17;
                                                                 | label_91:
    0x0001b116 str r3, [sp, 8]                                   |     var_8h = r3;
    0x0001b118 bl 0xd300                                         |     r0 = fcn_0000d300 (r0, r1, r2, r3, r4);
    0x0001b11c mov r7, r0                                        |     r7 = r0;
    0x0001b11e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0001b120 beq.w 0x1b984                                     |         goto label_125;
                                                                 |     }
    0x0001b124 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x0001b126 str r0, [sp, 0x10]                                |     var_10h = r0;
    0x0001b128 cmp.w sl, 0                                       |     
                                                                 |     if (sl != 0) {
    0x0001b12c bne.w 0x1abdc                                     |         goto label_18;
                                                                 |     }
                                                                 | label_92:
    0x0001b130 mov r6, sl                                        |     r6 = sl;
    0x0001b132 cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x0001b134 bne.w 0x1abe8                                     |         goto label_19;
                                                                 |     }
    0x0001b138 ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x0001b13a mov r8, fp                                        |     r8 = fp;
    0x0001b13c mov r6, r5                                        |     r6 = r5;
    0x0001b13e mov r2, r7                                        |     r2 = r7;
    0x0001b140 str r3, [sp, 8]                                   |     var_8h = r3;
    0x0001b142 b 0x1ac1c                                         |     goto label_20;
                                                                 | label_99:
    0x0001b144 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x0001b146 ldrd r2, r3, [r1]                                 |     __asm ("ldrd r2, r3, [r1]");
    0x0001b14a cmp r2, r3                                        |     
                                                                 |     if (r2 <= r3) {
    0x0001b14c ble.w 0x1b75e                                     |         goto label_126;
                                                                 |     }
    0x0001b150 ldr r2, [r1, 8]                                   |     r2 = *((r1 + 8));
    0x0001b152 ldr.w r0, [r2, r3, lsl 2]                         |     offset_1 = r3 << 2;
                                                                 |     r0 = *((r2 + offset_1));
    0x0001b156 adds r3, 1                                        |     r3++;
    0x0001b158 str r3, [r1, 4]                                   |     *((r1 + 4)) = r3;
    0x0001b15a blx 0x5f0c                                        |     fcn_00005f0c ();
    0x0001b15e ldr r1, [sp, 8]                                   |     r1 = var_8h;
    0x0001b160 mov r7, r0                                        |     r7 = r0;
    0x0001b162 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0001b164 beq.w 0x1b760                                     |         goto label_100;
                                                                 |     }
    0x0001b168 movs r3, 0                                        |     r3 = 0;
    0x0001b16a str r3, [sp, 0x10]                                |     var_10h = r3;
    0x0001b16c adds r3, r6, 1                                    |     r3 = r6 + 1;
                                                                 |     if (r3 == r6) {
    0x0001b16e beq.w 0x1acce                                     |         goto label_21;
                                                                 |     }
                                                                 | label_39:
    0x0001b172 ldr r3, [sp]                                      |     r3 = *(sp);
    0x0001b174 subs r2, r7, 1                                    |     r2 = r7 - 1;
    0x0001b176 eor r5, r3, 1                                     |     r5 = r3 ^ 1;
    0x0001b17a movs r3, 0                                        |     r3 = 0;
                                                                 |     if (r6 != 0) {
    0x0001b17c cbnz r6, 0x1b18a                                  |         goto label_127;
                                                                 |     }
    0x0001b17e b.w 0x1ba08                                       |     goto label_128;
                                                                 |     do {
    0x0001b182 adds r3, 1                                        |         r3++;
    0x0001b184 cmp r3, r6                                        |         
                                                                 |         if (r3 == r6) {
    0x0001b186 beq.w 0x1b808                                     |             goto label_129;
                                                                 |         }
                                                                 | label_127:
    0x0001b18a ldrb r0, [r2, 1]!                                 |         r0 = *((r2 += 1));
    0x0001b18e cmp r0, 0                                         |         
    0x0001b190 bne 0x1b182                                       |         
                                                                 |     } while (r0 != 0);
    0x0001b192 sub.w r8, fp, r3                                  |     r8 = fp - r3;
    0x0001b196 mov r6, r3                                        |     r6 = r3;
    0x0001b198 str r1, [sp, 8]                                   |     var_8h = r1;
    0x0001b19a b 0x1ae2c                                         |     goto label_5;
                                                                 | label_112:
    0x0001b19c ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x0001b19e ldrd r2, r3, [r1]                                 |     __asm ("ldrd r2, r3, [r1]");
    0x0001b1a2 cmp r2, r3                                        |     
    0x0001b1a4 it le                                             |     
                                                                 |     if (r2 <= r3) {
    0x0001b1a6 movle r1, 0                                       |         r1 = 0;
                                                                 |         goto label_130;
                                                                 |     }
                                                                 |     if (r2 <= r3) {
                                                                 | label_130:
    0x0001b1a8 ble.w 0x1aeb0                                     |         goto label_22;
                                                                 |     }
    0x0001b1ac ldr r2, [r1, 8]                                   |     r2 = *((r1 + 8));
    0x0001b1ae ldr.w r0, [r2, r3, lsl 2]                         |     offset_2 = r3 << 2;
                                                                 |     r0 = *((r2 + offset_2));
    0x0001b1b2 adds r3, 1                                        |     r3++;
    0x0001b1b4 str r3, [r1, 4]                                   |     *((r1 + 4)) = r3;
    0x0001b1b6 blx 0x5f0c                                        |     r0 = fcn_00005f0c ();
    0x0001b1ba mov r1, r0                                        |     r1 = r0;
    0x0001b1bc cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0001b1be beq.w 0x1aeb0                                     |         goto label_22;
                                                                 |     }
    0x0001b1c2 ldrb r1, [r0]                                     |     r1 = *(r0);
    0x0001b1c4 b 0x1aeb0                                         |     goto label_22;
                                                                 | label_95:
    0x0001b1c6 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0001b1c8 ldrd r1, r7, [r0]                                 |     __asm ("ldrd r1, r7, [r0]");
    0x0001b1cc cmp r1, r7                                        |     
                                                                 |     if (r1 > r7) {
    0x0001b1ce bgt.w 0x1b5e4                                     |         goto label_131;
                                                                 |     }
    0x0001b1d2 adds r7, r6, 1                                    |     r7 = r6 + 1;
    0x0001b1d4 vmov.i64 d13, 0                                   |     __asm ("vmov.i64 d13, 0");
                                                                 |     if (r7 != r6) {
    0x0001b1d8 bne.w 0x1ac48                                     |         goto label_23;
                                                                 |     }
    0x0001b1dc movs r1, 1                                        |     r1 = 1;
    0x0001b1de movs r6, 6                                        |     r6 = 6;
    0x0001b1e0 b 0x1ac5c                                         |     goto label_24;
                                                                 | label_87:
    0x0001b1e2 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x0001b1e4 ldrd r3, r1, [r2]                                 |     __asm ("ldrd r3, r1, [r2]");
    0x0001b1e8 cmp r3, r1                                        |     
    0x0001b1ea ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x0001b1ec str r3, [sp, 4]                                   |     var_4h = r3;
                                                                 |     if (r3 <= r1) {
    0x0001b1ee ble.w 0x1b736                                     |         goto label_88;
                                                                 |     }
    0x0001b1f2 mov r3, r2                                        |     r3 = r2;
    0x0001b1f4 ldr r2, [r2, 8]                                   |     r2 = *((r2 + 8));
    0x0001b1f6 ldr.w r0, [r2, r1, lsl 2]                         |     offset_3 = r1 << 2;
                                                                 |     r0 = *((r2 + offset_3));
    0x0001b1fa adds r1, 1                                        |     r1++;
    0x0001b1fc str r1, [r3, 4]                                   |     *((r3 + 4)) = r1;
    0x0001b1fe blx 0x5f0c                                        |     r0 = fcn_00005f0c ();
    0x0001b202 mov sb, r0                                        |     sb = r0;
    0x0001b204 b 0x1ab80                                         |     goto label_25;
                                                                 | label_84:
    0x0001b206 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0001b208 ldrd r1, r5, [r0]                                 |     __asm ("ldrd r1, r5, [r0]");
    0x0001b20c cmp r1, r5                                        |     
    0x0001b20e it le                                             |     
                                                                 |     if (r1 <= r5) {
    0x0001b210 movle r6, 0                                       |         r6 = 0;
                                                                 |         goto label_132;
                                                                 |     }
                                                                 |     if (r1 <= r5) {
                                                                 | label_132:
    0x0001b212 ble.w 0x1aa9a                                     |         goto label_26;
                                                                 |     }
    0x0001b216 ldr r1, [r0, 8]                                   |     r1 = *((r0 + 8));
    0x0001b218 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x0001b21a mov r3, r0                                        |     r3 = r0;
    0x0001b21c str r2, [sp, 0x18]                                |     var_18h = r2;
    0x0001b21e ldr.w r0, [r1, r5, lsl 2]                         |     offset_4 = r5 << 2;
                                                                 |     r0 = *((r1 + offset_4));
    0x0001b222 adds r5, 1                                        |     r5++;
    0x0001b224 str r5, [r3, 4]                                   |     *((r3 + 4)) = r5;
    0x0001b226 blx 0x6718                                        |     r0 = fcn_00006718 ();
    0x0001b22a eor.w r6, r0, r0, asr 31                          |     r6 = r0 ^ (r0 >> 31);
    0x0001b22e ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x0001b230 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x0001b232 sub.w r6, r6, r0, asr 31                          |     r6 -= (r0 >> 31);
    0x0001b236 b 0x1aa9a                                         |     goto label_26;
                                                                 | label_109:
    0x0001b238 adds.w r2, r8, sb                                 |     r2 = r8 + sb;
    0x0001b23c movw r0, 0xcccd                                   |     
    0x0001b240 adc r2, r2, 0                                     |     __asm ("adc r2, r2, 0");
    0x0001b244 movt r0, 0xcccc                                   |     r0 = 0xcccccccd;
    0x0001b248 umull r3, r1, r0, r2                              |     r3:r1 = r0 * r2;
    0x0001b24c mov.w sl, -0x33333334                             |     sl = -0x33333334;
    0x0001b250 movs r7, 5                                        |     r7 = 5;
    0x0001b252 bic r3, r1, 3                                     |     r3 = BIT_MASK (r1, 3);
    0x0001b256 add.w r3, r3, r1, lsr 2                           |     r3 += (r1 >> 2);
    0x0001b25a subs r2, r2, r3                                   |     r2 -= r3;
    0x0001b25c subs.w r3, r8, r2                                 |     r3 = r8 - r2;
    0x0001b260 mul r1, sl, r3                                    |     r1 = sl * r3;
    0x0001b264 sbc lr, sb, 0                                     |     __asm ("sbc lr, sb, 0");
    0x0001b268 umull r3, ip, r3, r0                              |     r3:ip = r3 * r0;
    0x0001b26c mla r1, r0, lr, r1                                |     __asm ("mla r1, r0, lr, r1");
    0x0001b270 add ip, r1                                        |     
    0x0001b272 and r1, r3, 1                                     |     r1 = r3 & 1;
    0x0001b276 umull r1, r7, r1, r7                              |     r1:r7 = r1 * r7;
    0x0001b27a adds r1, r1, r2                                   |     r1 += r2;
    0x0001b27c lsrs r2, r3, 1                                    |     r2 = r3 >> 1;
    0x0001b27e cmp r1, 3                                         |     
    0x0001b280 orr.w r2, r2, ip, lsl 31                          |     r2 |= (ip << 31);
    0x0001b284 lsr.w ip, ip, 1                                   |     
                                                                 |     if (r1 <= 3) {
    0x0001b288 bgt 0x1b2d4                                       |         
    0x0001b28a mul r3, sl, r2                                    |         r3 = sl * r2;
    0x0001b28e mov.w r7, -0x66666667                             |         r7 = -0x66666667;
    0x0001b292 mla r3, r0, ip, r3                                |         __asm ("mla r3, r0, ip, r3");
    0x0001b296 umull r2, r0, r2, r0                              |         r2:r0 = r2 * r0;
    0x0001b29a adds.w r2, r2, 0x33333333                         |         r2 += 0x33333333;
    0x0001b29e add r3, r0                                        |         r3 += r0;
    0x0001b2a0 lsr.w r0, r2, 1                                   |         r0 = r2 >> 1;
    0x0001b2a4 adc r3, r3, 0x33333333                            |         __asm ("adc r3, r3, aav.0x000000ff");
    0x0001b2a8 orr.w r0, r0, r3, lsl 31                          |         r0 |= (r3 << 31);
    0x0001b2ac lsrs r3, r3, 1                                    |         r3 >>= 1;
    0x0001b2ae orr.w r3, r3, r2, lsl 31                          |         r3 |= (r2 << 31);
    0x0001b2b2 movw r2, 0x9999                                   |         
    0x0001b2b6 movt r2, 0x1999                                   |         r2 = 0x19999999;
    0x0001b2ba cmp r7, r0                                        |         
    0x0001b2bc sbcs r2, r3                                       |         __asm ("sbcs r2, r3");
                                                                 |         if (r7 < r0) {
    0x0001b2be bhs 0x1b2d4                                       |             
    0x0001b2c0 ldr.w r3, [pc, 0x4d8]                             |             
    0x0001b2c4 add r3, pc                                        |             r3 = 0x36a64;
    0x0001b2c6 add.w r3, r3, r1, lsl 1                           |             r3 += (r1 << 1);
    0x0001b2ca ldrb.w r2, [r3, 0x9a1]                            |             r2 = *((r3 + 0x9a1));
    0x0001b2ce ldrb.w r3, [r3, 0x9a0]                            |             r3 = *((r3 + 0x9a0));
    0x0001b2d2 b 0x1b2d8                                         |             
                                                                 |         }
                                                                 |     } else {
    0x0001b2d4 movs r3, 0x74                                     |         r3 = 0x74;
    0x0001b2d6 movs r2, 0x68                                     |         r2 = 0x68;
                                                                 |     }
    0x0001b2d8 ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x0001b2da subs r7, r1, 2                                    |     r7 = r1 - 2;
    0x0001b2dc strb r2, [r1, -0x1]                               |     *((r1 - 0x1)) = r2;
    0x0001b2e0 strb r3, [r1, -0x2]                               |     *((r1 - 0x2)) = r3;
    0x0001b2e4 b 0x1ad7c                                         |     goto label_27;
                                                                 | label_108:
    0x0001b2e6 add.w r0, r6, 0xa                                 |     r0 = r6 + 0xa;
    0x0001b2ea bl 0xd300                                         |     r0 = fcn_0000d300 (r0, r1, r2, r3, r4);
    0x0001b2ee cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0001b2f0 beq.w 0x1b984                                     |         goto label_125;
                                                                 |     }
    0x0001b2f4 add.w r3, r6, 9                                   |     r3 = r6 + 9;
    0x0001b2f8 str r0, [sp, 0x10]                                |     var_10h = r0;
    0x0001b2fa b 0x1ad6c                                         |     goto label_28;
                                                                 | label_94:
    0x0001b2fc adds r6, 1                                        |     r6++;
    0x0001b2fe mov r2, r6                                        |     r2 = r6;
                                                                 | label_55:
    0x0001b300 ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x0001b302 add r2, r7                                        |     r2 += r7;
    0x0001b304 strb.w r8, [r7, r1]                               |     *((r7 + r1)) = r8;
    0x0001b308 sub.w r8, fp, r6                                  |     r8 = fp - r6;
    0x0001b30c str r3, [sp, 8]                                   |     var_8h = r3;
    0x0001b30e b 0x1ac1c                                         |     goto label_20;
                                                                 | label_97:
    0x0001b310 vneg.f64 d13, d13                                 |     __asm ("vneg.f64 d13, d13");
    0x0001b314 movs r2, 0x2d                                     |     r2 = 0x2d;
    0x0001b316 str r2, [sp, 0x20]                                |     var_20h = r2;
                                                                 | label_34:
    0x0001b318 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x0001b31a cmp r2, 4                                         |     
    0x0001b31c ite ne                                            |     
                                                                 |     if (r2 == 4) {
    0x0001b31e movne r1, 0                                       |         r1 = 0;
                                                                 |     }
                                                                 |     if (r2 != 4) {
    0x0001b320 andeq r1, r1, 1                                   |         r1 &= 1;
                                                                 |     }
    0x0001b324 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0001b326 beq 0x1b3d4                                       |         goto label_133;
                                                                 |     }
    0x0001b328 subs r6, 1                                        |     r6--;
                                                                 |     if (r6 == 1) {
    0x0001b32a beq.w 0x1b9a8                                     |         goto label_134;
                                                                 |     }
                                                                 | label_29:
    0x0001b32e vmov.f64 d16, 5.000000e-01                        |     __asm ("vmov.f64 d16, 5");
    0x0001b332 mov r2, r6                                        |     r2 = r6;
                                                                 |     do {
    0x0001b334 subs r2, 1                                        |         r2--;
    0x0001b336 vmul.f64 d16, d16, d8                             |         __asm ("vmul.f64 d16, d16, d8");
    0x0001b33a bne 0x1b334                                       |         
                                                                 |     } while (r2 != 1);
                                                                 | label_30:
    0x0001b33c ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x0001b33e cmp r2, 2                                         |     
    0x0001b340 it eq                                             |     
                                                                 |     if (r2 == 2) {
    0x0001b342 vaddeq d13, d13, d16                              |         __asm ("vaddeq d13, d13, d16");
                                                                 |     }
                                                                 | label_52:
    0x0001b346 vstr d13, [sp, 0x40]                              |     __asm ("vstr d13, [sp, 0x40]");
    0x0001b34a ldrd r0, r1, [sp, 0x40]                           |     __asm ("ldrd r0, r1, [var_40h]");
    0x0001b34e strd r0, r1, [sp, 0x48]                           |     __asm ("strd r0, r1, [var_48h]");
    0x0001b352 vldr d18, [sp, 0x40]                              |     __asm ("vldr d18, [sp, 0x40]");
    0x0001b356 vldr d17, [sp, 0x48]                              |     __asm ("vldr d17, [sp, 0x48]");
    0x0001b35a vcmp.f64 d18, d17                                 |     __asm ("vcmp.f64 d18, d17");
    0x0001b35e vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
                                                                 |     if (r2 == 2) {
    0x0001b362 bne 0x1b3be                                       |         
    0x0001b364 vcmpe.f64 d13, 0                                  |         __asm ("vcmpe.f64 d13, 0");
    0x0001b368 vmrs apsr_nzcv, fpscr                             |         __asm ("vmrs apsr_nzcv, fpscr");
    0x0001b36c it le                                             |         
                                                                 |         if (r2 > 2) {
    0x0001b36e movle sb, 0                                       |             sb = 0;
                                                                 |         }
                                                                 |         if (r2 > 2) {
    0x0001b372 bgt 0x1b474                                       |             goto label_135;
                                                                 |         }
                                                                 | label_36:
    0x0001b374 ldr r2, [sp, 0x18]                                |         r2 = var_18h;
    0x0001b376 cmp r2, 2                                         |         
                                                                 |         if (r2 == 2) {
    0x0001b378 beq.w 0x1b604                                     |             goto label_136;
                                                                 |         }
    0x0001b37c vadd.f64 d13, d13, d16                            |         __asm ("vadd.f64 d13, d13, d16");
    0x0001b380 vmov.f64 d16, 1.000000e+01                        |         __asm ("vmov.f64 d16, 1");
    0x0001b384 vcmpe.f64 d13, d16                                |         __asm ("vcmpe.f64 d13, d16");
    0x0001b388 vmrs apsr_nzcv, fpscr                             |         __asm ("vmrs apsr_nzcv, fpscr");
                                                                 |         if (r2 >= 2) {
    0x0001b38c blt 0x1b396                                       |             
    0x0001b38e vmul.f64 d13, d13, d8                             |             __asm ("vmul.f64 d13, d13, d8");
    0x0001b392 add.w sb, sb, 1                                   |             sb++;
                                                                 |         }
    0x0001b396 ldr r2, [sp, 0x18]                                |         r2 = var_18h;
    0x0001b398 cmp r2, 4                                         |         
                                                                 |         if (r2 != 4) {
    0x0001b39a bne.w 0x1b9be                                     |             goto label_137;
                                                                 |         }
    0x0001b39e ldr r2, [sp, 4]                                   |         r2 = var_4h;
    0x0001b3a0 cmn.w sb, 4                                       |         
    0x0001b3a4 it ge                                             |         
                                                                 |         if (sb >= 4) {
    0x0001b3a6 cmpge r6, sb                                      |             __asm ("cmpge r6, sb");
                                                                 |         }
    0x0001b3a8 eor r2, r2, 1                                     |         r2 ^= 1;
    0x0001b3ac str r2, [sp, 0x3c]                                |         var_3ch = r2;
                                                                 |         if (sb >= 4) {
    0x0001b3ae bge.w 0x1b946                                     |             goto label_138;
                                                                 |         }
    0x0001b3b2 movs r1, 3                                        |         r1 = 3;
    0x0001b3b4 mov r2, r6                                        |         r2 = r6;
    0x0001b3b6 str r1, [sp, 0x18]                                |         var_18h = r1;
    0x0001b3b8 movs r1, 0                                        |         r1 = 0;
    0x0001b3ba str r1, [sp, 0x24]                                |         var_24h = r1;
    0x0001b3bc b 0x1b616                                         |         goto label_50;
                                                                 |     }
    0x0001b3be ldr r3, [sp]                                      |     r3 = *(sp);
    0x0001b3c0 sub.w r8, fp, 3                                   |     r8 = fp - 3;
    0x0001b3c4 ldr r7, [pc, 0x3d8]                               |     
    0x0001b3c6 movs r6, 3                                        |     r6 = 3;
    0x0001b3c8 eor r5, r3, 1                                     |     r5 = r3 ^ 1;
    0x0001b3cc movs r3, 0                                        |     r3 = 0;
    0x0001b3ce add r7, pc                                        |     r7 = 0x36b72;
    0x0001b3d0 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x0001b3d2 b 0x1ae2c                                         |     goto label_5;
                                                                 | label_133:
    0x0001b3d4 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x0001b3d6 bne 0x1b32e                                       |         goto label_29;
                                                                 |     }
    0x0001b3d8 vmov.f64 d16, 5.000000e-01                        |     __asm ("vmov.f64 d16, 5");
    0x0001b3dc b 0x1b33c                                         |     goto label_30;
                                                                 | label_113:
    0x0001b3de cmp r6, 1                                         |     
    0x0001b3e0 sub.w r8, fp, r6                                  |     r8 = fp - r6;
                                                                 |     if (r6 <= 1) {
    0x0001b3e4 ble.w 0x1b972                                     |         goto label_139;
                                                                 |     }
    0x0001b3e8 subs r2, r6, 1                                    |     r2 = r6 - 1;
    0x0001b3ea add.w r0, sp, 0x55                                |     r0 += var_55h;
    0x0001b3ee blx 0x5fcc                                        |     fcn_00005fcc ();
    0x0001b3f2 movs r3, 0                                        |     r3 = 0;
    0x0001b3f4 add r7, sp, 0x54                                  |     r7 += var_54h;
    0x0001b3f6 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x0001b3f8 b 0x1ae2c                                         |     goto label_5;
                                                                 | label_103:
    0x0001b3fa ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0001b3fc ldrd r3, r1, [r3]                                 |     __asm ("ldrd r3, r1, [r3]");
    0x0001b400 cmp r3, r1                                        |     
                                                                 |     if (r3 <= r1) {
    0x0001b402 ble.w 0x1b7b0                                     |         goto label_140;
                                                                 |     }
    0x0001b406 str r2, [sp, 0x20]                                |     var_20h = r2;
    0x0001b408 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x0001b40a ldr r3, [r2, 8]                                   |     r3 = *((r2 + 8));
    0x0001b40c ldr.w r0, [r3, r1, lsl 2]                         |     offset_5 = r1 << 2;
                                                                 |     r0 = *((r3 + offset_5));
    0x0001b410 adds r1, 1                                        |     r1++;
    0x0001b412 str r1, [r2, 4]                                   |     *((r2 + 4)) = r1;
    0x0001b414 blx 0x6718                                        |     fcn_00006718 ();
    0x0001b418 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x0001b41a mov r8, r0                                        |     r8 = r0;
    0x0001b41c mov sb, r1                                        |     sb = r1;
    0x0001b41e b 0x1ad2a                                         |     goto label_31;
                                                                 | label_123:
    0x0001b420 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x0001b422 ldrd r2, r3, [r1]                                 |     __asm ("ldrd r2, r3, [r1]");
    0x0001b426 cmp r2, r3                                        |     
    0x0001b428 itt le                                            |     
                                                                 |     if (r2 > r3) {
    0x0001b42a movle r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r2 <= r3) {
    0x0001b42c strle r3, [sp, 0x20]                              |         var_20h = r3;
                                                                 |         goto label_141;
                                                                 |     }
                                                                 |     if (r2 <= r3) {
                                                                 | label_141:
    0x0001b42e ble.w 0x1b0ee                                     |         goto label_32;
                                                                 |     }
    0x0001b432 ldr r2, [r1, 8]                                   |     r2 = *((r1 + 8));
    0x0001b434 ldr.w r0, [r2, r3, lsl 2]                         |     offset_6 = r3 << 2;
                                                                 |     r0 = *((r2 + offset_6));
    0x0001b438 adds r3, 1                                        |     r3++;
    0x0001b43a str r3, [r1, 4]                                   |     *((r1 + 4)) = r3;
    0x0001b43c movs r3, 0                                        |     r3 = 0;
    0x0001b43e str r3, [sp, 0x20]                                |     var_20h = r3;
    0x0001b440 blx 0x6718                                        |     r0 = fcn_00006718 ();
    0x0001b444 mov r8, r0                                        |     r8 = r0;
    0x0001b446 mov sb, r1                                        |     sb = r1;
    0x0001b448 b 0x1b0e6                                         |     goto label_17;
                                                                 | label_119:
    0x0001b44a mov r2, r1                                        |     r2 = r1;
    0x0001b44c b 0x1afcc                                         |     goto label_33;
                                                                 | label_98:
    0x0001b44e lsls r2, r2, 5                                    |     r2 <<= 5;
    0x0001b450 str r2, [sp, 0x20]                                |     var_20h = r2;
    0x0001b452 b 0x1b318                                         |     goto label_34;
                                                                 | label_106:
    0x0001b454 lsls r3, r2, 5                                    |     r3 = r2 << 5;
    0x0001b456 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x0001b458 b 0x1b0e6                                         |     goto label_17;
                                                                 | label_105:
    0x0001b45a movs r2, 0                                        |     r2 = 0;
    0x0001b45c mov.w r3, -0x80000000                             |     r3 = -0x80000000;
    0x0001b460 cmp sb, r3                                        |     
    0x0001b462 it eq                                             |     
                                                                 |     if (sb != r3) {
    0x0001b464 cmpeq r8, r2                                      |         __asm ("cmpeq r8, r2");
                                                                 |         goto label_142;
                                                                 |     }
                                                                 |     if (sb != r3) {
                                                                 | label_142:
    0x0001b466 bne.w 0x1af28                                     |         goto label_35;
                                                                 |     }
    0x0001b46a mov sb, r3                                        |     sb = r3;
    0x0001b46c movs r3, 0x2d                                     |     r3 = 0x2d;
    0x0001b46e mov r8, r2                                        |     r8 = r2;
    0x0001b470 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x0001b472 b 0x1ad46                                         |     goto label_8;
                                                                 | label_135:
    0x0001b474 vcmpe.f64 d13, d12                                |     __asm ("vcmpe.f64 d13, d12");
    0x0001b478 vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
                                                                 |     if (r3 < 0x2d) {
    0x0001b47c blt.w 0x1b9cc                                     |         goto label_143;
                                                                 |     }
    0x0001b480 vldr d17, [pc, 0x2ec]                             |     __asm ("vldr d17, aav.0x000000ff");
    0x0001b484 mov.w sb, 0                                       |     sb = 0;
                                                                 |     do {
    0x0001b488 vmov.f64 d18, d17                                 |         __asm ("vmov.f64 d18, d17");
    0x0001b48c add.w sb, sb, 0x64                                |         sb += 0x64;
    0x0001b490 vmul.f64 d17, d17, d12                            |         __asm ("vmul.f64 d17, d17, d12");
    0x0001b494 cmp.w sb, 0x15e                                   |         
    0x0001b498 ite gt                                            |         
                                                                 |         if (sb <= 0x15e) {
    0x0001b49a movgt r2, 0                                       |             r2 = 0;
                                                                 |         }
                                                                 |         if (sb > 0x15e) {
    0x0001b49c movle r2, 1                                       |             r2 = 1;
                                                                 |         }
    0x0001b49e and r1, r2, 1                                     |         r1 = r2 & 1;
    0x0001b4a2 vcmpe.f64 d17, d13                                |         __asm ("vcmpe.f64 d17, d13");
    0x0001b4a6 vmrs apsr_nzcv, fpscr                             |         __asm ("vmrs apsr_nzcv, fpscr");
    0x0001b4aa it hi                                             |         
                                                                 |         if (sb <= 0x15e) {
    0x0001b4ac movhi r1, 0                                       |             r1 = 0;
                                                                 |         }
    0x0001b4ae cmp r1, 0                                         |         
    0x0001b4b0 bne 0x1b488                                       |         
                                                                 |     } while (r1 != 0);
    0x0001b4b2 vmul.f64 d17, d18, d11                            |     __asm ("vmul.f64 d17, d18, d11");
                                                                 | label_53:
    0x0001b4b6 vcmpe.f64 d13, d17                                |     __asm ("vcmpe.f64 d13, d17");
    0x0001b4ba and r1, r2, 1                                     |     r1 = r2 & 1;
    0x0001b4be vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
    0x0001b4c2 it lt                                             |     
                                                                 |     if (r1 >= 0) {
    0x0001b4c4 movlt r1, 0                                       |         r1 = 0;
                                                                 |     }
                                                                 |     if (r1 == 0) {
    0x0001b4c6 cbz r1, 0x1b4f2                                   |         goto label_144;
                                                                 |     }
                                                                 |     do {
    0x0001b4c8 vmov.f64 d18, d17                                 |         __asm ("vmov.f64 d18, d17");
    0x0001b4cc add.w sb, sb, 0x40                                |         sb += 0x40;
    0x0001b4d0 vmul.f64 d17, d17, d11                            |         __asm ("vmul.f64 d17, d17, d11");
    0x0001b4d4 cmp.w sb, 0x15e                                   |         
    0x0001b4d8 ite gt                                            |         
                                                                 |         if (sb <= 0x15e) {
    0x0001b4da movgt r2, 0                                       |             r2 = 0;
                                                                 |         }
                                                                 |         if (sb > 0x15e) {
    0x0001b4dc movle r2, 1                                       |             r2 = 1;
                                                                 |         }
    0x0001b4de and r1, r2, 1                                     |         r1 = r2 & 1;
    0x0001b4e2 vcmpe.f64 d17, d13                                |         __asm ("vcmpe.f64 d17, d13");
    0x0001b4e6 vmrs apsr_nzcv, fpscr                             |         __asm ("vmrs apsr_nzcv, fpscr");
    0x0001b4ea it hi                                             |         
                                                                 |         if (sb <= 0x15e) {
    0x0001b4ec movhi r1, 0                                       |             r1 = 0;
                                                                 |         }
    0x0001b4ee cmp r1, 0                                         |         
    0x0001b4f0 bne 0x1b4c8                                       |         
                                                                 |     } while (r1 != 0);
                                                                 | label_144:
    0x0001b4f2 vmul.f64 d17, d18, d9                             |     __asm ("vmul.f64 d17, d18, d9");
    0x0001b4f6 and r1, r2, 1                                     |     r1 = r2 & 1;
    0x0001b4fa vcmpe.f64 d17, d13                                |     __asm ("vcmpe.f64 d17, d13");
    0x0001b4fe vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
    0x0001b502 it hi                                             |     
                                                                 |     if (r1 <= 0) {
    0x0001b504 movhi r1, 0                                       |         r1 = 0;
                                                                 |     }
                                                                 |     if (r1 == 0) {
    0x0001b506 cbz r1, 0x1b532                                   |         goto label_145;
                                                                 |     }
                                                                 |     do {
    0x0001b508 vmov.f64 d18, d17                                 |         __asm ("vmov.f64 d18, d17");
    0x0001b50c add.w sb, sb, 8                                   |         sb += 8;
    0x0001b510 vmul.f64 d17, d17, d9                             |         __asm ("vmul.f64 d17, d17, d9");
    0x0001b514 cmp.w sb, 0x15e                                   |         
    0x0001b518 ite gt                                            |         
                                                                 |         if (sb <= 0x15e) {
    0x0001b51a movgt r2, 0                                       |             r2 = 0;
                                                                 |         }
                                                                 |         if (sb > 0x15e) {
    0x0001b51c movle r2, 1                                       |             r2 = 1;
                                                                 |         }
    0x0001b51e and r1, r2, 1                                     |         r1 = r2 & 1;
    0x0001b522 vcmpe.f64 d17, d13                                |         __asm ("vcmpe.f64 d17, d13");
    0x0001b526 vmrs apsr_nzcv, fpscr                             |         __asm ("vmrs apsr_nzcv, fpscr");
    0x0001b52a it hi                                             |         
                                                                 |         if (sb <= 0x15e) {
    0x0001b52c movhi r1, 0                                       |             r1 = 0;
                                                                 |         }
    0x0001b52e cmp r1, 0                                         |         
    0x0001b530 bne 0x1b508                                       |         
                                                                 |     } while (r1 != 0);
                                                                 | label_145:
    0x0001b532 vmov.f64 d19, 1.000000e+01                        |     __asm ("vmov.f64 d19, 1");
    0x0001b536 and r2, r2, 1                                     |     r2 &= 1;
    0x0001b53a vmul.f64 d17, d18, d19                            |     __asm ("vmul.f64 d17, d18, d19");
    0x0001b53e vcmpe.f64 d17, d13                                |     __asm ("vcmpe.f64 d17, d13");
    0x0001b542 vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
    0x0001b546 it hi                                             |     
                                                                 |     if (r1 <= 0) {
    0x0001b548 movhi r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (r2 == 0) {
    0x0001b54a cbz r2, 0x1b576                                   |         goto label_146;
                                                                 |     }
                                                                 |     do {
    0x0001b54c vmov.f64 d18, d17                                 |         __asm ("vmov.f64 d18, d17");
    0x0001b550 add.w sb, sb, 1                                   |         sb++;
    0x0001b554 vmul.f64 d17, d17, d19                            |         __asm ("vmul.f64 d17, d17, d19");
    0x0001b558 vcmpe.f64 d17, d13                                |         __asm ("vcmpe.f64 d17, d13");
    0x0001b55c vmrs apsr_nzcv, fpscr                             |         __asm ("vmrs apsr_nzcv, fpscr");
    0x0001b560 ite ls                                            |         
                                                                 |         if (r2 > 0) {
    0x0001b562 movls r2, 1                                       |             r2 = 1;
                                                                 |         }
                                                                 |         if (r2 <= 0) {
    0x0001b564 movhi r2, 0                                       |             r2 = 0;
                                                                 |         }
    0x0001b566 cmp.w sb, 0x15e                                   |         
    0x0001b56a ite gt                                            |         
                                                                 |         if (sb <= 0x15e) {
    0x0001b56c movgt r2, 0                                       |             r2 = 0;
                                                                 |         }
                                                                 |         if (sb > 0x15e) {
    0x0001b56e andle r2, r2, 1                                   |             r2 &= 1;
                                                                 |         }
    0x0001b572 cmp r2, 0                                         |         
    0x0001b574 bne 0x1b54c                                       |         
                                                                 |     } while (r2 != 0);
                                                                 | label_146:
    0x0001b576 vdiv.f64 d13, d13, d18                            |     __asm ("vdiv.f64 d13, d13, d18");
    0x0001b57a vcmpe.f64 d13, d10                                |     __asm ("vcmpe.f64 d13, d10");
    0x0001b57e vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
                                                                 |     if (r2 >= 0) {
    0x0001b582 bpl 0x1b596                                       |         goto label_147;
                                                                 |     }
                                                                 |     do {
    0x0001b584 vmul.f64 d13, d13, d9                             |         __asm ("vmul.f64 d13, d13, d9");
    0x0001b588 sub.w sb, sb, 8                                   |         sb -= 8;
    0x0001b58c vcmpe.f64 d13, d10                                |         __asm ("vcmpe.f64 d13, d10");
    0x0001b590 vmrs apsr_nzcv, fpscr                             |         __asm ("vmrs apsr_nzcv, fpscr");
    0x0001b594 bmi 0x1b584                                       |         
                                                                 |     } while (r2 < 0);
                                                                 | label_147:
    0x0001b596 vmov.f64 d17, 1.000000e+00                        |     __asm ("vmov.f64 d17, 1");
    0x0001b59a vcmpe.f64 d13, d17                                |     __asm ("vcmpe.f64 d13, d17");
    0x0001b59e vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
                                                                 |     if (r2 >= 0) {
    0x0001b5a2 bpl 0x1b5ba                                       |         goto label_148;
                                                                 |     }
    0x0001b5a4 vmov.f64 d18, 1.000000e+01                        |     __asm ("vmov.f64 d18, 1");
                                                                 |     do {
    0x0001b5a8 vmul.f64 d13, d13, d18                            |         __asm ("vmul.f64 d13, d13, d18");
    0x0001b5ac add.w sb, sb, -1                                  |         sb += -1;
    0x0001b5b0 vcmpe.f64 d13, d17                                |         __asm ("vcmpe.f64 d13, d17");
    0x0001b5b4 vmrs apsr_nzcv, fpscr                             |         __asm ("vmrs apsr_nzcv, fpscr");
    0x0001b5b8 bmi 0x1b5a8                                       |         
                                                                 |     } while (r2 < 0);
                                                                 | label_148:
    0x0001b5ba cmp.w sb, 0x15e                                   |     
                                                                 |     if (sb <= 0x15e) {
    0x0001b5be ble.w 0x1b374                                     |         goto label_36;
                                                                 |     }
    0x0001b5c2 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0001b5c4 cmp r3, 0x2d                                      |     
                                                                 |     if (r3 == 0x2d) {
    0x0001b5c6 beq.w 0x1b97c                                     |         goto label_149;
                                                                 |     }
    0x0001b5ca cmp r3, 0x2b                                      |     
                                                                 |     if (r3 == 0x2b) {
    0x0001b5cc beq.w 0x1b9f4                                     |         goto label_150;
                                                                 |     }
    0x0001b5d0 ldr r7, [pc, 0x1d0]                               |     
    0x0001b5d2 movs r3, 0x6e                                     |     r3 = 0x6e;
    0x0001b5d4 add r7, pc                                        |     r7 = 0x36d7c;
                                                                 | label_51:
    0x0001b5d6 adds r2, r7, 1                                    |     r2 = r7 + 1;
                                                                 |     do {
    0x0001b5d8 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0001b5da beq.w 0x1b992                                     |             goto label_151;
                                                                 |         }
    0x0001b5de ldrb r3, [r2, 1]!                                 |         r3 = *((r2 += 1));
    0x0001b5e2 b 0x1b5d8                                         |         
                                                                 |     } while (1);
                                                                 | label_131:
    0x0001b5e4 ldr r1, [r0, 8]                                   |     r1 = *((r0 + 8));
    0x0001b5e6 strd r3, r2, [sp, 0x20]                           |     __asm ("strd r3, r2, [var_20h]");
    0x0001b5ea mov r3, r0                                        |     r3 = r0;
    0x0001b5ec ldr.w r0, [r1, r7, lsl 2]                         |     offset_7 = r7 << 2;
                                                                 |     r0 = *((r1 + offset_7));
    0x0001b5f0 adds r7, 1                                        |     r7++;
    0x0001b5f2 str r7, [r3, 4]                                   |     *((r3 + 4)) = r7;
    0x0001b5f4 blx 0x6018                                        |     fcn_00006018 ();
    0x0001b5f8 ldrd r3, r2, [sp, 0x20]                           |     __asm ("ldrd r3, r2, [var_20h]");
    0x0001b5fc vmov.f64 d13, d0                                  |     __asm ("vmov.f64 d13, d0");
    0x0001b600 b.w 0x1ac3e                                       |     goto label_37;
                                                                 | label_136:
    0x0001b604 cmp.w sb, 0                                       |     
    0x0001b608 ite ge                                            |     
                                                                 |     if (sb < 0) {
    0x0001b60a addge r2, r6, sb                                  |         r2 = r6 + sb;
                                                                 |     }
                                                                 |     if (sb < 0) {
    0x0001b60e adds r2, r6, 0                                    |         r2 = r6 + 0;
                                                                 |     }
    0x0001b610 str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x0001b612 str.w sb, [sp, 0x24]                              |     __asm ("str.w sb, [var_24h]");
                                                                 | label_50:
    0x0001b616 add r2, fp                                        |     r2 += fp;
    0x0001b618 cmp r2, 0x37                                      |     
    0x0001b61a ittt le                                           |     
                                                                 |     if (r2 > 0x37) {
    0x0001b61c movle r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (r2 > 0x37) {
    0x0001b61e addle r7, sp, 0x54                                |         r7 += var_54h;
                                                                 |     }
                                                                 |     if (r2 > 0x37) {
    0x0001b620 strle r2, [sp, 0x10]                              |         var_10h = r2;
                                                                 |     }
                                                                 |     if (r2 > 0x37) {
    0x0001b622 bgt.w 0x1b878                                     |         goto label_152;
                                                                 |     }
                                                                 | label_46:
    0x0001b626 ldr r2, [sp, 4]                                   |     r2 = var_4h;
    0x0001b628 movs r1, 0xa                                      |     r1 = 0xa;
    0x0001b62a mov r0, r7                                        |     r0 = r7;
    0x0001b62c orrs r2, r3                                       |     r2 |= r3;
    0x0001b62e cmp r6, 0                                         |     
    0x0001b630 it gt                                             |     
                                                                 |     if (r6 <= 0) {
    0x0001b632 orrgt r2, r2, 1                                   |         r2 |= 1;
                                                                 |     }
    0x0001b636 str r2, [sp, 4]                                   |     var_4h = r2;
    0x0001b638 movs r2, 0x10                                     |     r2 = 0x10;
    0x0001b63a smlabb r2, r1, r3, r2                             |     __asm ("smlabb r2, r1, r3, r2");
    0x0001b63e str r2, [sp, 0x34]                                |     var_34h = r2;
    0x0001b640 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
                                                                 |     if (r2 != 0) {
    0x0001b642 cbz r2, 0x1b648                                   |         
    0x0001b644 strb r2, [r0], 1                                  |         *(r0) = r2;
                                                                 |         r0++;
                                                                 |     }
    0x0001b648 ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x0001b64a cmp r1, 0                                         |     
                                                                 |     if (r1 >= 0) {
    0x0001b64c bge.w 0x1b81a                                     |         goto label_153;
                                                                 |     }
    0x0001b650 movs r2, 0x30                                     |     r2 = 0x30;
    0x0001b652 mov r8, r0                                        |     r8 = r0;
    0x0001b654 strb r2, [r8], 1                                  |     *(r8) = r2;
                                                                 |     r8++;
    0x0001b658 adds r2, r1, 1                                    |     r2 = r1 + 1;
    0x0001b65a ldr r1, [sp, 4]                                   |     r1 = var_4h;
    0x0001b65c cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0001b65e beq.w 0x1b8fc                                     |         goto label_154;
                                                                 |     }
    0x0001b662 movs r1, 0x2e                                     |     r1 = 0x2e;
    0x0001b664 add.w r8, r0, 2                                   |     r8 = r0 + 2;
    0x0001b668 strb r1, [r0, 1]                                  |     *((r0 + 1)) = r1;
                                                                 |     if (r2 != 0) {
    0x0001b66a cbz r2, 0x1b684                                   |         
                                                                 | label_48:
    0x0001b66c rsbs r2, r2, 0                                    |         r2 -= ;
    0x0001b66e mov r0, r8                                        |         r0 = r8;
    0x0001b670 movs r1, 0x30                                     |         r1 = 0x30;
    0x0001b672 str r3, [sp, 0x38]                                |         var_38h = r3;
    0x0001b674 add r8, r2                                        |         r8 += r2;
    0x0001b676 blx 0x5fcc                                        |         fcn_00005fcc ();
    0x0001b67a ldr r3, [sp, 0x24]                                |         r3 = var_24h;
    0x0001b67c add r3, r6                                        |         r3 += r6;
    0x0001b67e mov r6, r3                                        |         r6 = r3;
    0x0001b680 ldr r3, [sp, 0x38]                                |         r3 = var_38h;
    0x0001b682 adds r6, 1                                        |         r6++;
                                                                 |     }
                                                                 | label_45:
    0x0001b684 cmp r6, 0                                         |     
                                                                 |     if (r6 <= 0) {
    0x0001b686 ble.w 0x1ba04                                     |         goto label_155;
                                                                 |     }
    0x0001b68a add.w r0, r8, r6                                  |     r0 = r8 + r6;
    0x0001b68e ldr r6, [sp, 0x34]                                |     r6 = var_34h;
    0x0001b690 add.w r8, r8, -1                                  |     r8 += -1;
    0x0001b694 vmov.f64 d17, 1.000000e+01                        |     __asm ("vmov.f64 d17, 1");
    0x0001b698 subs r1, r0, 1                                    |     r1 = r0 - 1;
                                                                 |     do {
    0x0001b69a cmp r6, 0                                         |         
    0x0001b69c it le                                             |         
                                                                 |         if (r6 > 0) {
    0x0001b69e movle r2, 0x30                                    |             r2 = 0x30;
                                                                 |         }
                                                                 |         if (r6 > 0) {
    0x0001b6a0 ble 0x1b6bc                                       |             
    0x0001b6a2 vcvt.s32.f64 s15, d13                             |             __asm ("vcvt.s32.f64 s15, d13");
    0x0001b6a6 subs r6, 1                                        |             r6--;
    0x0001b6a8 vcvt.f64.s32 d16, s15                             |             __asm ("vcvt.f64.s32 d16, s15");
    0x0001b6ac vmov r2, s15                                      |             __asm ("vmov r2, s15");
    0x0001b6b0 adds r2, 0x30                                     |             r2 += 0x30;
    0x0001b6b2 uxtb r2, r2                                       |             r2 = (int8_t) r2;
    0x0001b6b4 vsub.f64 d13, d13, d16                            |             __asm ("vsub.f64 d13, d13, d16");
    0x0001b6b8 vmul.f64 d13, d13, d17                            |             __asm ("vmul.f64 d13, d13, d17");
                                                                 |         }
    0x0001b6bc strb r2, [r8, 1]!                                 |         *((r8 += 1)) = r2;
    0x0001b6c0 cmp r8, r1                                        |         
    0x0001b6c2 bne 0x1b69a                                       |         
                                                                 |     } while (r8 != r1);
    0x0001b6c4 mov r2, r0                                        |     r2 = r0;
                                                                 | label_56:
    0x0001b6c6 ldr r1, [sp, 0x3c]                                |     r1 = var_3ch;
    0x0001b6c8 ldr r0, [sp, 4]                                   |     r0 = var_4h;
    0x0001b6ca tst r1, r0                                        |     
                                                                 |     if ((r1 & r0) != 0) {
    0x0001b6cc bne.w 0x1b90e                                     |         goto label_156;
                                                                 |     }
                                                                 | label_44:
    0x0001b6d0 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0001b6d2 cmp r3, 3                                         |     
                                                                 |     if (r3 == 3) {
    0x0001b6d4 beq.w 0x1b88e                                     |         goto label_157;
                                                                 |     }
                                                                 | label_47:
    0x0001b6d8 ldr r3, [sp]                                      |     r3 = *(sp);
    0x0001b6da subs r6, r2, r7                                   |     r6 = r2 - r7;
    0x0001b6dc movs r1, 0                                        |     r1 = 0;
    0x0001b6de sub.w r8, fp, r6                                  |     r8 = fp - r6;
    0x0001b6e2 strb r1, [r2]                                     |     *(r2) = r1;
    0x0001b6e4 eor r5, r3, 1                                     |     r5 = r3 ^ 1;
    0x0001b6e8 and.w r3, r5, sl                                  |     r3 = r5 & sl;
    0x0001b6ec cmp r6, fp                                        |     
    0x0001b6ee ite ge                                            |     
                                                                 |     if (r6 < fp) {
    0x0001b6f0 movge r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r6 >= fp) {
    0x0001b6f2 andlt r3, r3, 1                                   |         r3 &= 1;
                                                                 |     }
    0x0001b6f6 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0001b6f8 beq.w 0x1ae2c                                     |         goto label_5;
                                                                 |     }
    0x0001b6fc cmp r8, fp                                        |     
    0x0001b6fe itt le                                            |     
                                                                 |     if (r8 > fp) {
    0x0001b700 addle r1, fp, 1                                   |         r1 += arg_1h;
                                                                 |     }
                                                                 |     if (r8 > fp) {
    0x0001b704 adds r1, r1, r7                                   |         r1 += r7;
                                                                 |         goto label_158;
                                                                 |     }
                                                                 |     if (r1 > r1) {
                                                                 | label_158:
    0x0001b706 bgt 0x1b716                                       |         void (*0x1b716)() ();
                                                                 |     }
                                                                 | label_88:
    0x0001b736 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0001b738 cmp r3, 0xb                                       |     
                                                                 |     if (r3 == 0xb) {
    0x0001b73a beq.w 0x1b906                                     |         goto label_159;
                                                                 |     }
    0x0001b73e ldr.w sb, [pc, 0x68]                              |     sb = *(0x0001b7a8);
    0x0001b742 add sb, pc                                        |     sb += pc;
                                                                 | label_49:
    0x0001b744 mov.w sl, 0                                       |     sl = 0;
    0x0001b748 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x0001b74a bne.w 0x1ab9c                                     |         goto label_38;
                                                                 |     }
                                                                 | label_54:
    0x0001b74e ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x0001b750 add r7, sp, 0x54                                  |     r7 += var_54h;
    0x0001b752 mov r8, fp                                        |     r8 = fp;
    0x0001b754 mov r2, r7                                        |     r2 = r7;
    0x0001b756 str r6, [sp, 0x10]                                |     var_10h = r6;
    0x0001b758 str r3, [sp, 8]                                   |     var_8h = r3;
    0x0001b75a b.w 0x1ac1c                                       |     goto label_20;
                                                                 | label_126:
    0x0001b75e ldr r1, [sp, 8]                                   |     r1 = var_8h;
                                                                 | label_100:
    0x0001b760 adds r5, r6, 1                                    |     r5 = r6 + 1;
                                                                 |     if (r5 == r6) {
    0x0001b762 beq.w 0x1b9ae                                     |         goto label_160;
                                                                 |     }
    0x0001b766 ldr r7, [pc, 0x44]                                |     
    0x0001b768 movs r3, 0                                        |     r3 = 0;
    0x0001b76a str r3, [sp, 0x10]                                |     var_10h = r3;
    0x0001b76c add r7, pc                                        |     r7 = 0x36f1e;
    0x0001b76e b 0x1b172                                         |     goto label_39;
                                                                 | label_140:
    0x0001b7b0 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0001b7b2 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0001b7b4 bne.w 0x1b960                                     |         goto label_161;
                                                                 |     }
    0x0001b7b8 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0001b7ba lsls r2, r2, 5                                    |     r2 <<= 5;
    0x0001b7bc str r2, [sp, 0x20]                                |     var_20h = r2;
    0x0001b7be mov r8, r3                                        |     r8 = r3;
    0x0001b7c0 mov sb, r3                                        |     sb = r3;
    0x0001b7c2 str r3, [sp, 4]                                   |     var_4h = r3;
    0x0001b7c4 b.w 0x1ad46                                       |     goto label_8;
                                                                 | label_104:
    0x0001b7c8 adds r3, 4                                        |     r3 += 4;
    0x0001b7ca b.w 0x1af14                                       |     goto label_40;
                                                                 | label_124:
    0x0001b7ce ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x0001b7d0 adds r3, 4                                        |     r3 += 4;
    0x0001b7d2 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0001b7d4 bne.w 0x1b104                                     |         goto label_41;
                                                                 |     }
    0x0001b7d8 ldr r2, [sp, 8]                                   |     r2 = var_8h;
    0x0001b7da ldr.w sb, [sp, 0x20]                              |     sb = var_20h;
    0x0001b7de str r3, [sp, 8]                                   |     var_8h = r3;
    0x0001b7e0 ldr.w r8, [r2]                                    |     r8 = *(r2);
    0x0001b7e4 b 0x1b0e6                                         |     goto label_17;
                                                                 | label_110:
    0x0001b7e6 adds r1, r3, r2                                   |     r1 = r3 + r2;
    0x0001b7e8 add.w r3, r3, 0x9d0                               |     r3 += 0x9d0;
    0x0001b7ec add r3, r2                                        |     r3 += r2;
    0x0001b7ee ldrb.w r2, [r1, 0x9d0]                            |     r2 = *((r1 + 0x9d0));
    0x0001b7f2 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0001b7f4 beq.w 0x1ae04                                     |         goto label_42;
                                                                 |     }
                                                                 |     do {
    0x0001b7f8 strb r2, [r7, -0x1]!                              |         *((r7 -= 0x1)) = r2;
    0x0001b7fc ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x0001b800 cmp r2, 0                                         |         
    0x0001b802 bne 0x1b7f8                                       |         
                                                                 |     } while (r2 != 0);
    0x0001b804 b.w 0x1ae04                                       |     goto label_42;
                                                                 | label_129:
    0x0001b808 sub.w r8, fp, r6                                  |     r8 = fp - r6;
    0x0001b80c str r1, [sp, 8]                                   |     var_8h = r1;
    0x0001b80e b.w 0x1ae2c                                       |     goto label_5;
                                                                 | label_120:
    0x0001b812 ldr r1, [r1]                                      |     r1 = *(r1);
    0x0001b814 str r3, [sp, 8]                                   |     var_8h = r3;
    0x0001b816 b.w 0x1afa4                                       |     goto label_43;
                                                                 | label_153:
    0x0001b81a ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x0001b81c subs r1, r0, 1                                    |     r1 = r0 - 1;
    0x0001b81e ldr.w lr, [sp, 0x34]                              |     lr = var_34h;
    0x0001b822 vmov.f64 d17, 1.000000e+01                        |     __asm ("vmov.f64 d17, 1");
    0x0001b826 add.w ip, r0, r2                                  |     
                                                                 |     do {
    0x0001b82a cmp.w lr, 0                                       |         
    0x0001b82e it le                                             |         
                                                                 |         if (lr > 0) {
    0x0001b830 movle r2, 0x30                                    |             r2 = 0x30;
                                                                 |         }
                                                                 |         if (lr > 0) {
    0x0001b832 ble 0x1b850                                       |             
    0x0001b834 vcvt.s32.f64 s15, d13                             |             __asm ("vcvt.s32.f64 s15, d13");
    0x0001b838 add.w lr, lr, -1                                  |             lr += -1;
    0x0001b83c vcvt.f64.s32 d16, s15                             |             __asm ("vcvt.f64.s32 d16, s15");
    0x0001b840 vmov r2, s15                                      |             __asm ("vmov r2, s15");
    0x0001b844 adds r2, 0x30                                     |             r2 += 0x30;
    0x0001b846 uxtb r2, r2                                       |             r2 = (int8_t) r2;
    0x0001b848 vsub.f64 d13, d13, d16                            |             __asm ("vsub.f64 d13, d13, d16");
    0x0001b84c vmul.f64 d13, d13, d17                            |             __asm ("vmul.f64 d13, d13, d17");
                                                                 |         }
    0x0001b850 strb r2, [r1, 1]!                                 |         *((r1 += 1)) = r2;
    0x0001b854 cmp ip, r1                                        |         
    0x0001b856 bne 0x1b82a                                       |         
                                                                 |     } while (ip != r1);
    0x0001b858 ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x0001b85a str.w lr, [sp, 0x34]                              |     __asm ("str.w lr, [var_34h]");
    0x0001b85e adds r1, 1                                        |     r1++;
    0x0001b860 mov ip, r1                                        |     
    0x0001b862 adds r2, r0, r1                                   |     r2 = r0 + r1;
    0x0001b864 ldr r1, [sp, 4]                                   |     r1 = var_4h;
    0x0001b866 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0001b868 beq.w 0x1b6d0                                     |         goto label_44;
                                                                 |     }
    0x0001b86c add.w r8, r2, 1                                   |     r8 = r2 + 1;
    0x0001b870 movs r2, 0x2e                                     |     r2 = 0x2e;
    0x0001b872 strb.w r2, [r0, ip]                               |     *((r0 + ip)) = r2;
    0x0001b876 b 0x1b684                                         |     goto label_45;
                                                                 | label_152:
    0x0001b878 add.w r0, r2, 0xf                                 |     r0 = r2 + 0xf;
    0x0001b87c str r3, [sp, 0x34]                                |     var_34h = r3;
    0x0001b87e bl 0xd300                                         |     r0 = fcn_0000d300 (r0, r1, r2, r3, r4);
    0x0001b882 mov r7, r0                                        |     r7 = r0;
    0x0001b884 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0001b886 beq 0x1b984                                       |         goto label_125;
                                                                 |     }
    0x0001b888 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0001b88a str r0, [sp, 0x10]                                |     var_10h = r0;
    0x0001b88c b 0x1b626                                         |     goto label_46;
                                                                 | label_157:
    0x0001b88e ldr r1, [sp, 0xc]                                 |     r1 = var_ch;
    0x0001b890 cmp.w sb, 0                                       |     
    0x0001b894 ldr r3, [pc, 0x198]                               |     
    0x0001b896 it lt                                             |     
                                                                 |     if (sb < 0) {
    0x0001b898 rsblt sb, sb, 0                                   |         __asm ("rsblt sb, sb, 0");
                                                                 |     }
    0x0001b89c add r1, r5                                        |     r1 += r5;
    0x0001b89e add r3, pc                                        |     r3 = 0x372d2;
    0x0001b8a0 add.w r1, r3, r1, lsl 1                           |     r1 = r3 + (r1 << 1);
    0x0001b8a4 ldrb.w r1, [r1, 0x918]                            |     r1 = *((r1 + 0x918));
    0x0001b8a8 add r3, r1                                        |     r3 += r1;
    0x0001b8aa mov r1, r2                                        |     r1 = r2;
    0x0001b8ac ldrb.w r3, [r3, 0x9ac]                            |     r3 = *((r3 + 0x9ac));
    0x0001b8b0 strb r3, [r1], 2                                  |     *(r1) = r3;
                                                                 |     r1 += 2;
    0x0001b8b4 ite lt                                            |     
                                                                 |     if (sb >= 0) {
    0x0001b8b6 movlt r3, 0x2d                                    |         r3 = 0x2d;
                                                                 |     }
                                                                 |     if (sb < 0) {
    0x0001b8b8 movge r3, 0x2b                                    |         r3 = 0x2b;
                                                                 |     }
    0x0001b8ba cmp.w sb, 0x63                                    |     
    0x0001b8be strb r3, [r2, 1]                                  |     *((r2 + 1)) = r3;
                                                                 |     if (sb > 0x63) {
    0x0001b8c0 ble 0x1b8d6                                       |         
    0x0001b8c2 ldr r3, [sp, 0x30]                                |         r3 = var_30h;
    0x0001b8c4 umull r1, r3, r3, sb                              |         r1:r3 = r3 * sb;
    0x0001b8c8 movs r1, 0x64                                     |         r1 = 0x64;
    0x0001b8ca lsrs r3, r3, 5                                    |         r3 >>= 5;
    0x0001b8cc mls sb, r1, r3, sb                                |         __asm ("mls sb, r1, r3, sb");
    0x0001b8d0 adds r1, r2, 3                                    |         r1 = r2 + 3;
    0x0001b8d2 adds r3, 0x30                                     |         r3 += 0x30;
    0x0001b8d4 strb r3, [r2, 2]                                  |         *((r2 + 2)) = r3;
                                                                 |     }
    0x0001b8d6 movw r3, 0xcccd                                   |     
    0x0001b8da movt r3, 0xcccc                                   |     r3 = 0xcccccccd;
    0x0001b8de umull r2, r3, r3, sb                              |     r2:r3 = r3 * sb;
    0x0001b8e2 mov r2, r1                                        |     r2 = r1;
    0x0001b8e4 lsrs r3, r3, 3                                    |     r3 >>= 3;
    0x0001b8e6 add.w r0, r3, r3, lsl 2                           |     r0 = r3 + (r3 << 2);
    0x0001b8ea adds r3, 0x30                                     |     r3 += 0x30;
    0x0001b8ec strb r3, [r2], 2                                  |     *(r2) = r3;
                                                                 |     r2 += 2;
    0x0001b8f0 sub.w r0, sb, r0, lsl 1                           |     r0 = sb - (r0 << 1);
    0x0001b8f4 add.w r3, r0, 0x30                                |     r3 = r0 + 0x30;
    0x0001b8f8 strb r3, [r1, 1]                                  |     *((r1 + 1)) = r3;
    0x0001b8fa b 0x1b6d8                                         |     goto label_47;
                                                                 | label_154:
    0x0001b8fc cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0001b8fe bne.w 0x1b66c                                     |         goto label_48;
                                                                 |     }
    0x0001b902 mov r2, r8                                        |     r2 = r8;
    0x0001b904 b 0x1b6d0                                         |     goto label_44;
                                                                 | label_159:
    0x0001b906 ldr.w sb, [pc, 0x12c]                             |     sb = *(0x0001ba34);
    0x0001b90a add sb, pc                                        |     sb += pc;
    0x0001b90c b 0x1b744                                         |     goto label_49;
                                                                 | label_156:
    0x0001b90e ldrb r0, [r2, -0x1]                               |     r0 = *((r2 - 0x1));
    0x0001b912 cmp r0, 0x30                                      |     
                                                                 |     if (r0 != 0x30) {
    0x0001b914 bne 0x1b926                                       |         void (*0x1b926)() ();
                                                                 |     }
                                                                 | label_121:
    0x0001b938 subs r2, r0, r4                                   |     r2 = r0 - r4;
    0x0001b93a mov r1, r4                                        |     r1 = r4;
    0x0001b93c ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x0001b93e bl 0x1a768                                        |     fcn_0001a768 (r0, r1, r2);
    0x0001b942 b.w 0x1ae7a                                       |     goto label_10;
                                                                 | label_138:
    0x0001b946 sub.w r6, r6, sb                                  |     r6 -= sb;
    0x0001b94a movs r1, 2                                        |     r1 = 2;
    0x0001b94c cmp.w sb, 0                                       |     
    0x0001b950 ite ge                                            |     
                                                                 |     if (sb < 0) {
    0x0001b952 addge r2, r6, sb                                  |         r2 = r6 + sb;
                                                                 |     }
                                                                 |     if (sb < 0) {
    0x0001b956 adds r2, r6, 0                                    |         r2 = r6 + 0;
                                                                 |     }
    0x0001b958 str.w sb, [sp, 0x24]                              |     __asm ("str.w sb, [var_24h]");
    0x0001b95c str r1, [sp, 0x18]                                |     var_18h = r1;
    0x0001b95e b 0x1b616                                         |     goto label_50;
                                                                 | label_161:
    0x0001b960 mov.w r8, 0                                       |     r8 = 0;
    0x0001b964 movs r3, 0x2b                                     |     r3 = 0x2b;
    0x0001b966 mov sb, r8                                        |     sb = r8;
    0x0001b968 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x0001b96a str.w r8, [sp, 4]                                 |     __asm ("str.w r8, [var_4h]");
    0x0001b96e b.w 0x1ad46                                       |     goto label_8;
                                                                 | label_139:
    0x0001b972 movs r3, 0                                        |     r3 = 0;
    0x0001b974 add r7, sp, 0x54                                  |     r7 += var_54h;
    0x0001b976 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x0001b978 b.w 0x1ae2c                                       |     goto label_5;
                                                                 | label_149:
    0x0001b97c ldr r7, [pc, 0xb8]                                |     
    0x0001b97e movs r3, 0x49                                     |     r3 = 0x49;
    0x0001b980 add r7, pc                                        |     r7 = 0x373bc;
    0x0001b982 b 0x1b5d6                                         |     goto label_51;
                                                                 | label_125:
    0x0001b984 ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x0001b986 movs r2, 1                                        |     r2 = 1;
    0x0001b988 movs r3, 0                                        |     r3 = 0;
    0x0001b98a strb r2, [r1, 0x19]                               |     *((r1 + 0x19)) = r2;
    0x0001b98c str r3, [r1, 0x10]                                |     *((r1 + 0x10)) = r3;
    0x0001b98e b.w 0x1ae7a                                       |     goto label_10;
                                                                 | label_151:
    0x0001b992 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x0001b994 subs r2, r2, r7                                   |     r2 -= r7;
    0x0001b996 ldr r3, [sp]                                      |     r3 = *(sp);
    0x0001b998 bic r6, r2, 0xc0000000                            |     r6 = BIT_MASK (r2, 0xc0000000);
    0x0001b99c sub.w r8, fp, r6                                  |     r8 = fp - r6;
    0x0001b9a0 eor r5, r3, 1                                     |     r5 = r3 ^ 1;
    0x0001b9a4 b.w 0x1ae2c                                       |     goto label_5;
                                                                 | label_134:
    0x0001b9a8 vmov.f64 d16, 5.000000e-01                        |     __asm ("vmov.f64 d16, 5");
    0x0001b9ac b 0x1b346                                         |     goto label_52;
                                                                 | label_160:
    0x0001b9ae ldr r7, [pc, 0x8c]                                |     
    0x0001b9b0 movs r6, 0                                        |     r6 = 0;
    0x0001b9b2 mov r8, fp                                        |     r8 = fp;
    0x0001b9b4 str r1, [sp, 8]                                   |     var_8h = r1;
    0x0001b9b6 str r6, [sp, 0x10]                                |     var_10h = r6;
    0x0001b9b8 add r7, pc                                        |     r7 = 0x373fa;
    0x0001b9ba b.w 0x1ac20                                       |     goto label_3;
                                                                 | label_137:
    0x0001b9be movs r1, 3                                        |     r1 = 3;
    0x0001b9c0 mov r2, r6                                        |     r2 = r6;
    0x0001b9c2 str r1, [sp, 0x18]                                |     var_18h = r1;
    0x0001b9c4 movs r1, 0                                        |     r1 = 0;
    0x0001b9c6 str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x0001b9c8 str r1, [sp, 0x24]                                |     var_24h = r1;
    0x0001b9ca b 0x1b616                                         |     goto label_50;
                                                                 | label_143:
    0x0001b9cc vldr d17, [pc, 0x58]                              |     __asm ("vldr d17, aav.0x000000ff");
    0x0001b9d0 movs r2, 1                                        |     r2 = 1;
    0x0001b9d2 vmov.f64 d18, 1.000000e+00                        |     __asm ("vmov.f64 d18, 1");
    0x0001b9d6 mov.w sb, 0                                       |     sb = 0;
    0x0001b9da b 0x1b4b6                                         |     goto label_53;
                                                                 | label_89:
    0x0001b9dc ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0001b9de cmp r3, 0xb                                       |     
                                                                 |     if (r3 != 0xb) {
    0x0001b9e0 bne.w 0x1b74e                                     |         goto label_54;
                                                                 |     }
    0x0001b9e4 str r6, [sp, 0x10]                                |     var_10h = r6;
    0x0001b9e6 movs r6, 2                                        |     r6 = 2;
    0x0001b9e8 add r7, sp, 0x54                                  |     r7 += var_54h;
    0x0001b9ea mov r2, r6                                        |     r2 = r6;
    0x0001b9ec movs r1, 1                                        |     r1 = 1;
    0x0001b9ee strb.w r8, [sp, 0x54]                             |     var_54h = r8;
    0x0001b9f2 b 0x1b300                                         |     goto label_55;
                                                                 | label_150:
    0x0001b9f4 ldr r7, [pc, 0x48]                                |     
    0x0001b9f6 movs r3, 0x49                                     |     r3 = 0x49;
    0x0001b9f8 add r7, pc                                        |     r7 = 0x3743c;
    0x0001b9fa b 0x1b5d6                                         |     goto label_51;
                                                                 | label_155:
    0x0001ba04 mov r2, r8                                        |     r2 = r8;
    0x0001ba06 b 0x1b6c6                                         |     goto label_56;
                                                                 | label_128:
    0x0001ba08 mov r8, fp                                        |     r8 = fp;
    0x0001ba0a str r1, [sp, 8]                                   |     var_8h = r1;
    0x0001ba0c b.w 0x1ae2c                                       |     goto label_5;
                                                                 | label_93:
    0x0001ba10 movs r2, 2                                        |     r2 = 2;
    0x0001ba12 movs r1, 1                                        |     r1 = 1;
    0x0001ba14 mov r6, r2                                        |     r6 = r2;
    0x0001ba16 b 0x1b300                                         |     goto label_55;
                                                                 | label_111:
    0x0001ba18 blx 0x6498                                        |     fcn_00006498 ();
                                                                 | label_101:
    0x0001ba1c mov r8, fp                                        |     r8 = fp;
    0x0001ba1e str r1, [sp, 8]                                   |     var_8h = r1;
    0x0001ba20 b.w 0x1ac20                                       |     goto label_3;
                                                                 | label_57:
    0x00038654 ldr.w r3, [r8, 4]                                 |     r3 = *((r8 + 4));
    0x00038658 mov.w r2, 0x400                                   |     r2 = 0x400;
    0x0003865c str r2, [sp, 0x30]                                |     var_30h = r2;
    0x0003865e movs r0, 0                                        |     r0 = 0;
    0x00038660 str.w r0, [sl]                                    |     __asm ("str.w r0, [sl]");
    0x00038664 cmp r3, 0x28                                      |     
    0x00038666 itet gt                                           |     
                                                                 |     if (r3 <= 0x28) {
    0x00038668 addgt r2, r3, 7                                   |         r2 = r3 + 7;
                                                                 |     }
                                                                 |     if (r3 > 0x28) {
    0x0003866a movle r2, 0x28                                    |         r2 = 0x28;
                                                                 |     }
                                                                 |     if (r3 > 0x28) {
    0x0003866c bicgt r2, r2, 7                                   |         __asm ("bicgt r2, r2, 7");
                                                                 |     }
    0x00038670 str r2, [sp, 0x20]                                |     var_20h = r2;
    0x00038672 ldr r2, [sp, 0xc8]                                |     r2 = *(arg_c8h);
    0x00038674 ands r2, r2, 2                                    |     r2 &= 2;
    0x00038678 str r2, [sp, 0x1c]                                |     var_1ch = r2;
                                                                 |     if (r2 == r2) {
    0x0003867a beq.w 0x38c26                                     |         goto label_162;
                                                                 |     }
    0x0003867e cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00038680 beq.w 0x38d70                                     |         goto label_163;
                                                                 |     }
    0x00038684 ldrb r2, [r5]                                     |     r2 = *(r5);
    0x00038686 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00038688 bne.w 0x38ec2                                     |         goto label_164;
                                                                 |     }
    0x0003868c mov fp, r2                                        |     
    0x0003868e movw r0, 0x129                                    |     r0 = 0x129;
    0x00038692 mov r7, fp                                        |     r7 = fp;
    0x00038694 str r2, [sp, 0x18]                                |     var_18h = r2;
    0x00038696 movs r2, 1                                        |     r2 = 1;
    0x00038698 str r5, [sp, 0x28]                                |     var_28h = r5;
    0x0003869a str r2, [sp, 0x24]                                |     var_24h = r2;
    0x0003869c str.w fp, [sp, 0x2c]                              |     __asm ("str.w fp, [var_2ch]");
    0x000386a0 str.w fp, [sp, 0x1c]                              |     __asm ("str.w fp, [var_1ch]");
    0x000386a4 str.w fp, [sp, 0x14]                              |     __asm ("str.w fp, [var_14h]");
                                                                 | label_59:
    0x000386a8 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x000386aa add r0, fp                                        |     r0 += fp;
    0x000386ac adds r3, 7                                        |     r3 += 7;
    0x000386ae bic r3, r3, 7                                     |     r3 = BIT_MASK (r3, 7);
    0x000386b2 add.w r0, r0, r2, lsl 1                           |     r0 += (r2 << 1);
    0x000386b6 add r0, r3                                        |     r0 += r3;
    0x000386b8 bl 0x11e2c                                        |     r0 = fcn_00011e2c (r0);
    0x000386bc mov sb, r0                                        |     sb = r0;
    0x000386be cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000386c0 beq.w 0x38e98                                     |         goto label_165;
                                                                 |     }
    0x000386c4 ldr.w r3, [r8, 4]                                 |     r3 = *((r8 + 4));
    0x000386c8 add.w r2, r0, 0x118                               |     r2 = r0 + 0x118;
    0x000386cc str r2, [r0, 0x3c]                                |     *((r0 + 0x3c)) = r2;
    0x000386ce ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x000386d0 adds r3, 7                                        |     r3 += 7;
    0x000386d2 bic r3, r3, 7                                     |     r3 = BIT_MASK (r3, 7);
    0x000386d6 add r3, r2                                        |     r3 += r2;
    0x000386d8 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x000386da str r3, [r0, 0x44]                                |     *((r0 + 0x44)) = r3;
    0x000386dc add r3, r2                                        |     r3 += r2;
    0x000386de adds r0, r3, r2                                   |     r0 = r3 + r2;
    0x000386e0 str.w r3, [sb, 0x40]                              |     __asm ("str.w r3, [sb, 0x40]");
    0x000386e4 add.w r3, sb, 0xe8                                |     r3 = sb + 0xe8;
    0x000386e8 str.w r0, [sb, 0xa8]                              |     __asm ("str.w r0, [sb, 0xa8]");
    0x000386ec str.w r3, [sb, 0xdc]                              |     __asm ("str.w r3, [sb, 0xdc]");
    0x000386f0 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x000386f2 beq 0x3877a                                       |         
    0x000386f4 ldr r3, [sp, 0x1c]                                |         r3 = var_1ch;
    0x000386f6 ldr r2, [sp, 0x18]                                |         r2 = var_18h;
    0x000386f8 adds r3, 1                                        |         r3++;
    0x000386fa add r3, r7                                        |         r3 += r7;
    0x000386fc add r3, r0                                        |         r3 += r0;
    0x000386fe str.w r3, [sb, 0xac]                              |         __asm ("str.w r3, [sb, 0xac]");
    0x00038702 blx 0x6214                                        |         fcn_00006214 ();
    0x00038706 cmp r7, 0                                         |         
                                                                 |         if (r7 != 0) {
    0x00038708 bne.w 0x38ea6                                     |             goto label_166;
                                                                 |         }
                                                                 | label_71:
    0x0003870c ldr r7, [sp, 0x18]                                |         r7 = var_18h;
    0x0003870e ldr.w fp, [pc, 0x8a8]                             |         fp = *(0x00038fb8);
    0x00038712 ldr r1, [sp, 0x14]                                |         r1 = var_14h;
    0x00038714 mov r2, r7                                        |         r2 = r7;
    0x00038716 ldr.w r0, [sb, 0xac]                              |         r0 = *((sb + 0xac));
    0x0003871a add fp, pc                                        |         
    0x0003871c blx 0x6214                                        |         fcn_00006214 ();
    0x00038720 add.w r3, fp, 0xb30                               |         r3 += arg_b30h;
    0x00038724 mov r2, r7                                        |         r2 = r7;
    0x00038726 mov r1, r3                                        |         r1 = r3;
    0x00038728 ldr.w r3, [sb, 0xac]                              |         r3 = *((sb + 0xac));
    0x0003872c add.w lr, r7, 9                                   |         lr = r7 + 9;
    0x00038730 str r7, [sp, 0x18]                                |         var_18h = r7;
    0x00038732 add.w ip, r3, r7                                  |         
    0x00038736 mov r3, r1                                        |         r3 = r1;
    0x00038738 ldm r3!, {r0, r1}                                 |         r0 = *(r3!);
                                                                 |         r1 = *((r3! + 4));
    0x0003873a ldr.w r7, [sb, 0xac]                              |         r7 = *((sb + 0xac));
    0x0003873e str r3, [sp, 0x1c]                                |         var_1ch = r3;
    0x00038740 ldr r3, [sp, 0x1c]                                |         r3 = var_1ch;
    0x00038742 str r0, [r7, r2]                                  |         *((r7 + r2)) = r0;
    0x00038744 str.w r1, [ip, 4]                                 |         __asm ("str.w r1, [ip, 4]");
    0x00038748 ldrh r3, [r3]                                     |         r3 = *(r3);
    0x0003874a ldr r7, [sp, 0x14]                                |         r7 = var_14h;
    0x0003874c strh.w r3, [ip, 8]                                |         *((ip + 8)) = r3;
    0x00038750 ldr.w r0, [sb, 0xac]                              |         r0 = *((sb + 0xac));
    0x00038754 mov r1, r7                                        |         r1 = r7;
    0x00038756 add r0, lr                                        |         r0 += lr;
    0x00038758 str.w r0, [sb, 0xe4]                              |         __asm ("str.w r0, [sb, 0xe4]");
    0x0003875c blx 0x6214                                        |         fcn_00006214 ();
    0x00038760 ldr.w r3, [sb, 0xe4]                              |         r3 = *((sb + 0xe4));
    0x00038764 ldr r2, [sp, 0x18]                                |         r2 = var_18h;
    0x00038766 ldr.w r0, [fp, 0xb3c]                             |         r0 = *(arg_b3ch);
    0x0003876a str r0, [r3, r2]                                  |         *((r3 + r2)) = r0;
    0x0003876c add r3, r2                                        |         r3 += r2;
    0x0003876e ldrb.w r2, [fp, 0xb40]                            |         r2 = *(arg_b40h);
    0x00038772 mov r0, r7                                        |         r0 = r7;
    0x00038774 strb r2, [r3, 4]                                  |         *((r3 + 4)) = r2;
    0x00038776 blx 0x6050                                        |         fcn_00006050 ();
                                                                 |     }
    0x0003877a ldr r3, [sp, 0xcc]                                |     r3 = *(arg_cch);
    0x0003877c str.w r8, [sb]                                    |     __asm ("str.w r8, [sb]");
    0x00038780 str.w r3, [sb, 0x90]                              |     __asm ("str.w r3, [sb, 0x90]");
    0x00038784 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00038786 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00038788 beq.w 0x38dd2                                     |         goto label_167;
                                                                 |     }
    0x0003878c ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x0003878e ldrb r3, [r3]                                     |     r3 = *(r3);
    0x00038790 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00038792 beq.w 0x38dd2                                     |         goto label_167;
                                                                 |     }
    0x00038796 ldr r0, [sp, 0xcc]                                |     r0 = *(arg_cch);
    0x00038798 movw r3, 0x7f7f                                   |     
    0x0003879c movt r3, 8                                        |     r3 = 0x87f7f;
    0x000387a0 ldr.w r2, [sb, 0x3c]                              |     r2 = *((sb + 0x3c));
    0x000387a4 ldr.w r1, [sb, 0xa8]                              |     r1 = *((sb + 0xa8));
    0x000387a8 ands r3, r0                                       |     r3 &= r0;
    0x000387aa movs r0, 0                                        |     r0 = 0;
    0x000387ac str r0, [sp, 0x34]                                |     var_34h = r0;
    0x000387ae add r0, sp, 0x34                                  |     r0 += var_34h;
    0x000387b0 str r0, [sp]                                      |     *(sp) = r0;
    0x000387b2 mov r0, r8                                        |     r0 = r8;
    0x000387b4 ldr.w fp, [r8, 0x18]                              |     fp = *((r8 + 0x18));
    0x000387b8 blx fp                                            |     fp (r0, r1, r2, r3);
    0x000387ba ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x000387bc mov fp, r0                                        |     
    0x000387be cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000387c0 bne.w 0x38d8e                                     |         goto label_168;
                                                                 |     }
    0x000387c4 ldr.w r0, [sb, 0x3c]                              |     r0 = *((sb + 0x3c));
    0x000387c8 and r7, r3, 1                                     |     r7 = r3 & 1;
    0x000387cc str r7, [sp, 0x14]                                |     var_14h = r7;
    0x000387ce ldr r3, [r0]                                      |     r3 = *(r0);
    0x000387d0 ldr r3, [r3, 0x30]                                |     r3 = *((r3 + 0x30));
    0x000387d2 blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x000387d4 mov r8, r0                                        |     r8 = r0;
    0x000387d6 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x000387d8 beq.w 0x38f32                                     |         goto label_169;
                                                                 |     }
                                                                 | label_74:
    0x000387dc ldr.w r1, [pc, 0x7dc]                             |     
    0x000387e0 movs r2, 0                                        |     r2 = 0;
    0x000387e2 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x000387e4 add r1, pc                                        |     r1 = 0x717a4;
    0x000387e6 blx 0x61f8                                        |     fcn_000061f8 ();
    0x000387ea ands r2, r8, 0x2000                               |     r2 = r8 & 0x2000;
    0x000387ee strb.w r0, [sb, 0xd]                              |     *((sb + 0xd)) = r0;
                                                                 |     if (r2 != r8) {
    0x000387f2 bne.w 0x38f20                                     |         goto label_170;
                                                                 |     }
    0x000387f6 ldr.w r1, [pc, 0x7c8]                             |     
    0x000387fa ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x000387fc add r1, pc                                        |     r1 = 0x717c2;
    0x000387fe blx 0x61f8                                        |     r0 = fcn_000061f8 ();
    0x00038802 mov fp, r0                                        |     
    0x00038804 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00038806 bne.w 0x38f20                                     |         goto label_170;
                                                                 |     }
                                                                 | label_63:
    0x0003880a mov.w r2, -1                                      |     r2 = -1;
    0x0003880e add r1, sp, 0x30                                  |     r1 += var_30h;
    0x00038810 mov r0, sb                                        |     r0 = sb;
    0x00038812 bl 0x110ec                                        |     r0 = fcn_000110ec (r0, r1, r2);
    0x00038816 mov r7, r0                                        |     r7 = r0;
    0x00038818 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0003881a bne.w 0x38d8c                                     |         goto label_171;
                                                                 |     }
    0x0003881e ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00038820 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00038822 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00038824 eor r2, r3, 1                                     |     r2 = r3 ^ 1;
    0x00038828 str r2, [sp, 0x1c]                                |     var_1ch = r2;
    0x0003882a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0003882c beq.w 0x38e26                                     |         goto label_172;
                                                                 |     }
    0x00038830 str r0, [sp, 0x20]                                |     var_20h = r0;
                                                                 | label_66:
    0x00038832 ldr.w r3, [sb, 0xdc]                              |     r3 = *((sb + 0xdc));
    0x00038836 movs r2, 0x30                                     |     r2 = 0x30;
    0x00038838 ldr r0, [sp, 0xc8]                                |     r0 = *(arg_c8h);
    0x0003883a movs r1, 0                                        |     r1 = 0;
    0x0003883c and r8, r0, 1                                     |     r8 = r0 & 1;
    0x00038840 mov r0, r3                                        |     r0 = r3;
    0x00038842 blx 0x5fcc                                        |     fcn_00005fcc ();
    0x00038846 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00038848 movs r1, 0x50                                     |     r1 = 0x50;
    0x0003884a ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0003884c str r1, [r0, 0x18]                                |     *((r0 + 0x18)) = r1;
    0x0003884e movs r1, 2                                        |     r1 = 2;
    0x00038850 str r2, [r0, 0x14]                                |     *((r0 + 0x14)) = r2;
    0x00038852 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00038854 strb r1, [r0, 0x1d]                               |     *((r0 + 0x1d)) = r1;
    0x00038856 movs r1, 0x64                                     |     r1 = 0x64;
    0x00038858 str r1, [r0, 0x10]                                |     *((r0 + 0x10)) = r1;
    0x0003885a strb r2, [r0, 0x1c]                               |     *((r0 + 0x1c)) = r2;
    0x0003885c ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x0003885e strd r2, sb, [r0, 0x20]                           |     __asm ("strd r2, sb, [r0, 0x20]");
    0x00038862 uxtb.w r2, fp                                     |     r2 = (int8_t) fp;
    0x00038866 strb.w r3, [sb, 0xe]                              |     *((sb + 0xe)) = r3;
    0x0003886a ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x0003886c strb.w r2, [sb, 0xc]                              |     *((sb + 0xc)) = r2;
    0x00038870 strb.w r2, [sb, 4]                                |     *((sb + 4)) = r2;
    0x00038874 strb.w r3, [sb, 0xf]                              |     *((sb + 0xf)) = r3;
    0x00038878 eor r3, r8, 1                                     |     r3 = r8 ^ 1;
    0x0003887c strb.w r3, [sb, 6]                                |     *((sb + 6)) = r3;
    0x00038880 mvn r3, 0xc0000000                                |     r3 = ~0xc0000000;
    0x00038884 strb.w r2, [sb, 0x12]                             |     *((sb + 0x12)) = r2;
    0x00038888 strb.w r2, [sb, 7]                                |     *((sb + 7)) = r2;
    0x0003888c str.w r3, [sb, 0x9c]                              |     __asm ("str.w r3, [sb, 0x9c]");
    0x00038890 cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x00038894 bne 0x388a2                                       |         
    0x00038896 movw r3, 0x201                                    |         
    0x0003889a movt r3, 0x222                                    |         r3 = 0x2220201;
    0x0003889e str.w r3, [sb, 8]                                 |         __asm ("str.w r3, [sb, 8]");
                                                                 |     }
    0x000388a2 vmov.i8 d16, 0xff                                 |     __asm ("vmov.i8 d16, 0xff");
    0x000388a6 movs r3, 0x50                                     |     r3 = 0x50;
    0x000388a8 mov r0, sb                                        |     r0 = sb;
    0x000388aa strh.w r3, [sb, 0x8c]                             |     *((sb + 0x8c)) = r3;
    0x000388ae vstr d16, [sb, 0xa0]                              |     __asm ("vstr d16, [sb, 0xa0]");
    0x000388b2 bl 0xb034                                         |     fcn_0000b034 (r0);
    0x000388b6 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x000388ba beq.w 0x38e2e                                     |         goto label_173;
                                                                 |     }
    0x000388be movs r3, 2                                        |     r3 = 2;
    0x000388c0 strb.w r3, [sb, 5]                                |     *((sb + 5)) = r3;
                                                                 | label_67:
    0x000388c4 ldr.w r3, [pc, 0x6fc]                             |     r3 = *(0x00038fc4);
    0x000388c8 mov r0, sb                                        |     r0 = sb;
    0x000388ca add.w r8, sp, 0x38                                |     r8 += var_38h;
    0x000388ce add r3, pc                                        |     r3 += pc;
    0x000388d0 str.w r3, [sb, 0xc4]                              |     __asm ("str.w r3, [sb, 0xc4]");
    0x000388d4 ldrd r2, r3, [r6, 0x28]                           |     __asm ("ldrd r2, r3, [r6, 0x28]");
    0x000388d8 str.w sb, [sl]                                    |     __asm ("str.w sb, [sl]");
    0x000388dc strd r2, r3, [sb, 0x80]                           |     __asm ("strd r2, r3, [sb, 0x80]");
    0x000388e0 bl 0x7a14                                         |     fcn_00007a14 (r0);
    0x000388e4 ldr.w sb, [sl]                                    |     sb = *(sl);
    0x000388e8 movs r2, 0x64                                     |     r2 = 0x64;
    0x000388ea movs r1, 0                                        |     r1 = 0;
    0x000388ec mov r0, r8                                        |     r0 = r8;
    0x000388ee blx 0x5fcc                                        |     fcn_00005fcc ();
    0x000388f2 ldr.w r0, [sb, 0x3c]                              |     r0 = *((sb + 0x3c));
    0x000388f6 ldr r3, [r0]                                      |     r3 = *(r0);
                                                                 |     if (r3 != 0) {
    0x000388f8 cbz r3, 0x3891a                                   |         
    0x000388fa vmov.i32 d16, 0                                   |         __asm ("vmov.i32 d16, 0");
    0x000388fe mov r1, r8                                        |         r1 = r8;
    0x00038900 movs r2, 0x64                                     |         r2 = 0x64;
    0x00038902 vstr d16, [sp]                                    |         __asm ("vstr d16, [sp]");
    0x00038906 ldr r3, [r3, 8]                                   |         r3 = *((r3 + 8));
    0x00038908 blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
    0x0003890a movw r3, 0x20a                                    |         r3 = 0x20a;
    0x0003890e mov fp, r0                                        |         
    0x00038910 cmp r0, r3                                        |         
    0x00038912 it ne                                             |         
                                                                 |         if (r0 != r3) {
    0x00038914 cmpne r0, 0                                       |             __asm ("cmpne r0, 0");
                                                                 |         }
                                                                 |         if (r0 != r3) {
    0x00038916 bne.w 0x38da6                                     |             goto label_70;
                                                                 |         }
                                                                 |     }
    0x0003891a ldr r3, [sp, 0xc8]                                |     r3 = *(arg_c8h);
    0x0003891c ldr.w r0, [sl]                                    |     r0 = *(sl);
    0x00038920 str.w r6, [sl, 4]                                 |     __asm ("str.w r6, [sl, 4]");
    0x00038924 strb.w r3, [sl, 0x10]                             |     *((sl + 0x10)) = r3;
    0x00038928 ldr.w r3, [pc, 0x69c]                             |     r3 = *(0x00038fc8);
    0x0003892c ldr r1, [r0, 0x3c]                                |     r1 = *((r0 + 0x3c));
    0x0003892e str.w sl, [r0, 0xb4]                              |     __asm ("str.w sl, [r0, 0xb4]");
    0x00038932 add r3, pc                                        |     r3 += pc;
    0x00038934 str.w r3, [r0, 0xb0]                              |     __asm ("str.w r3, [r0, 0xb0]");
    0x00038938 ldr r3, [r1]                                      |     r3 = *(r1);
                                                                 |     if (r3 != 0) {
    0x0003893a cbz r3, 0x3894c                                   |         
    0x0003893c add.w r2, r0, 0xb0                                |         r2 = r0 + 0xb0;
    0x00038940 ldr r3, [r3, 0x28]                                |         r3 = *((r3 + 0x28));
    0x00038942 mov r0, r1                                        |         r0 = r1;
    0x00038944 movs r1, 0xf                                      |         r1 = 0xf;
    0x00038946 blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00038948 ldr.w r0, [sl]                                    |         r0 = *(sl);
                                                                 |     }
    0x0003894c movs r3, 0                                        |     r3 = 0;
    0x0003894e str.w sl, [r4, 4]                                 |     __asm ("str.w sl, [r4, 4]");
    0x00038952 strd r3, r3, [sl, 8]                              |     __asm ("strd r3, r3, [sl, 8]");
    0x00038956 ldrb r3, [r0, 0xe]                                |     r3 = *((r0 + 0xe));
                                                                 |     if (r3 != 0) {
    0x00038958 cbz r3, 0x38966                                   |         
    0x0003895a ldrh.w r3, [sl, 0x16]                             |         r3 = *((sl + 0x16));
    0x0003895e orr r3, r3, 1                                     |         r3 |= 1;
    0x00038962 strh.w r3, [sl, 0x16]                             |         *((sl + 0x16)) = r3;
                                                                 |     }
    0x00038966 ldrb.w r3, [sp, 0x49]                             |     r3 = var_49h;
    0x0003896a ldrb.w r2, [sp, 0x48]                             |     r2 = var_48h;
    0x0003896e lsls r3, r3, 0x10                                 |     r3 <<= 0x10;
    0x00038970 orr.w r3, r3, r2, lsl 8                           |     r3 |= (r2 << 8);
    0x00038974 sub.w r2, r3, 0x200                               |     r2 = r3 - 0x200;
    0x00038978 str.w r3, [sl, 0x20]                              |     __asm ("str.w r3, [sl, 0x20]");
    0x0003897c cmp.w r2, 0xfe00                                  |     
                                                                 |     if (r2 > 0xfe00) {
    0x00038980 bhi.w 0x38df8                                     |         goto label_174;
                                                                 |     }
    0x00038984 subs r2, r3, 1                                    |     r2 = r3 - 1;
    0x00038986 tst r2, r3                                        |     
                                                                 |     if ((r2 & r3) != 0) {
    0x00038988 bne.w 0x38df8                                     |         goto label_174;
                                                                 |     }
    0x0003898c ldrh.w r3, [sl, 0x16]                             |     r3 = *((sl + 0x16));
    0x00038990 ldrb.w r5, [sp, 0x4c]                             |     r5 = var_4ch;
    0x00038994 orr r3, r3, 2                                     |     r3 |= 2;
    0x00038998 strh.w r3, [sl, 0x16]                             |     *((sl + 0x16)) = r3;
    0x0003899c mov r7, r5                                        |     r7 = r5;
    0x0003899e ldr r3, [sp, 0x6c]                                |     r3 = var_6ch;
    0x000389a0 subs r3, 0                                        |     
    0x000389a2 it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x000389a4 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x000389a6 strb.w r3, [sl, 0x11]                             |     *((sl + 0x11)) = r3;
    0x000389aa ldr r3, [sp, 0x78]                                |     r3 = var_78h;
    0x000389ac subs r3, 0                                        |     
    0x000389ae it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x000389b0 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x000389b2 strb.w r3, [sl, 0x12]                             |     *((sl + 0x12)) = r3;
                                                                 | label_65:
    0x000389b6 mov r2, r7                                        |     r2 = r7;
    0x000389b8 add.w r1, sl, 0x20                                |     r1 = sl + 0x20;
    0x000389bc bl 0x110ec                                        |     r0 = fcn_000110ec (r0, r1, r2);
    0x000389c0 mov fp, r0                                        |     
    0x000389c2 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000389c4 bne.w 0x38da6                                     |         goto label_70;
                                                                 |     }
    0x000389c8 ldr.w r3, [sl, 0x20]                              |     r3 = *((sl + 0x20));
    0x000389cc subs r3, r3, r5                                   |     r3 -= r5;
    0x000389ce str.w r3, [sl, 0x24]                              |     __asm ("str.w r3, [sl, 0x24]");
    0x000389d2 ldrb r3, [r4, 9]                                  |     r3 = *((r4 + 9));
    0x000389d4 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000389d6 beq.w 0x38e8a                                     |         goto label_175;
                                                                 |     }
    0x000389da ldr.w r8, [pc, 0x5f0]                             |     
    0x000389de movs r3, 1                                        |     r3 = 1;
    0x000389e0 str.w r3, [sl, 0x40]                              |     __asm ("str.w r3, [sl, 0x40]");
    0x000389e4 add r8, pc                                        |     r8 = 0x719b6;
    0x000389e6 ldr.w r5, [r8, 4]                                 |     r5 = *(0x719ba);
                                                                 |     if (r5 != 0) {
    0x000389ea cbz r5, 0x38a0e                                   |         
    0x000389ec ldr.w r3, [r8, 0x4c]                              |         r3 = *((r8 + 0x4c));
    0x000389f0 movs r0, 2                                        |         r0 = 2;
    0x000389f2 blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x000389f4 ldr.w r3, [r8, 4]                                 |         r3 = *((r8 + 4));
    0x000389f8 mov r5, r0                                        |         r5 = r0;
                                                                 |         if (r3 == 0) {
    0x000389fa cbz r3, 0x38a0e                                   |             goto label_176;
                                                                 |         }
    0x000389fc ldr.w r3, [r8, 0x4c]                              |         r3 = *((r8 + 0x4c));
    0x00038a00 mov r0, fp                                        |         r0 = fp;
    0x00038a02 blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00038a04 str.w r0, [sl, 0x38]                              |         __asm ("str.w r0, [sl, 0x38]");
    0x00038a08 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00038a0a beq.w 0x38f7c                                     |             goto label_177;
                                                                 |         }
                                                                 |     }
                                                                 | label_176:
    0x00038a0e mov r0, r5                                        |     r0 = r5;
    0x00038a10 blx 0x6810                                        |     fcn_00006810 ();
    0x00038a14 ldr.w r3, [pc, 0x5b8]                             |     r3 = *(0x00038fd0);
    0x00038a18 mov r0, r5                                        |     r0 = r5;
    0x00038a1a add r3, pc                                        |     r3 += pc;
    0x00038a1c ldr.w r2, [r3, 0x340]                             |     r2 = *((r3 + 0x340));
    0x00038a20 str.w sl, [r3, 0x340]                             |     __asm ("str.w sl, aav.0x000000ff");
    0x00038a24 str.w r2, [sl, 0x44]                              |     __asm ("str.w r2, [sl, 0x44]");
    0x00038a28 blx 0x63dc                                        |     fcn_000063dc ();
                                                                 | label_68:
    0x00038a2c ldrb r3, [r4, 9]                                  |     r3 = *((r4 + 9));
    0x00038a2e ldr.w r8, [r4, 4]                                 |     r8 = *((r4 + 4));
                                                                 |     if (r3 == 0) {
    0x00038a32 cbz r3, 0x38a56                                   |         goto label_60;
                                                                 |     }
    0x00038a34 ldr r5, [r6, 0x14]                                |     r5 = *((r6 + 0x14));
    0x00038a36 cmp r5, 0                                         |     
                                                                 |     if (r5 <= 0) {
    0x00038a38 ble 0x38a56                                       |         goto label_60;
                                                                 |     }
    0x00038a3a ldr r2, [r6, 0x10]                                |     r2 = *((r6 + 0x10));
    0x00038a3c movs r1, 0                                        |     r1 = 0;
    0x00038a3e ldr r7, [sp, 8]                                   |     r7 = var_8h;
                                                                 |     do {
    0x00038a40 ldr r3, [r2, 4]                                   |         r3 = *((r2 + 4));
                                                                 |         if (r3 != 0) {
    0x00038a42 cbz r3, 0x38a4c                                   |             
    0x00038a44 ldrb r0, [r3, 9]                                  |             r0 = *((r3 + 9));
    0x00038a46 cmp r0, 0                                         |             
                                                                 |             if (r0 != 0) {
    0x00038a48 bne.w 0x38c6c                                     |                 goto label_178;
                                                                 |             }
                                                                 |         }
    0x00038a4c adds r1, 1                                        |         r1++;
    0x00038a4e adds r2, 0x10                                     |         r2 += 0x10;
    0x00038a50 cmp r1, r5                                        |         
    0x00038a52 bne 0x38a40                                       |         
                                                                 |     } while (r1 != r5);
    0x00038a54 str r7, [sp, 8]                                   |     var_8h = r7;
                                                                 | label_60:
    0x00038a56 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00038a58 mov r0, r4                                        |     r0 = r4;
    0x00038a5a str r4, [r3]                                      |     *(r3) = r4;
    0x00038a5c bl 0xd140                                         |     fcn_0000d140 (r0);
    0x00038a60 ldrb r3, [r4, 9]                                  |     r3 = *((r4 + 9));
                                                                 |     if (r3 != 0) {
    0x00038a62 cbz r3, 0x38a70                                   |         
    0x00038a64 ldr r5, [r4, 0xc]                                 |         r5 = *((r4 + 0xc));
    0x00038a66 subs r5, 1                                        |         r5--;
    0x00038a68 str r5, [r4, 0xc]                                 |         *((r4 + 0xc)) = r5;
    0x00038a6a cmp r5, 0                                         |         
                                                                 |         if (r5 == 0) {
    0x00038a6c beq.w 0x38dec                                     |             goto label_179;
                                                                 |         }
                                                                 |     }
                                                                 | label_64:
    0x00038a70 ldr.w r3, [r8, 0x30]                              |     r3 = *((r8 + 0x30));
    0x00038a74 mov.w fp, 0                                       |     
    0x00038a78 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00038a7a bne 0x38b08                                       |         goto label_180;
                                                                 |     }
    0x00038a7c ldr r2, [r4, 4]                                   |     r2 = *((r4 + 4));
    0x00038a7e mov.w r1, 0x7d0                                   |     r1 = 0x7d0;
    0x00038a82 ldr r2, [r2]                                      |     r2 = *(r2);
    0x00038a84 ldr.w r2, [r2, 0xdc]                              |     r2 = *((r2 + 0xdc));
    0x00038a88 ldr r0, [r2, 0x28]                                |     r0 = *((r2 + 0x28));
    0x00038a8a str r1, [r2, 0x10]                                |     *((r2 + 0x10)) = r1;
    0x00038a8c mov fp, r0                                        |     
    0x00038a8e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00038a90 beq 0x38b08                                       |         goto label_180;
                                                                 |     }
    0x00038a92 ldr.w r2, [pc, 0x540]                             |     
    0x00038a96 mov fp, r3                                        |     
    0x00038a98 add r2, pc                                        |     r2 = 0x71a72;
    0x00038a9a ldr r3, [r2, 0x7c]                                |     r3 = *(0x71aee);
    0x00038a9c blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t) (r2, r3);
    0x00038a9e b 0x38b08                                         |     goto label_180;
                                                                 | label_58:
    0x00038ae4 movs r0, 0x54                                     |     r0 = 0x54;
    0x00038ae6 bl 0x11e2c                                        |     r0 = fcn_00011e2c (r0);
    0x00038aea mov sl, r0                                        |     sl = r0;
    0x00038aec cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00038aee bne.w 0x38654                                     |         goto label_57;
                                                                 |     }
    0x00038af2 mov.w fp, 7                                       |     
                                                                 | label_62:
    0x00038af6 mov r0, sl                                        |     r0 = sl;
    0x00038af8 blx 0x6050                                        |     fcn_00006050 ();
    0x00038afc mov r0, r4                                        |     r0 = r4;
    0x00038afe blx 0x6050                                        |     fcn_00006050 ();
    0x00038b02 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x00038b04 movs r3, 0                                        |     r3 = 0;
    0x00038b06 str r3, [r2]                                      |     *(r2) = r3;
                                                                 | label_180:
    0x00038b08 ldr r0, [sp, 8]                                   |     r0 = var_8h;
    0x00038b0a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00038b0c beq 0x38c08                                       |         goto label_181;
                                                                 |     }
    0x00038b0e blx 0x63dc                                        |     fcn_000063dc ();
    0x00038b12 b 0x38c08                                         |     goto label_181;
    0x00038ba8 blx 0x6810                                        |     fcn_00006810 ();
    0x00038bac ldr.w r3, [pc, 0x430]                             |     
    0x00038bb0 add r3, pc                                        |     r3 = 0x71b94;
    0x00038bb2 ldr.w fp, [r3, 0x340]                             |     fp = *(0x71ed4);
    0x00038bb6 cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x00038bba beq 0x38be8                                       |         goto label_182;
                                                                 |     }
    0x00038bbc ldr r7, [sp, 8]                                   |     r7 = var_8h;
    0x00038bbe mov r3, r5                                        |     r3 = r5;
    0x00038bc0 mov sl, r4                                        |     sl = r4;
    0x00038bc2 mov r5, fp                                        |     r5 = fp;
    0x00038bc4 mov fp, r3                                        |     
                                                                 |     do {
    0x00038bc6 ldr r4, [r5]                                      |         r4 = *(r5);
    0x00038bc8 mov r0, sb                                        |         r0 = sb;
    0x00038bca ldr.w r1, [r4, 0xa8]                              |         r1 = *((r4 + 0xa8));
    0x00038bce blx 0x67b8                                        |         r0 = fcn_000067b8 ();
                                                                 |         if (r0 == 0) {
    0x00038bd2 cbnz r0, 0x38bdc                                  |             
    0x00038bd4 ldr r3, [r4]                                      |             r3 = *(r4);
    0x00038bd6 cmp r8, r3                                        |             
                                                                 |             if (r8 == r3) {
    0x00038bd8 beq.w 0x38e3e                                     |                 goto label_183;
                                                                 |             }
                                                                 |         }
    0x00038bdc ldr r5, [r5, 0x44]                                |         r5 = *((r5 + 0x44));
    0x00038bde cmp r5, 0                                         |         
    0x00038be0 bne 0x38bc6                                       |         
                                                                 |     } while (r5 != 0);
    0x00038be2 mov r4, sl                                        |     r4 = sl;
    0x00038be4 mov r5, fp                                        |     r5 = fp;
    0x00038be6 str r7, [sp, 8]                                   |     var_8h = r7;
                                                                 | label_182:
    0x00038be8 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x00038bea blx 0x63dc                                        |     fcn_000063dc ();
    0x00038bee mov r0, sb                                        |     r0 = sb;
    0x00038bf0 blx 0x6050                                        |     fcn_00006050 ();
    0x00038bf4 b 0x38ae4                                         |     goto label_58;
                                                                 |     do {
                                                                 | label_181:
    0x00038c08 ldr r2, [pc, 0x3d8]                               |         
    0x00038c0a ldr r3, [pc, 0x3a4]                               |         r3 = *(0x38fb2);
    0x00038c0c add r2, pc                                        |         r2 = 0x71bf4;
    0x00038c0e ldr r3, [r2, r3]                                  |         r3 = *(0x71bf4);
    0x00038c10 ldr r2, [r3]                                      |         r2 = *(0x71bf4);
    0x00038c12 ldr r3, [sp, 0x9c]                                |         r3 = var_9ch;
    0x00038c14 eors r2, r3                                       |         r2 ^= r3;
    0x00038c16 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00038c1a bne.w 0x38fa6                                     |             goto label_184;
                                                                 |         }
    0x00038c1e mov r0, fp                                        |         r0 = fp;
    0x00038c20 add sp, 0xa4                                      |         
    0x00038c22 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_162:
    0x00038c26 cmp r5, 0                                         |         
                                                                 |         if (r5 == 0) {
    0x00038c28 beq.w 0x38f90                                     |             goto label_185;
                                                                 |         }
    0x00038c2c ldrb r2, [r5]                                     |         r2 = *(r5);
                                                                 |         if (r2 != 0) {
    0x00038c2e cbnz r2, 0x38c86                                  |             goto label_186;
                                                                 |         }
    0x00038c30 ldr r2, [sp, 0x1c]                                |         r2 = var_1ch;
    0x00038c32 movw r0, 0x129                                    |         r0 = 0x129;
    0x00038c36 mov r7, r2                                        |         r7 = r2;
    0x00038c38 mov fp, r2                                        |         
    0x00038c3a strd r2, r5, [sp, 0x24]                           |         __asm ("strd r2, r5, [sp, 0x24]");
    0x00038c3e str r2, [sp, 0x18]                                |         var_18h = r2;
    0x00038c40 str r2, [sp, 0x2c]                                |         var_2ch = r2;
    0x00038c42 str r2, [sp, 0x14]                                |         var_14h = r2;
    0x00038c44 b 0x386a8                                         |         goto label_59;
                                                                 | label_72:
    0x00038c5e mov r0, sb                                        |         r0 = sb;
    0x00038c60 blx 0x6050                                        |         fcn_00006050 ();
    0x00038c64 mov r0, r4                                        |         r0 = r4;
    0x00038c66 blx 0x6050                                        |         fcn_00006050 ();
    0x00038c6a b 0x38c08                                         |         
                                                                 |     } while (1);
                                                                 |     do {
                                                                 | label_178:
    0x00038c6c mov r2, r3                                        |         r2 = r3;
    0x00038c6e ldr r3, [r3, 0x18]                                |         r3 = *((r3 + 0x18));
    0x00038c70 cmp r3, 0                                         |         
    0x00038c72 bne 0x38c6c                                       |         
                                                                 |     } while (r3 != 0);
    0x00038c74 ldr r1, [r2, 4]                                   |     r1 = *((r2 + 4));
    0x00038c76 str r7, [sp, 8]                                   |     var_8h = r7;
    0x00038c78 cmp r1, r8                                        |     
                                                                 |     if (r1 < r8) {
    0x00038c7a bls.w 0x38db6                                     |         goto label_187;
                                                                 |     }
    0x00038c7e strd r2, r3, [r4, 0x14]                           |     __asm ("strd r2, r3, [r4, 0x14]");
    0x00038c82 str r4, [r2, 0x18]                                |     *((r2 + 0x18)) = r4;
    0x00038c84 b 0x38a56                                         |     goto label_60;
                                                                 | label_186:
    0x00038c86 ldr.w r3, [r8, 8]                                 |     r3 = *((r8 + 8));
    0x00038c8a add.w sb, r3, 1                                   |     sb = r3 + 1;
    0x00038c8e lsl.w r0, sb, 1                                   |     r0 = sb << 1;
    0x00038c92 bl 0xd300                                         |     r0 = fcn_0000d300 (r0, r1, r2, r3, r4);
    0x00038c96 mov r3, r0                                        |     r3 = r0;
    0x00038c98 str r0, [sp, 0x14]                                |     var_14h = r0;
    0x00038c9a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00038c9c beq.w 0x38ea0                                     |         goto label_188;
                                                                 |     }
    0x00038ca0 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00038ca2 mov r1, r5                                        |     r1 = r5;
    0x00038ca4 strb r2, [r0]                                     |     *(r0) = r2;
    0x00038ca6 mov r2, sb                                        |     r2 = sb;
    0x00038ca8 ldr.w r7, [r8, 0x24]                              |     r7 = *((r8 + 0x24));
    0x00038cac mov sb, r0                                        |     sb = r0;
    0x00038cae mov r0, r8                                        |     r0 = r8;
    0x00038cb0 blx r7                                            |     uint32_t (*r7)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
    0x00038cb2 ldrb.w r3, [sb]                                   |     r3 = *(sb);
    0x00038cb6 mov fp, r0                                        |     
                                                                 |     if (r3 == 0) {
    0x00038cb8 cbz r3, 0x38cd2                                   |         goto label_189;
                                                                 |     }
    0x00038cba ldr r7, [sp, 8]                                   |     r7 = var_8h;
    0x00038cbc mov r3, sb                                        |     r3 = sb;
                                                                 |     do {
    0x00038cbe ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x00038cc2 cmp r2, 0                                         |         
    0x00038cc4 bne 0x38cbe                                       |         
                                                                 |     } while (r2 != 0);
    0x00038cc6 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x00038cc8 str r7, [sp, 8]                                   |     var_8h = r7;
    0x00038cca subs r3, r3, r2                                   |     r3 -= r2;
    0x00038ccc bic r3, r3, 0xc0000000                            |     r3 = BIT_MASK (r3, 0xc0000000);
    0x00038cd0 str r3, [sp, 0x1c]                                |     var_1ch = r3;
                                                                 | label_189:
    0x00038cd2 ldrb r3, [r5]                                     |     r3 = *(r5);
    0x00038cd4 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00038cd6 beq.w 0x38f78                                     |         goto label_190;
                                                                 |     }
    0x00038cda ldr r7, [sp, 8]                                   |     r7 = var_8h;
    0x00038cdc mov r3, r5                                        |     r3 = r5;
                                                                 |     do {
    0x00038cde ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x00038ce2 cmp r2, 0                                         |         
    0x00038ce4 bne 0x38cde                                       |         
                                                                 |     } while (r2 != 0);
    0x00038ce6 subs r3, r3, r5                                   |     r3 -= r5;
    0x00038ce8 str r7, [sp, 8]                                   |     var_8h = r7;
    0x00038cea bic r3, r3, 0xc0000000                            |     r3 = BIT_MASK (r3, 0xc0000000);
    0x00038cee adds r3, 1                                        |     r3++;
                                                                 | label_76:
    0x00038cf0 ldrb r2, [r5, r3]                                 |     r2 = *((r5 + r3));
    0x00038cf2 adds r3, r5, r3                                   |     r3 = r5 + r3;
    0x00038cf4 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x00038cf6 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00038cf8 beq.w 0x38f74                                     |         goto label_191;
                                                                 |     }
    0x00038cfc ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x00038cfe ldr r7, [sp, 8]                                   |     r7 = var_8h;
                                                                 | label_61:
    0x00038d00 mov r3, r2                                        |     r3 = r2;
                                                                 |     do {
    0x00038d02 ldrb r1, [r3, 1]!                                 |         r1 = *((r3 += 1));
    0x00038d06 cmp r1, 0                                         |         
    0x00038d08 bne 0x38d02                                       |         
                                                                 |     } while (r1 != 0);
    0x00038d0a subs r3, r3, r2                                   |     r3 -= r2;
    0x00038d0c bic r3, r3, 0xc0000000                            |     r3 = BIT_MASK (r3, 0xc0000000);
    0x00038d10 adds r3, 1                                        |     r3++;
    0x00038d12 ldrb r1, [r2, r3]                                 |     r1 = *((r2 + r3));
    0x00038d14 add r3, r2                                        |     r3 += r2;
    0x00038d16 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00038d18 beq.w 0x38e82                                     |         goto label_192;
                                                                 |     }
    0x00038d1c mov r2, r3                                        |     r2 = r3;
                                                                 |     do {
    0x00038d1e ldrb r1, [r2, 1]!                                 |         r1 = *((r2 += 1));
    0x00038d22 cmp r1, 0                                         |         
    0x00038d24 bne 0x38d1e                                       |         
                                                                 |     } while (r1 != 0);
    0x00038d26 subs r2, r2, r3                                   |     r2 -= r3;
    0x00038d28 bic r2, r2, 0xc0000000                            |     r2 = BIT_MASK (r2, 0xc0000000);
    0x00038d2c adds r2, 1                                        |     r2++;
                                                                 | label_69:
    0x00038d2e ldrb r1, [r3, r2]                                 |     r1 = *((r3 + r2));
    0x00038d30 add r2, r3                                        |     r2 += r3;
    0x00038d32 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00038d34 bne 0x38d00                                       |         goto label_61;
                                                                 |     }
    0x00038d36 str r7, [sp, 8]                                   |     var_8h = r7;
                                                                 | label_75:
    0x00038d38 cmp.w fp, 0                                       |     
                                                                 |     if (fp != 0) {
    0x00038d3c bne.w 0x38eba                                     |         goto label_193;
                                                                 |     }
    0x00038d40 ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x00038d42 ldr.w r3, [r8, 8]                                 |     r3 = *((r8 + 8));
    0x00038d46 adds r1, r0, 7                                    |     r1 = r0 + 7;
    0x00038d48 cmp r1, r3                                        |     
                                                                 |     if (r1 >= r3) {
    0x00038d4a bge.w 0x38f52                                     |         goto label_194;
                                                                 |     }
    0x00038d4e ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00038d50 adds r2, 1                                        |     r2++;
    0x00038d52 str.w fp, [sp, 0x24]                              |     __asm ("str.w fp, [var_24h]");
    0x00038d56 str r5, [sp, 0x28]                                |     var_28h = r5;
    0x00038d58 subs r1, r2, r3                                   |     r1 = r2 - r3;
    0x00038d5a mov r2, r0                                        |     r2 = r0;
    0x00038d5c add.w r0, r0, r0, lsl 1                           |     r0 += (r0 << 1);
    0x00038d60 ldr.w r3, [r8, 4]                                 |     r3 = *((r8 + 4));
    0x00038d64 mov r7, r1                                        |     r7 = r1;
    0x00038d66 str r2, [sp, 0x18]                                |     var_18h = r2;
    0x00038d68 addw r0, r0, 0x129                                |     __asm ("addw r0, r0, aav.0x000000ff");
    0x00038d6c mov fp, r1                                        |     
    0x00038d6e b 0x386a8                                         |     goto label_59;
                                                                 | label_163:
    0x00038d70 movs r2, 1                                        |     r2 = 1;
    0x00038d72 mov fp, r5                                        |     
    0x00038d74 movw r0, 0x129                                    |     r0 = 0x129;
    0x00038d78 mov r7, r5                                        |     r7 = r5;
    0x00038d7a strd r5, r5, [sp, 0x28]                           |     __asm ("strd r5, r5, [sp, 0x28]");
    0x00038d7e str r5, [sp, 0x14]                                |     var_14h = r5;
    0x00038d80 str r5, [sp, 0x18]                                |     var_18h = r5;
    0x00038d82 str r2, [sp, 0x24]                                |     var_24h = r2;
    0x00038d84 str r5, [sp, 0x1c]                                |     var_1ch = r5;
    0x00038d86 b 0x386a8                                         |     goto label_59;
                                                                 | label_171:
    0x00038d8c mov fp, r0                                        |     
                                                                 | label_168:
    0x00038d8e ldr.w r5, [sb, 0x3c]                              |     r5 = *((sb + 0x3c));
    0x00038d92 ldr r3, [r5]                                      |     r3 = *(r5);
                                                                 |     if (r3 != 0) {
    0x00038d94 cbz r3, 0x38da0                                   |         
    0x00038d96 ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x00038d98 mov r0, r5                                        |         r0 = r5;
    0x00038d9a blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00038d9c movs r3, 0                                        |         r3 = 0;
    0x00038d9e str r3, [r5]                                      |         *(r5) = r3;
                                                                 |     }
    0x00038da0 mov r0, sb                                        |     r0 = sb;
    0x00038da2 blx 0x6050                                        |     fcn_00006050 ();
                                                                 | label_70:
    0x00038da6 ldr.w r0, [sl]                                    |     r0 = *(sl);
    0x00038daa cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00038dac beq.w 0x38af6                                     |         goto label_62;
                                                                 |     }
    0x00038db0 bl 0x2bca8                                        |     fcn_0002bca8 (r0);
    0x00038db4 b 0x38af6                                         |     goto label_62;
                                                                 | label_187:
    0x00038db6 ldr r7, [sp, 8]                                   |     r7 = var_8h;
    0x00038db8 b 0x38dc0                                         |     void (*0x38dc0)() ();
                                                                 | label_167:
    0x00038dd2 ldr r3, [sp, 0xcc]                                |     r3 = *(arg_cch);
    0x00038dd4 and r3, r3, 1                                     |     r3 &= 1;
    0x00038dd8 str r3, [sp, 0x14]                                |     var_14h = r3;
                                                                 | label_73:
    0x00038dda movs r3, 1                                        |     r3 = 1;
    0x00038ddc mov fp, r3                                        |     
    0x00038dde strb.w r3, [sb, 0xd]                              |     *((sb + 0xd)) = r3;
    0x00038de2 movw r3, 0x401                                    |     r3 = 0x401;
    0x00038de6 strh.w r3, [sb, 0x10]                             |     *((sb + 0x10)) = r3;
    0x00038dea b 0x3880a                                         |     goto label_63;
                                                                 | label_179:
    0x00038dec ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x00038dee ldr r0, [r3, 0x38]                                |     r0 = *((r3 + 0x38));
    0x00038df0 blx 0x63dc                                        |     fcn_000063dc ();
    0x00038df4 strb r5, [r4, 0xa]                                |     *((r4 + 0xa)) = r5;
    0x00038df6 b 0x38a70                                         |     goto label_64;
                                                                 | label_174:
    0x00038df8 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00038dfa eor r3, r3, 1                                     |     r3 ^= 1;
    0x00038dfe cmp r5, 0                                         |     
    0x00038e00 ite eq                                            |     
                                                                 |     if (r5 != 0) {
    0x00038e02 moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r5 == 0) {
    0x00038e04 andne r3, r3, 1                                   |         r3 &= 1;
                                                                 |     }
    0x00038e08 movs r5, 0                                        |     r5 = 0;
    0x00038e0a str.w r5, [sl, 0x20]                              |     __asm ("str.w r5, [sl, 0x20]");
    0x00038e0e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00038e10 beq 0x38e86                                       |         goto label_195;
                                                                 |     }
    0x00038e12 strb.w r5, [sl, 0x11]                             |     *((sl + 0x11)) = r5;
    0x00038e16 strb.w r5, [sl, 0x12]                             |     *((sl + 0x12)) = r5;
    0x00038e1a b 0x389b6                                         |     goto label_65;
                                                                 | label_172:
    0x00038e26 ldr r3, [pc, 0x1c0]                               |     
    0x00038e28 add r3, pc                                        |     r3 = 0x71e16;
    0x00038e2a str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00038e2c b 0x38832                                         |     goto label_66;
                                                                 | label_173:
    0x00038e2e ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00038e30 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00038e32 beq.w 0x388c4                                     |         goto label_67;
                                                                 |     }
    0x00038e36 movs r3, 4                                        |     r3 = 4;
    0x00038e38 strb.w r3, [sb, 5]                                |     *((sb + 5)) = r3;
    0x00038e3c b 0x388c4                                         |     goto label_67;
                                                                 | label_183:
    0x00038e3e ldr r1, [r6, 0x14]                                |     r1 = *((r6 + 0x14));
    0x00038e40 mov r4, sl                                        |     r4 = sl;
    0x00038e42 mov fp, r5                                        |     
    0x00038e44 str r7, [sp, 8]                                   |     var_8h = r7;
    0x00038e46 subs r2, r1, 1                                    |     r2 = r1 - 1;
                                                                 |     if (r2 < r1) {
    0x00038e48 bmi 0x38e66                                       |         goto label_196;
                                                                 |     }
    0x00038e4a ldr r3, [r6, 0x10]                                |     r3 = *((r6 + 0x10));
    0x00038e4c add.w r3, r3, r1, lsl 4                           |     r3 += (r1 << 4);
                                                                 |     do {
    0x00038e50 ldr r1, [r3, -0xc]                                |         r1 = *((r3 - 0xc));
                                                                 |         if (r1 != 0) {
    0x00038e54 cbz r1, 0x38e5c                                   |             
    0x00038e56 ldr r1, [r1, 4]                                   |             r1 = *((r1 + 4));
    0x00038e58 cmp r1, fp                                        |             
                                                                 |             if (r1 == fp) {
    0x00038e5a beq 0x38f0e                                       |                 goto label_197;
                                                                 |             }
                                                                 |         }
    0x00038e5c subs r2, 1                                        |         r2--;
    0x00038e5e subs r3, 0x10                                     |         r3 -= 0x10;
    0x00038e60 adds r1, r2, 1                                    |         r1 = r2 + 1;
    0x00038e62 bne 0x38e50                                       |         
                                                                 |     } while (r1 != r2);
    0x00038e64 str r7, [sp, 8]                                   |     var_8h = r7;
                                                                 | label_196:
    0x00038e66 ldr.w r3, [fp, 0x40]                              |     r3 = *(arg_40h);
    0x00038e6a ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x00038e6c str.w fp, [r4, 4]                                 |     __asm ("str.w fp, [r4, 4]");
    0x00038e70 adds r3, 1                                        |     r3++;
    0x00038e72 str.w r3, [fp, 0x40]                              |     __asm ("str.w r3, [arg_40h]");
    0x00038e76 blx 0x63dc                                        |     fcn_000063dc ();
    0x00038e7a mov r0, sb                                        |     r0 = sb;
    0x00038e7c blx 0x6050                                        |     fcn_00006050 ();
    0x00038e80 b 0x38a2c                                         |     goto label_68;
                                                                 | label_192:
    0x00038e82 movs r2, 1                                        |     r2 = 1;
    0x00038e84 b 0x38d2e                                         |     goto label_69;
                                                                 | label_195:
    0x00038e86 mov r5, r3                                        |     r5 = r3;
    0x00038e88 b 0x389b6                                         |     goto label_65;
                                                                 | label_175:
    0x00038e8a ldr.w r8, [r4, 4]                                 |     r8 = *((r4 + 4));
    0x00038e8e b 0x38a56                                         |     goto label_60;
                                                                 | label_165:
    0x00038e98 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
                                                                 |     if (r0 == 0) {
    0x00038e9a cbz r0, 0x38ea0                                   |         goto label_188;
                                                                 |     }
    0x00038e9c blx 0x6050                                        |     fcn_00006050 ();
                                                                 |     do {
                                                                 | label_188:
    0x00038ea0 mov.w fp, 7                                       |         
    0x00038ea4 b 0x38da6                                         |         goto label_70;
                                                                 | label_166:
    0x00038ea6 ldr r0, [sp, 0x18]                                |         r0 = var_18h;
    0x00038ea8 mov r2, fp                                        |         r2 = fp;
    0x00038eaa ldr.w r3, [sb, 0xa8]                              |         r3 = *((sb + 0xa8));
    0x00038eae ldr r1, [sp, 0x2c]                                |         r1 = var_2ch;
    0x00038eb0 adds r0, 1                                        |         r0++;
    0x00038eb2 add r0, r3                                        |         r0 += r3;
    0x00038eb4 blx 0x6214                                        |         fcn_00006214 ();
    0x00038eb8 b 0x3870c                                         |         goto label_71;
                                                                 | label_193:
    0x00038eba ldr r0, [sp, 0x14]                                |         r0 = var_14h;
    0x00038ebc blx 0x6050                                        |         fcn_00006050 ();
    0x00038ec0 b 0x38da6                                         |         goto label_70;
                                                                 | label_164:
    0x00038ec2 mov r1, r5                                        |         r1 = r5;
    0x00038ec4 bl 0xd418                                         |         fcn_0000d418 (r0, r1);
    0x00038ec8 str r0, [sp, 0x14]                                |         var_14h = r0;
    0x00038eca cmp r0, 0                                         |         
    0x00038ecc beq 0x38ea0                                       |         
                                                                 |     } while (r0 == 0);
    0x00038ece ldrb r3, [r0]                                     |     r3 = *(r0);
    0x00038ed0 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00038ed2 beq 0x38f86                                       |         goto label_198;
                                                                 |     }
    0x00038ed4 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00038ed6 ldr r7, [sp, 8]                                   |     r7 = var_8h;
                                                                 |     do {
    0x00038ed8 ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x00038edc cmp r2, 0                                         |         
    0x00038ede bne 0x38ed8                                       |         
                                                                 |     } while (r2 != 0);
    0x00038ee0 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x00038ee2 str r7, [sp, 8]                                   |     var_8h = r7;
    0x00038ee4 subs r3, r3, r2                                   |     r3 -= r2;
    0x00038ee6 bic r3, r3, 0xc0000000                            |     r3 = BIT_MASK (r3, 0xc0000000);
    0x00038eea add.w r0, r3, r3, lsl 1                           |     r0 = r3 + (r3 << 1);
    0x00038eee str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00038ef0 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00038ef2 addw r0, r0, 0x129                                |     __asm ("addw r0, r0, aav.0x000000ff");
                                                                 | label_77:
    0x00038ef6 mov.w fp, 0                                       |     
    0x00038efa movs r2, 1                                        |     r2 = 1;
    0x00038efc ldr.w r3, [r8, 4]                                 |     r3 = *((r8 + 4));
    0x00038f00 mov r7, fp                                        |     r7 = fp;
    0x00038f02 strd r2, fp, [sp, 0x24]                           |     __asm ("strd r2, fp, [var_0hx24]");
    0x00038f06 str.w fp, [sp, 0x2c]                              |     __asm ("str.w fp, [var_2ch]");
    0x00038f0a b.w 0x386a8                                       |     goto label_59;
                                                                 |     if (r5 != 0) {
    0x00038f0c cbnz r5, 0x38f82                                  |         void (*0x38f82)() ();
                                                                 |     }
                                                                 | label_197:
    0x00038f0e ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x00038f10 mov.w fp, 0x13                                    |     
    0x00038f14 blx 0x63dc                                        |     fcn_000063dc ();
    0x00038f18 mov r0, r7                                        |     r0 = r7;
    0x00038f1a blx 0x63dc                                        |     fcn_000063dc ();
    0x00038f1e b 0x38c5e                                         |     goto label_72;
                                                                 | label_170:
    0x00038f20 movs r3, 1                                        |     r3 = 1;
    0x00038f22 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00038f24 b 0x38dda                                         |     goto label_73;
                                                                 | label_169:
    0x00038f32 mov r0, sb                                        |     r0 = sb;
    0x00038f34 bl 0xb034                                         |     fcn_0000b034 (r0);
    0x00038f38 ldr.w r3, [sb, 0x94]                              |     r3 = *((sb + 0x94));
    0x00038f3c cmp.w r3, 0x400                                   |     
                                                                 |     if (r3 < 0x400) {
    0x00038f40 bls.w 0x387dc                                     |         goto label_74;
                                                                 |     }
    0x00038f44 cmp.w r3, 0x2000                                  |     
    0x00038f48 it hi                                             |     
                                                                 |     if (r3 <= 0x2000) {
    0x00038f4a movhi r3, 0x2000                                  |         r3 = 0x2000;
                                                                 |     }
    0x00038f4e str r3, [sp, 0x30]                                |     var_30h = r3;
    0x00038f50 b 0x387dc                                         |     goto label_74;
                                                                 | label_194:
    0x00038f52 blx 0x5fe8                                        |     fcn_00005fe8 ();
    0x00038f56 ldr r1, [pc, 0x94]                                |     
    0x00038f58 add.w r3, r0, 0x14                                |     r3 = r0 + 0x14;
    0x00038f5c movw r2, 0xbd22                                   |     r2 = 0xbd22;
    0x00038f60 movs r0, 0xe                                      |     r0 = 0xe;
    0x00038f62 mov.w fp, 0xe                                     |     
    0x00038f66 add r1, pc                                        |     r1 = 0x71f58;
    0x00038f68 blx 0x6820                                        |     fcn_00006820 ();
    0x00038f6c ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x00038f6e blx 0x6050                                        |     fcn_00006050 ();
    0x00038f72 b 0x38da6                                         |     goto label_70;
                                                                 | label_191:
    0x00038f74 mov r2, r3                                        |     r2 = r3;
    0x00038f76 b 0x38d38                                         |     goto label_75;
                                                                 | label_190:
    0x00038f78 movs r3, 1                                        |     r3 = 1;
    0x00038f7a b 0x38cf0                                         |     goto label_76;
                                                                 | label_177:
    0x00038f7c strb.w fp, [r6, 0x40]                             |     *((r6 + 0x40)) = fp;
    0x00038f80 mov.w fp, 7                                       |     
    0x00038f84 b 0x38da6                                         |     goto label_70;
                                                                 | label_198:
    0x00038f86 movw r0, 0x129                                    |     r0 = 0x129;
    0x00038f8a str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00038f8c str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00038f8e b 0x38ef6                                         |     goto label_77;
                                                                 | label_185:
    0x00038f90 mov r7, r5                                        |     r7 = r5;
    0x00038f92 mov fp, r5                                        |     
    0x00038f94 movw r0, 0x129                                    |     r0 = 0x129;
    0x00038f98 strd r5, r5, [sp, 0x24]                           |     __asm ("strd r5, r5, [sp, 0x24]");
    0x00038f9c str r5, [sp, 0x2c]                                |     var_2ch = r5;
    0x00038f9e str r5, [sp, 0x14]                                |     var_14h = r5;
    0x00038fa0 str r5, [sp, 0x18]                                |     var_18h = r5;
    0x00038fa2 b.w 0x386a8                                       |     goto label_59;
                                                                 | label_184:
    0x00038fa6 blx 0x6498                                        |     fcn_00006498 ();
    0x00038faa nop                                               |     
    0x00038fac invalid                                           |     
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1bea8 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.0001bea8 ()                                      | void fcn_0001bea8 (int16_t arg_18h, int16_t arg_40h, 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;
                                                                 |     int32_t var_2ch_2;
                                                                 |     int16_t var_4ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
    0x0001bea8 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x0001beac mov r7, r1                                        |     r7 = r1;
    0x0001beae ldr r1, [pc, 0x318]                               |     
    0x0001beb0 mov sl, r2                                        |     sl = r2;
    0x0001beb2 sub sp, 0x54                                      |     
    0x0001beb4 ldr r2, [pc, 0x314]                               |     r2 = *(0x1c1cc);
    0x0001beb6 add r1, pc                                        |     r1 = 0x38084;
    0x0001beb8 ldrb.w r3, [r0, 0x1c2]                            |     r3 = *((r0 + 0x1c2));
    0x0001bebc ldr r2, [r1, r2]                                  |     
    0x0001bebe ldr r2, [r2]                                      |     r2 = *(0x38084);
    0x0001bec0 str r2, [sp, 0x4c]                                |     var_4ch = r2;
    0x0001bec2 mov.w r2, 0                                       |     r2 = 0;
    0x0001bec4 lsls r0, r0, 8                                    |     r0 <<= 8;
                                                                 |     if (r3 != 0) {
    0x0001bec6 cbnz r3, 0x1beea                                  |         goto label_2;
                                                                 |     }
    0x0001bec8 ldr.w r8, [r0, 8]                                 |     r8 = *((r0 + 8));
    0x0001becc mov r5, r0                                        |     r5 = r0;
    0x0001bece ldrb r2, [r0, 0x10]                               |     r2 = *((r0 + 0x10));
    0x0001bed0 clz r3, r8                                        |     r3 &= r8;
    0x0001bed4 lsrs r3, r3, 5                                    |     r3 >>= 5;
    0x0001bed6 cmp r2, 0                                         |     
    0x0001bed8 it ne                                             |     
                                                                 |     if (r2 == 0) {
    0x0001beda orrne r3, r3, 1                                   |         r3 |= 1;
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x0001bede cbnz r3, 0x1beea                                  |         goto label_2;
                                                                 |     }
    0x0001bee0 ldr.w fp, [r0]                                    |     fp = *(r0);
    0x0001bee4 ldrb.w r6, [fp, 0x40]                             |     r6 = *(arg_40h);
    0x0001bee8 cbz r6, 0x1bf06                                   |     
                                                                 |     while (ip <= 0) {
                                                                 | label_2:
    0x0001beea ldr r2, [pc, 0x2e4]                               |         
    0x0001beec ldr r3, [pc, 0x2dc]                               |         r3 = *(0x1c1cc);
    0x0001beee add r2, pc                                        |         r2 = 0x380c4;
    0x0001bef0 ldr r3, [r2, r3]                                  |         r3 = *(0x380c4);
    0x0001bef2 ldr r2, [r3]                                      |         r2 = *(0x380c4);
    0x0001bef4 ldr r3, [sp, 0x4c]                                |         r3 = var_4ch;
    0x0001bef6 eors r2, r3                                       |         r2 ^= r3;
    0x0001bef8 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0001befc bne.w 0x1c1c2                                     |             goto label_10;
                                                                 |         }
    0x0001bf00 add sp, 0x54                                      |         
    0x0001bf02 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
    0x0001bf06 movs r3, 1                                        |         r3 = 1;
    0x0001bf08 strb r3, [r0, 0x10]                               |         *((r0 + 0x10)) = r3;
    0x0001bf0a mov r0, r8                                        |         r0 = r8;
    0x0001bf0c ldr.w r3, [fp, 0x18]                              |         r3 = *(arg_18h);
    0x0001bf10 ldr.w r1, [sl]                                    |         r1 = *(sl);
    0x0001bf14 mov r4, r3                                        |         r4 = r3;
    0x0001bf16 str r3, [sp, 0x10]                                |         var_10h = r3;
    0x0001bf18 bl 0x100e4                                        |         fcn_000100e4 (r0, r1);
    0x0001bf1c ldr.w ip, [sl]                                    |         ip = *(sl);
    0x0001bf20 and r3, r4, 0x20                                  |         r3 = r4 & 0x20;
    0x0001bf24 str r3, [sp, 0x18]                                |         var_18h = r3;
    0x0001bf26 cmp.w ip, 0                                       |         
    0x0001bf2a ble 0x1beea                                       |         
                                                                 |     }
    0x0001bf2c ldr r3, [pc, 0x2a4]                               |     
    0x0001bf2e mov r4, r6                                        |     r4 = r6;
    0x0001bf30 str r5, [sp, 0xc]                                 |     var_ch = r5;
    0x0001bf32 mov r5, ip                                        |     r5 = ip;
    0x0001bf34 add r3, pc                                        |     r3 = 0x3810c;
    0x0001bf36 str r3, [sp, 8]                                   |     var_8h = r3;
    0x0001bf38 ldr r3, [pc, 0x29c]                               |     
    0x0001bf3a add r3, pc                                        |     r3 = 0x38116;
    0x0001bf3c str r3, [sp, 0x14]                                |     var_14h = r3;
    0x0001bf3e ldr r3, [pc, 0x29c]                               |     
    0x0001bf40 add r3, pc                                        |     r3 = 0x38122;
    0x0001bf42 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x0001bf44 b 0x1bf6e                                         |     goto label_1;
                                                                 | label_0:
    0x0001bf46 ldr.w r3, [r8]                                    |     r3 = *(r8);
    0x0001bf4a ldrb.w r3, [r3, 0x40]                             |     r3 = *((r3 + 0x40));
                                                                 |     if (r3 != 0) {
    0x0001bf4e cbnz r3, 0x1bf66                                  |         goto label_4;
                                                                 |     }
                                                                 | label_8:
    0x0001bf50 ldr.w r0, [r8, 0x10]                              |     r0 = *((r8 + 0x10));
    0x0001bf54 mov.w r2, -1                                      |     r2 = -1;
    0x0001bf58 movs r3, 1                                        |     r3 = 1;
    0x0001bf5a str r2, [sp]                                      |     *(sp) = r2;
    0x0001bf5c add r0, r6                                        |     r0 += r6;
    0x0001bf5e bl 0x17978                                        |     fcn_00017978 (r0, r1, r2, r3, r4);
    0x0001bf62 ldr.w r5, [sl]                                    |     r5 = *(sl);
                                                                 |     do {
                                                                 | label_4:
    0x0001bf66 cmp r5, r4                                        |         
    0x0001bf68 add.w r6, r6, 0x28                                |         r6 += 0x28;
                                                                 |         if (r5 <= r4) {
    0x0001bf6c ble 0x1bfe4                                       |             goto label_11;
                                                                 |         }
                                                                 | label_1:
    0x0001bf6e ldr.w r2, [sl, 4]                                 |         r2 = *((sl + 4));
    0x0001bf72 add.w r1, r4, r4, lsl 2                           |         r1 = r4 + (r4 << 2);
    0x0001bf74 lsls r4, r0, 6                                    |         r4 = r0 << 6;
    0x0001bf76 adds r4, 1                                        |         r4++;
    0x0001bf78 ldr.w r3, [r2, r1, lsl 2]                         |         offset_0 = r1 << 2;
                                                                 |         r3 = *((r2 + offset_0));
    0x0001bf7c add.w r2, r2, r1, lsl 2                           |         r2 += (r1 << 2);
    0x0001bf80 cmp r3, 0                                         |         
    0x0001bf82 beq 0x1bf66                                       |         
                                                                 |     } while (r3 == 0);
    0x0001bf84 ldr r1, [r2, 4]                                   |     r1 = *((r2 + 4));
    0x0001bf86 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x0001bf88 bne 0x1bf46                                       |         goto label_0;
                                                                 |     }
    0x0001bf8a ldrb r0, [r3]                                     |     r0 = *(r3);
    0x0001bf8c subs.w ip, r7, 0                                  |     
    0x0001bf90 it ne                                             |     
                                                                 |     if (ip == r7) {
    0x0001bf92 movne ip, 1                                       |         
                                                                 |     }
    0x0001bf96 adds r0, 0x66                                     |     r0 += 0x66;
    0x0001bf98 and r0, r0, 0xfd                                  |     r0 &= 0xfd;
    0x0001bf9c cmp r0, 0                                         |     
    0x0001bf9e it ne                                             |     
                                                                 |     if (r0 == 0) {
    0x0001bfa0 movne ip, 0                                       |         
                                                                 |     }
    0x0001bfa4 cmp.w ip, 0                                       |     
                                                                 |     if (ip != 0) {
    0x0001bfa8 bne.w 0x1c0ec                                     |         goto label_12;
                                                                 |     }
    0x0001bfac ldr r1, [r2, 8]                                   |     r1 = *((r2 + 8));
    0x0001bfae cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0001bfb0 beq.w 0x1c16e                                     |         goto label_13;
                                                                 |     }
    0x0001bfb4 mov r0, fp                                        |     r0 = fp;
    0x0001bfb6 bl 0xd418                                         |     r0 = fcn_0000d418 (r0, r1);
    0x0001bfba mov r1, r0                                        |     r1 = r0;
                                                                 | label_5:
    0x0001bfbc ldr.w r3, [r8]                                    |     r3 = *(r8);
    0x0001bfc0 ldrb.w r3, [r3, 0x40]                             |     r3 = *((r3 + 0x40));
                                                                 |     if (r3 == 0) {
    0x0001bfc4 cbnz r3, 0x1bfda                                  |         
    0x0001bfc6 ldr.w r0, [r8, 0x10]                              |         r0 = *((r8 + 0x10));
    0x0001bfca mov.w r2, -1                                      |         r2 = -1;
    0x0001bfce ldr r3, [sp, 8]                                   |         r3 = var_8h;
    0x0001bfd0 add r0, r6                                        |         r0 += r6;
    0x0001bfd2 str r3, [sp]                                      |         *(sp) = r3;
    0x0001bfd4 movs r3, 1                                        |         r3 = 1;
    0x0001bfd6 bl 0x17978                                        |         fcn_00017978 (r0, r1, r2, r3, r4);
                                                                 |     }
                                                                 | label_3:
    0x0001bfda ldr.w r5, [sl]                                    |     r5 = *(sl);
    0x0001bfde adds r6, 0x28                                     |     r6 += 0x28;
    0x0001bfe0 cmp r5, r4                                        |     
                                                                 |     if (r5 > r4) {
    0x0001bfe2 bgt 0x1bf6e                                       |         goto label_1;
                                                                 |     }
                                                                 | label_11:
    0x0001bfe4 mov ip, r5                                        |     
    0x0001bfe6 ldr r5, [sp, 0xc]                                 |     r5 = var_ch;
    0x0001bfe8 cmp.w ip, 0                                       |     
    0x0001bfec ldr r4, [r5, 8]                                   |     r4 = *((r5 + 8));
    0x0001bfee strd r5, r7, [sp, 0x2c]                           |     __asm ("strd r5, r7, [var_2ch]");
                                                                 |     if (ip <= 0) {
    0x0001bff2 ble.w 0x1beea                                     |         goto label_2;
                                                                 |     }
    0x0001bff6 mov.w r8, 0                                       |     r8 = 0;
    0x0001bffa add r3, sp, 0x20                                  |     r3 += var_20h;
    0x0001bffc str r3, [sp, 8]                                   |     var_8h = r3;
    0x0001bffe add.w fp, sp, 0x24                                |     
    0x0001c002 add r3, sp, 0x2c                                  |     r3 += var_2ch;
    0x0001c004 mov r5, r8                                        |     r5 = r8;
    0x0001c006 mov r6, r8                                        |     r6 = r8;
    0x0001c008 mov.w sb, -1                                      |     sb = -1;
    0x0001c00c str r3, [sp, 0x10]                                |     var_10h = r3;
    0x0001c00e add r3, sp, 0x28                                  |     r3 += var_28h;
    0x0001c010 str r3, [sp, 0xc]                                 |     var_ch = r3;
                                                                 |     do {
    0x0001c012 ldr.w r3, [sl, 4]                                 |         r3 = *((sl + 4));
    0x0001c016 ldr r2, [sp, 8]                                   |         r2 = var_8h;
    0x0001c018 ldr r0, [sp, 0x10]                                |         r0 = var_10h;
    0x0001c01a ldr.w r1, [r3, r8]                                |         r1 = *((r3 + r8));
    0x0001c01e ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x0001c020 str r6, [sp, 4]                                   |         var_4h = r6;
    0x0001c022 strd r6, r6, [sp, 0x20]                           |         __asm ("strd r6, r6, [var_20h]");
    0x0001c026 str r3, [sp]                                      |         *(sp) = r3;
    0x0001c028 mov r3, fp                                        |         r3 = fp;
    0x0001c02a str r6, [sp, 0x28]                                |         var_28h = r6;
    0x0001c02c bl 0xc4bc                                         |         fcn_0000c4bc (r0, r1, r2, r3, r4, r5);
    0x0001c030 ldr r3, [r4]                                      |         r3 = *(r4);
    0x0001c032 mov r7, r0                                        |         r7 = r0;
    0x0001c034 ldr r1, [sp, 0x20]                                |         r1 = var_20h;
    0x0001c036 ldrb.w r3, [r3, 0x40]                             |         r3 = *((r3 + 0x40));
    0x0001c03a cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0001c03c bne 0x1c0dc                                       |             
    0x0001c03e ldrh.w r0, [r4, 0x54]                             |             r0 = *((r4 + 0x54));
    0x0001c042 mov.w r2, -1                                      |             r2 = -1;
    0x0001c046 ldr r3, [r4, 0x10]                                |             r3 = *((r4 + 0x10));
    0x0001c048 str.w sb, [sp]                                    |             __asm ("str.w sb, [sp]");
    0x0001c04c add.w r0, r5, r0, lsl 1                           |             r0 = r5 + (r0 << 1);
    0x0001c050 add.w r0, r0, r0, lsl 2                           |             r0 += (r0 << 2);
    0x0001c054 add.w r0, r3, r0, lsl 3                           |             r0 = r3 + (r0 << 3);
    0x0001c058 movs r3, 1                                        |             r3 = 1;
    0x0001c05a bl 0x17978                                        |             fcn_00017978 (r0, r1, r2, r3, r4);
    0x0001c05e ldr r3, [r4]                                      |             r3 = *(r4);
    0x0001c060 ldr r1, [sp, 0x24]                                |             r1 = var_24h;
    0x0001c062 ldrb.w r3, [r3, 0x40]                             |             r3 = *((r3 + 0x40));
                                                                 |             if (r3 != 0) {
    0x0001c066 cbnz r3, 0x1c0dc                                  |                 goto label_14;
                                                                 |             }
    0x0001c068 ldrh.w r0, [r4, 0x54]                             |             r0 = *((r4 + 0x54));
    0x0001c06c mov.w r2, -1                                      |             r2 = -1;
    0x0001c070 ldr r3, [r4, 0x10]                                |             r3 = *((r4 + 0x10));
    0x0001c072 str.w sb, [sp]                                    |             __asm ("str.w sb, [sp]");
    0x0001c076 add.w r0, r0, r0, lsl 1                           |             r0 += (r0 << 1);
    0x0001c07a add r0, r5                                        |             r0 += r5;
    0x0001c07c add.w r0, r0, r0, lsl 2                           |             r0 += (r0 << 2);
    0x0001c080 add.w r0, r3, r0, lsl 3                           |             r0 = r3 + (r0 << 3);
    0x0001c084 movs r3, 1                                        |             r3 = 1;
    0x0001c086 bl 0x17978                                        |             fcn_00017978 (r0, r1, r2, r3, r4);
    0x0001c08a ldr r3, [r4]                                      |             r3 = *(r4);
    0x0001c08c ldr r1, [sp, 0x28]                                |             r1 = var_28h;
    0x0001c08e ldrb.w r3, [r3, 0x40]                             |             r3 = *((r3 + 0x40));
    0x0001c090 adds r0, 0x40                                     |             r0 += 0x40;
                                                                 |             if (r3 != 0) {
    0x0001c092 cbnz r3, 0x1c0dc                                  |                 goto label_14;
                                                                 |             }
    0x0001c094 ldrh.w r0, [r4, 0x54]                             |             r0 = *((r4 + 0x54));
    0x0001c098 mov.w r2, -1                                      |             r2 = -1;
    0x0001c09c ldr r3, [r4, 0x10]                                |             r3 = *((r4 + 0x10));
    0x0001c09e str.w sb, [sp]                                    |             __asm ("str.w sb, [sp]");
    0x0001c0a2 add.w r0, r5, r0, lsl 2                           |             r0 = r5 + (r0 << 2);
    0x0001c0a6 add.w r0, r0, r0, lsl 2                           |             r0 += (r0 << 2);
    0x0001c0aa add.w r0, r3, r0, lsl 3                           |             r0 = r3 + (r0 << 3);
    0x0001c0ae movs r3, 1                                        |             r3 = 1;
    0x0001c0b0 bl 0x17978                                        |             fcn_00017978 (r0, r1, r2, r3, r4);
    0x0001c0b4 ldr r3, [r4]                                      |             r3 = *(r4);
    0x0001c0b6 ldrb.w r3, [r3, 0x40]                             |             r3 = *((r3 + 0x40));
                                                                 |             if (r3 != 0) {
    0x0001c0ba cbnz r3, 0x1c0dc                                  |                 goto label_14;
                                                                 |             }
    0x0001c0bc ldrh.w r0, [r4, 0x54]                             |             r0 = *((r4 + 0x54));
    0x0001c0c0 mov r1, r7                                        |             r1 = r7;
    0x0001c0c2 ldr r3, [r4, 0x10]                                |             r3 = *((r4 + 0x10));
    0x0001c0c4 mov.w r2, -1                                      |             r2 = -1;
    0x0001c0c8 str.w sb, [sp]                                    |             __asm ("str.w sb, [sp]");
    0x0001c0cc add r0, r5                                        |             r0 += r5;
    0x0001c0ce add.w r0, r0, r0, lsl 2                           |             r0 += (r0 << 2);
    0x0001c0d2 add.w r0, r3, r0, lsl 3                           |             r0 = r3 + (r0 << 3);
    0x0001c0d6 movs r3, 1                                        |             r3 = 1;
    0x0001c0d8 bl 0x17978                                        |             fcn_00017978 (r0, r1, r2, r3, r4);
                                                                 |         }
                                                                 | label_14:
    0x0001c0dc ldr.w r3, [sl]                                    |         r3 = *(sl);
    0x0001c0e0 adds r5, 1                                        |         r5++;
    0x0001c0e2 add.w r8, r8, 0x14                                |         r8 += 0x14;
    0x0001c0e6 cmp r5, r3                                        |         
    0x0001c0e8 blt 0x1c012                                       |         
                                                                 |     } while (r5 < r3);
    0x0001c0ea b 0x1beea                                         |     goto label_2;
                                                                 | label_12:
    0x0001c0ec ldr.w ip, [r7]                                    |     ip = *(r7);
    0x0001c0f0 ldrsh.w sb, [r3, 0x20]                            |     sb = *((r3 + 0x20));
    0x0001c0f4 cmp.w ip, 0                                       |     
                                                                 |     if (ip <= 0) {
    0x0001c0f8 ble 0x1c112                                       |         goto label_15;
                                                                 |     }
    0x0001c0fa ldr r0, [r3, 0x1c]                                |     r0 = *((r3 + 0x1c));
    0x0001c0fc mov lr, r2                                        |     lr = r2;
    0x0001c0fe mov r3, r7                                        |     r3 = r7;
    0x0001c100 b 0x1c10a                                         |     
                                                                 |     while (r2 != r0) {
    0x0001c102 adds r1, 1                                        |         r1++;
    0x0001c104 adds r3, 0x48                                     |         r3 += 0x48;
    0x0001c106 cmp r1, ip                                        |         
                                                                 |         if (r1 == ip) {
    0x0001c108 beq 0x1c110                                       |             goto label_16;
                                                                 |         }
    0x0001c10a ldr r2, [r3, 0x30]                                |         r2 = *((r3 + 0x30));
    0x0001c10c cmp r2, r0                                        |         
    0x0001c10e bne 0x1c102                                       |         
                                                                 |     }
                                                                 | label_16:
    0x0001c110 mov r2, lr                                        |     r2 = lr;
                                                                 | label_15:
    0x0001c112 add.w r1, r1, r1, lsl 3                           |     r1 += (r1 << 3);
    0x0001c116 cmp.w sb, 0                                       |     
    0x0001c11a add.w r1, r7, r1, lsl 3                           |     r1 = r7 + (r1 << 3);
    0x0001c11e ldr r0, [r1, 0x18]                                |     r0 = *((r1 + 0x18));
                                                                 |     if (sb < 0) {
    0x0001c120 blt 0x1c17c                                       |         goto label_17;
                                                                 |     }
                                                                 | label_7:
    0x0001c122 ldr r3, [r0, 4]                                   |     r3 = *((r0 + 4));
    0x0001c124 add.w sb, sb, sb, lsl 1                           |     sb += (sb << 1);
    0x0001c128 ldr.w r3, [r3, sb, lsl 3]                         |     offset_1 = sb << 3;
                                                                 |     r3 = *((r3 + offset_1));
                                                                 | label_6:
    0x0001c12c ldr r1, [sp, 0x10]                                |     r1 = var_10h;
    0x0001c12e tst.w r1, 0x60                                    |     
                                                                 |     if ((r1 & 0x60) == 0) {
    0x0001c132 beq 0x1c19e                                       |         goto label_18;
                                                                 |     }
    0x0001c134 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
                                                                 |     if (r2 == 0) {
    0x0001c136 cbz r2, 0x1c18c                                   |         goto label_19;
                                                                 |     }
    0x0001c138 ldr r2, [r0]                                      |     r2 = *(r0);
    0x0001c13a mov r0, fp                                        |     r0 = fp;
    0x0001c13c ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x0001c13e bl 0x1babc                                        |     fcn_0001babc (r0);
    0x0001c142 ldr.w r3, [r8]                                    |     r3 = *(r8);
    0x0001c146 mov r1, r0                                        |     r1 = r0;
    0x0001c148 ldrb.w r3, [r3, 0x40]                             |     r3 = *((r3 + 0x40));
    0x0001c14c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0001c14e bne.w 0x1bfda                                     |         goto label_3;
                                                                 |     }
    0x0001c152 ldr.w r0, [r8, 0x10]                              |     r0 = *((r8 + 0x10));
    0x0001c156 ldr r3, [pc, 0x88]                                |     
    0x0001c158 add r0, r6                                        |     r0 += r6;
    0x0001c15a add r3, pc                                        |     r3 = 0x38340;
                                                                 | label_9:
    0x0001c15c str r3, [sp]                                      |     *(sp) = r3;
    0x0001c15e mov.w r2, -1                                      |     r2 = -1;
    0x0001c162 movs r3, 1                                        |     r3 = 1;
    0x0001c164 bl 0x17978                                        |     fcn_00017978 (r0, r1, r2, r3, r4);
    0x0001c168 ldr.w r5, [sl]                                    |     r5 = *(sl);
    0x0001c16c b 0x1bf66                                         |     goto label_4;
                                                                 | label_13:
    0x0001c16e ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x0001c170 mov r2, r4                                        |     r2 = r4;
    0x0001c172 mov r0, fp                                        |     r0 = fp;
    0x0001c174 bl 0x1babc                                        |     r0 = fcn_0001babc (r0);
    0x0001c178 mov r1, r0                                        |     r1 = r0;
    0x0001c17a b 0x1bfbc                                         |     goto label_5;
                                                                 | label_17:
    0x0001c17c ldrsh.w sb, [r0, 0x24]                            |     sb = *((r0 + 0x24));
    0x0001c180 ldr r3, [pc, 0x60]                                |     
    0x0001c182 cmp.w sb, 0                                       |     
    0x0001c186 add r3, pc                                        |     r3 = 0x3836e;
                                                                 |     if (sb < 0) {
    0x0001c188 blt 0x1c12c                                       |         goto label_6;
                                                                 |     }
    0x0001c18a b 0x1c122                                         |     goto label_7;
                                                                 | label_19:
    0x0001c18c ldr.w r2, [r8]                                    |     r2 = *(r8);
    0x0001c190 ldrb.w r2, [r2, 0x40]                             |     r2 = *((r2 + 0x40));
    0x0001c194 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0001c196 bne.w 0x1bf66                                     |         goto label_4;
                                                                 |     }
    0x0001c19a mov r1, r3                                        |     r1 = r3;
    0x0001c19c b 0x1bf50                                         |     goto label_8;
                                                                 | label_18:
    0x0001c19e ldr r1, [r2, 8]                                   |     r1 = *((r2 + 8));
    0x0001c1a0 mov r0, fp                                        |     r0 = fp;
    0x0001c1a2 bl 0xd418                                         |     fcn_0000d418 (r0, r1);
    0x0001c1a6 ldr.w r3, [r8]                                    |     r3 = *(r8);
    0x0001c1aa mov r1, r0                                        |     r1 = r0;
    0x0001c1ac ldrb.w r3, [r3, 0x40]                             |     r3 = *((r3 + 0x40));
    0x0001c1b0 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0001c1b2 bne.w 0x1bfda                                     |         goto label_3;
                                                                 |     }
    0x0001c1b4 add r7, sp, 0x48                                  |     r7 = sp + 0x48;
    0x0001c1b6 ldr.w r0, [r8, 0x10]                              |     r0 = *((r8 + 0x10));
    0x0001c1ba ldr r3, [pc, 0x2c]                                |     
    0x0001c1bc add r0, r6                                        |     r0 += r6;
    0x0001c1be add r3, pc                                        |     r3 = 0x383ac;
    0x0001c1c0 b 0x1c15c                                         |     goto label_9;
                                                                 | label_10:
    0x0001c1c2 blx 0x6498                                        |     fcn_00006498 ();
    0x0001c1c6 nop                                               |     
    0x0001c1c8 pop {r1, r5, r7, pc}                              |     
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1c400 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.0001c400 ()                                      | void fcn_0001c400 (int16_t arg_0h, int16_t arg_1h, 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;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x0001c400 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x0001c404 sub sp, 0x2c                                      |     
    0x0001c406 mov sb, r0                                        |     sb = r0;
    0x0001c408 strd r2, r3, [sp, 0x18]                           |     __asm ("strd r2, r3, [var_1ch]");
    0x0001c40c str r1, [sp, 0x10]                                |     var_10h = r1;
    0x0001c40e cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0001c410 beq.w 0x1c616                                     |         goto label_11;
                                                                 |     }
    0x0001c414 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0001c416 ldr r4, [r3]                                      |     r4 = *(r3);
    0x0001c418 str r4, [sp, 0x14]                                |     var_14h = r4;
    0x0001c41a add.w r1, r4, r4, lsl 1                           |     r1 = r4 + (r4 << 1);
    0x0001c41e lsls r1, r1, 3                                    |     r1 <<= 3;
    0x0001c420 bl 0xdb58                                         |     fcn_0000db58 (r0, r1);
    0x0001c424 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0001c426 cmp r4, 0                                         |     
    0x0001c428 mov r6, r0                                        |     r6 = r0;
    0x0001c42a strh r4, [r3]                                     |     *(r3) = r4;
    0x0001c42c ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0001c42e str r0, [r3]                                      |     *(r3) = r0;
                                                                 |     if (r4 <= 0) {
    0x0001c430 ble.w 0x1c628                                     |         goto label_12;
                                                                 |     }
    0x0001c434 ldr r3, [pc, 0x1fc]                               |     
    0x0001c436 movs r7, 0                                        |     r7 = 0;
    0x0001c438 ldr r4, [pc, 0x1fc]                               |     
    0x0001c43a str r7, [sp, 8]                                   |     var_8h = r7;
    0x0001c43c add r3, pc                                        |     r3 = 0x38a74;
    0x0001c43e str r3, [sp, 0x20]                                |     var_20h = r3;
    0x0001c440 add r4, pc                                        |     r4 = 0x38a7c;
    0x0001c442 ldr r3, [pc, 0x1f8]                               |     
    0x0001c444 add r3, pc                                        |     r3 = 0x38a86;
    0x0001c446 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x0001c448 ldr r3, [pc, 0x1f4]                               |     
    0x0001c44a add r3, pc                                        |     r3 = 0x38a8e;
    0x0001c44c str r3, [sp, 4]                                   |     var_4h = r3;
    0x0001c44e add.w r3, r0, 0x18                                |     r3 = r0 + 0x18;
    0x0001c452 str r3, [sp, 0xc]                                 |     var_ch = r3;
                                                                 | label_0:
    0x0001c454 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0001c456 ldr r2, [sp, 8]                                   |     r2 = var_8h;
    0x0001c458 ldr r0, [r3, 4]                                   |     r0 = *((r3 + 4));
    0x0001c45a ldr r3, [r0, r2]                                  |     r3 = *((r0 + r2));
    0x0001c45c add r0, r2                                        |     r0 += r2;
                                                                 |     if (r3 != 0) {
    0x0001c45e cbnz r3, 0x1c470                                  |         goto label_13;
                                                                 |     }
    0x0001c460 b 0x1c476                                         |     goto label_14;
                                                                 |     do {
    0x0001c462 lsls r5, r2, 0xd                                  |         r5 = r2 << 0xd;
    0x0001c464 itett mi                                          |         
                                                                 |         if (r5 >= r2) {
    0x0001c466 ldrmi r3, [r3, 0x14]                              |             r3 = *((r3 + 0x14));
                                                                 |         }
                                                                 |         if (r5 < r2) {
    0x0001c468 ldrpl r3, [r3, 0xc]                               |             r3 = *((r3 + 0xc));
                                                                 |         }
                                                                 |         if (r5 >= r2) {
    0x0001c46a ldrmi r3, [r3, 4]                                 |             r3 = *((r3 + 4));
                                                                 |         }
                                                                 |         if (r5 >= r2) {
    0x0001c46c ldrmi r3, [r3]                                    |             r3 = *(r3);
                                                                 |         }
                                                                 |         if (r3 == 0) {
    0x0001c46e cbz r3, 0x1c476                                   |             goto label_14;
                                                                 |         }
                                                                 | label_13:
    0x0001c470 ldr r2, [r3, 4]                                   |         r2 = *((r3 + 4));
    0x0001c472 lsls r1, r2, 0x13                                 |         r1 = r2 << 0x13;
    0x0001c474 bmi 0x1c462                                       |         
                                                                 |     } while (r1 < r2);
                                                                 | label_14:
    0x0001c476 ldr r1, [r0, 4]                                   |     r1 = *((r0 + 4));
    0x0001c478 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0001c47a beq 0x1c4f4                                       |         goto label_15;
                                                                 |     }
    0x0001c47c mov r0, sb                                        |     r0 = sb;
    0x0001c47e bl 0xd418                                         |     r0 = fcn_0000d418 (r0, r1);
    0x0001c482 mov fp, r0                                        |     
                                                                 | label_8:
    0x0001c484 ldrb.w r3, [sb, 0x40]                             |     r3 = *((sb + 0x40));
    0x0001c488 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0001c48a bne 0x1c516                                       |         goto label_16;
                                                                 |     }
                                                                 | label_1:
    0x0001c48c mov r5, fp                                        |     r5 = fp;
    0x0001c48e cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x0001c492 beq 0x1c4ac                                       |         goto label_17;
                                                                 |     }
    0x0001c494 ldrb.w r5, [fp]                                   |     r5 = *(fp);
                                                                 |     if (r5 == 0) {
    0x0001c498 cbz r5, 0x1c4ac                                   |         goto label_17;
                                                                 |     }
    0x0001c49a mov r5, fp                                        |     r5 = fp;
                                                                 |     do {
    0x0001c49c ldrb r3, [r5, 1]!                                 |         r3 = *((r5 += 1));
    0x0001c4a0 cmp r3, 0                                         |         
    0x0001c4a2 bne 0x1c49c                                       |         
                                                                 |     } while (r3 != 0);
    0x0001c4a4 sub.w r5, r5, fp                                  |     r5 -= fp;
    0x0001c4a8 bic r5, r5, 0xc0000000                            |     r5 = BIT_MASK (r5, 0xc0000000);
                                                                 |     if (r7 == 0) {
                                                                 | label_17:
    0x0001c4ac cbz r7, 0x1c4ce                                   |         goto label_3;
                                                                 |     }
    0x0001c4ae mov.w r8, 0                                       |     r8 = 0;
    0x0001c4b2 mov sl, r8                                        |     sl = r8;
                                                                 |     do {
                                                                 | label_4:
    0x0001c4b4 add.w r3, sl, sl, lsl 1                           |         r3 = sl + (sl << 1);
    0x0001c4b8 mov r1, fp                                        |         r1 = fp;
    0x0001c4ba ldr.w r0, [r6, r3, lsl 3]                         |         offset_0 = r3 << 3;
                                                                 |         r0 = *((r6 + offset_0));
    0x0001c4be blx 0x6164                                        |         r0 = fcn_00006164 ();
    0x0001c4c2 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x0001c4c4 beq 0x1c556                                       |             goto label_18;
                                                                 |         }
    0x0001c4c6 add.w sl, sl, 1                                   |         sl++;
    0x0001c4ca cmp sl, r7                                        |         
    0x0001c4cc blt 0x1c4b4                                       |         
                                                                 |     } while (sl < r7);
                                                                 | label_3:
    0x0001c4ce ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x0001c4d0 adds r7, 1                                        |     r7++;
    0x0001c4d2 str fp, [r3, -0x18]                               |     *((r3 - 0x18)) = fp;
    0x0001c4d6 adds r3, 0x18                                     |     r3 += 0x18;
    0x0001c4d8 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x0001c4da ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x0001c4dc adds r3, 0x14                                     |     r3 += 0x14;
    0x0001c4de str r3, [sp, 8]                                   |     var_8h = r3;
    0x0001c4e0 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0001c4e2 cmp r3, r7                                        |     
                                                                 |     if (r3 != r7) {
    0x0001c4e4 bne 0x1c454                                       |         goto label_0;
                                                                 |     }
    0x0001c4e6 ldrb.w r3, [sb, 0x40]                             |     r3 = *((sb + 0x40));
                                                                 |     if (r3 != 0) {
    0x0001c4ea cbnz r3, 0x1c528                                  |         goto label_19;
                                                                 |     }
                                                                 | label_2:
    0x0001c4ec add sp, 0x2c                                      |     
    0x0001c4ee pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 |     do {
    0x0001c4f2 ldr r3, [r3, 0x10]                                |         r3 = *((r3 + 0x10));
                                                                 | label_15:
    0x0001c4f4 ldrb r2, [r3]                                     |         r2 = *(r3);
    0x0001c4f6 cmp r2, 0x7a                                      |         
    0x0001c4f8 beq 0x1c4f2                                       |         
                                                                 |     } while (r2 == 0x7a);
    0x0001c4fa cmp r2, 0x9a                                      |     
                                                                 |     if (r2 == 0x9a) {
    0x0001c4fc beq 0x1c5d4                                       |         goto label_20;
                                                                 |     }
    0x0001c4fe cmp r2, 0x1b                                      |     
                                                                 |     if (r2 == 0x1b) {
    0x0001c500 beq 0x1c5fa                                       |         goto label_21;
                                                                 |     }
                                                                 | label_7:
    0x0001c502 ldr r2, [r0, 8]                                   |     r2 = *((r0 + 8));
    0x0001c504 mov r0, sb                                        |     r0 = sb;
    0x0001c506 ldr r1, [sp, 0x20]                                |     r1 = var_20h;
    0x0001c508 bl 0x1babc                                        |     fcn_0001babc (r0);
    0x0001c50c ldrb.w r3, [sb, 0x40]                             |     r3 = *((sb + 0x40));
    0x0001c510 mov fp, r0                                        |     
    0x0001c512 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0001c514 beq 0x1c48c                                       |         goto label_1;
                                                                 |     }
                                                                 | label_16:
    0x0001c516 mov r1, fp                                        |     r1 = fp;
    0x0001c518 mov r0, sb                                        |     r0 = sb;
    0x0001c51a bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x0001c51e ldrb.w r3, [sb, 0x40]                             |     r3 = *((sb + 0x40));
    0x0001c522 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0001c524 beq 0x1c4ec                                       |         goto label_2;
                                                                 |     }
                                                                 |     if (r7 == 0) {
    0x0001c526 cbz r7, 0x1c53e                                   |         goto label_10;
                                                                 |     }
                                                                 | label_19:
    0x0001c528 movs r4, 0                                        |     r4 = 0;
                                                                 |     do {
    0x0001c52a add.w r3, r4, r4, lsl 1                           |         r3 = r4 + (r4 << 1);
    0x0001c52e mov r0, sb                                        |         r0 = sb;
    0x0001c530 adds r4, 1                                        |         r4++;
    0x0001c532 ldr.w r1, [r6, r3, lsl 3]                         |         offset_1 = r3 << 3;
                                                                 |         r1 = *((r6 + offset_1));
    0x0001c536 bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
    0x0001c53a cmp r4, r7                                        |         
    0x0001c53c blt 0x1c52a                                       |         
                                                                 |     } while (r4 < r7);
                                                                 | label_10:
    0x0001c53e mov r1, r6                                        |     r1 = r6;
    0x0001c540 mov r0, sb                                        |     r0 = sb;
    0x0001c542 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x0001c546 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x0001c548 movs r3, 0                                        |     r3 = 0;
    0x0001c54a str r3, [r2]                                      |     *(r2) = r3;
    0x0001c54c ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x0001c54e strh r3, [r2]                                     |     *(r2) = r3;
    0x0001c550 add sp, 0x2c                                      |     
    0x0001c552 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_18:
    0x0001c556 subs r3, r5, 1                                    |     r3 = r5 - 1;
    0x0001c558 cmp r3, 1                                         |     
    0x0001c55a it gt                                             |     
                                                                 |     if (r3 <= 1) {
    0x0001c55c addgt r1, fp, r3                                  |         r1 = fp + r3;
                                                                 |     }
                                                                 |     if (r3 > 1) {
    0x0001c560 bgt 0x1c56a                                       |         goto label_22;
                                                                 |     }
    0x0001c562 b 0x1c5c0                                         |     goto label_23;
                                                                 |     do {
    0x0001c564 subs r3, 1                                        |         r3--;
    0x0001c566 cmp r3, 1                                         |         
                                                                 |         if (r3 == 1) {
    0x0001c568 beq 0x1c5b6                                       |             goto label_24;
                                                                 |         }
                                                                 | label_22:
    0x0001c56a ldrb r0, [r1]                                     |         r0 = *(r1);
    0x0001c56c mov r2, r1                                        |         r2 = r1;
    0x0001c56e subs r1, 1                                        |         r1--;
    0x0001c570 add.w ip, r4, r0                                  |         
    0x0001c574 ldrb.w ip, [ip, 0x40]                             |         ip = *((ip + 0x40));
    0x0001c578 tst.w ip, 4                                       |         
    0x0001c57c bne 0x1c564                                       |         
                                                                 |     } while ((ip & 4) != 0);
                                                                 | label_5:
    0x0001c57e cmp r0, 0x3a                                      |     
    0x0001c580 ite ne                                            |     
                                                                 |     if (r0 == 0x3a) {
    0x0001c582 addne r2, fp, r5                                  |         r2 = fp + r5;
                                                                 |     }
                                                                 |     if (r0 == 0x3a) {
    0x0001c586 mov r5, r3                                        |         r5 = r3;
                                                                 |     }
                                                                 | label_6:
    0x0001c588 mov.w r3, 0                                       |     r3 = 0;
    0x0001c58c add.w r8, r8, 1                                   |     r8++;
    0x0001c590 strb r3, [r2]                                     |     *(r2) = r3;
    0x0001c592 mov r0, sb                                        |     r0 = sb;
    0x0001c594 mov r2, fp                                        |     r2 = fp;
    0x0001c596 ldr r1, [sp, 4]                                   |     r1 = var_4h;
    0x0001c598 mov r3, r8                                        |     r3 = r8;
    0x0001c59a bl 0x1babc                                        |     fcn_0001babc (r0);
    0x0001c59e mov r1, fp                                        |     r1 = fp;
    0x0001c5a0 mov sl, r0                                        |     sl = r0;
    0x0001c5a2 mov r0, sb                                        |     r0 = sb;
    0x0001c5a4 mov fp, sl                                        |     
    0x0001c5a6 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x0001c5aa cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x0001c5ae beq 0x1c4ce                                       |         goto label_3;
                                                                 |     }
    0x0001c5b0 mov.w sl, 0                                       |     sl = 0;
    0x0001c5b4 b 0x1c4b4                                         |     goto label_4;
                                                                 | label_24:
    0x0001c5b6 ldrb.w r0, [fp, 1]                                |     r0 = *(arg_1h);
    0x0001c5ba add.w r2, fp, 1                                   |     r2 += arg_1h;
    0x0001c5be b 0x1c57e                                         |     goto label_5;
                                                                 | label_23:
    0x0001c5c0 adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x0001c5c2 itt eq                                            |     
                                                                 |     if (r2 != r3) {
    0x0001c5c4 moveq r5, r0                                      |         r5 = r0;
                                                                 |     }
                                                                 |     if (r2 == r3) {
    0x0001c5c6 moveq r2, fp                                      |         r2 = fp;
                                                                 |         goto label_25;
                                                                 |     }
                                                                 |     if (r2 == r3) {
                                                                 | label_25:
    0x0001c5c8 beq 0x1c588                                       |         goto label_6;
                                                                 |     }
    0x0001c5ca ldrb.w r0, [fp, r3]                               |     r0 = *((fp + r3));
    0x0001c5ce add.w r2, fp, r3                                  |     r2 = fp + r3;
    0x0001c5d2 b 0x1c57e                                         |     goto label_5;
                                                                 | label_20:
    0x0001c5d4 ldr r2, [r3, 0x2c]                                |     r2 = *((r3 + 0x2c));
    0x0001c5d6 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0001c5d8 beq 0x1c502                                       |         goto label_7;
                                                                 |     }
    0x0001c5da ldrsh.w r3, [r3, 0x20]                            |     r3 = *((r3 + 0x20));
    0x0001c5de cmp r3, 0                                         |     
    0x0001c5e0 blt 0x1c608                                       |     
                                                                 |     while (r3 >= 0) {
    0x0001c5e2 ldr r2, [r2, 4]                                   |         r2 = *((r2 + 4));
    0x0001c5e4 add.w r3, r3, r3, lsl 1                           |         r3 += (r3 << 1);
    0x0001c5e8 ldr.w r2, [r2, r3, lsl 3]                         |         offset_2 = r3 << 3;
                                                                 |         r2 = *((r2 + offset_2));
                                                                 | label_9:
    0x0001c5ec ldr r1, [pc, 0x54]                                |         
    0x0001c5ee mov r0, sb                                        |         r0 = sb;
    0x0001c5f0 add r1, pc                                        |         r1 = 0x38c38;
    0x0001c5f2 bl 0x1babc                                        |         r0 = fcn_0001babc (r0);
    0x0001c5f6 mov fp, r0                                        |         
    0x0001c5f8 b 0x1c484                                         |         goto label_8;
                                                                 | label_21:
    0x0001c5fa ldr r2, [r3, 8]                                   |         r2 = *((r3 + 8));
    0x0001c5fc mov r0, sb                                        |         r0 = sb;
    0x0001c5fe ldr r1, [sp, 0x24]                                |         r1 = var_24h;
    0x0001c600 bl 0x1babc                                        |         r0 = fcn_0001babc (r0);
    0x0001c604 mov fp, r0                                        |         
    0x0001c606 b 0x1c484                                         |         goto label_8;
    0x0001c608 ldrsh.w r3, [r2, 0x24]                            |         r3 = *((r2 + 0x24));
    0x0001c60c cmp r3, 0                                         |         
    0x0001c60e bge 0x1c5e2                                       |         
                                                                 |     }
    0x0001c610 ldr r2, [pc, 0x34]                                |     
    0x0001c612 add r2, pc                                        |     r2 = 0x38c5e;
    0x0001c614 b 0x1c5ec                                         |     goto label_9;
                                                                 | label_11:
    0x0001c616 strh r1, [r2]                                     |     *(r2) = r1;
    0x0001c618 str r1, [r3]                                      |     *(r3) = r1;
    0x0001c61a ldrb.w r3, [r0, 0x40]                             |     r3 = *((r0 + 0x40));
    0x0001c61e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0001c620 beq.w 0x1c4ec                                     |         goto label_2;
                                                                 |     }
    0x0001c624 ldr r6, [sp, 0x10]                                |     r6 = var_10h;
    0x0001c626 b 0x1c53e                                         |     goto label_10;
                                                                 | label_12:
    0x0001c628 ldrb.w r3, [sb, 0x40]                             |     r3 = *((sb + 0x40));
    0x0001c62c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0001c62e beq.w 0x1c4ec                                     |         goto label_2;
                                                                 |     }
    0x0001c632 b 0x1c53e                                         |     goto label_10;
                                                                 | }
    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1c774 */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) fcn.0001c774 ()                      | uint32_t fcn_0001c774 (int16_t arg1, uint32_t arg2) {
                                                 |     uint32_t var_4h;
                                                 |     r0 = arg1;
                                                 |     r1 = arg2;
                                                 |     if (r0 != 0) {
    0x0001c774 cbz r0, 0x1c7b4                   |         
    0x0001c776 ldr r2, [r0, 0x14]                |         r2 = *((r0 + 0x14));
    0x0001c778 push {r4, lr}                     |         
    0x0001c77a mov r4, r0                        |         r4 = r0;
    0x0001c77c ldr r3, [r0]                      |         r3 = *(r0);
    0x0001c77e sub sp, 8                         |         
                                                 |         if (r2 != 0) {
    0x0001c780 cbz r2, 0x1c78a                   |             
    0x0001c782 ldrh.w r2, [r0, 0x54]             |             r2 = *((r0 + 0x54));
    0x0001c786 cmp r2, r1                        |             
                                                 |             if (r2 > r1) {
    0x0001c788 bhi 0x1c7be                       |                 goto label_0;
                                                 |             }
                                                 |         }
                                                 |         if (r3 != 0) {
    0x0001c78a cbz r3, 0x1c7a8                   |             
    0x0001c78c ldr r0, [r3, 0xc]                 |             r0 = *((r3 + 0xc));
    0x0001c78e blx 0x6810                        |             fcn_00006810 ();
    0x0001c792 ldr r0, [r4]                      |             r0 = *(r4);
    0x0001c794 movs r2, 0                        |             r2 = 0;
    0x0001c796 movs r1, 0x19                     |             r1 = 0x19;
    0x0001c798 bl 0x1c64c                        |             fcn_0001c64c (r0, r1);
    0x0001c79c ldr r0, [pc, 0x38]                |             
    0x0001c79e add r0, pc                        |             
    0x0001c7a0 add.w r0, r0, 0x260               |             r0 = 0x391da;
    0x0001c7a4 add sp, 8                         |             
    0x0001c7a6 pop {r4, pc}                      |             
                                                 |         }
    0x0001c7a8 ldr r0, [pc, 0x30]                |         
    0x0001c7aa add r0, pc                        |         
    0x0001c7ac add.w r0, r0, 0x260               |         r0 = 0x391ea;
    0x0001c7b0 add sp, 8                         |         
    0x0001c7b2 pop {r4, pc}                      |         
                                                 |     }
    0x0001c7b4 ldr r0, [pc, 0x28]                |     
    0x0001c7b6 add r0, pc                        |     
    0x0001c7b8 add.w r0, r0, 0x260               |     r0 = 0x391fa;
    0x0001c7bc bx lr                             |     return r0;
                                                 | label_0:
    0x0001c7be ldr r0, [r3, 0xc]                 |     r0 = *((r3 + 0xc));
    0x0001c7c0 str r1, [sp, 4]                   |     var_4h = r1;
    0x0001c7c2 blx 0x6810                        |     fcn_00006810 ();
    0x0001c7c6 ldr r1, [sp, 4]                   |     r1 = var_4h;
    0x0001c7c8 ldr r0, [r4, 0x14]                |     r0 = *((r4 + 0x14));
    0x0001c7ca add.w r1, r1, r1, lsl 2           |     r1 += (r1 << 2);
    0x0001c7ce add.w r0, r0, r1, lsl 3           |     r0 += (r1 << 3);
    0x0001c7d2 add sp, 8                         |     
    0x0001c7d4 pop {r4, pc}                      |     
                                                 | }
    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1cbbc */
                                                     | #include <stdint.h>
                                                     |  
    ; (fcn) fcn.0001cbbc ()                          | void fcn_0001cbbc (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                     |     r0 = arg1;
                                                     |     r1 = arg2;
                                                     |     r2 = arg3;
                                                     |     r3 = arg4;
    0x0001cbbc mvnsmi lr, sp, lsr 18                 |     __asm ("mvnsmi lr, sp, lsr 18");
    0x0001cbc0 mov r6, r1                            |     r6 = r1;
    0x0001cbc2 ldr r7, [r0]                          |     r7 = *(r0);
                                                     |     if (r2 != 0) {
    0x0001cbc4 cbz r2, 0x1cc0a                       |         
    0x0001cbc6 ldr r5, [r2, 4]                       |         r5 = *((r2 + 4));
                                                     |         if (r5 != 0) {
    0x0001cbc8 cbz r5, 0x1cc0a                       |             
    0x0001cbca ldrb.w r5, [r7, 0x89]                 |             r5 = *((r7 + 0x89));
    0x0001cbce mov r4, r0                            |             r4 = r0;
                                                     |             if (r5 != 0) {
    0x0001cbd0 cbnz r5, 0x1cc16                      |                 goto label_0;
                                                     |             }
    0x0001cbd2 str r2, [r3]                          |             *(r3) = r2;
    0x0001cbd4 mov r0, r7                            |             r0 = r7;
    0x0001cbd6 bl 0xd5e4                             |             r0 = fcn_0000d5e4 (r0, r1);
    0x0001cbda mov r1, r0                            |             r1 = r0;
    0x0001cbdc mov r8, r0                            |             r8 = r0;
    0x0001cbde mov r0, r7                            |             r0 = r7;
    0x0001cbe0 bl 0x123f8                            |             fcn_000123f8 (r0, r1);
    0x0001cbe4 mov r1, r8                            |             r1 = r8;
    0x0001cbe6 mov r5, r0                            |             r5 = r0;
    0x0001cbe8 mov r0, r7                            |             r0 = r7;
    0x0001cbea bl 0xe12c                             |             fcn_0000e12c (r0, r1);
    0x0001cbee cmp r5, 0                             |             
                                                     |             if (r5 >= 0) {
    0x0001cbf0 bge 0x1cc10                           |                 goto label_1;
                                                     |             }
    0x0001cbf2 ldr r1, [pc, 0x38]                    |             
    0x0001cbf4 mov r2, r6                            |             r2 = r6;
    0x0001cbf6 mov r0, r4                            |             r0 = r4;
    0x0001cbf8 mov.w r5, -1                          |             r5 = -1;
    0x0001cbfc add r1, pc                            |             r1 = 0x3982e;
    0x0001cbfe bl 0x1ca34                            |             fcn_0001ca34 (r0);
    0x0001cc02 ldr r3, [r4, 0x40]                    |             r3 = *((r4 + 0x40));
    0x0001cc04 adds r3, 1                            |             r3++;
    0x0001cc06 str r3, [r4, 0x40]                    |             *((r4 + 0x40)) = r3;
    0x0001cc08 b 0x1cc10                             |             
                                                     |         }
                                                     |     } else {
    0x0001cc0a ldrb.w r5, [r7, 0x88]                 |         r5 = *((r7 + 0x88));
    0x0001cc0e str r6, [r3]                          |         *(r3) = r6;
                                                     |     }
                                                     |     do {
                                                     | label_1:
    0x0001cc10 mov r0, r5                            |         r0 = r5;
    0x0001cc12 pop.w {r4, r5, r6, r7, r8, pc}        |         
                                                     | label_0:
    0x0001cc16 ldr r1, [pc, 0x18]                    |         
    0x0001cc18 mov.w r5, -1                          |         r5 = -1;
    0x0001cc1c add r1, pc                            |         r1 = 0x39852;
    0x0001cc1e bl 0x1ca34                            |         fcn_0001ca34 (r0);
    0x0001cc22 ldr r3, [r4, 0x40]                    |         r3 = *((r4 + 0x40));
    0x0001cc24 adds r3, 1                            |         r3++;
    0x0001cc26 str r3, [r4, 0x40]                    |         *((r4 + 0x40)) = r3;
    0x0001cc28 b 0x1cc10                             |         
                                                     |     } while (1);
                                                     | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1ce4c */
                                                                     | #include <stdint.h>
                                                                     |  
                                                                     | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                     |  
    ; (fcn) fcn.0001ce4c ()                                          | void fcn_0001ce4c (int16_t arg_58h, int16_t arg_5ch, int16_t arg_138h, int16_t arg_24ch, int16_t arg_2a0h, int16_t arg_3b8h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                     |     int16_t var_14h;
                                                                     |     int16_t var_38h;
                                                                     |     int16_t var_3ch;
                                                                     |     int16_t var_0h_2;
                                                                     |     int16_t var_ch;
                                                                     |     int16_t var_14h_2;
                                                                     |     int16_t var_18h_2;
                                                                     |     int32_t var_18h;
                                                                     |     int32_t var_20h;
                                                                     |     int16_t var_68h;
                                                                     |     int16_t var_6ch;
                                                                     |     int16_t var_2ch;
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
                                                                     |     r2 = arg3;
                                                                     |     r3 = arg4;
    0x0001ce4c add.w r2, r2, r2, lsl 2                               |     r2 += (r2 << 2);
    0x0001ce50 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0001ce54 mov r4, r3                                            |     r4 = r3;
    0x0001ce56 ldr r3, [pc, 0x190]                                   |     r3 = *(0x1cfea);
    0x0001ce58 lsls r6, r2, 2                                        |     r6 = r2 << 2;
    0x0001ce5a sub sp, 0x34                                          |     
    0x0001ce5c ldr r2, [pc, 0x18c]                                   |     
    0x0001ce5e mov r8, r1                                            |     r8 = r1;
    0x0001ce60 ldr.w sb, [r0]                                        |     sb = *(r0);
    0x0001ce64 mov r7, r0                                            |     r7 = r0;
    0x0001ce66 ldr.w sl, [sp, 0x58]                                  |     sl = *(arg_58h);
    0x0001ce6a add r2, pc                                            |     r2 = 0x39e5a;
    0x0001ce6c ldr r3, [r2, r3]                                      |     
    0x0001ce6e mov r0, sb                                            |     r0 = sb;
    0x0001ce70 ldr r2, [sp, 0x5c]                                    |     r2 = *(arg_5ch);
    0x0001ce72 ldr r3, [r3]                                          |     r3 = *(0x39e5a);
    0x0001ce74 str r3, [sp, 0x2c]                                    |     var_2ch = r3;
    0x0001ce76 mov.w r3, 0                                           |     r3 = 0;
    0x0001ce7a ldr r3, [r1, 4]                                       |     r3 = *((r1 + 4));
    0x0001ce7c str r2, [sp, 0xc]                                     |     var_ch = r2;
    0x0001ce7e ldr.w fp, [r3, r6]                                    |     fp = *((r3 + r6));
    0x0001ce82 movs r3, 0                                            |     r3 = 0;
    0x0001ce84 mov r2, r3                                            |     r2 = r3;
    0x0001ce86 mov r1, fp                                            |     r1 = fp;
    0x0001ce88 bl 0xe5fc                                             |     r0 = fcn_0000e5fc (r0, r1, r2, r3, r4, r5);
    0x0001ce8c cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0001ce8e beq.w 0x1cfac                                         |         goto label_2;
                                                                     |     }
    0x0001ce92 ldrb.w r3, [fp]                                       |     r3 = *(fp);
    0x0001ce96 mov r5, r0                                            |     r5 = r0;
    0x0001ce98 cmp r3, 0x9a                                          |     
                                                                     |     if (r3 != 0x9a) {
    0x0001ce9a beq 0x1cea4                                           |         
    0x0001ce9c ldrb.w r3, [sl]                                       |         r3 = *(sl);
    0x0001cea0 cmp r3, 0x47                                          |         
                                                                     |         if (r3 != 0x47) {
    0x0001cea2 bne 0x1cf28                                           |             goto label_3;
                                                                     |         }
                                                                     |     }
    0x0001cea4 ldrb r3, [r4]                                         |     r3 = *(r4);
    0x0001cea6 cmp r3, 0x5f                                          |     
                                                                     |     if (r3 == 0x5f) {
    0x0001cea8 beq 0x1cf6a                                           |         goto label_4;
                                                                     |     }
                                                                     | label_0:
    0x0001ceaa ldr r3, [r4, 4]                                       |     r3 = *((r4 + 4));
    0x0001ceac mov r1, r4                                            |     r1 = r4;
    0x0001ceae mov r0, sb                                            |     r0 = sb;
    0x0001ceb0 add.w r7, r5, 0x30                                    |     r7 = r5 + 0x30;
    0x0001ceb4 orr r3, r3, 0x8000                                    |     r3 |= 0x8000;
    0x0001ceb8 str r3, [r4, 4]                                       |     *((r4 + 4)) = r3;
    0x0001ceba bl 0x12e68                                            |     fcn_00012e68 (r0);
    0x0001cebe mov ip, r5                                            |     
    0x0001cec0 mov r3, r4                                            |     r3 = r4;
                                                                     |     do {
    0x0001cec2 ldr.w r6, [ip]                                        |         r6 = *(ip);
    0x0001cec6 add.w ip, ip, 0x10                                    |         
    0x0001ceca ldr r0, [ip, -0xc]                                    |         r0 = *((ip - 0xc));
    0x0001cece adds r3, 0x10                                         |         r3 += 0x10;
    0x0001ced0 ldr r1, [ip, -0x8]                                    |         r1 = *((ip - 0x8));
    0x0001ced4 ldr r2, [ip, -0x4]                                    |         r2 = *((ip - 0x4));
    0x0001ced8 cmp ip, r7                                            |         
    0x0001ceda str r6, [r3, -0x10]                                   |         *((r3 - 0x10)) = r6;
    0x0001cede str r0, [r3, -0xc]                                    |         *((r3 - 0xc)) = r0;
    0x0001cee2 str r1, [r3, -0x8]                                    |         *((r3 - 0x8)) = r1;
    0x0001cee6 str r2, [r3, -0x4]                                    |         *((r3 - 0x4)) = r2;
    0x0001ceea bne 0x1cec2                                           |         
                                                                     |     } while (ip != r7);
    0x0001ceec ldr r3, [r4, 4]                                       |     r3 = *((r4 + 4));
    0x0001ceee lsls r3, r3, 0x15                                     |     r3 <<= 0x15;
                                                                     |     if (r3 >= r3) {
    0x0001cef0 bmi 0x1cf06                                           |         
    0x0001cef2 ldr r1, [r4, 8]                                       |         r1 = *((r4 + 8));
                                                                     |         if (r1 == 0) {
    0x0001cef4 cbz r1, 0x1cf06                                       |             goto label_5;
                                                                     |         }
    0x0001cef6 mov r0, sb                                            |         r0 = sb;
    0x0001cef8 bl 0xd418                                             |         fcn_0000d418 (r0, r1);
    0x0001cefc ldr r3, [r4, 4]                                       |         r3 = *((r4 + 4));
    0x0001cefe str r0, [r4, 8]                                       |         *((r4 + 8)) = r0;
    0x0001cf00 orr r3, r3, 0x10000                                   |         r3 |= 0x10000;
    0x0001cf04 str r3, [r4, 4]                                       |         *((r4 + 4)) = r3;
                                                                     |     }
                                                                     | label_5:
    0x0001cf06 ldr r2, [pc, 0xe8]                                    |     
    0x0001cf08 ldr r3, [pc, 0xdc]                                    |     r3 = *(0x1cfe8);
    0x0001cf0a add r2, pc                                            |     r2 = 0x39f00;
    0x0001cf0c ldr r3, [r2, r3]                                      |     r3 = *(0x39f00);
    0x0001cf0e ldr r2, [r3]                                          |     r2 = *(0x39f00);
    0x0001cf10 ldr r3, [sp, 0x2c]                                    |     r3 = var_2ch;
    0x0001cf12 eors r2, r3                                           |     r2 ^= r3;
    0x0001cf14 mov.w r3, 0                                           |     r3 = 0;
                                                                     |     if (r2 != r3) {
    0x0001cf18 bne 0x1cfe2                                           |         goto label_6;
                                                                     |     }
    0x0001cf1a mov r1, r5                                            |     r1 = r5;
    0x0001cf1c mov r0, sb                                            |     r0 = sb;
    0x0001cf1e add sp, 0x34                                          |     
    0x0001cf20 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}            |     
    0x0001cf24 b.w 0xe12c                                            |     void (*0xe12c)() ();
                                                                     | label_3:
    0x0001cf28 ldr r2, [sp, 0xc]                                     |     r2 = var_ch;
    0x0001cf2a cmp r2, 0                                             |     
                                                                     |     if (r2 > 0) {
    0x0001cf2c bgt 0x1cfc6                                           |         goto label_7;
                                                                     |     }
                                                                     | label_1:
    0x0001cf2e movs r3, 0                                            |     r3 = 0;
    0x0001cf30 mov r2, r5                                            |     r2 = r5;
    0x0001cf32 movs r1, 0x18                                         |     r1 = 0x18;
    0x0001cf34 mov r0, r7                                            |     r0 = r7;
    0x0001cf36 str r3, [sp]                                          |     *(sp) = r3;
    0x0001cf38 bl 0x1cd60                                            |     r0 = fcn_0001cd60 (r0, r1, r2, r3, r4);
    0x0001cf3c mov r5, r0                                            |     r5 = r0;
    0x0001cf3e cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0001cf40 beq 0x1cfac                                           |         goto label_2;
                                                                     |     }
    0x0001cf42 ldr.w r2, [r8, 4]                                     |     r2 = *((r8 + 4));
    0x0001cf46 ldr r3, [r0, 4]                                       |     r3 = *((r0 + 4));
    0x0001cf48 add r2, r6                                            |     r2 += r6;
    0x0001cf4a orr r3, r3, 0x1000                                    |     r3 |= 0x1000;
    0x0001cf4e str r3, [r0, 4]                                       |     *((r0 + 4)) = r3;
    0x0001cf50 ldrh r3, [r2, 0x12]                                   |     r3 = *((r2 + 0x12));
                                                                     |     if (r3 == 0) {
    0x0001cf52 cbnz r3, 0x1cf62                                      |         
    0x0001cf54 ldr.w r3, [r7, 0x1c8]                                 |         r3 = *((r7 + 0x1c8));
    0x0001cf58 adds r3, 1                                            |         r3++;
    0x0001cf5a str.w r3, [r7, 0x1c8]                                 |         __asm ("str.w r3, aav.0x000000ff");
    0x0001cf5e uxth r3, r3                                           |         r3 = (int16_t) r3;
    0x0001cf60 strh r3, [r2, 0x12]                                   |         *((r2 + 0x12)) = r3;
                                                                     |     }
    0x0001cf62 str r3, [r5, 0x1c]                                    |     *((r5 + 0x1c)) = r3;
    0x0001cf64 ldrb r3, [r4]                                         |     r3 = *(r4);
    0x0001cf66 cmp r3, 0x5f                                          |     
                                                                     |     if (r3 != 0x5f) {
    0x0001cf68 bne 0x1ceaa                                           |         goto label_0;
                                                                     |     }
                                                                     | label_4:
    0x0001cf6a ldr r1, [r4, 8]                                       |     r1 = *((r4 + 8));
    0x0001cf6c str r1, [sp, 0x14]                                    |     var_14h_2 = r1;
    0x0001cf6e cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x0001cf70 beq 0x1ceaa                                           |         goto label_0;
                                                                     |     }
    0x0001cf72 ldrb r3, [r1]                                         |     r3 = *(r1);
    0x0001cf74 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0001cf76 beq 0x1ceaa                                           |         goto label_0;
                                                                     |     }
    0x0001cf78 mov r3, r1                                            |     r3 = r1;
                                                                     |     do {
    0x0001cf7a ldrb r2, [r3, 1]!                                     |         r2 = *((r3 += 1));
    0x0001cf7e cmp r2, 0                                             |         
    0x0001cf80 bne 0x1cf7a                                           |         
                                                                     |     } while (r2 != 0);
    0x0001cf82 subs r3, r3, r1                                       |     r3 -= r1;
    0x0001cf84 bic r3, r3, 0xc0000000                                |     r3 = BIT_MASK (r3, 0xc0000000);
    0x0001cf88 str r3, [sp, 0x18]                                    |     var_18h_2 = r3;
    0x0001cf8a cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0001cf8c beq 0x1ceaa                                           |         goto label_0;
                                                                     |     }
    0x0001cf8e ldr r0, [r7]                                          |     r0 = *(r7);
    0x0001cf90 movs r3, 1                                            |     r3 = 1;
    0x0001cf92 add r2, sp, 0x14                                      |     r2 += var_14h_2;
    0x0001cf94 movs r1, 0x5f                                         |     r1 = 0x5f;
    0x0001cf96 bl 0xd7ac                                             |     r0 = fcn_0000d7ac (r0, r1, r2, r3);
    0x0001cf9a cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0001cf9c beq 0x1ceaa                                           |         goto label_0;
                                                                     |     }
    0x0001cf9e ldr r3, [r0, 4]                                       |     r3 = *((r0 + 4));
    0x0001cfa0 str r5, [r0, 0xc]                                     |     *((r0 + 0xc)) = r5;
    0x0001cfa2 mov r5, r0                                            |     r5 = r0;
    0x0001cfa4 orr r3, r3, 0x1100                                    |     r3 |= 0x1100;
    0x0001cfa8 str r3, [r0, 4]                                       |     *((r0 + 4)) = r3;
    0x0001cfaa b 0x1ceaa                                             |     goto label_0;
                                                                     | label_2:
    0x0001cfac ldr r2, [pc, 0x44]                                    |     
    0x0001cfae ldr r3, [pc, 0x38]                                    |     r3 = *(0x1cfea);
    0x0001cfb0 add r2, pc                                            |     r2 = 0x39fa8;
    0x0001cfb2 ldr r3, [r2, r3]                                      |     r3 = *(0x39fa8);
    0x0001cfb4 ldr r2, [r3]                                          |     r2 = *(0x39fa8);
    0x0001cfb6 ldr r3, [sp, 0x2c]                                    |     r3 = var_2ch;
    0x0001cfb8 eors r2, r3                                           |     r2 ^= r3;
    0x0001cfba mov.w r3, 0                                           |     r3 = 0;
                                                                     |     if (r2 == r3) {
    0x0001cfbe bne 0x1cfe2                                           |         
    0x0001cfc0 add sp, 0x34                                          |         
    0x0001cfc2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |         
                                                                     | label_7:
    0x0001cfc6 ldr r3, [pc, 0x30]                                    |         
    0x0001cfc8 mov r1, r0                                            |         r1 = r0;
    0x0001cfca add r0, sp, 0x14                                      |         r0 += var_14h_2;
    0x0001cfcc str r2, [sp, 0x28]                                    |         var_6ch = r2;
    0x0001cfce add r3, pc                                            |         r3 = 0x39fcc;
    0x0001cfd0 str r3, [sp, 0x14]                                    |         var_14h_2 = r3;
    0x0001cfd2 movs r3, 0                                            |         r3 = 0;
    0x0001cfd4 strd r3, r3, [sp, 0x18]                               |         __asm ("strd r3, r3, [var_18h_2]");
    0x0001cfd8 strd r3, r3, [sp, 0x20]                               |         __asm ("strd r3, r3, [var_68h]");
    0x0001cfdc bl 0xc6b0                                             |         fcn_0000c6b0 (r0, r1);
    0x0001cfe0 b 0x1cf2e                                             |         goto label_1;
                                                                     |     }
                                                                     | label_6:
    0x0001cfe2 blx 0x6498                                            |     fcn_00006498 ();
    0x0001cfe6 nop                                                   |     
    0x0001cfe8 lsls r0, r1, 0xe                                      |     r0 = r1 << 0xe;
    0x0001cfea movs r0, r0                                           |     
    0x0001cfec add r5, sp, 0x3b8                                     |     r5 += arg_3b8h;
    0x0001cfee movs r5, r0                                           |     r5 = r0;
    0x0001cff0 add r5, sp, 0x138                                     |     r5 += arg_138h;
    0x0001cff2 movs r5, r0                                           |     r5 = r0;
    0x0001cff4 add r4, sp, 0x2a0                                     |     r4 += arg_2a0h;
    0x0001cff6 movs r5, r0                                           |     r5 = r0;
    0x0001cff8 add r6, sp, 0x24c                                     |     r6 += arg_24ch;
    0x0001cffa invalid                                               |     
                                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1cffc */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.0001cffc ()                                      | void fcn_0001cffc (int16_t arg_1h, int16_t arg_58h, int16_t arg_5ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_1h;
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     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;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch_2;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     int16_t var_68h;
                                                                 |     int16_t var_6ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x0001cffc svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x0001d000 sub sp, 0x44                                      |     
    0x0001d002 ldr r4, [sp, 0x6c]                                |     r4 = *((sp + 0x6c));
    0x0001d004 mov sl, r2                                        |     sl = r2;
    0x0001d006 mov r6, r3                                        |     r6 = r3;
    0x0001d008 movs r2, 0                                        |     r2 = 0;
    0x0001d00a str r0, [sp, 0x38]                                |     *((sp + 0x38)) = r0;
    0x0001d00c mov.w r3, -1                                      |     r3 = -1;
    0x0001d010 ldr r0, [r0]                                      |     r0 = *(r0);
    0x0001d012 str r1, [sp, 0x14]                                |     *((sp + 0x14)) = r1;
    0x0001d014 str r3, [r4, 0x1c]                                |     *((r4 + 0x1c)) = r3;
    0x0001d016 str r0, [sp, 0x3c]                                |     *((sp + 0x3c)) = r0;
    0x0001d018 ldr r3, [sp, 0x68]                                |     r3 = *((sp + 0x68));
    0x0001d01a str r2, [r4, 0x2c]                                |     *((r4 + 0x2c)) = r2;
    0x0001d01c cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0001d01e beq.w 0x1d50c                                     |         goto label_32;
                                                                 |     }
    0x0001d022 ldrb r3, [r3, 0x1c]                               |     r3 = *((r3 + 0x1c));
    0x0001d024 ands r4, r3, 0x14                                 |     r4 = r3 & 0x14;
                                                                 |     if (r4 != r3) {
    0x0001d028 beq.w 0x1d134                                     |         
    0x0001d02c str r2, [sp, 0x34]                                |         var_34h = r2;
    0x0001d02e str r2, [sp, 0x24]                                |         var_24h = r2;
    0x0001d030 str r2, [sp, 0x14]                                |         var_14h = r2;
                                                                 | label_0:
    0x0001d032 movs r3, 0                                        |         r3 = 0;
    0x0001d034 subs.w r2, sl, r3                                 |         r2 = sl - r3;
    0x0001d038 mov fp, r3                                        |         
    0x0001d03a it ne                                             |         
                                                                 |         if (r2 == sl) {
    0x0001d03c movne r2, 1                                       |             r2 = 1;
                                                                 |         }
    0x0001d03e str r3, [sp, 0x10]                                |         var_10h = r3;
    0x0001d040 str r2, [sp, 0x30]                                |         var_30h = r2;
    0x0001d042 ldr r2, [sp, 0x68]                                |         r2 = var_68h;
    0x0001d044 str r3, [sp, 0x28]                                |         var_28h = r3;
    0x0001d046 str r2, [sp, 0x20]                                |         var_20h = r2;
                                                                 | label_7:
    0x0001d048 ldr r3, [sp, 0x20]                                |         r3 = var_20h;
    0x0001d04a ldr r5, [r3, 4]                                   |         r5 = *((r3 + 4));
    0x0001d04c str r5, [sp, 0x18]                                |         var_18h = r5;
    0x0001d04e cmp r5, 0                                         |         
                                                                 |         if (r5 != 0) {
    0x0001d050 bne.w 0x1d16a                                     |             goto label_33;
                                                                 |         }
    0x0001d054 ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x0001d056 str r3, [sp, 8]                                   |         var_8h = r3;
                                                                 | label_6:
    0x0001d058 ldr r3, [sp, 0x34]                                |         r3 = var_34h;
    0x0001d05a orrs.w r3, fp, r3                                 |         r3 = fp | r3;
    0x0001d05e ldr r3, [sp, 0x30]                                |         r3 = var_30h;
    0x0001d060 and r4, r3, 1                                     |         r4 = r3 & 1;
    0x0001d064 it ne                                             |         
                                                                 |         if (r3 == fp) {
    0x0001d066 movne r4, 0                                       |             r4 = 0;
                                                                 |         }
    0x0001d068 cmp r4, 0                                         |         
                                                                 |         if (r4 != 0) {
    0x0001d06a bne.w 0x1d454                                     |             goto label_34;
                                                                 |         }
    0x0001d06e sub.w r4, fp, 1                                   |         r4 = fp - 1;
    0x0001d072 clz r4, r4                                        |         r4 &= r4;
    0x0001d076 lsrs r4, r4, 5                                    |         r4 >>= 5;
                                                                 | label_21:
    0x0001d078 ldr r3, [sp, 8]                                   |         r3 = var_8h;
    0x0001d07a cmp r3, 0                                         |         
    0x0001d07c ite ne                                            |         
                                                                 |         if (r3 == 0) {
    0x0001d07e movne r4, 0                                       |             r4 = 0;
                                                                 |         }
                                                                 |         if (r3 != 0) {
    0x0001d080 andeq r4, r4, 1                                   |             r4 &= 1;
                                                                 |         }
    0x0001d084 cmp r4, 0                                         |         
                                                                 |         if (r4 == 0) {
    0x0001d086 beq.w 0x1d344                                     |             goto label_35;
                                                                 |         }
    0x0001d08a ldr r5, [sp, 0x10]                                |         r5 = var_10h;
    0x0001d08c cmp r5, 0                                         |         
                                                                 |         if (r5 == 0) {
    0x0001d08e beq.w 0x1d304                                     |             goto label_36;
                                                                 |         }
    0x0001d092 mov r0, r6                                        |         r0 = r6;
    0x0001d094 bl 0x12464                                        |         r0 = fcn_00012464 (r0);
    0x0001d098 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x0001d09a beq.w 0x1d304                                     |             goto label_36;
                                                                 |         }
    0x0001d09e ldr r3, [r5, 0x10]                                |         r3 = *((r5 + 0x10));
    0x0001d0a0 ldrb.w r3, [r3, 0x2c]                             |         r3 = *((r3 + 0x2c));
    0x0001d0a4 ands r5, r3, 0x20                                 |         r5 = r3 & 0x20;
                                                                 |         if (r5 != r3) {
    0x0001d0a8 bne.w 0x1d304                                     |             goto label_36;
                                                                 |         }
    0x0001d0ac ldr r2, [sp, 0x6c]                                |         r2 = var_6ch;
    0x0001d0ae movw r3, 0xffff                                   |         r3 = 0xffff;
    0x0001d0b2 strh r3, [r2, 0x20]                               |         *((r2 + 0x20)) = r3;
    0x0001d0b4 movs r3, 0x64                                     |         r3 = 0x64;
    0x0001d0b6 strb r3, [r2, 1]                                  |         *((r2 + 1)) = r3;
    0x0001d0b8 movs r3, 1                                        |         r3 = 1;
    0x0001d0ba str r3, [sp, 8]                                   |         var_8h = r3;
                                                                 | label_11:
    0x0001d0bc ldr r3, [sp, 0x6c]                                |         r3 = var_6ch;
    0x0001d0be ldrsh.w r3, [r3, 0x20]                            |         r3 = *((r3 + 0x20));
    0x0001d0c2 cmp r3, 0                                         |         
    0x0001d0c4 ite lt                                            |         
                                                                 |         if (r3 >= 0) {
    0x0001d0c6 movlt r4, 0                                       |             r4 = 0;
                                                                 |         }
                                                                 |         if (r3 < 0) {
    0x0001d0c8 andge r4, r4, 1                                   |             r4 &= 1;
                                                                 |         }
                                                                 |         if (r4 != 0) {
    0x0001d0cc cbz r4, 0x1d0fa                                   |             
    0x0001d0ce cmp r3, 0x3f                                      |             
    0x0001d0d0 mov.w r1, 1                                       |             r1 = 1;
    0x0001d0d4 it ge                                             |             
                                                                 |             if (r3 < 0x3f) {
    0x0001d0d6 movge r3, 0x3f                                    |                 r3 = 0x3f;
                                                                 |             }
    0x0001d0d8 sub.w r2, r3, 0x20                                |             r2 = r3 - 0x20;
    0x0001d0dc rsb.w r0, r3, 0x20                                |             r0 = 0x20 - r3;
    0x0001d0e0 lsr.w r0, r1, r0                                  |             r0 = r1 >> r0;
    0x0001d0e4 lsl.w r2, r1, r2                                  |             r2 = r1 << r2;
    0x0001d0e8 lsls r1, r3                                       |             r1 <<= r3;
    0x0001d0ea orrs r2, r0                                       |             r2 |= r0;
    0x0001d0ec ldr r0, [sp, 0x10]                                |             r0 = var_10h;
    0x0001d0ee ldr r3, [r0, 0x38]                                |             r3 = *((r0 + 0x38));
    0x0001d0f0 orrs r3, r1                                       |             r3 |= r1;
    0x0001d0f2 str r3, [r0, 0x38]                                |             *((r0 + 0x38)) = r3;
    0x0001d0f4 ldr r3, [r0, 0x3c]                                |             r3 = *((r0 + 0x3c));
    0x0001d0f6 orrs r3, r2                                       |             r3 |= r2;
    0x0001d0f8 str r3, [r0, 0x3c]                                |             *((r0 + 0x3c)) = r3;
                                                                 |         }
    0x0001d0fa ldr r4, [sp, 0x3c]                                |         r4 = var_3ch;
    0x0001d0fc ldr r3, [sp, 0x6c]                                |         r3 = var_6ch;
    0x0001d0fe mov r0, r4                                        |         r0 = r4;
    0x0001d100 ldr r1, [r3, 0xc]                                 |         r1 = *((r3 + 0xc));
    0x0001d102 bl 0x12e68                                        |         fcn_00012e68 (r0);
    0x0001d106 ldr r3, [sp, 0x6c]                                |         r3 = var_6ch;
    0x0001d108 mov r0, r4                                        |         r0 = r4;
    0x0001d10a movs r4, 0                                        |         r4 = 0;
    0x0001d10c str r4, [r3, 0xc]                                 |         *((r3 + 0xc)) = r4;
    0x0001d10e ldr r1, [r3, 0x10]                                |         r1 = *((r3 + 0x10));
    0x0001d110 bl 0x12e68                                        |         fcn_00012e68 (r0);
    0x0001d114 ldr r3, [sp, 0x6c]                                |         r3 = var_6ch;
    0x0001d116 cmp r5, r4                                        |         
    0x0001d118 str r4, [r3, 0x10]                                |         *((r3 + 0x10)) = r4;
    0x0001d11a ite ne                                            |         
                                                                 |         if (r5 == r4) {
    0x0001d11c movne r4, 0x3e                                    |             r4 = 0x3e;
                                                                 |         }
                                                                 |         if (r5 != r4) {
    0x0001d11e moveq r4, 0x9a                                    |             r4 = 0x9a;
                                                                 |         }
    0x0001d120 strb r4, [r3]                                     |         *(r3) = r4;
    0x0001d122 ldr r3, [sp, 8]                                   |         r3 = var_8h;
    0x0001d124 cmp r3, 1                                         |         
    0x0001d126 it ne                                             |         
                                                                 |         if (r3 == 1) {
    0x0001d128 movne r0, 2                                       |             r0 = 2;
                                                                 |         }
                                                                 |         if (r3 == 1) {
    0x0001d12a beq.w 0x1d51a                                     |             goto label_37;
                                                                 |         }
                                                                 | label_26:
    0x0001d12e add sp, 0x44                                      |         
    0x0001d130 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 |     }
    0x0001d134 ldr r3, [r0, 0x14]                                |     r3 = *((r0 + 0x14));
    0x0001d136 str r1, [sp, 0x34]                                |     var_34h = r1;
    0x0001d138 cmp r3, r2                                        |     
                                                                 |     if (r3 <= r2) {
    0x0001d13a ble.w 0x1d6c8                                     |         goto label_38;
                                                                 |     }
    0x0001d13e mov r7, r0                                        |     r7 = r0;
    0x0001d140 mov r8, r1                                        |     r8 = r1;
    0x0001d142 b 0x1d14c                                         |     
                                                                 |     while (r0 != 0) {
    0x0001d144 ldr r3, [r7, 0x14]                                |         r3 = *((r7 + 0x14));
    0x0001d146 cmp r3, r4                                        |         
                                                                 |         if (r3 <= r4) {
    0x0001d148 ble.w 0x1d5c0                                     |             goto label_39;
                                                                 |         }
    0x0001d14c ldr r3, [r7, 0x10]                                |         r3 = *((r7 + 0x10));
    0x0001d14e lsls r5, r4, 4                                    |         r5 = r4 << 4;
    0x0001d150 mov r1, r8                                        |         r1 = r8;
    0x0001d152 adds r4, 1                                        |         r4++;
    0x0001d154 ldr r0, [r3, r5]                                  |         r0 = *((r3 + r5));
    0x0001d156 blx 0x6164                                        |         r0 = fcn_00006164 ();
    0x0001d15a cmp r0, 0                                         |         
    0x0001d15c bne 0x1d144                                       |         
                                                                 |     }
    0x0001d15e ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x0001d160 ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x0001d162 add r3, r5                                        |     r3 += r5;
    0x0001d164 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x0001d166 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x0001d168 b 0x1d032                                         |     goto label_0;
                                                                 | label_33:
    0x0001d16a ldr r2, [r5], 8                                   |     r2 = *(r5);
                                                                 |     r5 += 8;
    0x0001d16e movs r3, 0                                        |     r3 = 0;
    0x0001d170 str r3, [sp, 8]                                   |     var_8h = r3;
    0x0001d172 cmp r2, 0                                         |     
                                                                 |     if (r2 <= 0) {
    0x0001d174 ble.w 0x1d2ec                                     |         goto label_40;
                                                                 |     }
    0x0001d178 str r3, [sp, 0xc]                                 |     var_ch_2 = r3;
    0x0001d17a b 0x1d18a                                         |     
                                                                 |     while (r3 != r1) {
                                                                 | label_1:
    0x0001d17c ldr r3, [sp, 0xc]                                 |         r3 = var_ch_2;
    0x0001d17e adds r5, 0x48                                     |         r5 += 0x48;
    0x0001d180 adds r3, 1                                        |         r3++;
    0x0001d182 cmp r2, r3                                        |         
    0x0001d184 str r3, [sp, 0xc]                                 |         var_ch_2 = r3;
                                                                 |         if (r2 <= r3) {
    0x0001d186 ble.w 0x1d2ec                                     |             goto label_40;
                                                                 |         }
    0x0001d18a ldrd r7, r3, [r5, 0x10]                           |         __asm ("ldrd r7, r3, [r5, 0x10]");
                                                                 |         if (r3 != 0) {
    0x0001d18e cbz r3, 0x1d196                                   |             
    0x0001d190 ldrh r1, [r3, 6]                                  |             r1 = *((r3 + 6));
    0x0001d192 lsls r1, r1, 0x16                                 |             r1 <<= 0x16;
                                                                 |             if (r1 < r1) {
    0x0001d194 bmi 0x1d262                                       |                 goto label_41;
                                                                 |             }
                                                                 |         }
    0x0001d196 ldr r3, [sp, 0x14]                                |         r3 = var_14h;
                                                                 |         if (r3 == 0) {
    0x0001d198 cbz r3, 0x1d1a2                                   |             goto label_42;
                                                                 |         }
    0x0001d19a ldr r3, [r7, 0x44]                                |         r3 = *((r7 + 0x44));
    0x0001d19c ldr r1, [sp, 0x24]                                |         r1 = var_24h;
    0x0001d19e cmp r3, r1                                        |         
    0x0001d1a0 bne 0x1d17c                                       |         
                                                                 |     }
                                                                 | label_42:
    0x0001d1a2 cmp.w sl, 0                                       |     
                                                                 |     if (sl != 0) {
    0x0001d1a6 beq 0x1d1be                                       |         
                                                                 | label_4:
    0x0001d1a8 ldr r0, [r5, 0xc]                                 |         r0 = *((r5 + 0xc));
    0x0001d1aa cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x0001d1ac beq.w 0x1d2e8                                     |             goto label_43;
                                                                 |         }
                                                                 | label_5:
    0x0001d1b0 mov r1, sl                                        |         r1 = sl;
    0x0001d1b2 blx 0x6164                                        |         r0 = fcn_00006164 ();
                                                                 |         if (r0 == 0) {
    0x0001d1b6 cbz r0, 0x1d1be                                   |             goto label_44;
                                                                 |         }
                                                                 | label_3:
    0x0001d1b8 ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x0001d1ba ldr r2, [r3]                                      |         r2 = *(r3);
    0x0001d1bc b 0x1d17c                                         |         goto label_1;
                                                                 |     }
                                                                 | label_44:
    0x0001d1be ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0001d1c0 ldr r2, [r7, 4]                                   |     r2 = *((r7 + 4));
    0x0001d1c2 cmp.w fp, 0                                       |     
    0x0001d1c6 it eq                                             |     
                                                                 |     if (fp != 0) {
    0x0001d1c8 moveq r3, r5                                      |         r3 = r5;
                                                                 |     }
    0x0001d1ca str r3, [sp, 0x10]                                |     var_10h = r3;
    0x0001d1cc add.w r3, fp, 1                                   |     r3 += arg_1h;
    0x0001d1d0 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x0001d1d2 ldrsh.w r3, [r7, 0x26]                            |     r3 = *((r7 + 0x26));
    0x0001d1d6 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x0001d1d8 ble 0x1d23c                                       |         goto label_45;
                                                                 |     }
    0x0001d1da add.w r8, r2, 0x18                                |     r8 = r2 + 0x18;
    0x0001d1de movs r4, 0                                        |     r4 = 0;
                                                                 | label_2:
    0x0001d1e0 ldr r0, [r8, -0x18]                               |     r0 = *((r8 - 0x18));
    0x0001d1e4 mov r1, r6                                        |     r1 = r6;
    0x0001d1e6 blx 0x6164                                        |     r0 = fcn_00006164 ();
    0x0001d1ea mov sb, r0                                        |     sb = r0;
                                                                 |     if (r0 != 0) {
    0x0001d1ec cbnz r0, 0x1d22e                                  |         goto label_46;
                                                                 |     }
    0x0001d1ee ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x0001d1f0 cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x0001d1f2 bne 0x1d242                                       |         goto label_47;
                                                                 |     }
    0x0001d1f4 ldrb.w r3, [r5, 0x24]                             |     r3 = *((r5 + 0x24));
    0x0001d1f8 lsls r3, r3, 0x1d                                 |     r3 <<= 0x1d;
                                                                 |     if (r3 < r3) {
    0x0001d1fa bmi 0x1d22e                                       |         goto label_46;
                                                                 |     }
    0x0001d1fc ldr.w fp, [r5, 0x30]                              |     fp = *((r5 + 0x30));
    0x0001d200 cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x0001d204 beq 0x1d242                                       |         goto label_47;
                                                                 |     }
    0x0001d206 ldr.w r3, [fp, 4]                                 |     r3 = *(arg_5ch);
    0x0001d20a cmp r3, 0                                         |     
                                                                 |     if (r3 > 0) {
    0x0001d20c bgt 0x1d218                                       |         goto label_48;
                                                                 |     }
    0x0001d20e b 0x1d242                                         |     goto label_47;
                                                                 |     do {
    0x0001d210 ldr.w r3, [fp, 4]                                 |         r3 = *(arg_5ch);
    0x0001d214 cmp sb, r3                                        |         
                                                                 |         if (sb >= r3) {
    0x0001d216 bge 0x1d242                                       |             goto label_47;
                                                                 |         }
                                                                 | label_48:
    0x0001d218 ldr.w r3, [fp]                                    |         r3 = *(fp);
    0x0001d21c mov r1, r6                                        |         r1 = r6;
    0x0001d21e ldr.w r0, [r3, sb, lsl 3]                         |         offset_0 = sb << 3;
                                                                 |         r0 = *((r3 + offset_0));
    0x0001d222 add.w sb, sb, 1                                   |         sb++;
    0x0001d226 blx 0x6164                                        |         r0 = fcn_00006164 ();
    0x0001d22a cmp r0, 0                                         |         
    0x0001d22c bne 0x1d210                                       |         
                                                                 |     } while (r0 != 0);
                                                                 | label_46:
    0x0001d22e ldrsh.w r3, [r7, 0x26]                            |     r3 = *((r7 + 0x26));
    0x0001d232 adds r4, 1                                        |     r4++;
    0x0001d234 add.w r8, r8, 0x18                                |     r8 += 0x18;
    0x0001d238 cmp r3, r4                                        |     
                                                                 |     if (r3 > r4) {
    0x0001d23a bgt 0x1d1e0                                       |         goto label_2;
                                                                 |     }
                                                                 | label_45:
    0x0001d23c ldr.w fp, [sp, 0x1c]                              |     fp = var_1ch;
    0x0001d240 b 0x1d1b8                                         |     goto label_3;
                                                                 | label_47:
    0x0001d242 ldrsh.w r3, [r7, 0x24]                            |     r3 = *((r7 + 0x24));
    0x0001d246 str r5, [sp, 0x10]                                |     var_10h = r5;
    0x0001d248 cmp r3, r4                                        |     
    0x0001d24a it eq                                             |     
                                                                 |     if (r3 != r4) {
    0x0001d24c moveq r4, -1                                      |         r4 = -1;
                                                                 |     }
    0x0001d250 ldr r3, [sp, 0x6c]                                |     r3 = var_6ch;
    0x0001d252 strh r4, [r3, 0x20]                               |     *((r3 + 0x20)) = r4;
    0x0001d254 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x0001d256 adds r3, 1                                        |     r3++;
    0x0001d258 str r3, [sp, 8]                                   |     var_8h = r3;
    0x0001d25a ldrd r3, fp, [sp, 0x18]                           |     __asm ("ldrd r3, fp, [var_18h]");
    0x0001d25e ldr r2, [r3]                                      |     r2 = *(r3);
    0x0001d260 b 0x1d17c                                         |     goto label_1;
                                                                 | label_41:
    0x0001d262 ldr.w r8, [r3]                                    |     r8 = *(r3);
    0x0001d266 mov.w sb, 0                                       |     sb = 0;
    0x0001d26a ldr.w r3, [r8]                                    |     r3 = *(r8);
    0x0001d26e cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x0001d270 ble 0x1d2bc                                       |         goto label_49;
                                                                 |     }
    0x0001d272 str r7, [sp, 0x2c]                                |     var_2ch_2 = r7;
    0x0001d274 mov r7, r6                                        |     r7 = r6;
    0x0001d276 str r5, [sp, 0x1c]                                |     var_1ch = r5;
    0x0001d278 mov r4, sb                                        |     r4 = sb;
    0x0001d27a ldr r5, [sp, 8]                                   |     r5 = var_8h;
    0x0001d27c ldr r6, [sp, 0x14]                                |     r6 = var_14h;
                                                                 |     do {
    0x0001d27e ldr.w r0, [r8, 4]                                 |         r0 = *((r8 + 4));
    0x0001d282 add.w ip, r4, r4, lsl 2                           |         
    0x0001d286 mov r3, r6                                        |         r3 = r6;
    0x0001d288 mov r2, sl                                        |         r2 = sl;
    0x0001d28a mov r1, r7                                        |         r1 = r7;
    0x0001d28c add.w r0, r0, ip, lsl 2                           |         r0 += (ip << 2);
    0x0001d290 ldr r0, [r0, 8]                                   |         r0 = *((r0 + 8));
    0x0001d292 bl 0x14a8c                                        |         r0 = fcn_00014a8c (r0, r1, r2, r3);
                                                                 |         if (r0 != 0) {
    0x0001d296 cbz r0, 0x1d2aa                                   |             
    0x0001d298 ldr r3, [sp, 0x1c]                                |             r3 = var_1ch;
    0x0001d29a adds r5, 1                                        |             r5++;
    0x0001d29c mov.w sb, 1                                       |             sb = 1;
    0x0001d2a0 mov.w fp, 2                                       |             
    0x0001d2a4 str r3, [sp, 0x10]                                |             var_10h = r3;
    0x0001d2a6 ldr r3, [sp, 0x6c]                                |             r3 = var_6ch;
    0x0001d2a8 strh r4, [r3, 0x20]                               |             *((r3 + 0x20)) = r4;
                                                                 |         }
    0x0001d2aa ldr.w r3, [r8]                                    |         r3 = *(r8);
    0x0001d2ae adds r4, 1                                        |         r4++;
    0x0001d2b0 cmp r3, r4                                        |         
    0x0001d2b2 bgt 0x1d27e                                       |         
                                                                 |     } while (r3 > r4);
    0x0001d2b4 mov r6, r7                                        |     r6 = r7;
    0x0001d2b6 str r5, [sp, 8]                                   |     var_8h = r5;
    0x0001d2b8 ldr r7, [sp, 0x2c]                                |     r7 = var_2ch_2;
    0x0001d2ba ldr r5, [sp, 0x1c]                                |     r5 = var_1ch;
                                                                 | label_49:
    0x0001d2bc cmp.w sl, 0                                       |     
    0x0001d2c0 ite ne                                            |     
                                                                 |     if (sl == 0) {
    0x0001d2c2 movne r3, sb                                      |         r3 = sb;
                                                                 |     }
                                                                 |     if (sl != 0) {
    0x0001d2c4 orreq r3, sb, 1                                   |         r3 = sb | 1;
                                                                 |     }
    0x0001d2c8 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0001d2ca bne.w 0x1d1b8                                     |         goto label_3;
                                                                 |     }
    0x0001d2ce ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0001d2d0 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0001d2d2 beq.w 0x1d1a8                                     |         goto label_4;
                                                                 |     }
    0x0001d2d6 ldr r3, [r7, 0x44]                                |     r3 = *((r7 + 0x44));
    0x0001d2d8 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x0001d2da cmp r3, r2                                        |     
                                                                 |     if (r3 != r2) {
    0x0001d2dc bne.w 0x1d1b8                                     |         goto label_3;
                                                                 |     }
    0x0001d2e0 ldr r0, [r5, 0xc]                                 |     r0 = *((r5 + 0xc));
    0x0001d2e2 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0001d2e4 bne.w 0x1d1b0                                     |         goto label_5;
                                                                 |     }
                                                                 | label_43:
    0x0001d2e8 ldr r0, [r7]                                      |     r0 = *(r7);
    0x0001d2ea b 0x1d1b0                                         |     goto label_5;
                                                                 | label_40:
    0x0001d2ec ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0001d2ee cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0001d2f0 beq.w 0x1d058                                     |         goto label_6;
                                                                 |     }
    0x0001d2f4 ldr r3, [r2, 0x28]                                |     r3 = *((r2 + 0x28));
    0x0001d2f6 ldr r1, [sp, 0x6c]                                |     r1 = var_6ch;
    0x0001d2f8 str r3, [r1, 0x1c]                                |     *((r1 + 0x1c)) = r3;
    0x0001d2fa ldr r3, [r2, 0x10]                                |     r3 = *((r2 + 0x10));
    0x0001d2fc str r3, [r1, 0x2c]                                |     *((r1 + 0x2c)) = r3;
    0x0001d2fe ldr r3, [r3, 0x44]                                |     r3 = *((r3 + 0x44));
    0x0001d300 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x0001d302 b 0x1d058                                         |     goto label_6;
                                                                 | label_36:
    0x0001d304 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0001d306 ldr r5, [r3, 8]                                   |     r5 = *((r3 + 8));
                                                                 |     if (r5 != 0) {
    0x0001d308 cbz r5, 0x1d312                                   |         
    0x0001d30a cmp.w sl, 0                                       |         
                                                                 |         if (sl == 0) {
    0x0001d30e beq.w 0x1d4fe                                     |             goto label_50;
                                                                 |         }
                                                                 |     }
    0x0001d312 mov.w fp, 1                                       |     
                                                                 | label_8:
    0x0001d316 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0001d318 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x0001d31a ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x0001d31c adds r2, 1                                        |     r2++;
    0x0001d31e str r2, [sp, 0x28]                                |     var_28h = r2;
    0x0001d320 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x0001d322 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0001d324 bne.w 0x1d048                                     |         goto label_7;
                                                                 |     }
    0x0001d328 cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x0001d32c beq.w 0x1d67a                                     |         goto label_51;
                                                                 |     }
    0x0001d330 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0001d332 ldr r5, [sp, 0x20]                                |     r5 = var_20h;
    0x0001d334 subs r4, r3, 0                                    |     r4 = r3 - 0;
    0x0001d336 it ne                                             |     
                                                                 |     if (r4 == r3) {
    0x0001d338 movne r4, 1                                       |         r4 = 1;
                                                                 |     }
                                                                 | label_12:
    0x0001d33a ldr r2, [pc, 0x394]                               |     
    0x0001d33c movs r3, 0                                        |     r3 = 0;
    0x0001d33e str r3, [sp, 8]                                   |     var_8h = r3;
    0x0001d340 add r2, pc                                        |     r2 = 0x3aa16;
    0x0001d342 b 0x1d42c                                         |     goto label_52;
                                                                 | label_35:
    0x0001d344 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0001d346 ldr r5, [r3, 8]                                   |     r5 = *((r3 + 8));
    0x0001d348 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x0001d34a beq 0x1d40a                                       |         goto label_53;
                                                                 |     }
    0x0001d34c ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x0001d34e orrs.w r3, sl, r3                                 |     r3 = sl | r3;
                                                                 |     if (r3 != sl) {
    0x0001d352 bne 0x1d40a                                       |         goto label_53;
                                                                 |     }
                                                                 | label_15:
    0x0001d354 ldr r2, [r5]                                      |     r2 = *(r5);
    0x0001d356 cmp r2, 0                                         |     
                                                                 |     if (r2 <= 0) {
    0x0001d358 ble 0x1d316                                       |         goto label_8;
                                                                 |     }
    0x0001d35a movs r7, 0                                        |     r7 = 0;
    0x0001d35c b 0x1d366                                         |     goto label_54;
                                                                 | label_10:
    0x0001d35e ldr r2, [r5]                                      |     r2 = *(r5);
                                                                 | label_9:
    0x0001d360 adds r7, 1                                        |     r7++;
    0x0001d362 cmp r2, r7                                        |     
                                                                 |     if (r2 <= r7) {
    0x0001d364 ble 0x1d316                                       |         goto label_8;
                                                                 |     }
                                                                 | label_54:
    0x0001d366 add.w r4, r7, r7, lsl 2                           |     r4 = r7 + (r7 << 2);
    0x0001d36a ldr r3, [r5, 4]                                   |     r3 = *((r5 + 4));
    0x0001d36c mov r1, r6                                        |     r1 = r6;
    0x0001d36e lsls r4, r4, 2                                    |     r4 <<= 2;
    0x0001d370 add r3, r4                                        |     r3 += r4;
    0x0001d372 ldr.w r8, [r3, 4]                                 |     r8 = *((r3 + 4));
    0x0001d376 mov r0, r8                                        |     r0 = r8;
    0x0001d378 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x0001d37c beq 0x1d360                                       |         goto label_9;
                                                                 |     }
    0x0001d37e blx 0x6164                                        |     r0 = fcn_00006164 ();
    0x0001d382 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0001d384 bne 0x1d35e                                       |         goto label_10;
                                                                 |     }
    0x0001d386 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x0001d388 ldr r3, [r5, 4]                                   |     r3 = *((r5 + 4));
    0x0001d38a ldrb r2, [r2, 0x1c]                               |     r2 = *((r2 + 0x1c));
    0x0001d38c ldr r3, [r3, r4]                                  |     r3 = *((r3 + r4));
    0x0001d38e lsls r2, r2, 0x1f                                 |     r2 <<= 0x1f;
                                                                 |     if (r2 >= r2) {
    0x0001d390 bmi 0x1d39a                                       |         
    0x0001d392 ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x0001d394 lsls r3, r3, 0x1e                                 |         r3 <<= 0x1e;
                                                                 |         if (r3 < r3) {
    0x0001d396 bmi.w 0x1d5ac                                     |             goto label_55;
                                                                 |         }
                                                                 |     }
    0x0001d39a ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x0001d39c mov r2, r7                                        |     r2 = r7;
    0x0001d39e ldr r0, [sp, 0x38]                                |     r0 = var_38h;
    0x0001d3a0 mov r1, r5                                        |     r1 = r5;
    0x0001d3a2 str r3, [sp, 4]                                   |     var_4h = r3;
    0x0001d3a4 ldr r3, [pc, 0x32c]                               |     
    0x0001d3a6 add r3, pc                                        |     r3 = 0x3aa7e;
    0x0001d3a8 str r3, [sp]                                      |     *(sp) = r3;
    0x0001d3aa ldr r3, [sp, 0x6c]                                |     r3 = var_6ch;
    0x0001d3ac bl 0x1ce4c                                        |     fcn_0001ce4c (r0, r1, r2, r3, r4, r5, r6);
    0x0001d3b0 ldr r3, [sp, 0x6c]                                |     r3 = var_6ch;
    0x0001d3b2 ldrb r4, [r3]                                     |     r4 = *(r3);
    0x0001d3b4 cmp r4, 0x18                                      |     
                                                                 |     if (r4 != 0x18) {
    0x0001d3b6 bne.w 0x1d51a                                     |         goto label_37;
                                                                 |     }
                                                                 | label_17:
    0x0001d3ba ldr r3, [sp, 0x68]                                |     r3 = var_68h;
    0x0001d3bc ldr r2, [sp, 0x68]                                |     r2 = var_68h;
    0x0001d3be ldr r3, [r3, 0x14]                                |     r3 = *((r3 + 0x14));
    0x0001d3c0 adds r3, 1                                        |     r3++;
    0x0001d3c2 str r3, [r2, 0x14]                                |     *((r2 + 0x14)) = r3;
    0x0001d3c4 mov r3, r2                                        |     r3 = r2;
    0x0001d3c6 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x0001d3c8 cmp r3, r2                                        |     
                                                                 |     if (r3 == r2) {
    0x0001d3ca beq 0x1d3de                                       |         goto label_56;
                                                                 |     }
    0x0001d3cc ldr r1, [sp, 0x20]                                |     r1 = var_20h;
    0x0001d3ce ldr r3, [sp, 0x68]                                |     r3 = var_68h;
                                                                 |     do {
    0x0001d3d0 ldr r3, [r3, 0x10]                                |         r3 = *((r3 + 0x10));
    0x0001d3d2 ldr r2, [r3, 0x14]                                |         r2 = *((r3 + 0x14));
    0x0001d3d4 cmp r3, r1                                        |         
    0x0001d3d6 add.w r2, r2, 1                                   |         r2++;
    0x0001d3da str r2, [r3, 0x14]                                |         *((r3 + 0x14)) = r2;
    0x0001d3dc bne 0x1d3d0                                       |         
                                                                 |     } while (r3 != r1);
                                                                 | label_56:
    0x0001d3de movs r0, 1                                        |     r0 = 1;
    0x0001d3e0 add sp, 0x44                                      |     
    0x0001d3e2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_14:
    0x0001d3e6 ldr r0, [pc, 0x2f0]                               |     
    0x0001d3e8 mov r1, sl                                        |     r1 = sl;
    0x0001d3ea add r0, pc                                        |     r0 = 0x3aac8;
    0x0001d3ec blx 0x6164                                        |     r0 = fcn_00006164 ();
    0x0001d3f0 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0001d3f2 bne.w 0x1d504                                     |         goto label_57;
                                                                 |     }
    0x0001d3f6 ldr r3, [sp, 0x6c]                                |     r3 = var_6ch;
    0x0001d3f8 movs r2, 1                                        |     r2 = 1;
    0x0001d3fa str r2, [r3, 0x1c]                                |     *((r3 + 0x1c)) = r2;
    0x0001d3fc ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x0001d3fe ldr.w r7, [r3, 0x19c]                             |     r7 = *((r3 + 0x19c));
    0x0001d402 cmp r7, 0                                         |     
                                                                 |     if (r7 != 0) {
    0x0001d404 bne 0x1d482                                       |         goto label_58;
                                                                 |     }
                                                                 | label_13:
    0x0001d406 mov.w fp, 0                                       |     
                                                                 | label_53:
    0x0001d40a ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x0001d40c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0001d40e beq 0x1d316                                       |         goto label_8;
                                                                 |     }
    0x0001d410 movs r5, 0                                        |     r5 = 0;
                                                                 | label_20:
    0x0001d412 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0001d414 subs r4, r3, 0                                    |     r4 = r3 - 0;
    0x0001d416 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x0001d418 it ne                                             |     
                                                                 |     if (r4 == r3) {
    0x0001d41a movne r4, 1                                       |         r4 = 1;
                                                                 |     }
    0x0001d41c cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x0001d41e beq.w 0x1d0bc                                     |         goto label_11;
                                                                 |     }
    0x0001d422 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x0001d424 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0001d426 beq 0x1d33a                                       |         goto label_12;
                                                                 |     }
    0x0001d428 ldr r2, [pc, 0x2b0]                               |     
    0x0001d42a add r2, pc                                        |     r2 = 0x3ab0a;
                                                                 | label_52:
    0x0001d42c ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0001d42e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0001d430 beq.w 0x1d5c6                                     |         goto label_59;
                                                                 |     }
    0x0001d434 ldr r1, [pc, 0x2a8]                               |     
    0x0001d436 ldr r0, [sp, 0x38]                                |     r0 = var_38h;
    0x0001d438 strd sl, r6, [sp]                                 |     __asm ("strd sl, r6, [sp]");
    0x0001d43c add r1, pc                                        |     r1 = 0x3ab20;
    0x0001d43e bl 0x1ca34                                        |     fcn_0001ca34 (r0);
                                                                 | label_19:
    0x0001d442 ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x0001d444 movs r3, 1                                        |     r3 = 1;
    0x0001d446 strb r3, [r2, 0x11]                               |     *((r2 + 0x11)) = r3;
    0x0001d448 ldr r3, [sp, 0x68]                                |     r3 = var_68h;
    0x0001d44a ldr r2, [sp, 0x68]                                |     r2 = var_68h;
    0x0001d44c ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x0001d44e adds r3, 1                                        |     r3++;
    0x0001d450 str r3, [r2, 0x18]                                |     *((r2 + 0x18)) = r3;
    0x0001d452 b 0x1d0bc                                         |     goto label_11;
                                                                 | label_34:
    0x0001d454 ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x0001d456 ldr.w r3, [r2, 0x19c]                             |     r3 = *((r2 + 0x19c));
    0x0001d45a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0001d45c beq 0x1d406                                       |         goto label_13;
                                                                 |     }
    0x0001d45e ldrb.w r5, [r2, 0x1b4]                            |     r5 = *((r2 + 0x1b4));
    0x0001d462 cmp r5, 0x6d                                      |     
                                                                 |     if (r5 != 0x6d) {
    0x0001d464 bne 0x1d3e6                                       |         goto label_14;
                                                                 |     }
                                                                 | label_16:
    0x0001d466 ldr r0, [pc, 0x27c]                               |     
    0x0001d468 mov r1, sl                                        |     r1 = sl;
    0x0001d46a add r0, pc                                        |     r0 = 0x3ab54;
    0x0001d46c blx 0x6164                                        |     r0 = fcn_00006164 ();
    0x0001d470 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0001d472 bne 0x1d406                                       |         goto label_13;
                                                                 |     }
    0x0001d474 ldr r3, [sp, 0x6c]                                |     r3 = var_6ch;
    0x0001d476 str r0, [r3, 0x1c]                                |     *((r3 + 0x1c)) = r0;
    0x0001d478 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x0001d47a ldr.w r7, [r3, 0x19c]                             |     r7 = *((r3 + 0x19c));
    0x0001d47e cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x0001d480 beq 0x1d406                                       |         goto label_13;
                                                                 |     }
                                                                 | label_58:
    0x0001d482 ldrsh.w r2, [r7, 0x26]                            |     r2 = *((r7 + 0x26));
    0x0001d486 ldr r3, [r7, 0x44]                                |     r3 = *((r7 + 0x44));
    0x0001d488 cmp r2, 0                                         |     
    0x0001d48a str r3, [sp, 0x24]                                |     var_24h = r3;
    0x0001d48c ldr r3, [r7, 4]                                   |     r3 = *((r7 + 4));
                                                                 |     if (r2 <= 0) {
    0x0001d48e ble.w 0x1d5dc                                     |         goto label_60;
                                                                 |     }
    0x0001d492 add.w r8, r3, 0x18                                |     r8 = r3 + 0x18;
    0x0001d496 movs r5, 0                                        |     r5 = 0;
    0x0001d498 b 0x1d4a6                                         |     
                                                                 |     while (r0 != 0) {
    0x0001d49a ldrsh.w r3, [r7, 0x26]                            |         r3 = *((r7 + 0x26));
    0x0001d49e adds r5, 1                                        |         r5++;
    0x0001d4a0 cmp r3, r5                                        |         
                                                                 |         if (r3 <= r5) {
    0x0001d4a2 ble.w 0x1d5de                                     |             goto label_28;
                                                                 |         }
    0x0001d4a6 ldr r0, [r8, -0x18]                               |         r0 = *((r8 - 0x18));
    0x0001d4aa mov r1, r6                                        |         r1 = r6;
    0x0001d4ac add.w r8, r8, 0x18                                |         r8 += 0x18;
    0x0001d4b0 blx 0x6164                                        |         r0 = fcn_00006164 ();
    0x0001d4b4 cmp r0, 0                                         |         
    0x0001d4b6 bne 0x1d49a                                       |         
                                                                 |     }
    0x0001d4b8 ldrsh.w r2, [r7, 0x24]                            |     r2 = *((r7 + 0x24));
    0x0001d4bc ldrsh.w r3, [r7, 0x26]                            |     r3 = *((r7 + 0x26));
    0x0001d4c0 cmp r2, r5                                        |     
                                                                 |     if (r2 == r5) {
    0x0001d4c2 beq.w 0x1d6a0                                     |         goto label_61;
                                                                 |     }
    0x0001d4c6 cmp r5, r3                                        |     
                                                                 |     if (r5 >= r3) {
    0x0001d4c8 bge.w 0x1d5de                                     |         goto label_28;
                                                                 |     }
    0x0001d4cc ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x0001d4ce mov r8, r7                                        |     r8 = r7;
    0x0001d4d0 adds r3, 1                                        |     r3++;
    0x0001d4d2 str r3, [sp, 8]                                   |     var_8h = r3;
                                                                 | label_30:
    0x0001d4d4 ldr r3, [sp, 0x6c]                                |     r3 = var_6ch;
    0x0001d4d6 ldr r3, [r3, 0x1c]                                |     r3 = *((r3 + 0x1c));
    0x0001d4d8 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0001d4da bne.w 0x1d652                                     |         goto label_62;
                                                                 |     }
    0x0001d4de ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x0001d4e0 cmp r5, 0x1f                                      |     
    0x0001d4e2 ldr.w r2, [r3, 0x1ac]                             |     r2 = *((r3 + 0x1ac));
    0x0001d4e6 itte le                                           |     
                                                                 |     if (r5 > 0x1f) {
    0x0001d4e8 movle r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r5 > 0x1f) {
    0x0001d4ea lslle r3, r5                                      |         r3 <<= r5;
                                                                 |     }
                                                                 |     if (r5 <= 0x1f) {
    0x0001d4ec movgt r3, -1                                      |         r3 = -1;
                                                                 |     }
    0x0001d4f0 sxth r5, r5                                       |     __asm ("sxth r5, r5");
    0x0001d4f2 it le                                             |     
                                                                 |     if (r5 > 0x1f) {
    0x0001d4f4 orrle r3, r2                                      |         r3 |= r2;
                                                                 |     }
    0x0001d4f6 ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x0001d4f8 str.w r3, [r2, 0x1ac]                             |     __asm ("str.w r3, aav.0x000000ff");
    0x0001d4fc b 0x1d608                                         |     goto label_25;
                                                                 | label_50:
    0x0001d4fe mov.w fp, 1                                       |     
    0x0001d502 b 0x1d354                                         |     goto label_15;
                                                                 | label_57:
    0x0001d504 cmp r5, 0x6c                                      |     
                                                                 |     if (r5 == 0x6c) {
    0x0001d506 beq.w 0x1d406                                     |         goto label_13;
                                                                 |     }
    0x0001d50a b 0x1d466                                         |     goto label_16;
                                                                 | label_32:
    0x0001d50c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0001d50e beq.w 0x1d638                                     |         goto label_63;
                                                                 |     }
    0x0001d512 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0001d514 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x0001d516 str r3, [sp, 0x34]                                |     var_34h = r3;
    0x0001d518 b 0x1d032                                         |     goto label_0;
                                                                 | label_37:
    0x0001d51a ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x0001d51c ldr r5, [sp, 0x24]                                |     r5 = var_24h;
    0x0001d51e ldr r3, [r3]                                      |     r3 = *(r3);
    0x0001d520 ldr.w r2, [r3, 0x114]                             |     r2 = *((r3 + 0x114));
    0x0001d524 cmp r2, 0                                         |     
    0x0001d526 it ne                                             |     
                                                                 |     if (r2 == 0) {
    0x0001d528 cmpne r5, 0                                       |         __asm ("cmpne r5, 0");
                                                                 |         goto label_64;
                                                                 |     }
                                                                 |     if (r2 == 0) {
                                                                 | label_64:
    0x0001d52a beq.w 0x1d3ba                                     |         goto label_17;
                                                                 |     }
    0x0001d52e ldr r0, [r3, 0x14]                                |     r0 = *((r3 + 0x14));
    0x0001d530 cmp r0, 0                                         |     
                                                                 |     if (r0 <= 0) {
    0x0001d532 ble.w 0x1d6cc                                     |         goto label_65;
                                                                 |     }
    0x0001d536 ldr r2, [r3, 0x10]                                |     r2 = *((r3 + 0x10));
    0x0001d538 movs r3, 0                                        |     r3 = 0;
    0x0001d53a b 0x1d542                                         |     
                                                                 |     while (r1 != r5) {
    0x0001d53c adds r3, 1                                        |         r3++;
    0x0001d53e cmp r3, r0                                        |         
                                                                 |         if (r3 == r0) {
    0x0001d540 beq 0x1d54a                                       |             goto label_31;
                                                                 |         }
    0x0001d542 ldr r1, [r2, 0xc]                                 |         r1 = *((r2 + 0xc));
    0x0001d544 adds r2, 0x10                                     |         r2 += 0x10;
    0x0001d546 cmp r1, r5                                        |         
    0x0001d548 bne 0x1d53c                                       |         
                                                                 |     }
                                                                 | label_31:
    0x0001d54a ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x0001d54c cmp r4, 0x3e                                      |     
    0x0001d54e ldr r6, [r2, 4]                                   |     r6 = *((r2 + 4));
                                                                 |     if (r4 == 0x3e) {
    0x0001d550 beq 0x1d622                                       |         goto label_66;
                                                                 |     }
    0x0001d552 ldr r4, [r6]                                      |     r4 = *(r6);
    0x0001d554 cmp r4, 0                                         |     
                                                                 |     if (r4 <= 0) {
    0x0001d556 ble.w 0x1d3ba                                     |         goto label_17;
                                                                 |     }
    0x0001d55a ldr r2, [sp, 0x6c]                                |     r2 = var_6ch;
    0x0001d55c mov r1, r6                                        |     r1 = r6;
    0x0001d55e ldr r5, [r2, 0x1c]                                |     r5 = *((r2 + 0x1c));
    0x0001d560 movs r2, 0                                        |     r2 = 0;
    0x0001d562 b 0x1d56c                                         |     goto label_67;
                                                                 | label_18:
    0x0001d564 adds r2, 1                                        |     r2++;
    0x0001d566 cmp r2, r4                                        |     
                                                                 |     if (r2 == r4) {
    0x0001d568 beq.w 0x1d3ba                                     |         goto label_17;
                                                                 |     }
                                                                 | label_67:
    0x0001d56c ldr r0, [r1, 0x30]                                |     r0 = *((r1 + 0x30));
    0x0001d56e adds r1, 0x48                                     |     r1 += 0x48;
    0x0001d570 cmp r5, r0                                        |     
                                                                 |     if (r5 != r0) {
    0x0001d572 bne 0x1d564                                       |         goto label_18;
                                                                 |     }
    0x0001d574 add.w r2, r2, r2, lsl 3                           |     r2 += (r2 << 3);
    0x0001d578 add.w r6, r6, r2, lsl 3                           |     r6 += (r2 << 3);
    0x0001d57c ldr r1, [r6, 0x18]                                |     r1 = *((r6 + 0x18));
                                                                 | label_22:
    0x0001d57e ldr r2, [sp, 0x6c]                                |     r2 = var_6ch;
    0x0001d580 ldrsh.w r2, [r2, 0x20]                            |     r2 = *((r2 + 0x20));
    0x0001d584 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0001d586 beq.w 0x1d3ba                                     |         goto label_17;
                                                                 |     }
    0x0001d58a cmp r2, 0                                         |     
    0x0001d58c blt 0x1d62a                                       |     
                                                                 |     while (r2 >= 0) {
    0x0001d58e ldr r0, [r1, 4]                                   |         r0 = *((r1 + 4));
    0x0001d590 add.w r2, r2, r2, lsl 1                           |         r2 += (r2 << 1);
    0x0001d594 ldr.w r2, [r0, r2, lsl 3]                         |         offset_1 = r2 << 3;
                                                                 |         r2 = *((r0 + offset_1));
                                                                 | label_23:
    0x0001d598 ldr r1, [r1]                                      |         r1 = *(r1);
    0x0001d59a ldr r0, [sp, 0x38]                                |         r0 = var_38h;
    0x0001d59c bl 0x1ccc0                                        |         r0 = fcn_0001ccc0 (r0, r1, r2, r3);
    0x0001d5a0 cmp r0, 2                                         |         
    0x0001d5a2 ittt eq                                           |         
                                                                 |         if (r0 != 2) {
    0x0001d5a4 ldreq r2, [sp, 0x6c]                              |             r2 = var_6ch;
                                                                 |         }
                                                                 |         if (r0 != 2) {
    0x0001d5a6 moveq r3, 0x65                                    |             r3 = 0x65;
                                                                 |         }
                                                                 |         if (r0 != 2) {
    0x0001d5a8 strbeq r3, [r2]                                   |             *(r2) = r3;
                                                                 |         }
    0x0001d5aa b 0x1d3ba                                         |         goto label_17;
                                                                 | label_55:
    0x0001d5ac ldr r1, [pc, 0x138]                               |         
    0x0001d5ae mov r2, r8                                        |         r2 = r8;
    0x0001d5b0 ldr r0, [sp, 0x38]                                |         r0 = var_38h;
    0x0001d5b2 add r1, pc                                        |         r1 = 0x3ac9e;
    0x0001d5b4 bl 0x1ca34                                        |         fcn_0001ca34 (r0);
    0x0001d5b8 movs r0, 2                                        |         r0 = 2;
    0x0001d5ba add sp, 0x44                                      |         
    0x0001d5bc pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_39:
    0x0001d5c0 movs r3, 0                                        |         r3 = 0;
    0x0001d5c2 str r3, [sp, 0x24]                                |         var_24h = r3;
    0x0001d5c4 b 0x1d032                                         |         goto label_0;
                                                                 | label_59:
    0x0001d5c6 cmp.w sl, 0                                       |         
                                                                 |         if (sl == 0) {
    0x0001d5ca beq 0x1d6aa                                       |             goto label_68;
                                                                 |         }
                                                                 | label_24:
    0x0001d5cc ldr r1, [pc, 0x11c]                               |         
    0x0001d5ce mov r3, sl                                        |         r3 = sl;
    0x0001d5d0 ldr r0, [sp, 0x38]                                |         r0 = var_38h;
    0x0001d5d2 str r6, [sp]                                      |         *(sp) = r6;
    0x0001d5d4 add r1, pc                                        |         r1 = 0x3acc4;
    0x0001d5d6 bl 0x1ca34                                        |         fcn_0001ca34 (r0);
    0x0001d5da b 0x1d442                                         |         goto label_19;
                                                                 | label_60:
    0x0001d5dc movs r5, 0                                        |         r5 = 0;
                                                                 | label_28:
    0x0001d5de mov r0, r6                                        |         r0 = r6;
    0x0001d5e0 bl 0x12464                                        |         r0 = fcn_00012464 (r0);
                                                                 |         if (r0 != 0) {
    0x0001d5e4 cbz r0, 0x1d614                                   |             
    0x0001d5e6 ldrb.w r3, [r7, 0x2c]                             |             r3 = *((r7 + 0x2c));
    0x0001d5ea lsls r0, r3, 0x1a                                 |             r0 = r3 << 0x1a;
                                                                 |             if (r0 < r3) {
    0x0001d5ec bmi 0x1d614                                       |                 goto label_69;
                                                                 |             }
    0x0001d5ee ldrsh.w r3, [r7, 0x26]                            |             r3 = *((r7 + 0x26));
    0x0001d5f2 cmp r3, 0                                         |             
                                                                 |             if (r3 < 0) {
    0x0001d5f4 blt 0x1d61c                                       |                 goto label_70;
                                                                 |             }
                                                                 | label_27:
    0x0001d5f6 ldr r3, [sp, 8]                                   |             r3 = var_8h;
    0x0001d5f8 mov r8, r7                                        |             r8 = r7;
    0x0001d5fa adds r3, 1                                        |             r3++;
    0x0001d5fc str r3, [sp, 8]                                   |             var_8h = r3;
                                                                 | label_29:
    0x0001d5fe ldr r2, [sp, 0x6c]                                |             r2 = var_6ch;
    0x0001d600 mov.w r5, -1                                      |             r5 = -1;
    0x0001d604 movs r3, 0x64                                     |             r3 = 0x64;
    0x0001d606 strb r3, [r2, 1]                                  |             *((r2 + 1)) = r3;
                                                                 | label_25:
    0x0001d608 ldr r3, [sp, 0x6c]                                |             r3 = var_6ch;
    0x0001d60a strh r5, [r3, 0x20]                               |             *((r3 + 0x20)) = r5;
    0x0001d60c movs r5, 1                                        |             r5 = 1;
    0x0001d60e str.w r8, [r3, 0x2c]                              |             __asm ("str.w r8, [r3, 0x2c]");
    0x0001d612 b 0x1d412                                         |             goto label_20;
                                                                 |         }
                                                                 | label_69:
    0x0001d614 ldrsh.w r3, [r7, 0x26]                            |         r3 = *((r7 + 0x26));
    0x0001d618 cmp r3, r5                                        |         
                                                                 |         if (r3 > r5) {
    0x0001d61a bgt 0x1d6b8                                       |             goto label_71;
                                                                 |         }
                                                                 | label_70:
    0x0001d61c mov.w fp, 1                                       |         
    0x0001d620 b 0x1d078                                         |         goto label_21;
                                                                 | label_66:
    0x0001d622 ldr r2, [sp, 0x38]                                |         r2 = var_38h;
    0x0001d624 ldr.w r1, [r2, 0x19c]                             |         r1 = *((r2 + 0x19c));
    0x0001d628 b 0x1d57e                                         |         goto label_22;
    0x0001d62a ldrsh.w r2, [r1, 0x24]                            |         r2 = *((r1 + 0x24));
    0x0001d62e cmp r2, 0                                         |         
    0x0001d630 bge 0x1d58e                                       |         
                                                                 |     }
    0x0001d632 ldr r2, [pc, 0xbc]                                |     
    0x0001d634 add r2, pc                                        |     r2 = 0x3ad2a;
    0x0001d636 b 0x1d598                                         |     goto label_23;
                                                                 | label_63:
    0x0001d638 cmp.w sl, 0                                       |     
                                                                 |     if (sl != 0) {
    0x0001d63c beq 0x1d672                                       |         
    0x0001d63e ldr r3, [sp, 0x68]                                |         r3 = var_68h;
    0x0001d640 ldr r2, [pc, 0xb0]                                |         
    0x0001d642 mov r5, r3                                        |         r5 = r3;
    0x0001d644 mov r4, r3                                        |         r4 = r3;
    0x0001d646 add r2, pc                                        |         r2 = 0x3ad3e;
    0x0001d648 str r3, [sp, 0x20]                                |         var_20h = r3;
    0x0001d64a str r3, [sp, 0x10]                                |         var_10h = r3;
    0x0001d64c str r3, [sp, 0x24]                                |         var_24h = r3;
    0x0001d64e str r3, [sp, 8]                                   |         var_8h = r3;
    0x0001d650 b 0x1d5cc                                         |         goto label_24;
                                                                 | label_62:
    0x0001d652 ldr r3, [sp, 0x38]                                |         r3 = var_38h;
    0x0001d654 cmp r5, 0x1f                                      |         
    0x0001d656 ldr.w r2, [r3, 0x1b0]                             |         r2 = *((r3 + 0x1b0));
    0x0001d65a itte le                                           |         
                                                                 |         if (r5 > 0x1f) {
    0x0001d65c movle r3, 1                                       |             r3 = 1;
                                                                 |         }
                                                                 |         if (r5 > 0x1f) {
    0x0001d65e lslle r3, r5                                      |             r3 <<= r5;
                                                                 |         }
                                                                 |         if (r5 <= 0x1f) {
    0x0001d660 movgt r3, -1                                      |             r3 = -1;
                                                                 |         }
    0x0001d664 sxth r5, r5                                       |         __asm ("sxth r5, r5");
    0x0001d666 it le                                             |         
                                                                 |         if (r5 > 0x1f) {
    0x0001d668 orrle r3, r2                                      |             r3 |= r2;
                                                                 |         }
    0x0001d66a ldr r2, [sp, 0x38]                                |         r2 = var_38h;
    0x0001d66c str.w r3, [r2, 0x1b0]                             |         __asm ("str.w r3, aav.0x000000ff");
    0x0001d670 b 0x1d608                                         |         goto label_25;
                                                                 |     }
    0x0001d672 str.w sl, [sp, 0x10]                              |     __asm ("str.w sl, [var_10h]");
    0x0001d676 str.w sl, [sp, 0x24]                              |     __asm ("str.w sl, [var_24h]");
                                                                 | label_51:
    0x0001d67a ldr r3, [sp, 0x6c]                                |     r3 = var_6ch;
    0x0001d67c ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0001d67e ands r3, r3, 0x40                                 |     r3 &= 0x40;
                                                                 |     if (r3 == r3) {
    0x0001d682 bne 0x1d692                                       |         
    0x0001d684 ldr r2, [sp, 0x10]                                |         r2 = var_10h;
    0x0001d686 mov r5, r3                                        |         r5 = r3;
    0x0001d688 str r3, [sp, 0x20]                                |         var_20h = r3;
    0x0001d68a subs r4, r2, 0                                    |         r4 = r2 - 0;
    0x0001d68c it ne                                             |         
                                                                 |         if (r4 == r2) {
    0x0001d68e movne r4, 1                                       |             r4 = 1;
                                                                 |         }
    0x0001d690 b 0x1d33a                                         |         goto label_12;
                                                                 |     }
    0x0001d692 ldr r1, [sp, 0x6c]                                |     r1 = var_6ch;
    0x0001d694 movs r2, 0x61                                     |     r2 = 0x61;
    0x0001d696 movs r3, 0                                        |     r3 = 0;
    0x0001d698 movs r0, 1                                        |     r0 = 1;
    0x0001d69a strb r2, [r1]                                     |     *(r1) = r2;
    0x0001d69c str r3, [r1, 0x2c]                                |     *((r1 + 0x2c)) = r3;
    0x0001d69e b 0x1d12e                                         |     goto label_26;
                                                                 | label_61:
    0x0001d6a0 cmp r3, 0                                         |     
                                                                 |     if (r3 >= 0) {
    0x0001d6a2 bge 0x1d5f6                                       |         goto label_27;
                                                                 |     }
    0x0001d6a4 mov.w r5, -1                                      |     r5 = -1;
    0x0001d6a8 b 0x1d5de                                         |     goto label_28;
                                                                 | label_68:
    0x0001d6aa ldr r1, [pc, 0x4c]                                |     
    0x0001d6ac mov r3, r6                                        |     r3 = r6;
    0x0001d6ae ldr r0, [sp, 0x38]                                |     r0 = var_38h;
    0x0001d6b0 add r1, pc                                        |     r1 = 0x3adae;
    0x0001d6b2 bl 0x1ca34                                        |     fcn_0001ca34 (r0);
    0x0001d6b6 b 0x1d442                                         |     goto label_19;
                                                                 | label_71:
    0x0001d6b8 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x0001d6ba adds r1, r5, 1                                    |     r1 = r5 + 1;
    0x0001d6bc mov r8, r7                                        |     r8 = r7;
    0x0001d6be add.w r3, r3, 1                                   |     r3++;
    0x0001d6c2 str r3, [sp, 8]                                   |     var_8h = r3;
                                                                 |     if (r1 == r5) {
    0x0001d6c4 beq 0x1d5fe                                       |         goto label_29;
                                                                 |     }
    0x0001d6c6 b 0x1d4d4                                         |     goto label_30;
                                                                 | label_38:
    0x0001d6c8 str r4, [sp, 0x24]                                |     var_24h = r4;
    0x0001d6ca b 0x1d032                                         |     goto label_0;
                                                                 | label_65:
    0x0001d6cc movs r3, 0                                        |     r3 = 0;
    0x0001d6ce b 0x1d54a                                         |     goto label_31;
                                                                 | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1d7fc */
                                                                     | #include <stdint.h>
                                                                     |  
                                                                     | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                     |  
    ; (fcn) fcn.0001d7fc ()                                          | void fcn_0001d7fc (int16_t arg_48h, 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;
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
                                                                     |     r2 = arg3;
                                                                     |     r3 = arg4;
    0x0001d7fc push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0001d800 sub sp, 0x24                                          |     
    0x0001d802 ldr.w r4, [r0, 0x1e4]                                 |     r4 = *(arg_48hx1e4);
    0x0001d806 mov sl, r2                                            |     sl = r2;
    0x0001d808 mov r5, r1                                            |     r5 = r1;
    0x0001d80a mov r7, r3                                            |     r7 = r3;
    0x0001d80c ldr r2, [sp, 0x48]                                    |     r2 = *(arg_48h);
    0x0001d80e ldr.w r8, [r0]                                        |     r8 = *(r0);
    0x0001d812 str r0, [sp, 4]                                       |     var_4h = r0;
    0x0001d814 str r2, [sp, 0xc]                                     |     var_ch = r2;
    0x0001d816 cmp r4, 0                                             |     
                                                                     |     if (r4 == 0) {
    0x0001d818 beq.w 0x1da02                                         |         goto label_11;
                                                                     |     }
    0x0001d81c ldr r3, [sp, 4]                                       |     r3 = var_4h;
    0x0001d81e ldrb.w r6, [r3, 0x1c3]                                |     r6 = *((r3 + 0x1c3));
    0x0001d822 cmp r6, 0                                             |     
                                                                     |     if (r6 != 0) {
    0x0001d824 bne.w 0x1da02                                         |         goto label_11;
                                                                     |     }
    0x0001d828 cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x0001d82a beq.w 0x1da26                                         |         goto label_12;
                                                                     |     }
    0x0001d82e ldr r3, [r1]                                          |     r3 = *(r1);
    0x0001d830 str r3, [sp, 8]                                       |     var_8h = r3;
    0x0001d832 cmp r7, 0                                             |     
                                                                     |     if (r7 == 0) {
    0x0001d834 beq.w 0x1da8e                                         |         goto label_13;
                                                                     |     }
    0x0001d838 ldr.w lr, [r7]                                        |     
    0x0001d83c cmp lr, r3                                            |     
                                                                     |     if (lr != r3) {
    0x0001d83e bne.w 0x1da48                                         |         goto label_14;
                                                                     |     }
    0x0001d842 ldr.w r3, [sl, 4]                                     |     r3 = *((sl + 4));
    0x0001d846 cmp.w lr, 0                                           |     
    0x0001d84a add.w r3, r3, lr, lsl 3                               |     r3 += (lr << 3);
    0x0001d84e add.w r1, r3, 0x25                                    |     r1 = r3 + 0x25;
                                                                     |     if (lr <= 0) {
    0x0001d852 ble 0x1d88a                                           |         goto label_9;
                                                                     |     }
                                                                     | label_4:
    0x0001d854 ldr.w ip, [r7, 4]                                     |     ip = *((r7 + 4));
    0x0001d858 movs r6, 0                                            |     r6 = 0;
                                                                     | label_0:
    0x0001d85a ldr.w r0, [ip, 4]                                     |     r0 = *((ip + 4));
    0x0001d85e cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0001d860 beq.w 0x1da22                                         |         goto label_15;
                                                                     |     }
    0x0001d864 ldrb r3, [r0]                                         |     r3 = *(r0);
    0x0001d866 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0001d868 beq.w 0x1da22                                         |         goto label_15;
                                                                     |     }
    0x0001d86c mov r3, r0                                            |     r3 = r0;
                                                                     |     do {
    0x0001d86e ldrb r2, [r3, 1]!                                     |         r2 = *((r3 += 1));
    0x0001d872 cmp r2, 0                                             |         
    0x0001d874 bne 0x1d86e                                           |         
                                                                     |     } while (r2 != 0);
    0x0001d876 subs r3, r3, r0                                       |     r3 -= r0;
    0x0001d878 bic r3, r3, 0xc0000000                                |     r3 = BIT_MASK (r3, 0xc0000000);
    0x0001d87c adds r3, 1                                            |     r3++;
                                                                     | label_3:
    0x0001d87e adds r6, 1                                            |     r6++;
    0x0001d880 add r1, r3                                            |     r1 += r3;
    0x0001d882 cmp r6, lr                                            |     
    0x0001d884 add.w ip, ip, 0x14                                    |     
                                                                     |     if (r6 < lr) {
    0x0001d888 blt 0x1d85a                                           |         goto label_0;
                                                                     |     }
                                                                     | label_9:
    0x0001d88a mov r0, r8                                            |     r0 = r8;
    0x0001d88c bl 0xdb58                                             |     r0 = fcn_0000db58 (r0, r1);
    0x0001d890 mov r6, r0                                            |     r6 = r0;
    0x0001d892 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0001d894 beq.w 0x1da02                                         |         goto label_11;
                                                                     |     }
    0x0001d898 ldr r3, [r4, 0x10]                                    |     r3 = *((r4 + 0x10));
    0x0001d89a mov.w sb, 0                                           |     sb = 0;
    0x0001d89e str r4, [r0]                                          |     *(r0) = r4;
    0x0001d8a0 str r3, [r0, 4]                                       |     *((r0 + 4)) = r3;
    0x0001d8a2 ldr r3, [sp, 8]                                       |     r3 = var_8h;
    0x0001d8a4 add.w r3, r0, r3, lsl 3                               |     r3 = r0 + (r3 << 3);
    0x0001d8a8 add.w r2, r3, 0x24                                    |     r2 = r3 + 0x24;
    0x0001d8ac mov r3, r2                                            |     r3 = r2;
    0x0001d8ae str r2, [r0, 8]                                       |     *((r0 + 8)) = r2;
    0x0001d8b0 str r2, [sp, 0x1c]                                    |     var_1ch = r2;
    0x0001d8b2 mov r0, r3                                            |     r0 = r3;
    0x0001d8b4 ldrd r1, r2, [sl]                                     |     __asm ("ldrd r1, r2, [sl]");
    0x0001d8b8 mov fp, r3                                            |     
    0x0001d8ba blx 0x6214                                            |     fcn_00006214 ();
    0x0001d8be ldr.w r3, [sl, 4]                                     |     r3 = *((sl + 4));
    0x0001d8c2 mov r0, fp                                            |     r0 = fp;
    0x0001d8c4 strb.w sb, [fp, r3]                                   |     *((fp + r3)) = sb;
    0x0001d8c8 bl 0xadf4                                             |     fcn_0000adf4 (r0);
    0x0001d8cc ldr.w r2, [sl, 4]                                     |     r2 = *((sl + 4));
    0x0001d8d0 ldr r3, [sp, 8]                                       |     r3 = var_8h;
    0x0001d8d2 str r2, [sp, 0x18]                                    |     var_18h = r2;
    0x0001d8d4 str r3, [r6, 0x14]                                    |     *((r6 + 0x14)) = r3;
    0x0001d8d6 cmp r5, 0                                             |     
                                                                     |     if (r5 == 0) {
    0x0001d8d8 beq.w 0x1da52                                         |         goto label_16;
                                                                     |     }
    0x0001d8dc cmp r3, sb                                            |     
                                                                     |     if (r3 <= sb) {
    0x0001d8de ble 0x1d9bc                                           |         goto label_6;
                                                                     |     }
    0x0001d8e0 ldrsh.w r2, [r4, 0x26]                                |     r2 = *((r4 + 0x26));
    0x0001d8e4 add.w r3, r6, 0x24                                    |     r3 = r6 + 0x24;
    0x0001d8e8 ldr.w fp, [sp, 8]                                     |     fp = var_8h;
    0x0001d8ec mov sl, sb                                            |     sl = sb;
    0x0001d8ee str r6, [sp, 0x10]                                    |     var_10h = r6;
    0x0001d8f0 mov r6, r4                                            |     r6 = r4;
    0x0001d8f2 str r7, [sp, 0x14]                                    |     var_14h = r7;
    0x0001d8f4 mov r1, r2                                            |     r1 = r2;
    0x0001d8f6 mov r7, r5                                            |     r7 = r5;
    0x0001d8f8 mov r5, r3                                            |     r5 = r3;
                                                                     | label_1:
    0x0001d8fa cmp r1, 0                                             |     
                                                                     |     if (r1 <= 0) {
    0x0001d8fc ble.w 0x1da68                                         |         goto label_17;
                                                                     |     }
    0x0001d900 movs r4, 0                                            |     r4 = 0;
    0x0001d902 b 0x1d910                                             |     
                                                                     |     while (r0 != 0) {
    0x0001d904 ldrsh.w r3, [r6, 0x26]                                |         r3 = *((r6 + 0x26));
    0x0001d908 adds r4, 1                                            |         r4++;
    0x0001d90a cmp r3, r4                                            |         
                                                                     |         if (r3 <= r4) {
    0x0001d90c ble.w 0x1da68                                         |             goto label_17;
                                                                     |         }
    0x0001d910 ldr r3, [r7, 4]                                       |         r3 = *((r7 + 4));
    0x0001d912 add.w r1, r4, r4, lsl 1                               |         r1 = r4 + (r4 << 1);
    0x0001d916 ldr r2, [r6, 4]                                       |         r2 = *((r6 + 4));
    0x0001d918 add r3, sb                                            |         r3 += sb;
    0x0001d91a ldr.w r0, [r2, r1, lsl 3]                             |         offset_0 = r1 << 3;
                                                                     |         r0 = *((r2 + offset_0));
    0x0001d91e ldr r1, [r3, 4]                                       |         r1 = *((r3 + 4));
    0x0001d920 blx 0x6164                                            |         r0 = fcn_00006164 ();
    0x0001d924 cmp r0, 0                                             |         
    0x0001d926 bne 0x1d904                                           |         
                                                                     |     }
    0x0001d928 ldrsh.w r1, [r6, 0x26]                                |     r1 = *((r6 + 0x26));
    0x0001d92c str.w r4, [r5, sl, lsl 3]                             |     __asm ("str.w r4, [r5, sl, lsl 3]");
    0x0001d930 cmp r1, r4                                            |     
                                                                     |     if (r1 <= r4) {
    0x0001d932 ble.w 0x1da68                                         |         goto label_17;
                                                                     |     }
    0x0001d936 add.w sl, sl, 1                                       |     sl++;
    0x0001d93a add.w sb, sb, 0x14                                    |     sb += 0x14;
    0x0001d93e cmp sl, fp                                            |     
                                                                     |     if (sl != fp) {
    0x0001d940 bne 0x1d8fa                                           |         goto label_1;
                                                                     |     }
    0x0001d942 mov r5, r7                                            |     r5 = r7;
    0x0001d944 ldr r7, [sp, 0x14]                                    |     r7 = var_14h;
    0x0001d946 mov r4, r6                                            |     r4 = r6;
    0x0001d948 ldr r6, [sp, 0x10]                                    |     r6 = var_10h;
    0x0001d94a cmp r7, 0                                             |     
                                                                     |     if (r7 == 0) {
    0x0001d94c beq 0x1d9bc                                           |         goto label_6;
                                                                     |     }
                                                                     | label_7:
    0x0001d94e ldr r3, [sp, 0x18]                                    |     r3 = var_18h;
    0x0001d950 mov.w sb, 0                                           |     sb = 0;
    0x0001d954 ldr r2, [sp, 0x1c]                                    |     r2 = var_1ch;
    0x0001d956 mov fp, sb                                            |     
    0x0001d958 strd r8, r4, [sp, 0x10]                               |     __asm ("strd r8, r4, [var_10h]");
    0x0001d95c adds r3, 1                                            |     r3++;
    0x0001d95e ldr.w r8, [sp, 8]                                     |     r8 = var_8h;
    0x0001d962 add r2, r3                                            |     r2 += r3;
    0x0001d964 str r6, [sp, 4]                                       |     var_4h = r6;
    0x0001d966 mov r3, r2                                            |     r3 = r2;
    0x0001d968 add.w r2, r6, 0x28                                    |     r2 = r6 + 0x28;
    0x0001d96c mov sl, r2                                            |     sl = r2;
                                                                     | label_2:
    0x0001d96e ldr r2, [r7, 4]                                       |     r2 = *((r7 + 4));
    0x0001d970 add r2, sb                                            |     r2 += sb;
    0x0001d972 ldr r1, [r2, 4]                                       |     r1 = *((r2 + 4));
    0x0001d974 cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x0001d976 beq.w 0x1da80                                         |         goto label_18;
                                                                     |     }
    0x0001d97a ldrb r2, [r1]                                         |     r2 = *(r1);
    0x0001d97c cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0001d97e beq.w 0x1da88                                         |         goto label_19;
                                                                     |     }
    0x0001d982 mov r2, r1                                            |     r2 = r1;
                                                                     |     do {
    0x0001d984 ldrb r0, [r2, 1]!                                     |         r0 = *((r2 += 1));
    0x0001d988 cmp r0, 0                                             |         
    0x0001d98a bne 0x1d984                                           |         
                                                                     |     } while (r0 != 0);
    0x0001d98c subs r2, r2, r1                                       |     r2 -= r1;
    0x0001d98e bic r2, r2, 0xc0000000                                |     r2 = BIT_MASK (r2, 0xc0000000);
    0x0001d992 adds r4, r3, r2                                       |     r4 = r3 + r2;
    0x0001d994 adds r6, r2, 1                                        |     r6 = r2 + 1;
                                                                     | label_8:
    0x0001d996 str.w r3, [sl, fp, lsl 3]                             |     __asm ("str.w r3, [sl, fp, lsl 3]");
    0x0001d99a mov r0, r3                                            |     r0 = r3;
    0x0001d99c add.w fp, fp, 1                                       |     
    0x0001d9a0 add.w sb, sb, 0x14                                    |     sb += 0x14;
    0x0001d9a4 blx 0x6214                                            |     fcn_00006214 ();
    0x0001d9a8 cmp fp, r8                                            |     
    0x0001d9aa mov r3, r0                                            |     r3 = r0;
    0x0001d9ac mov.w r2, 0                                           |     r2 = 0;
    0x0001d9b0 add r3, r6                                            |     r3 += r6;
    0x0001d9b2 strb r2, [r4]                                         |     *(r4) = r2;
                                                                     |     if (fp < r8) {
    0x0001d9b4 blt 0x1d96e                                           |         goto label_2;
                                                                     |     }
    0x0001d9b6 ldr r6, [sp, 4]                                       |     r6 = var_4h;
    0x0001d9b8 ldrd r8, r4, [sp, 0x10]                               |     __asm ("ldrd r8, r4, [var_10h]");
                                                                     | label_6:
    0x0001d9bc ldr r3, [sp, 0xc]                                     |     r3 = var_ch;
    0x0001d9be ldr r1, [r6, 8]                                       |     r1 = *((r6 + 8));
    0x0001d9c0 strb r3, [r6, 0x19]                                   |     *((r6 + 0x19)) = r3;
    0x0001d9c2 asrs r3, r3, 8                                        |     r3 >>= 8;
    0x0001d9c4 strb r3, [r6, 0x1a]                                   |     *((r6 + 0x1a)) = r3;
    0x0001d9c6 movs r3, 0                                            |     r3 = 0;
    0x0001d9c8 strb r3, [r6, 0x18]                                   |     *((r6 + 0x18)) = r3;
    0x0001d9ca ldr r3, [r4, 0x44]                                    |     r3 = *((r4 + 0x44));
    0x0001d9cc add.w r0, r3, 0x38                                    |     r0 = r3 + 0x38;
    0x0001d9d0 cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x0001d9d2 beq 0x1daaa                                           |         goto label_20;
                                                                     |     }
    0x0001d9d4 ldrb r2, [r1]                                         |     r2 = *(r1);
                                                                     |     if (r2 == 0) {
    0x0001d9d6 cbz r2, 0x1d9e8                                       |         goto label_10;
                                                                     |     }
    0x0001d9d8 mov r3, r1                                            |     r3 = r1;
                                                                     |     do {
    0x0001d9da ldrb r2, [r3, 1]!                                     |         r2 = *((r3 += 1));
    0x0001d9de cmp r2, 0                                             |         
    0x0001d9e0 bne 0x1d9da                                           |         
                                                                     |     } while (r2 != 0);
    0x0001d9e2 subs r3, r3, r1                                       |     r3 -= r1;
    0x0001d9e4 bic r2, r3, 0xc0000000                                |     r2 = BIT_MASK (r3, 0xc0000000);
                                                                     | label_10:
    0x0001d9e8 mov r3, r6                                            |     r3 = r6;
    0x0001d9ea bl 0x128cc                                            |     r0 = fcn_000128cc (r0, r1, r2, r3, r4, r5);
    0x0001d9ee cmp r6, r0                                            |     
    0x0001d9f0 itt eq                                                |     
                                                                     |     if (r6 != r0) {
    0x0001d9f2 moveq r3, 1                                           |         r3 = 1;
                                                                     |     }
                                                                     |     if (r6 != r0) {
    0x0001d9f4 strbeq r3, [r8, 0x40]                                 |         *((r8 + 0x40)) = r3;
                                                                     |     }
                                                                     |     if (r6 == r0) {
    0x0001d9f8 beq 0x1da04                                           |         goto label_5;
                                                                     |     }
                                                                     |     if (r0 != 0) {
    0x0001d9fa cbz r0, 0x1da00                                       |         
    0x0001d9fc str r0, [r6, 0xc]                                     |         *((r6 + 0xc)) = r0;
    0x0001d9fe str r6, [r0, 0x10]                                    |         *((r0 + 0x10)) = r6;
                                                                     |     }
    0x0001da00 str r6, [r4, 0x10]                                    |     *((r4 + 0x10)) = r6;
                                                                     |     do {
                                                                     | label_11:
    0x0001da02 movs r6, 0                                            |         r6 = 0;
                                                                     | label_5:
    0x0001da04 mov r1, r6                                            |         r1 = r6;
    0x0001da06 mov r0, r8                                            |         r0 = r8;
    0x0001da08 bl 0xe12c                                             |         fcn_0000e12c (r0, r1);
    0x0001da0c mov r1, r5                                            |         r1 = r5;
    0x0001da0e mov r0, r8                                            |         r0 = r8;
    0x0001da10 bl 0x12ec8                                            |         fcn_00012ec8 (r0);
    0x0001da14 mov r1, r7                                            |         r1 = r7;
    0x0001da16 mov r0, r8                                            |         r0 = r8;
    0x0001da18 add sp, 0x24                                          |         
    0x0001da1a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}            |         
    0x0001da1e b.w 0x12ec8                                           |         void (*0x12ec8)() ();
                                                                     | label_15:
    0x0001da22 movs r3, 1                                            |         r3 = 1;
    0x0001da24 b 0x1d87e                                             |         goto label_3;
                                                                     | label_12:
    0x0001da26 ldrsh.w r3, [r4, 0x26]                                |         r3 = *((r4 + 0x26));
    0x0001da2a subs r3, 1                                            |         r3--;
    0x0001da2c bmi 0x1da02                                           |         
                                                                     |     } while (r3 < 1);
    0x0001da2e cmp r7, 0                                             |     
                                                                     |     if (r7 == 0) {
    0x0001da30 beq 0x1da9e                                           |         goto label_21;
                                                                     |     }
    0x0001da32 ldr.w lr, [r7]                                        |     
    0x0001da36 cmp.w lr, 1                                           |     
                                                                     |     if (lr != 1) {
    0x0001da3a bne 0x1daae                                           |         goto label_22;
                                                                     |     }
    0x0001da3c ldr.w r1, [sl, 4]                                     |     r1 = *((sl + 4));
    0x0001da40 str.w lr, [sp, 8]                                     |     __asm ("str.w lr, [var_8h]");
    0x0001da44 adds r1, 0x2d                                         |     r1 += 0x2d;
    0x0001da46 b 0x1d854                                             |     goto label_4;
                                                                     | label_14:
    0x0001da48 ldr r1, [pc, 0x7c]                                    |     
    0x0001da4a add r1, pc                                            |     r1 = 0x3b516;
    0x0001da4c bl 0x1ca34                                            |     fcn_0001ca34 (r0);
    0x0001da50 b 0x1da04                                             |     goto label_5;
                                                                     | label_16:
    0x0001da52 ldrsh.w r3, [r4, 0x26]                                |     r3 = *((r4 + 0x26));
    0x0001da56 subs r3, 1                                            |     r3--;
    0x0001da58 str r3, [r6, 0x24]                                    |     *((r6 + 0x24)) = r3;
    0x0001da5a cmp r7, 0                                             |     
                                                                     |     if (r7 == 0) {
    0x0001da5c beq 0x1d9bc                                           |         goto label_6;
                                                                     |     }
    0x0001da5e ldr r3, [sp, 8]                                       |     r3 = var_8h;
    0x0001da60 cmp r3, 0                                             |     
                                                                     |     if (r3 > 0) {
    0x0001da62 bgt.w 0x1d94e                                         |         goto label_7;
                                                                     |     }
    0x0001da66 b 0x1d9bc                                             |     goto label_6;
                                                                     | label_17:
    0x0001da68 mov r5, r7                                            |     r5 = r7;
    0x0001da6a ldr r1, [pc, 0x60]                                    |     
    0x0001da6c ldr r3, [r5, 4]                                       |     r3 = *((r5 + 4));
    0x0001da6e ldr r0, [sp, 4]                                       |     r0 = var_4h;
    0x0001da70 add r1, pc                                            |     r1 = 0x3b542;
    0x0001da72 ldr r6, [sp, 0x10]                                    |     r6 = var_10h;
    0x0001da74 add r3, sb                                            |     r3 += sb;
    0x0001da76 ldr r7, [sp, 0x14]                                    |     r7 = var_14h;
    0x0001da78 ldr r2, [r3, 4]                                       |     r2 = *((r3 + 4));
    0x0001da7a bl 0x1ca34                                            |     fcn_0001ca34 (r0);
    0x0001da7e b 0x1da04                                             |     goto label_5;
                                                                     | label_18:
    0x0001da80 mov r4, r3                                            |     r4 = r3;
    0x0001da82 movs r6, 1                                            |     r6 = 1;
    0x0001da84 mov r2, r1                                            |     r2 = r1;
    0x0001da86 b 0x1d996                                             |     goto label_8;
                                                                     | label_19:
    0x0001da88 mov r4, r3                                            |     r4 = r3;
    0x0001da8a movs r6, 1                                            |     r6 = 1;
    0x0001da8c b 0x1d996                                             |     goto label_8;
                                                                     | label_13:
    0x0001da8e ldr.w r3, [sl, 4]                                     |     r3 = *((sl + 4));
    0x0001da92 ldr r2, [sp, 8]                                       |     r2 = var_8h;
    0x0001da94 add.w r3, r3, r2, lsl 3                               |     r3 += (r2 << 3);
    0x0001da98 add.w r1, r3, 0x25                                    |     r1 = r3 + 0x25;
    0x0001da9c b 0x1d88a                                             |     goto label_9;
                                                                     | label_21:
    0x0001da9e ldr.w r1, [sl, 4]                                     |     r1 = *((sl + 4));
    0x0001daa2 movs r3, 1                                            |     r3 = 1;
    0x0001daa4 str r3, [sp, 8]                                       |     var_8h = r3;
    0x0001daa6 adds r1, 0x2d                                         |     r1 += 0x2d;
    0x0001daa8 b 0x1d88a                                             |     goto label_9;
                                                                     | label_20:
    0x0001daaa mov r2, r1                                            |     r2 = r1;
    0x0001daac b 0x1d9e8                                             |     goto label_10;
                                                                     | label_22:
    0x0001daae ldr r2, [r4, 4]                                       |     r2 = *((r4 + 4));
    0x0001dab0 add.w r3, r3, r3, lsl 1                               |     r3 += (r3 << 1);
    0x0001dab4 ldr r1, [pc, 0x18]                                    |     
    0x0001dab6 mov r6, r5                                            |     r6 = r5;
    0x0001dab8 ldr.w r2, [r2, r3, lsl 3]                             |     offset_1 = r3 << 3;
                                                                     |     r2 = *((r2 + offset_1));
    0x0001dabc mov r3, sl                                            |     r3 = sl;
    0x0001dabe add r1, pc                                            |     r1 = 0x3b592;
    0x0001dac0 bl 0x1ca34                                            |     fcn_0001ca34 (r0);
    0x0001dac4 b 0x1da04                                             |     goto label_5;
                                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1dee8 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.0001dee8 ()                                      | void fcn_0001dee8 (int16_t arg_150h, int16_t arg_2a0h, 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;
                                                                 |     int32_t var_1ch;
                                                                 |     int32_t var_1ch_2;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_0h_2;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x0001dee8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x0001deec sub sp, 0x2c                                      |     
    0x0001deee str r2, [sp, 0x14]                                |     var_14h = r2;
    0x0001def0 mov r6, r2                                        |     r6 = r2;
    0x0001def2 mov r4, r3                                        |     r4 = r3;
    0x0001def4 mov.w r8, 0                                       |     r8 = 0;
    0x0001def8 ldr r2, [pc, 0xf8]                                |     
    0x0001defa mov r5, r1                                        |     r5 = r1;
    0x0001defc strd r3, r0, [sp, 8]                              |     __asm ("strd r3, r0, [var_8h]");
    0x0001df00 mov sb, r8                                        |     sb = r8;
    0x0001df02 ldr r3, [pc, 0xf4]                                |     r3 = *(0x1dffa);
    0x0001df04 add r2, pc                                        |     r2 = 0x3befc;
    0x0001df06 ldr.w sl, [pc, 0xf4]                              |     sl = *(0x0001dffc);
    0x0001df0a str r1, [sp, 0x10]                                |     var_10h = r1;
    0x0001df0c ldr r3, [r2, r3]                                  |     
    0x0001df0e movs r2, 7                                        |     r2 = 7;
    0x0001df10 ldr r7, [pc, 0xec]                                |     
    0x0001df12 add sl, pc                                        |     sl += pc;
    0x0001df14 add.w fp, sl, 0x9f0                               |     
    0x0001df18 ldr r3, [r3]                                      |     r3 = *(0x3befc);
    0x0001df1a str r3, [sp, 0x24]                                |     var_24h = r3;
    0x0001df1c mov.w r3, 0                                       |     r3 = 0;
    0x0001df20 strd r6, r4, [sp, 0x1c]                           |     __asm ("strd r6, r4, [var_1ch]");
    0x0001df24 add r7, pc                                        |     r7 = 0x3bf28;
    0x0001df26 mov r4, r8                                        |     r4 = r8;
    0x0001df28 b 0x1df3a                                         |     
                                                                 |     while (r3 != r2) {
                                                                 | label_0:
    0x0001df2a adds r4, 1                                        |         r4++;
    0x0001df2c cmp r4, 7                                         |         
                                                                 |         if (r4 == 7) {
    0x0001df2e beq 0x1df7a                                       |             goto label_4;
                                                                 |         }
    0x0001df30 add.w r3, r4, r4, lsl 1                           |         r3 = r4 + (r4 << 1);
    0x0001df34 add r3, r7                                        |         r3 += r7;
    0x0001df36 ldrb.w r2, [r3, 0x9d9]                            |         r2 = *((r3 + 0x9d9));
                                                                 | label_1:
    0x0001df3a ldr r3, [r5, 4]                                   |         r3 = *((r5 + 4));
    0x0001df3c cmp r3, r2                                        |         
    0x0001df3e bne 0x1df2a                                       |         
                                                                 |     }
    0x0001df40 add.w r6, r4, r4, lsl 1                           |     r6 = r4 + (r4 << 1);
    0x0001df44 ldr r0, [r5]                                      |     r0 = *(r5);
    0x0001df46 add r6, sl                                        |     r6 += sl;
    0x0001df48 ldrb.w r1, [r6, 0x9d8]                            |     r1 = *((r6 + 0x9d8));
    0x0001df4c add r1, fp                                        |     r1 += fp;
    0x0001df4e blx 0x5db4                                        |     r0 = fcn_00005db4 ();
    0x0001df52 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0001df54 bne 0x1df2a                                       |         goto label_0;
                                                                 |     }
    0x0001df56 ldrb.w r3, [r6, 0x9da]                            |     r3 = *((r6 + 0x9da));
    0x0001df5a add.w r8, r8, 1                                   |     r8++;
    0x0001df5e cmp.w r8, 3                                       |     
    0x0001df62 orr.w sb, sb, r3                                  |     sb |= r3;
                                                                 |     if (r8 != 3) {
    0x0001df66 beq 0x1df7e                                       |         
    0x0001df68 add r3, sp, 0x28                                  |         r3 += var_28h;
    0x0001df6a add.w r3, r3, r8, lsl 2                           |         r3 += (r8 << 2);
    0x0001df6e ldr r5, [r3, -0x10]                               |         r5 = var_1ch;
                                                                 |         if (r5 == 0) {
    0x0001df72 cbz r5, 0x1df7e                                   |             goto label_5;
                                                                 |         }
    0x0001df74 mov r4, r0                                        |         r4 = r0;
    0x0001df76 movs r2, 7                                        |         r2 = 7;
    0x0001df78 b 0x1df3a                                         |         goto label_1;
                                                                 | label_4:
    0x0001df7a orr sb, sb, 0x40                                  |         sb |= 0x40;
                                                                 |     }
                                                                 | label_5:
    0x0001df7e and r2, sb, 0x21                                  |     r2 = sb & 0x21;
    0x0001df82 cmp r2, 0x21                                      |     
                                                                 |     if (r2 != 0x21) {
    0x0001df84 beq 0x1df8c                                       |         
    0x0001df86 tst.w sb, 0x40                                    |         
                                                                 |         if ((sb & 0x40) == 0) {
    0x0001df8a beq 0x1dfc8                                       |             goto label_6;
                                                                 |         }
                                                                 |     }
    0x0001df8c ldr r3, [sp, 8]                                   |     r3 = var_8h;
                                                                 |     if (r3 == 0) {
    0x0001df8e cbz r3, 0x1dfe6                                   |         goto label_7;
                                                                 |     }
    0x0001df90 ldr r4, [pc, 0x70]                                |     
    0x0001df92 add r4, pc                                        |     r4 = 0x3bf9a;
                                                                 | label_3:
    0x0001df94 ldrd r1, r0, [sp, 8]                              |     __asm ("ldrd r1, r0, [var_8h]");
    0x0001df98 mov.w sb, 1                                       |     sb = 1;
    0x0001df9c ldrd r2, r3, [sp, 0x10]                           |     __asm ("ldrd r2, r3, [var_14h]");
    0x0001dfa0 str r4, [sp]                                      |     *(sp) = r4;
    0x0001dfa2 str r1, [sp, 4]                                   |     var_4h = r1;
    0x0001dfa4 ldr r1, [pc, 0x60]                                |     
    0x0001dfa6 add r1, pc                                        |     r1 = 0x3bfb2;
    0x0001dfa8 bl 0x1ca34                                        |     fcn_0001ca34 (r0);
                                                                 |     do {
                                                                 | label_2:
    0x0001dfac ldr r1, [pc, 0x5c]                                |         
    0x0001dfae ldr r2, [pc, 0x48]                                |         r2 = *(0x1dffa);
    0x0001dfb0 add r1, pc                                        |         r1 = 0x3bfc0;
    0x0001dfb2 ldr r2, [r1, r2]                                  |         r2 = *(0x3bfc0);
    0x0001dfb4 ldr r1, [r2]                                      |         r1 = *(0x3bfc0);
    0x0001dfb6 ldr r2, [sp, 0x24]                                |         r2 = var_24h;
    0x0001dfb8 eors r1, r2                                       |         r1 ^= r2;
    0x0001dfba mov.w r2, 0                                       |         r2 = 0;
                                                                 |         if (r1 != r2) {
    0x0001dfbe bne 0x1dfee                                       |             goto label_8;
                                                                 |         }
    0x0001dfc0 mov r0, sb                                        |         r0 = sb;
    0x0001dfc2 add sp, 0x2c                                      |         
    0x0001dfc4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_6:
    0x0001dfc8 tst.w sb, 0x20                                    |         
    0x0001dfcc beq 0x1dfac                                       |         
                                                                 |     } while ((sb & 0x20) == 0);
    0x0001dfce and r2, sb, 0x18                                  |     r2 = sb & 0x18;
    0x0001dfd2 cmp r2, 8                                         |     
                                                                 |     if (r2 == 8) {
    0x0001dfd4 beq 0x1dfac                                       |         goto label_2;
                                                                 |     }
    0x0001dfd6 ldr r1, [pc, 0x38]                                |     
    0x0001dfd8 mov.w sb, 1                                       |     sb = 1;
    0x0001dfdc ldr r0, [sp, 0xc]                                 |     r0 = var_ch;
    0x0001dfde add r1, pc                                        |     r1 = 0x3bff4;
    0x0001dfe0 bl 0x1ca34                                        |     fcn_0001ca34 (r0);
    0x0001dfe4 b 0x1dfac                                         |     goto label_2;
                                                                 | label_7:
    0x0001dfe6 ldr r4, [pc, 0x2c]                                |     
    0x0001dfe8 add r4, pc                                        |     r4 = 0x3c002;
    0x0001dfea adds r4, 1                                        |     r4++;
    0x0001dfec b 0x1df94                                         |     goto label_3;
                                                                 | label_8:
    0x0001dfee blx 0x6498                                        |     fcn_00006498 ();
    0x0001dff2 nop                                               |     
    0x0001dff4 ldr r5, [sp, 0x150]                               |     r5 = *(arg_150h);
    0x0001dff6 movs r5, r0                                       |     r5 = r0;
    0x0001dff8 lsls r0, r1, 0xe                                  |     r0 = r1 << 0xe;
    0x0001dffa movs r0, r0                                       |     
    0x0001dffc ldr r2, [r5, r7]                                  |     r2 = *((r5 + r7));
    0x0001dffe movs r4, r0                                       |     r4 = r0;
    0x0001e000 ldr r0, [r3, r7]                                  |     r0 = *((r3 + r7));
    0x0001e002 movs r4, r0                                       |     r4 = r0;
    0x0001e004 subs r5, 0x8e                                     |     r5 -= 0x8e;
    0x0001e006 movs r4, r0                                       |     r4 = r0;
    0x0001e008 lsrs r6, r3, 0x1a                                 |     r6 = r3 >> 0x1a;
    0x0001e00a movs r4, r0                                       |     r4 = r0;
    0x0001e00c ldr r4, [sp, 0x2a0]                               |     r4 = *(arg_2a0h);
    0x0001e00e movs r5, r0                                       |     r5 = r0;
    0x0001e010 lsrs r2, r2, 0x1a                                 |     r2 >>= 0x1a;
    0x0001e012 movs r4, r0                                       |     r4 = r0;
    0x0001e014 subs r5, 0x38                                     |     r5 -= 0x38;
    0x0001e016 movs r4, r0                                       |     r4 = r0;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1e084 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.0001e084 ()                                      | void fcn_0001e084 (int16_t arg_7ch, int16_t arg_1b8h, int16_t arg_258h, int16_t arg_328h, int16_t arg1, int16_t arg2) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x0001e084 blmi 0x1cb0a50                                    |     __asm ("blmi 0x1cb0a50");
    0x0001e088 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x0001e08c sub sp, 0x14                                      |     
    0x0001e08e add r2, pc                                        |     r2 += pc;
    0x0001e090 ldr.w fp, [r0]                                    |     fp = *(r0);
    0x0001e094 ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x0001e096 ldr r3, [r3]                                      |     r3 = *(r3);
    0x0001e098 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x0001e09a mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r1 == 0) {
    0x0001e09e cbz r1, 0x1e0be                                   |         goto label_3;
                                                                 |     }
    0x0001e0a0 ldr.w r8, [r1, 8]                                 |     r8 = *((r1 + 8));
    0x0001e0a4 mov r5, r0                                        |     r5 = r0;
    0x0001e0a6 mov r6, r1                                        |     r6 = r1;
    0x0001e0a8 ldrb.w r3, [r8, 1]                                |     r3 = *((r8 + 1));
                                                                 |     if (r3 != 0) {
    0x0001e0ac cbnz r3, 0x1e10c                                  |         goto label_8;
                                                                 |     }
    0x0001e0ae ldr.w r3, [r0, 0x1b8]                             |     r3 = *((r0 + 0x1b8));
    0x0001e0b2 adds r3, 1                                        |     r3++;
    0x0001e0b4 str.w r3, [r0, 0x1b8]                             |     __asm ("str.w r3, aav.0x000000ff");
    0x0001e0b8 strh r3, [r1, 0x20]                               |     *((r1 + 0x20)) = r3;
                                                                 | label_0:
    0x0001e0ba ldr r3, [r5, 0x40]                                |     r3 = *((r5 + 0x40));
    0x0001e0bc cbz r3, 0x1e0da                                   |     
                                                                 |     while (r2 <= r3) {
                                                                 | label_3:
    0x0001e0be ldr r2, [pc, 0x194]                               |         
    0x0001e0c0 ldr r3, [pc, 0x18c]                               |         r3 = *(0x1e250);
    0x0001e0c2 add r2, pc                                        |         r2 = 0x3c31c;
    0x0001e0c4 ldr r3, [r2, r3]                                  |         r3 = *(0x3c31c);
    0x0001e0c6 ldr r2, [r3]                                      |         r2 = *(0x3c31c);
    0x0001e0c8 ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x0001e0ca eors r2, r3                                       |         r2 ^= r3;
    0x0001e0cc mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0001e0d0 bne.w 0x1e246                                     |             goto label_9;
                                                                 |         }
    0x0001e0d4 add sp, 0x14                                      |         
    0x0001e0d6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
    0x0001e0da ldr.w r2, [r5, 0x1b8]                             |         r2 = *((r5 + 0x1b8));
    0x0001e0de ldr.w r3, [fp, 0x7c]                              |         r3 = *(arg_7ch);
    0x0001e0e2 cmp r2, r3                                        |         
    0x0001e0e4 ble 0x1e0be                                       |         
                                                                 |     }
    0x0001e0e6 ldr r2, [pc, 0x170]                               |     
    0x0001e0e8 ldr r3, [pc, 0x164]                               |     r3 = *(0x1e250);
    0x0001e0ea add r2, pc                                        |     r2 = 0x3c348;
    0x0001e0ec ldr r3, [r2, r3]                                  |     r3 = *(0x3c348);
    0x0001e0ee ldr r2, [r3]                                      |     r2 = *(0x3c348);
    0x0001e0f0 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x0001e0f2 eors r2, r3                                       |     r2 ^= r3;
    0x0001e0f4 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x0001e0f8 bne.w 0x1e246                                     |         goto label_9;
                                                                 |     }
    0x0001e0fc ldr r1, [pc, 0x15c]                               |     
    0x0001e0fe mov r0, r5                                        |     r0 = r5;
    0x0001e100 add r1, pc                                        |     r1 = 0x3c360;
    0x0001e102 add sp, 0x14                                      |     
    0x0001e104 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |     
    0x0001e108 b.w 0x1ca34                                       |     void (*0x1ca34)() ();
                                                                 | label_8:
    0x0001e10c ldrb.w r2, [r8]                                   |     r2 = *(r8);
    0x0001e110 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0001e112 beq.w 0x1e242                                     |         goto label_10;
                                                                 |     }
    0x0001e116 add.w r0, r8, 1                                   |     r0 = r8 + 1;
    0x0001e11a mov r7, r0                                        |     r7 = r0;
                                                                 |     if (r3 == 0) {
    0x0001e11c cbz r3, 0x1e126                                   |         goto label_11;
                                                                 |     }
                                                                 |     do {
    0x0001e11e ldrb r3, [r7, 1]!                                 |         r3 = *((r7 += 1));
    0x0001e122 cmp r3, 0                                         |         
    0x0001e124 bne 0x1e11e                                       |         
                                                                 |     } while (r3 != 0);
                                                                 | label_11:
    0x0001e126 cmp r2, 0x3f                                      |     
    0x0001e128 sub.w r7, r7, r8                                  |     r7 -= r8;
    0x0001e12c bic r7, r7, 0xc0000000                            |     r7 = BIT_MASK (r7, 0xc0000000);
                                                                 |     if (r2 == 0x3f) {
    0x0001e130 beq 0x1e1aa                                       |         goto label_12;
                                                                 |     }
                                                                 | label_7:
    0x0001e132 ldr.w sb, [r5, 0x1bc]                             |     sb = *((r5 + 0x1bc));
    0x0001e136 cmp.w sb, 0                                       |     
    0x0001e13a itt gt                                            |     
                                                                 |     if (sb <= 0) {
    0x0001e13c ldrgt sl, [r5, 0x1d8]                             |         sl = *((r5 + 0x1d8));
                                                                 |     }
                                                                 |     if (sb > 0) {
    0x0001e140 movs r4, 0                                        |         r4 = 0;
                                                                 |     }
                                                                 |     if (r4 <= 0) {
    0x0001e142 ble 0x1e15c                                       |         goto label_2;
                                                                 |     }
                                                                 |     do {
    0x0001e144 ldr.w r0, [sl, r4, lsl 2]                         |         offset_0 = r4 << 2;
                                                                 |         r0 = *((sl + offset_0));
    0x0001e148 adds r4, 1                                        |         r4++;
    0x0001e14a sxth r4, r4                                       |         __asm ("sxth r4, r4");
                                                                 |         if (r0 != 0) {
    0x0001e14c cbz r0, 0x1e158                                   |             
    0x0001e14e mov r1, r8                                        |             r1 = r8;
    0x0001e150 blx 0x67b8                                        |             r0 = fcn_000067b8 ();
    0x0001e154 cmp r0, 0                                         |             
                                                                 |             if (r0 == 0) {
    0x0001e156 beq 0x1e200                                       |                 goto label_13;
                                                                 |             }
                                                                 |         }
    0x0001e158 cmp r4, sb                                        |         
    0x0001e15a blt 0x1e144                                       |         
                                                                 |     } while (r4 < sb);
                                                                 | label_2:
    0x0001e15c ldr.w r4, [r5, 0x1b8]                             |     r4 = *((r5 + 0x1b8));
    0x0001e160 adds r4, 1                                        |     r4++;
    0x0001e162 str.w r4, [r5, 0x1b8]                             |     __asm ("str.w r4, aav.0x000000ff");
    0x0001e166 sxth r4, r4                                       |     __asm ("sxth r4, r4");
    0x0001e168 strh r4, [r6, 0x20]                               |     *((r6 + 0x20)) = r4;
                                                                 | label_1:
    0x0001e16a cmp r4, 0                                         |     
                                                                 |     if (r4 <= 0) {
    0x0001e16c ble 0x1e0ba                                       |         goto label_0;
                                                                 |     }
    0x0001e16e ldr.w r3, [r5, 0x1bc]                             |     r3 = *((r5 + 0x1bc));
    0x0001e172 ldr.w r1, [r5, 0x1d8]                             |     r1 = *((r5 + 0x1d8));
    0x0001e176 cmp r4, r3                                        |     
                                                                 |     if (r4 > r3) {
    0x0001e178 bgt 0x1e208                                       |         goto label_14;
                                                                 |     }
                                                                 | label_4:
    0x0001e17a ldrb.w r3, [r8]                                   |     r3 = *(r8);
    0x0001e17e add.w r4, r4, 0x40000000                          |     r4 += 0x40000000;
    0x0001e182 subs r4, 1                                        |     r4--;
    0x0001e184 ldr.w r1, [r1, r4, lsl 2]                         |     offset_1 = r4 << 2;
                                                                 |     r1 = *((r1 + offset_1));
    0x0001e188 cmp r3, 0x3f                                      |     
                                                                 |     if (r3 != 0x3f) {
    0x0001e18a bne 0x1e190                                       |         goto label_15;
                                                                 |     }
    0x0001e18c cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x0001e18e bne 0x1e0ba                                       |         goto label_0;
                                                                 |     }
                                                                 | label_15:
    0x0001e190 mov r0, fp                                        |     r0 = fp;
    0x0001e192 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x0001e196 ldr.w r6, [r5, 0x1d8]                             |     r6 = *((r5 + 0x1d8));
    0x0001e19a mov r2, r7                                        |     r2 = r7;
    0x0001e19c mov r1, r8                                        |     r1 = r8;
    0x0001e19e mov r0, fp                                        |     r0 = fp;
    0x0001e1a0 bl 0xdbf0                                         |     fcn_0000dbf0 (r0, r1, r2);
    0x0001e1a4 str.w r0, [r6, r4, lsl 2]                         |     __asm ("str.w r0, [r6, r4, lsl 2]");
    0x0001e1a8 b 0x1e0ba                                         |     goto label_0;
                                                                 | label_12:
    0x0001e1aa movs r3, 1                                        |     r3 = 1;
    0x0001e1ac subs r2, r7, 1                                    |     r2 = r7 - 1;
    0x0001e1ae mov r1, sp                                        |     r1 = sp;
    0x0001e1b0 bl 0x70b8                                         |     fcn_000070b8 (r0, r1, r2, r3);
    0x0001e1b4 ldr.w sb, [sp]                                    |     sb = *(sp);
    0x0001e1b8 ldr.w sl, [sp, 4]                                 |     sl = var_4h;
    0x0001e1bc ldr.w r2, [fp, 0x7c]                              |     r2 = *(arg_7ch);
    0x0001e1c0 cmp.w sb, 1                                       |     
    0x0001e1c4 sbcs r3, sl, 0                                    |     __asm ("sbcs r3, sl, 0");
    0x0001e1c8 sxth.w r4, sb                                     |     __asm ("sxth.w r4, sb");
    0x0001e1cc ite lt                                            |     
                                                                 |     if (sb >= 1) {
    0x0001e1ce movlt r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (sb < 1) {
    0x0001e1d0 movge r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x0001e1d2 strh r4, [r6, 0x20]                               |     *((r6 + 0x20)) = r4;
    0x0001e1d4 cmp r0, 0                                         |     
    0x0001e1d6 it ne                                             |     
                                                                 |     if (r0 == 0) {
    0x0001e1d8 orrne r3, r3, 1                                   |         r3 |= 1;
                                                                 |     }
                                                                 |     if (r3 == 0) {
    0x0001e1dc cbz r3, 0x1e236                                   |         goto label_16;
                                                                 |     }
                                                                 | label_6:
    0x0001e1de ldr r1, [pc, 0x80]                                |     
    0x0001e1e0 mov r0, r5                                        |     r0 = r5;
    0x0001e1e2 movs r4, 0                                        |     r4 = 0;
    0x0001e1e4 add r1, pc                                        |     r1 = 0x3c44a;
    0x0001e1e6 bl 0x1ca34                                        |     fcn_0001ca34 (r0);
                                                                 | label_5:
    0x0001e1ea ldr.w r2, [r5, 0x1b8]                             |     r2 = *((r5 + 0x1b8));
    0x0001e1ee cmp r2, sb                                        |     
    0x0001e1f0 asr.w r3, r2, 0x1f                                |     r3 = r2 >> 0x1f;
    0x0001e1f4 sbcs.w r3, r3, sl                                 |     __asm ("sbcs.w r3, r3, sl");
    0x0001e1f8 it lt                                             |     
                                                                 |     if (r2 >= sb) {
    0x0001e1fa strlt sb, [r5, 0x1b8]                             |         *((r5 + 0x1b8)) = sb;
                                                                 |     }
    0x0001e1fe b 0x1e16a                                         |     goto label_1;
                                                                 | label_13:
    0x0001e200 strh r4, [r6, 0x20]                               |     *((r6 + 0x20)) = r4;
    0x0001e202 cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x0001e204 bne 0x1e16a                                       |         goto label_1;
                                                                 |     }
    0x0001e206 b 0x1e15c                                         |     goto label_2;
                                                                 | label_14:
    0x0001e208 lsls r2, r4, 2                                    |     r2 = r4 << 2;
    0x0001e20a mov r0, fp                                        |     r0 = fp;
    0x0001e20c bl 0x17264                                        |     r0 = fcn_00017264 (r0, r1, r2);
    0x0001e210 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0001e212 beq.w 0x1e0be                                     |         goto label_3;
                                                                 |     }
    0x0001e216 ldr.w r3, [r5, 0x1bc]                             |     r3 = *((r5 + 0x1bc));
    0x0001e21a movs r1, 0                                        |     r1 = 0;
    0x0001e21c str.w r0, [r5, 0x1d8]                             |     __asm ("str.w r0, aav.0x000000ff");
    0x0001e220 add.w r0, r0, r3, lsl 2                           |     r0 += (r3 << 2);
    0x0001e224 subs r3, r4, r3                                   |     r3 = r4 - r3;
    0x0001e226 lsls r2, r3, 2                                    |     r2 = r3 << 2;
    0x0001e228 blx 0x5fcc                                        |     fcn_00005fcc ();
    0x0001e22c ldr.w r1, [r5, 0x1d8]                             |     r1 = *((r5 + 0x1d8));
    0x0001e230 str.w r4, [r5, 0x1bc]                             |     __asm ("str.w r4, aav.0x000000ff");
    0x0001e234 b 0x1e17a                                         |     goto label_4;
                                                                 | label_16:
    0x0001e236 asrs r3, r2, 0x1f                                 |     r3 = r2 >> 0x1f;
    0x0001e238 cmp r2, sb                                        |     
    0x0001e23a sbcs.w r3, r3, sl                                 |     __asm ("sbcs.w r3, r3, sl");
                                                                 |     if (r2 >= sb) {
    0x0001e23e bge 0x1e1ea                                       |         goto label_5;
                                                                 |     }
    0x0001e240 b 0x1e1de                                         |     goto label_6;
                                                                 | label_10:
    0x0001e242 mov r7, r2                                        |     r7 = r2;
    0x0001e244 b 0x1e132                                         |     goto label_7;
                                                                 | label_9:
    0x0001e246 blx 0x6498                                        |     fcn_00006498 ();
    0x0001e24a nop                                               |     
    0x0001e24c ldr r3, [sp, 0x328]                               |     r3 = *(arg_328h);
    0x0001e24e movs r5, r0                                       |     r5 = r0;
    0x0001e250 lsls r0, r1, 0xe                                  |     r0 = r1 << 0xe;
    0x0001e252 movs r0, r0                                       |     
    0x0001e254 ldr r3, [sp, 0x258]                               |     r3 = *(arg_258h);
    0x0001e256 movs r5, r0                                       |     r5 = r0;
    0x0001e258 ldr r3, [sp, 0x1b8]                               |     r3 = *(arg_1b8h);
    0x0001e25a movs r5, r0                                       |     r5 = r0;
    0x0001e25c lsrs r4, r3, 0x18                                 |     r4 = r3 >> 0x18;
    0x0001e25e movs r4, r0                                       |     r4 = r0;
    0x0001e260 lsrs r4, r1, 0x14                                 |     r4 = r1 >> 0x14;
    0x0001e262 movs r4, r0                                       |     r4 = r0;
                                                                 | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1e264 */
                                                                     | #include <stdint.h>
                                                                     |  
    ; (fcn) fcn.0001e264 ()                                          | void fcn_0001e264 (int16_t arg_28h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
                                                                     |     r2 = arg3;
                                                                     |     r3 = arg4;
    0x0001e264 svcmi 0xf8e92d                                        |     __asm ("svcmi aav.0x000000ff");
    0x0001e268 mov r5, r1                                            |     r5 = r1;
    0x0001e26a ldr r7, [r0]                                          |     r7 = *(r0);
    0x0001e26c mov r8, r0                                            |     r8 = r0;
    0x0001e26e mov r1, r2                                            |     r1 = r2;
    0x0001e270 mov sb, r3                                            |     sb = r3;
    0x0001e272 mov r0, r7                                            |     r0 = r7;
    0x0001e274 bl 0xd5e4                                             |     r0 = fcn_0000d5e4 (r0, r1);
    0x0001e278 cmp r0, 0                                             |     
    0x0001e27a it ne                                                 |     
                                                                     |     if (r0 != 0) {
    0x0001e27c cmpne r5, 0                                           |         __asm ("cmpne r5, 0");
                                                                     |     }
    0x0001e27e mov r6, r0                                            |     r6 = r0;
                                                                     |     if (r0 == 0) {
    0x0001e280 beq 0x1e2e6                                           |         goto label_2;
                                                                     |     }
    0x0001e282 ldr r2, [r5]                                          |     r2 = *(r5);
    0x0001e284 cmp r2, 0                                             |     
                                                                     |     if (r2 <= 0) {
    0x0001e286 ble 0x1e2be                                           |         goto label_3;
                                                                     |     }
    0x0001e288 ldr.w fp, [pc, 0xa4]                                  |     
    0x0001e28c mov sl, r5                                            |     sl = r5;
    0x0001e28e movs r4, 0                                            |     r4 = 0;
    0x0001e290 add fp, pc                                            |     fp = 0x3c5c4;
    0x0001e292 b 0x1e29a                                             |     
                                                                     |     while (r0 != 0) {
    0x0001e294 ldr r2, [r5]                                          |         r2 = *(r5);
    0x0001e296 cmp r2, r4                                            |         
                                                                     |         if (r2 <= r4) {
    0x0001e298 ble 0x1e2be                                           |             goto label_3;
                                                                     |         }
                                                                     | label_0:
    0x0001e29a ldr.w r1, [sl, 8]                                     |         r1 = *((sl + 8));
    0x0001e29e mov r0, r6                                            |         r0 = r6;
    0x0001e2a0 adds r4, 1                                            |         r4++;
    0x0001e2a2 add.w sl, sl, 0x10                                    |         sl += 0x10;
    0x0001e2a6 blx 0x6164                                            |         r0 = fcn_00006164 ();
    0x0001e2aa cmp r0, 0                                             |         
    0x0001e2ac bne 0x1e294                                           |         
                                                                     |     }
    0x0001e2ae mov r2, r6                                            |     r2 = r6;
    0x0001e2b0 mov r1, fp                                            |     r1 = fp;
    0x0001e2b2 mov r0, r8                                            |     r0 = r8;
    0x0001e2b4 bl 0x1ca34                                            |     fcn_0001ca34 (r0);
    0x0001e2b8 ldr r2, [r5]                                          |     r2 = *(r5);
    0x0001e2ba cmp r2, r4                                            |     
                                                                     |     if (r2 > r4) {
    0x0001e2bc bgt 0x1e29a                                           |         goto label_0;
                                                                     |     }
                                                                     | label_3:
    0x0001e2be lsls r2, r2, 4                                        |     r2 <<= 4;
    0x0001e2c0 mov r1, r5                                            |     r1 = r5;
    0x0001e2c2 mov r0, r7                                            |     r0 = r7;
    0x0001e2c4 adds r2, 0x18                                         |     r2 += 0x18;
    0x0001e2c6 bl 0x17264                                            |     r0 = fcn_00017264 (r0, r1, r2);
                                                                     |     if (r0 == 0) {
                                                                     | label_1:
    0x0001e2ca cbz r0, 0x1e2f4                                       |         goto label_4;
                                                                     |     }
                                                                     |     do {
    0x0001e2cc ldr r3, [r0]                                          |         r3 = *(r0);
    0x0001e2ce movs r1, 0                                            |         r1 = 0;
    0x0001e2d0 ldr r4, [sp, 0x28]                                    |         r4 = *(arg_28h);
    0x0001e2d2 adds r2, r3, 1                                        |         r2 = r3 + 1;
    0x0001e2d4 add.w r3, r0, r3, lsl 4                               |         r3 = r0 + (r3 << 4);
    0x0001e2d8 strd sb, r4, [r3, 0xc]                                |         __asm ("strd sb, r4, [r3, 0xc]");
    0x0001e2dc str r6, [r3, 8]                                       |         *((r3 + 8)) = r6;
    0x0001e2de str r1, [r3, 0x14]                                    |         *((r3 + 0x14)) = r1;
    0x0001e2e0 str r2, [r0]                                          |         *(r0) = r2;
    0x0001e2e2 pop.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                     |         if (r5 != 0) {
                                                                     | label_2:
    0x0001e2e6 cbnz r5, 0x1e31e                                      |             goto label_5;
                                                                     |         }
    0x0001e2e8 movs r1, 0x18                                         |         r1 = 0x18;
    0x0001e2ea mov r0, r7                                            |         r0 = r7;
    0x0001e2ec bl 0xdb58                                             |         r0 = fcn_0000db58 (r0, r1);
    0x0001e2f0 cmp r0, 0                                             |         
    0x0001e2f2 bne 0x1e2cc                                           |         
                                                                     |     } while (r0 != 0);
                                                                     | label_4:
    0x0001e2f4 mov r1, sb                                            |     r1 = sb;
    0x0001e2f6 mov r0, r7                                            |     r0 = r7;
    0x0001e2f8 bl 0x12ec8                                            |     fcn_00012ec8 (r0);
    0x0001e2fc ldr r3, [sp, 0x28]                                    |     r3 = *(arg_28h);
                                                                     |     if (r3 != 0) {
    0x0001e2fe cbz r3, 0x1e310                                       |         
    0x0001e300 mov r1, r3                                            |         r1 = r3;
    0x0001e302 mov r0, r7                                            |         r0 = r7;
    0x0001e304 bl 0x12d90                                            |         fcn_00012d90 (r0, r1);
    0x0001e308 ldr r1, [sp, 0x28]                                    |         r1 = *(arg_28h);
    0x0001e30a mov r0, r7                                            |         r0 = r7;
    0x0001e30c bl 0xe12c                                             |         fcn_0000e12c (r0, r1);
                                                                     |     }
    0x0001e310 mov r0, r7                                            |     r0 = r7;
    0x0001e312 mov r1, r6                                            |     r1 = r6;
    0x0001e314 bl 0xe12c                                             |     fcn_0000e12c (r0, r1);
    0x0001e318 mov r0, r5                                            |     r0 = r5;
    0x0001e31a pop.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                     | label_5:
    0x0001e31e ldr r2, [r5]                                          |     r2 = *(r5);
    0x0001e320 mov r1, r5                                            |     r1 = r5;
    0x0001e322 mov r0, r7                                            |     r0 = r7;
    0x0001e324 lsls r2, r2, 4                                        |     r2 <<= 4;
    0x0001e326 adds r2, 0x18                                         |     r2 += 0x18;
    0x0001e328 bl 0x17264                                            |     fcn_00017264 (r0, r1, r2);
    0x0001e32c b 0x1e2ca                                             |     goto label_1;
                                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1e334 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.0001e334 ()                                      | void fcn_0001e334 (int16_t arg_24h, int16_t arg_40h, 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;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x0001e334 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x0001e338 sub sp, 0x1c                                      |     
    0x0001e33a ldr r4, [r2, 0x14]                                |     r4 = *((r2 + 0x14));
    0x0001e33c mov r8, r1                                        |     r8 = r1;
    0x0001e33e str r3, [sp, 0x14]                                |     var_14h = r3;
    0x0001e340 ldr r3, [r2, 0x28]                                |     r3 = *((r2 + 0x28));
    0x0001e342 cmp r4, 1                                         |     
    0x0001e344 str r2, [sp, 8]                                   |     var_8h = r2;
    0x0001e346 str r0, [sp, 0x10]                                |     var_10h = r0;
    0x0001e348 str r3, [sp, 0xc]                                 |     var_ch = r3;
                                                                 |     if (r4 != 1) {
    0x0001e34a beq 0x1e36a                                       |         
    0x0001e34c ldr r3, [sp, 0x40]                                |         r3 = *(arg_40h);
                                                                 |         if (r3 != 0) {
    0x0001e34e cbz r3, 0x1e38e                                   |             
    0x0001e350 ldr r3, [sp, 0x10]                                |             r3 = var_10h;
    0x0001e352 lsls r1, r4, 2                                    |             r1 = r4 << 2;
    0x0001e354 ldr r0, [r3]                                      |             r0 = *(r3);
    0x0001e356 bl 0xd3a0                                         |             r0 = fcn_0000d3a0 (r0, r1);
    0x0001e35a mov r3, r0                                        |             r3 = r0;
    0x0001e35c str r0, [sp, 4]                                   |             var_4h = r0;
    0x0001e35e movs r0, 1                                        |             r0 = 1;
    0x0001e360 cmp r3, 0                                         |             
                                                                 |             if (r3 == 0) {
    0x0001e362 beq 0x1e3f2                                       |                 goto label_4;
                                                                 |             }
    0x0001e364 ldr r2, [sp, 0x40]                                |             r2 = *(arg_40h);
    0x0001e366 str r3, [r2]                                      |             *(r2) = r3;
    0x0001e368 b 0x1e392                                         |             
                                                                 |         } else {
    0x0001e36a ldrsh.w r3, [r1, 0x24]                            |             r3 = *((r1 + 0x24));
    0x0001e36e cmp r3, 0                                         |             
                                                                 |             if (r3 < 0) {
    0x0001e370 blt 0x1e38e                                       |                 goto label_5;
                                                                 |             }
    0x0001e372 ldr r2, [sp, 0xc]                                 |             r2 = var_ch;
    0x0001e374 cmp r2, 0                                         |             
                                                                 |             if (r2 == 0) {
    0x0001e376 beq.w 0x1e486                                     |                 goto label_6;
                                                                 |             }
    0x0001e37a ldr r2, [r1, 4]                                   |             r2 = *((r1 + 4));
    0x0001e37c add.w r3, r3, r3, lsl 1                           |             r3 += (r3 << 1);
    0x0001e380 ldr r1, [sp, 0xc]                                 |             r1 = var_ch;
    0x0001e382 ldr.w r0, [r2, r3, lsl 3]                         |             offset_0 = r3 << 3;
                                                                 |             r0 = *((r2 + offset_0));
    0x0001e386 blx 0x6164                                        |             r0 = fcn_00006164 ();
    0x0001e38a cmp r0, 0                                         |             
                                                                 |             if (r0 == 0) {
    0x0001e38c beq 0x1e486                                       |                 goto label_6;
                                                                 |             }
                                                                 |         }
                                                                 | label_5:
    0x0001e38e movs r3, 0                                        |         r3 = 0;
    0x0001e390 str r3, [sp, 4]                                   |         var_4h = r3;
                                                                 |     }
    0x0001e392 ldr.w r6, [r8, 8]                                 |     r6 = *((r8 + 8));
    0x0001e396 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0001e398 beq 0x1e46c                                       |         goto label_7;
                                                                 |     }
    0x0001e39a ldr.w sb, [pc, 0x108]                             |     
    0x0001e39e ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x0001e3a0 add sb, pc                                        |     sb = 0x3c84a;
    0x0001e3a2 add.w r5, r3, 0x28                                |     r5 = r3 + 0x28;
    0x0001e3a6 b 0x1e3ae                                         |     
                                                                 |     while (r4 != r3) {
                                                                 | label_0:
    0x0001e3a8 ldr r6, [r6, 0x14]                                |         r6 = *((r6 + 0x14));
    0x0001e3aa cmp r6, 0                                         |         
                                                                 |         if (r6 == 0) {
    0x0001e3ac beq 0x1e46c                                       |             goto label_7;
                                                                 |         }
                                                                 | label_3:
    0x0001e3ae ldrh r3, [r6, 0x32]                               |         r3 = *((r6 + 0x32));
    0x0001e3b0 cmp r4, r3                                        |         
    0x0001e3b2 bne 0x1e3a8                                       |         
                                                                 |     }
    0x0001e3b4 ldrb.w r3, [r6, 0x36]                             |     r3 = *((r6 + 0x36));
    0x0001e3b8 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0001e3ba beq 0x1e3a8                                       |         goto label_0;
                                                                 |     }
    0x0001e3bc ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
                                                                 |     if (r3 != 0) {
    0x0001e3be cbnz r3, 0x1e3f8                                  |         goto label_8;
                                                                 |     }
    0x0001e3c0 ldrb.w r3, [r6, 0x37]                             |     r3 = *((r6 + 0x37));
    0x0001e3c4 and r3, r3, 3                                     |     r3 &= 3;
    0x0001e3c8 cmp r3, 2                                         |     
                                                                 |     if (r3 != 2) {
    0x0001e3ca bne 0x1e3a8                                       |         goto label_0;
                                                                 |     }
    0x0001e3cc ldr r3, [sp, 4]                                   |     r3 = var_4h;
                                                                 |     if (r3 == 0) {
    0x0001e3ce cbz r3, 0x1e3ec                                   |         goto label_2;
                                                                 |     }
                                                                 |     if (r4 == 0) {
    0x0001e3d0 cbz r4, 0x1e3ec                                   |         goto label_2;
                                                                 |     }
    0x0001e3d2 ldr.w fp, [sp, 8]                                 |     fp = var_8h;
    0x0001e3d6 add.w r4, r3, r4, lsl 2                           |     r4 = r3 + (r4 << 2);
    0x0001e3da mov sl, r3                                        |     sl = r3;
                                                                 |     do {
    0x0001e3dc ldr.w r3, [fp, 0x24]                              |         r3 = *(arg_24h);
    0x0001e3e0 add.w fp, fp, 8                                   |         
    0x0001e3e4 str r3, [sl], 4                                   |         *(sl) = r3;
                                                                 |         sl += 4;
    0x0001e3e8 cmp r4, sl                                        |         
    0x0001e3ea bne 0x1e3dc                                       |         
                                                                 |     } while (r4 != sl);
                                                                 | label_2:
    0x0001e3ec ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0001e3ee movs r0, 0                                        |     r0 = 0;
    0x0001e3f0 str r6, [r3]                                      |     *(r3) = r6;
                                                                 | label_4:
    0x0001e3f2 add sp, 0x1c                                      |     
    0x0001e3f4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_8:
    0x0001e3f8 mov r7, r4                                        |     r7 = r4;
                                                                 |     if (r4 == 0) {
    0x0001e3fa cbz r4, 0x1e462                                   |         goto label_9;
                                                                 |     }
    0x0001e3fc movs r7, 0                                        |     r7 = 0;
                                                                 | label_1:
    0x0001e3fe ldr r3, [r6, 4]                                   |     r3 = *((r6 + 4));
    0x0001e400 ldr.w r2, [r8, 4]                                 |     r2 = *((r8 + 4));
    0x0001e404 ldrsh.w r3, [r3, r7, lsl 1]                       |     offset_1 = r7 << 1;
                                                                 |     r3 = *((r3 + offset_1));
    0x0001e408 add.w fp, r3, r3, lsl 1                           |     
    0x0001e40c add.w r2, r2, fp, lsl 3                           |     r2 += (fp << 3);
    0x0001e410 ldr r1, [r2, 0x10]                                |     r1 = *((r2 + 0x10));
    0x0001e412 ldr r2, [r6, 0x20]                                |     r2 = *((r6 + 0x20));
    0x0001e414 cmp r1, 0                                         |     
    0x0001e416 ldr.w r0, [r2, r7, lsl 2]                         |     offset_2 = r7 << 2;
                                                                 |     r0 = *((r2 + offset_2));
    0x0001e41a it eq                                             |     
                                                                 |     if (r1 != 0) {
    0x0001e41c moveq r1, sb                                      |         r1 = sb;
                                                                 |     }
    0x0001e41e blx 0x6164                                        |     r0 = fcn_00006164 ();
    0x0001e422 mov sl, r0                                        |     sl = r0;
                                                                 |     if (r0 != 0) {
    0x0001e424 cbnz r0, 0x1e462                                  |         goto label_9;
                                                                 |     }
    0x0001e426 ldr.w r2, [r8, 4]                                 |     r2 = *((r8 + 4));
    0x0001e42a ldr.w fp, [r2, fp, lsl 3]                         |     offset_3 = fp << 3;
                                                                 |     fp = *((r2 + offset_3));
    0x0001e42e b 0x1e438                                         |     
                                                                 |     while (r0 != 0) {
    0x0001e430 add.w sl, sl, 1                                   |         sl++;
    0x0001e434 cmp r4, sl                                        |         
                                                                 |         if (r4 == sl) {
    0x0001e436 beq 0x1e462                                       |             goto label_9;
                                                                 |         }
    0x0001e438 ldr.w r0, [r5, sl, lsl 3]                         |         offset_4 = sl << 3;
                                                                 |         r0 = *((r5 + offset_4));
    0x0001e43c mov r1, fp                                        |         r1 = fp;
    0x0001e43e blx 0x6164                                        |         r0 = fcn_00006164 ();
    0x0001e442 cmp r0, 0                                         |         
    0x0001e444 bne 0x1e430                                       |         
                                                                 |     }
    0x0001e446 ldr r2, [sp, 4]                                   |     r2 = var_4h;
                                                                 |     if (r2 != 0) {
    0x0001e448 cbz r2, 0x1e456                                   |         
    0x0001e44a ldr r3, [sp, 8]                                   |         r3 = var_8h;
    0x0001e44c add.w r3, r3, sl, lsl 3                           |         r3 += (sl << 3);
    0x0001e450 ldr r3, [r3, 0x24]                                |         r3 = *((r3 + 0x24));
    0x0001e452 str.w r3, [r2, r7, lsl 2]                         |         __asm ("str.w r3, [r2, r7, lsl 2]");
                                                                 |     }
    0x0001e456 cmp r4, sl                                        |     
                                                                 |     if (r4 == sl) {
    0x0001e458 beq 0x1e462                                       |         goto label_9;
                                                                 |     }
    0x0001e45a adds r7, 1                                        |     r7++;
    0x0001e45c cmp r4, r7                                        |     
                                                                 |     if (r4 != r7) {
    0x0001e45e bne 0x1e3fe                                       |         goto label_1;
                                                                 |     }
    0x0001e460 b 0x1e3ec                                         |     goto label_2;
                                                                 | label_9:
    0x0001e462 cmp r4, r7                                        |     
                                                                 |     if (r4 == r7) {
    0x0001e464 beq 0x1e3ec                                       |         goto label_2;
                                                                 |     }
    0x0001e466 ldr r6, [r6, 0x14]                                |     r6 = *((r6 + 0x14));
    0x0001e468 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x0001e46a bne 0x1e3ae                                       |         goto label_3;
                                                                 |     }
                                                                 | label_7:
    0x0001e46c ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0001e46e ldrb.w r3, [r3, 0x1b6]                            |     r3 = *((r3 + 0x1b6));
    0x0001e472 cbz r3, 0x1e48e                                   |     
                                                                 |     while (1) {
    0x0001e474 ldr r3, [sp, 0x10]                                |         r3 = var_10h;
    0x0001e476 ldr r1, [sp, 4]                                   |         r1 = var_4h;
    0x0001e478 ldr r0, [r3]                                      |         r0 = *(r3);
    0x0001e47a bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
    0x0001e47e movs r0, 1                                        |         r0 = 1;
    0x0001e480 add sp, 0x1c                                      |         
    0x0001e482 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_6:
    0x0001e486 movs r0, 0                                        |         r0 = 0;
    0x0001e488 add sp, 0x1c                                      |         
    0x0001e48a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
    0x0001e48e ldr r3, [sp, 8]                                   |         r3 = var_8h;
    0x0001e490 ldr r1, [pc, 0x14]                                |         
    0x0001e492 ldr r0, [sp, 0x10]                                |         r0 = var_10h;
    0x0001e494 ldr r2, [r3]                                      |         r2 = *(r3);
    0x0001e496 add r1, pc                                        |         r1 = 0x3c942;
    0x0001e498 ldr r3, [r3, 8]                                   |         r3 = *((r3 + 8));
    0x0001e49a ldr r2, [r2]                                      |         r2 = *(r2);
    0x0001e49c bl 0x1ca34                                        |         fcn_0001ca34 (r0);
    0x0001e4a0 b 0x1e474                                         |         
                                                                 |     }
                                                                 | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1eaac */
                                                                     | #include <stdint.h>
                                                                     |  
                                                                     | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                     |  
    ; (fcn) fcn.0001eaac ()                                          | void fcn_0001eaac (int16_t arg_ch, int16_t arg_14h, 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_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;
                                                                     |     r2 = arg3;
                                                                     |     r3 = arg4;
    0x0001eaac push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0001eab0 ldr.w r8, [r0, 0xc]                                   |     r8 = *((r0 + 0xc));
    0x0001eab4 vpush {d8, d9, d10}                                   |     __asm ("vpush {d8, d9, d10}");
    0x0001eab8 sub sp, 0x3c                                          |     
    0x0001eaba ldr r1, [r0]                                          |     r1 = *(r0);
    0x0001eabc ldrb.w r6, [r8, 0x10]                                 |     r6 = *((r8 + 0x10));
    0x0001eac0 strd r2, r3, [sp, 0x1c]                               |     __asm ("strd r2, r3, [var_1ch]");
    0x0001eac4 ldr r3, [r1]                                          |     r3 = *(r1);
    0x0001eac6 ldr r1, [r1, 4]                                       |     r1 = *((r1 + 4));
    0x0001eac8 ldrd fp, sl, [r0, 4]                                  |     __asm ("ldrd fp, sl, [r0, 4]");
    0x0001eacc lsls r2, r6, 3                                        |     r2 = r6 << 3;
    0x0001eace str r0, [sp, 0x30]                                    |     var_30h = r0;
    0x0001ead0 str r2, [sp, 0x10]                                    |     var_10h = r2;
    0x0001ead2 add r2, r6                                            |     r2 += r6;
    0x0001ead4 ldr.w r0, [fp, 0xc]                                   |     r0 = *(arg_ch);
    0x0001ead8 add.w r2, r1, r2, lsl 3                               |     r2 = r1 + (r2 << 3);
    0x0001eadc str r3, [sp, 8]                                       |     var_8h = r3;
    0x0001eade str r1, [sp]                                          |     *(sp) = r1;
    0x0001eae0 ldr r3, [r3]                                          |     r3 = *(r3);
    0x0001eae2 cmp r0, 0                                             |     
    0x0001eae4 ldr r1, [r2, 0x18]                                    |     r1 = *((r2 + 0x18));
    0x0001eae6 str r3, [sp, 0x18]                                    |     var_18h = r3;
    0x0001eae8 str r1, [sp, 0xc]                                     |     var_ch = r1;
    0x0001eaea ldr.w r3, [fp, 0x14]                                  |     r3 = *(arg_14h);
                                                                     |     if (r0 <= 0) {
    0x0001eaee ble.w 0x1f074                                         |         goto label_20;
                                                                     |     }
    0x0001eaf2 ldr r4, [r2, 0x30]                                    |     r4 = *((r2 + 0x30));
    0x0001eaf4 movs r2, 0                                            |     r2 = 0;
    0x0001eaf6 mov r5, r2                                            |     r5 = r2;
                                                                     |     do {
    0x0001eaf8 ldr r1, [r3, 8]                                       |         r1 = *((r3 + 8));
    0x0001eafa cmp r1, r4                                            |         
                                                                     |         if (r1 == r4) {
    0x0001eafc bne 0x1eb08                                           |             
    0x0001eafe ldrh r1, [r3, 0x12]                                   |             r1 = *((r3 + 0x12));
    0x0001eb00 bic r1, r1, 0x480                                     |             r1 = BIT_MASK (r1, 0x480);
                                                                     |             if (r1 == 0) {
    0x0001eb04 cbz r1, 0x1eb08                                       |                 goto label_21;
                                                                     |             }
    0x0001eb06 adds r5, 1                                            |             r5++;
                                                                     |         }
                                                                     | label_21:
    0x0001eb08 adds r2, 1                                            |         r2++;
    0x0001eb0a adds r3, 0x30                                         |         r3 += 0x30;
    0x0001eb0c cmp r0, r2                                            |         
    0x0001eb0e bne 0x1eaf8                                           |         
                                                                     |     } while (r0 != r2);
    0x0001eb10 add.w r3, r5, r5, lsl 2                               |     r3 = r5 + (r5 << 2);
    0x0001eb14 str r5, [sp, 4]                                       |     var_4h = r5;
    0x0001eb16 str r5, [sp, 0x14]                                    |     var_14h = r5;
    0x0001eb18 lsls r3, r3, 2                                        |     r3 <<= 2;
    0x0001eb1a add.w r7, r3, 0x38                                    |     r7 = r3 + 0x38;
                                                                     | label_16:
    0x0001eb1e cmp.w sl, 0                                           |     
                                                                     |     if (sl == 0) {
    0x0001eb22 beq.w 0x1f00a                                         |         goto label_22;
                                                                     |     }
    0x0001eb26 ldr.w r4, [sl]                                        |     r4 = *(sl);
    0x0001eb2a cmp r4, 0                                             |     
                                                                     |     if (r4 <= 0) {
    0x0001eb2c ble.w 0x1f0a8                                         |         goto label_23;
                                                                     |     }
    0x0001eb30 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x0001eb32 ldr.w r5, [sl, 4]                                     |     r5 = *((sl + 4));
    0x0001eb36 adds r0, r3, r6                                       |     r0 = r3 + r6;
    0x0001eb38 ldr r3, [sp]                                          |     r3 = *(sp);
    0x0001eb3a add.w r0, r3, r0, lsl 3                               |     r0 = r3 + (r0 << 3);
    0x0001eb3e movs r3, 0                                            |     r3 = 0;
    0x0001eb40 mov r1, r3                                            |     r1 = r3;
    0x0001eb42 mov lr, r0                                            |     lr = r0;
    0x0001eb44 b 0x1eb5a                                             |     
                                                                     |     while (ip == 0x9a) {
    0x0001eb46 ldr r0, [r2, 0x1c]                                    |         r0 = *((r2 + 0x1c));
    0x0001eb48 ldr.w r2, [lr, 0x30]                                  |         r2 = *((lr + 0x30));
    0x0001eb4c cmp r0, r2                                            |         
                                                                     |         if (r0 != r2) {
    0x0001eb4e bne 0x1eb68                                           |             goto label_24;
                                                                     |         }
    0x0001eb50 adds r1, 1                                            |         r1++;
    0x0001eb52 adds r3, 5                                            |         r3 += 5;
    0x0001eb54 cmp r4, r1                                            |         
                                                                     |         if (r4 == r1) {
    0x0001eb56 beq.w 0x1f02c                                         |             goto label_19;
                                                                     |         }
    0x0001eb5a ldr.w r2, [r5, r3, lsl 2]                             |         offset_0 = r3 << 2;
                                                                     |         r2 = *((r5 + offset_0));
    0x0001eb5e ldrb.w ip, [r2]                                       |         ip = *(r2);
    0x0001eb62 cmp.w ip, 0x9a                                        |         
    0x0001eb66 beq 0x1eb46                                           |         
                                                                     |     }
                                                                     | label_24:
    0x0001eb68 movs r4, 0                                            |     r4 = 0;
    0x0001eb6a mov r5, r4                                            |     r5 = r4;
                                                                     | label_13:
    0x0001eb6c ldr r0, [sp, 0x18]                                    |     r0 = var_18h;
    0x0001eb6e mov r1, r7                                            |     r1 = r7;
    0x0001eb70 bl 0xd3a0                                             |     r0 = fcn_0000d3a0 (r0, r1);
    0x0001eb74 mov sb, r0                                            |     sb = r0;
    0x0001eb76 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0001eb78 beq.w 0x1f01e                                         |         goto label_25;
                                                                     |     }
                                                                     | label_11:
    0x0001eb7c mov r2, r7                                            |     r2 = r7;
    0x0001eb7e movs r1, 0                                            |     r1 = 0;
    0x0001eb80 blx 0x5fcc                                            |     fcn_00005fcc ();
    0x0001eb84 ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0001eb86 add.w r7, sb, 0x38                                    |     r7 = sb + 0x38;
    0x0001eb8a ldr r2, [sp, 4]                                       |     r2 = var_4h;
    0x0001eb8c str.w r4, [sb, 8]                                     |     __asm ("str.w r4, [sb, 8]");
    0x0001eb90 str.w r7, [sb, 4]                                     |     __asm ("str.w r7, [sb, 4]");
    0x0001eb94 add.w r3, r3, r3, lsl 1                               |     r3 += (r3 << 1);
    0x0001eb98 str.w r2, [sb]                                        |     __asm ("str.w r2, [sb]");
    0x0001eb9c add.w lr, r7, r3, lsl 2                               |     lr = r7 + (r3 << 2);
    0x0001eba0 add.w r3, lr, r5                                      |     r3 = lr + r5;
    0x0001eba4 ldr.w r5, [fp, 0xc]                                   |     r5 = *(arg_ch);
    0x0001eba8 str r3, [sp, 0x2c]                                    |     var_2ch = r3;
    0x0001ebaa strd lr, r3, [sb, 0xc]                                |     __asm ("strd lr, r3, [sb, 0xc]");
    0x0001ebae cmp r5, 0                                             |     
    0x0001ebb0 ldr.w r3, [fp, 0x14]                                  |     r3 = *(arg_14h);
                                                                     |     if (r5 <= 0) {
    0x0001ebb4 ble 0x1ec04                                           |         goto label_26;
                                                                     |     }
    0x0001ebb6 ldr r1, [sp]                                          |     r1 = *(sp);
    0x0001ebb8 ldr r2, [sp, 0x10]                                    |     r2 = var_10h;
    0x0001ebba str r4, [sp]                                          |     *(sp) = r4;
    0x0001ebbc add r2, r6                                            |     r2 += r6;
    0x0001ebbe add.w r2, r1, r2, lsl 3                               |     r2 = r1 + (r2 << 3);
    0x0001ebc2 ldr r6, [r2, 0x30]                                    |     r6 = *((r2 + 0x30));
    0x0001ebc4 movs r2, 0                                            |     r2 = 0;
    0x0001ebc6 mov r0, r2                                            |     r0 = r2;
                                                                     |     do {
    0x0001ebc8 ldr r1, [r3, 8]                                       |         r1 = *((r3 + 8));
    0x0001ebca cmp r1, r6                                            |         
                                                                     |         if (r1 == r6) {
    0x0001ebcc bne 0x1ebfa                                           |             
    0x0001ebce ldrh r1, [r3, 0x12]                                   |             r1 = *((r3 + 0x12));
    0x0001ebd0 bic ip, r1, 0x480                                     |             ip = BIT_MASK (r1, 0x480);
    0x0001ebd4 cmp.w ip, 0                                           |             
                                                                     |             if (ip == 0) {
    0x0001ebd8 beq 0x1ebfa                                           |                 goto label_27;
                                                                     |             }
    0x0001ebda ldr r4, [r3, 0xc]                                     |             r4 = *((r3 + 0xc));
    0x0001ebdc uxtb r1, r1                                           |             r1 = (int8_t) r1;
    0x0001ebde add.w ip, r0, r0, lsl 1                               |             
    0x0001ebe2 adds r0, 1                                            |             r0++;
    0x0001ebe4 cmp r1, 1                                             |             
    0x0001ebe6 str.w r4, [r7, ip, lsl 2]                             |             __asm ("str.w r4, [r7, ip, lsl 2]");
    0x0001ebea add.w ip, r7, ip, lsl 2                               |             
    0x0001ebee it eq                                                 |             
                                                                     |             if (r1 != 1) {
    0x0001ebf0 moveq r1, 2                                           |                 r1 = 2;
                                                                     |             }
    0x0001ebf2 strb.w r1, [ip, 4]                                    |             *((ip + 4)) = r1;
    0x0001ebf6 str.w r2, [ip, 8]                                     |             __asm ("str.w r2, [ip, 8]");
                                                                     |         }
                                                                     | label_27:
    0x0001ebfa adds r2, 1                                            |         r2++;
    0x0001ebfc adds r3, 0x30                                         |         r3 += 0x30;
    0x0001ebfe cmp r2, r5                                            |         
    0x0001ec00 bne 0x1ebc8                                           |         
                                                                     |     } while (r2 != r5);
    0x0001ec02 ldr r4, [sp]                                          |     r4 = *(sp);
                                                                     |     if (r4 == 0) {
                                                                     | label_26:
    0x0001ec04 cbz r4, 0x1ec2a                                       |         goto label_28;
                                                                     |     }
    0x0001ec06 ldr.w r2, [sl, 4]                                     |     r2 = *((sl + 4));
    0x0001ec0a add.w r4, lr, r4, lsl 3                               |     r4 = lr + (r4 << 3);
    0x0001ec0e mov r3, lr                                            |     r3 = lr;
                                                                     |     do {
    0x0001ec10 ldr r1, [r2]                                          |         r1 = *(r2);
    0x0001ec12 adds r3, 8                                            |         r3 += 8;
    0x0001ec14 adds r2, 0x14                                         |         r2 += 0x14;
    0x0001ec16 ldrsh.w r1, [r1, 0x20]                                |         r1 = *((r1 + 0x20));
    0x0001ec1a str r1, [r3, -0x8]                                    |         *((r3 - 0x8)) = r1;
    0x0001ec1e ldrb r1, [r2, -0x8]                                   |         r1 = *((r2 - 0x8));
    0x0001ec22 strb r1, [r3, -0x4]                                   |         *((r3 - 0x4)) = r1;
    0x0001ec26 cmp r4, r3                                            |         
    0x0001ec28 bne 0x1ec10                                           |         
                                                                     |     } while (r4 != r3);
                                                                     | label_28:
    0x0001ec2a movs r3, 0                                            |     r3 = 0;
    0x0001ec2c ldrh.w r2, [r8, 0x2a]                                 |     r2 = *((r8 + 0x2a));
    0x0001ec30 strh.w r3, [r8, 0x12]                                 |     *((r8 + 0x12)) = r3;
    0x0001ec34 strh.w r3, [r8, 0x28]                                 |     *((r8 + 0x28)) = r3;
    0x0001ec38 strb.w r3, [r8, 0x1c]                                 |     *((r8 + 0x1c)) = r3;
    0x0001ec3c mov.w r3, 0x400                                       |     r3 = 0x400;
    0x0001ec40 str.w r3, [r8, 0x24]                                  |     __asm ("str.w r3, [r8, 0x24]");
    0x0001ec44 ldr r3, [sp, 4]                                       |     r3 = var_4h;
    0x0001ec46 vmov.i32 d16, 0                                       |     __asm ("vmov.i32 d16, 0");
    0x0001ec4a cmp r2, r3                                            |     
    0x0001ec4c vstr d16, [r8]                                        |     __asm ("vstr d16, [r8]");
                                                                     |     if (r2 < r3) {
    0x0001ec50 bge 0x1ec62                                           |         
    0x0001ec52 ldr r2, [sp, 4]                                       |         r2 = var_4h;
    0x0001ec54 mov r1, r8                                            |         r1 = r8;
    0x0001ec56 ldr r0, [sp, 0x18]                                    |         r0 = var_18h;
    0x0001ec58 bl 0xeee4                                             |         r0 = fcn_0000eee4 (r0, r1, r2);
    0x0001ec5c cmp r0, 0                                             |         
                                                                     |         if (r0 != 0) {
    0x0001ec5e bne.w 0x1f084                                         |             goto label_29;
                                                                     |         }
                                                                     |     }
    0x0001ec62 ldr r3, [pc, 0x2c4]                                   |     
    0x0001ec64 movs r7, 0                                            |     r7 = 0;
    0x0001ec66 mov sl, r7                                            |     sl = r7;
    0x0001ec68 strd r7, r7, [sp, 0x10]                               |     __asm ("strd r7, r7, [var_10h]");
    0x0001ec6c vldr d10, [pc, 0x2a0]                                 |     __asm ("vldr d10, aav.0x000000ff");
    0x0001ec70 add r3, pc                                            |     r3 = 0x3db9e;
    0x0001ec72 vldr d9, [pc, 0x2a4]                                  |     __asm ("vldr d9, aav.0x000000ff");
    0x0001ec76 str r3, [sp, 0x34]                                    |     var_34h = r3;
    0x0001ec78 ldr r3, [pc, 0x2b0]                                   |     
    0x0001ec7a vldr d8, [pc, 0x2a4]                                  |     __asm ("vldr d8, aav.0x000000ff");
    0x0001ec7e ldr r7, [sp, 0x2c]                                    |     r7 = var_2ch;
    0x0001ec80 add r3, pc                                            |     r3 = 0x3dbb0;
    0x0001ec82 str r3, [sp, 0x28]                                    |     var_28h = r3;
    0x0001ec84 ldr r3, [sp, 4]                                       |     r3 = var_4h;
    0x0001ec86 lsls r3, r3, 2                                        |     r3 <<= 2;
    0x0001ec88 str r3, [sp, 0x24]                                    |     var_24h = r3;
                                                                     | label_4:
    0x0001ec8a ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
                                                                     |     if (r3 == 0) {
    0x0001ec8c cbnz r3, 0x1eca0                                      |         
    0x0001ec8e tst.w sl, 1                                           |         
                                                                     |         if ((sl & 1) == 0) {
    0x0001ec92 beq 0x1eca0                                           |             goto label_30;
                                                                     |         }
    0x0001ec94 add.w sl, sl, 1                                       |         sl++;
    0x0001ec98 cmp.w sl, 4                                           |         
                                                                     |         if (sl == 4) {
    0x0001ec9c beq.w 0x1eeae                                         |             goto label_31;
                                                                     |         }
                                                                     |     }
                                                                     | label_30:
    0x0001eca0 ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0001eca2 eor r0, r3, 1                                         |     r0 = r3 ^ 1;
    0x0001eca6 cmp.w sl, 1                                           |     
    0x0001ecaa ite le                                                |     
                                                                     |     if (sl > 1) {
    0x0001ecac movle r0, 0                                           |         r0 = 0;
                                                                     |     }
                                                                     |     if (sl <= 1) {
    0x0001ecae andgt r0, r0, 1                                       |         r0 &= 1;
                                                                     |     }
    0x0001ecb2 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0001ecb4 bne.w 0x1eeae                                         |         goto label_31;
                                                                     |     }
    0x0001ecb8 ldrd r2, r1, [sb]                                     |     __asm ("ldrd r2, r1, [sb]");
    0x0001ecbc cmp r2, 0                                             |     
                                                                     |     if (r2 <= 0) {
    0x0001ecbe ble 0x1ed0c                                           |         goto label_32;
                                                                     |     }
    0x0001ecc0 ldr.w r4, [fp, 0x14]                                  |     r4 = *(arg_14h);
    0x0001ecc4 mov.w ip, 1                                           |     
    0x0001ecc8 mov r5, sl                                            |     r5 = sl;
    0x0001ecca b 0x1ecde                                             |     
                                                                     |     while (r5 != 2) {
    0x0001eccc cmp r5, 0                                             |         
                                                                     |         if (r5 == 0) {
    0x0001ecce beq.w 0x1eede                                         |             goto label_33;
                                                                     |         }
                                                                     | label_6:
    0x0001ecd2 strb.w ip, [r1, 5]                                    |         *((r1 + 5)) = ip;
                                                                     | label_5:
    0x0001ecd6 adds r0, 1                                            |         r0++;
    0x0001ecd8 adds r1, 0xc                                          |         r1 += 0xc;
    0x0001ecda cmp r0, r2                                            |         
                                                                     |         if (r0 == r2) {
    0x0001ecdc beq 0x1ed0a                                           |             goto label_34;
                                                                     |         }
                                                                     | label_0:
    0x0001ecde ldr r3, [r1, 8]                                       |         r3 = *((r1 + 8));
    0x0001ece0 cmp r5, 1                                             |         
    0x0001ece2 add.w r3, r3, r3, lsl 1                               |         r3 += (r3 << 1);
    0x0001ece6 add.w r3, r4, r3, lsl 4                               |         r3 = r4 + (r3 << 4);
                                                                     |         if (r5 == 1) {
    0x0001ecea beq.w 0x1eece                                         |             goto label_35;
                                                                     |         }
    0x0001ecee cmp r5, 2                                             |         
    0x0001ecf0 bne 0x1eccc                                           |         
                                                                     |     }
    0x0001ecf2 ldrh r3, [r3, 0x12]                                   |     r3 = *((r3 + 0x12));
    0x0001ecf4 adds r0, 1                                            |     r0++;
    0x0001ecf6 cmp r0, r2                                            |     
    0x0001ecf8 add.w r1, r1, 0xc                                     |     r1 += 0xc;
    0x0001ecfc mvn.w r3, r3                                          |     r3 = ~r3;
    0x0001ed00 and r3, r3, 1                                         |     r3 &= 1;
    0x0001ed04 strb r3, [r1, -0x7]                                   |     *((r1 - 0x7)) = r3;
                                                                     |     if (r0 != r2) {
    0x0001ed08 bne 0x1ecde                                           |         goto label_0;
                                                                     |     }
                                                                     | label_34:
    0x0001ed0a mov sl, r5                                            |     sl = r5;
                                                                     | label_32:
    0x0001ed0c lsls r2, r2, 3                                        |     r2 <<= 3;
    0x0001ed0e movs r1, 0                                            |     r1 = 0;
    0x0001ed10 mov r0, r7                                            |     r0 = r7;
    0x0001ed12 blx 0x5fcc                                            |     fcn_00005fcc ();
    0x0001ed16 ldr.w r3, [sb, 0x1c]                                  |     r3 = *((sb + 0x1c));
    0x0001ed1a cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0001ed1c bne.w 0x1f000                                         |         goto label_36;
                                                                     |     }
                                                                     | label_10:
    0x0001ed20 ldr r3, [sp, 0xc]                                     |     r3 = var_ch;
    0x0001ed22 movs r2, 0                                            |     r2 = 0;
    0x0001ed24 vstr d9, [sb, 0x28]                                   |     __asm ("vstr d9, [sb, 0x28]");
    0x0001ed28 vstr d8, [sb, 0x30]                                   |     __asm ("vstr d8, [sb, 0x30]");
    0x0001ed2c ldr r3, [r3, 0x3c]                                    |     r3 = *((r3 + 0x3c));
    0x0001ed2e strd r2, r2, [sb, 0x14]                               |     __asm ("strd r2, r2, [sb, 0x14]");
    0x0001ed32 strd r2, r2, [sb, 0x1c]                               |     __asm ("strd r2, r2, [sb, 0x1c]");
    0x0001ed36 ldr r2, [sp, 8]                                       |     r2 = var_8h;
    0x0001ed38 ldr r1, [r2]                                          |     r1 = *(r2);
                                                                     |     if (r3 != 0) {
    0x0001ed3a cbnz r3, 0x1ed46                                      |         goto label_37;
                                                                     |     }
    0x0001ed3c b 0x1f0b0                                             |     goto label_38;
                                                                     |     do {
    0x0001ed3e ldr r3, [r3, 0x18]                                    |         r3 = *((r3 + 0x18));
    0x0001ed40 cmp r3, 0                                             |         
                                                                     |         if (r3 == 0) {
    0x0001ed42 beq.w 0x1f0b0                                         |             goto label_38;
                                                                     |         }
                                                                     | label_37:
    0x0001ed46 ldr r2, [r3]                                          |         r2 = *(r3);
    0x0001ed48 cmp r1, r2                                            |         
    0x0001ed4a bne 0x1ed3e                                           |         
                                                                     |     } while (r1 != r2);
    0x0001ed4c ldr r5, [r3, 8]                                       |     r5 = *((r3 + 8));
    0x0001ed4e mov r1, sb                                            |     r1 = sb;
    0x0001ed50 ldr r3, [r5]                                          |     r3 = *(r5);
    0x0001ed52 mov r0, r5                                            |     r0 = r5;
    0x0001ed54 ldr r3, [r3, 0xc]                                     |     r3 = *((r3 + 0xc));
    0x0001ed56 blx r3                                                |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
                                                                     |     if (r0 != 0) {
    0x0001ed58 cbz r0, 0x1ed70                                       |         
    0x0001ed5a cmp r0, 7                                             |         
    0x0001ed5c ldr r2, [r5, 8]                                       |         r2 = *((r5 + 8));
                                                                     |         if (r0 == 7) {
    0x0001ed5e beq.w 0x1f032                                         |             goto label_39;
                                                                     |         }
    0x0001ed62 cmp r2, 0                                             |         
                                                                     |         if (r2 == 0) {
    0x0001ed64 beq.w 0x1f03e                                         |             goto label_40;
                                                                     |         }
    0x0001ed68 ldr r1, [sp, 0x34]                                    |         r1 = var_34h;
    0x0001ed6a ldr r0, [sp, 8]                                       |         r0 = var_8h;
    0x0001ed6c bl 0x1ca34                                            |         fcn_0001ca34 (r0);
                                                                     |     }
                                                                     | label_14:
    0x0001ed70 ldr r0, [r5, 8]                                       |     r0 = *((r5 + 8));
    0x0001ed72 movs r4, 0                                            |     r4 = 0;
    0x0001ed74 blx 0x6050                                            |     fcn_00006050 ();
    0x0001ed78 ldr.w r1, [sb]                                        |     r1 = *(sb);
    0x0001ed7c str r4, [r5, 8]                                       |     *((r5 + 8)) = r4;
    0x0001ed7e cmp r1, r4                                            |     
                                                                     |     if (r1 <= r4) {
    0x0001ed80 ble 0x1edb8                                           |         goto label_41;
                                                                     |     }
    0x0001ed82 ldr r5, [sp, 8]                                       |     r5 = var_8h;
    0x0001ed84 ldr r6, [sp, 0x28]                                    |     r6 = var_28h;
                                                                     |     do {
    0x0001ed86 ldr.w r3, [sb, 4]                                     |         r3 = *((sb + 4));
    0x0001ed8a add.w r2, r4, r4, lsl 1                               |         r2 = r4 + (r4 << 1);
    0x0001ed8e add.w r3, r3, r2, lsl 2                               |         r3 += (r2 << 2);
    0x0001ed92 ldrb r3, [r3, 5]                                      |         r3 = *((r3 + 5));
                                                                     |         if (r3 == 0) {
    0x0001ed94 cbnz r3, 0x1edb2                                      |             
    0x0001ed96 ldr.w r3, [sb, 0x10]                                  |             r3 = *((sb + 0x10));
    0x0001ed9a ldr.w r3, [r3, r4, lsl 3]                             |             offset_1 = r4 << 3;
                                                                     |             r3 = *((r3 + offset_1));
    0x0001ed9c adds r0, 0x34                                         |             r0 += 0x34;
    0x0001ed9e cmp r3, 0                                             |             
                                                                     |             if (r3 <= 0) {
    0x0001eda0 ble 0x1edb2                                           |                 goto label_42;
                                                                     |             }
    0x0001eda2 ldr r3, [sp, 0xc]                                     |             r3 = var_ch;
    0x0001eda4 mov r1, r6                                            |             r1 = r6;
    0x0001eda6 mov r0, r5                                            |             r0 = r5;
    0x0001eda8 ldr r2, [r3]                                          |             r2 = *(r3);
    0x0001edaa bl 0x1ca34                                            |             fcn_0001ca34 (r0);
    0x0001edae ldr.w r1, [sb]                                        |             r1 = *(sb);
                                                                     |         }
                                                                     | label_42:
    0x0001edb2 adds r4, 1                                            |         r4++;
    0x0001edb4 cmp r4, r1                                            |         
    0x0001edb6 blt 0x1ed86                                           |         
                                                                     |     } while (r4 < r1);
                                                                     | label_41:
    0x0001edb8 ldr r3, [sp, 8]                                       |     r3 = var_8h;
    0x0001edba ldr r4, [r3, 0x40]                                    |     r4 = *((r3 + 0x40));
    0x0001edbc cmp r4, 0                                             |     
                                                                     |     if (r4 != 0) {
    0x0001edbe bne 0x1eeb0                                           |         goto label_43;
                                                                     |     }
    0x0001edc0 ldr r3, [sp, 0x1c]                                    |     r3 = var_1ch;
    0x0001edc2 ldr.w r5, [sb, 4]                                     |     r5 = *((sb + 4));
    0x0001edc6 str.w r3, [r8]                                        |     __asm ("str.w r3, [r8]");
    0x0001edca ldr r3, [sp, 0x20]                                    |     r3 = var_20h;
    0x0001edcc str.w r3, [r8, 4]                                     |     __asm ("str.w r3, [r8, 4]");
    0x0001edd0 ldr r3, [sp, 4]                                       |     r3 = var_4h;
    0x0001edd2 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0001edd4 beq.w 0x1f0a0                                         |         goto label_44;
                                                                     |     }
    0x0001edd8 ldr.w r6, [r8, 0x2c]                                  |     r6 = *((r8 + 0x2c));
    0x0001eddc mov r1, r4                                            |     r1 = r4;
    0x0001edde ldr r2, [sp, 0x24]                                    |     r2 = var_24h;
    0x0001ede0 mov r0, r6                                            |     r0 = r6;
    0x0001ede2 blx 0x5fcc                                            |     fcn_00005fcc ();
    0x0001ede6 adds r2, r7, 4                                        |     r2 = r7 + 4;
    0x0001ede8 ldr r0, [sp, 4]                                       |     r0 = var_4h;
    0x0001edea mov.w ip, -1                                          |     
    0x0001edee strh.w r4, [r8, 0x1e]                                 |     *((r8 + 0x1e)) = r4;
    0x0001edf2 str r2, [sp]                                          |     *(sp) = r2;
    0x0001edf4 b 0x1ee24                                             |     goto label_8;
                                                                     | label_1:
    0x0001edf6 ldr r1, [sp]                                          |     r1 = *(sp);
    0x0001edf8 ldrb.w r1, [r1, r4, lsl 3]                            |     offset_2 = r4 << 3;
                                                                     |     r1 = *((r1 + offset_2));
    0x0001edfc cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x0001edfe beq.w 0x1ef30                                         |         goto label_45;
                                                                     |     }
    0x0001ee02 movs r1, 1                                            |     r1 = 1;
    0x0001ee04 lsl.w r3, r1, r3                                      |     r3 = r1 << r3;
    0x0001ee08 ldrh.w r1, [r8, 0x1e]                                 |     r1 = *((r8 + 0x1e));
    0x0001ee0c orrs r3, r1                                           |     r3 |= r1;
    0x0001ee0e strh.w r3, [r8, 0x1e]                                 |     *((r8 + 0x1e)) = r3;
                                                                     |     if (r2 == 0) {
    0x0001ee12 cbz r2, 0x1ee1a                                       |         goto label_2;
                                                                     |     }
                                                                     | label_3:
    0x0001ee14 movs r3, 0                                            |     r3 = 0;
    0x0001ee16 str.w r3, [sb, 0x20]                                  |     __asm ("str.w r3, [sb, 0x20]");
                                                                     |     do {
                                                                     | label_2:
    0x0001ee1a adds r4, 1                                            |         r4++;
    0x0001ee1c adds r5, 0xc                                          |         r5 += 0xc;
    0x0001ee1e cmp r4, r0                                            |         
                                                                     |         if (r4 == r0) {
    0x0001ee20 beq.w 0x1ef3e                                         |             goto label_46;
                                                                     |         }
                                                                     | label_8:
    0x0001ee24 ldr.w r3, [r7, r4, lsl 3]                             |         offset_3 = r4 << 3;
                                                                     |         r3 = *((r7 + offset_3));
    0x0001ee28 subs r3, 1                                            |         r3--;
    0x0001ee2a bmi 0x1ee1a                                           |         
                                                                     |     } while (r3 < 1);
    0x0001ee2c ldr r1, [r5, 8]                                       |     r1 = *((r5 + 8));
    0x0001ee2e lsrs r2, r1, 0x1f                                     |     r2 = r1 >> 0x1f;
    0x0001ee30 cmp r3, r0                                            |     
    0x0001ee32 it ge                                                 |     
                                                                     |     if (r3 < r0) {
    0x0001ee34 orrge r2, r2, 1                                       |         r2 |= 1;
                                                                     |     }
    0x0001ee38 cmp r2, 0                                             |     
                                                                     |     if (r2 != 0) {
    0x0001ee3a bne.w 0x1efdc                                         |         goto label_47;
                                                                     |     }
    0x0001ee3e ldr.w r2, [fp, 0xc]                                   |     r2 = *(arg_ch);
    0x0001ee42 cmp r2, r1                                            |     
                                                                     |     if (r2 <= r1) {
    0x0001ee44 ble.w 0x1efdc                                         |         goto label_47;
                                                                     |     }
    0x0001ee48 ldr.w r2, [r6, r3, lsl 2]                             |     offset_4 = r3 << 2;
                                                                     |     r2 = *((r6 + offset_4));
    0x0001ee4c cmp r2, 0                                             |     
                                                                     |     if (r2 != 0) {
    0x0001ee4e bne.w 0x1efdc                                         |         goto label_47;
                                                                     |     }
    0x0001ee52 ldr.w r2, [fp, 0x14]                                  |     r2 = *(arg_14h);
    0x0001ee56 add.w r1, r1, r1, lsl 1                               |     r1 += (r1 << 1);
    0x0001ee5a cmp ip, r3                                            |     
    0x0001ee5c it lt                                                 |     
                                                                     |     if (ip >= r3) {
    0x0001ee5e movlt ip, r3                                          |         
                                                                     |     }
    0x0001ee60 cmp r3, 0xf                                           |     
    0x0001ee62 add.w lr, r2, r1, lsl 4                               |     lr = r2 + (r1 << 4);
    0x0001ee66 ldr.w r1, [r8]                                        |     r1 = *(r8);
    0x0001ee6a ldr.w r2, [lr, 0x20]                                  |     r2 = *((lr + 0x20));
    0x0001ee6e orr.w r1, r1, r2                                      |     r1 |= r2;
    0x0001ee72 ldr.w r2, [lr, 0x24]                                  |     r2 = *((lr + 0x24));
    0x0001ee76 str.w r1, [r8]                                        |     __asm ("str.w r1, [r8]");
    0x0001ee7a ldr.w r1, [r8, 4]                                     |     r1 = *((r8 + 4));
    0x0001ee7e orr.w r2, r2, r1                                      |     r2 |= r1;
    0x0001ee82 str.w r2, [r8, 4]                                     |     __asm ("str.w r2, [r8, 4]");
    0x0001ee86 ldrh.w r2, [lr, 0x12]                                 |     r2 = *((lr + 0x12));
    0x0001ee8a str.w lr, [r6, r3, lsl 2]                             |     __asm ("str.w lr, [r6, r3, lsl 2]");
    0x0001ee8e and r2, r2, 1                                         |     r2 &= 1;
                                                                     |     if (r3 <= 0xf) {
    0x0001ee92 ble 0x1edf6                                           |         goto label_1;
                                                                     |     }
    0x0001ee94 cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0001ee96 beq 0x1ee1a                                           |         goto label_2;
                                                                     |     }
    0x0001ee98 ldr r3, [sp]                                          |     r3 = *(sp);
    0x0001ee9a ldrb.w r3, [r3, r4, lsl 3]                            |     offset_5 = r4 << 3;
                                                                     |     r3 = *((r3 + offset_5));
    0x0001ee9e cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0001eea0 bne 0x1ee14                                           |         goto label_3;
                                                                     |     }
                                                                     | label_7:
    0x0001eea2 add.w sl, sl, 1                                       |     sl++;
    0x0001eea6 cmp.w sl, 4                                           |     
                                                                     |     if (sl != 4) {
    0x0001eeaa bne.w 0x1ec8a                                         |         goto label_4;
                                                                     |     }
                                                                     | label_31:
    0x0001eeae movs r4, 0                                            |     r4 = 0;
                                                                     | label_43:
    0x0001eeb0 ldr.w r3, [sb, 0x1c]                                  |     r3 = *((sb + 0x1c));
    0x0001eeb4 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0001eeb6 bne.w 0x1eff6                                         |         goto label_48;
                                                                     |     }
                                                                     | label_9:
    0x0001eeba ldr r0, [sp, 0x18]                                    |     r0 = var_18h;
    0x0001eebc mov r1, sb                                            |     r1 = sb;
    0x0001eebe bl 0xe12c                                             |     fcn_0000e12c (r0, r1);
                                                                     | label_12:
    0x0001eec2 mov r0, r4                                            |     r0 = r4;
    0x0001eec4 add sp, 0x3c                                          |     
    0x0001eec6 vpop {d8, d9, d10}                                    |     __asm ("vpop {d8, d9, d10}");
    0x0001eeca pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |     
                                                                     | label_35:
    0x0001eece ldrd r6, r3, [r3, 0x20]                               |     __asm ("ldrd r6, r3, [r3, 0x20]");
    0x0001eed2 orrs r6, r3                                           |     r6 |= r3;
    0x0001eed4 ite eq                                                |     
                                                                     |     if (r6 != r3) {
    0x0001eed6 moveq r3, 1                                           |         r3 = 1;
                                                                     |     }
                                                                     |     if (r6 == r3) {
    0x0001eed8 movne r3, 0                                           |         r3 = 0;
                                                                     |     }
    0x0001eeda strb r3, [r1, 5]                                      |     *((r1 + 5)) = r3;
    0x0001eedc b 0x1ecd6                                             |     goto label_5;
                                                                     | label_33:
    0x0001eede strb r5, [r1, 5]                                      |     *((r1 + 5)) = r5;
    0x0001eee0 ldrh.w lr, [r3, 0x12]                                 |     
    0x0001eee4 ldrd r6, r3, [r3, 0x20]                               |     __asm ("ldrd r6, r3, [r3, 0x20]");
    0x0001eee8 tst.w lr, 1                                           |     
                                                                     |     if ((lr & 1) == 0) {
    0x0001eeec beq 0x1ef02                                           |         goto label_49;
                                                                     |     }
    0x0001eeee orrs r6, r3                                           |     r6 |= r3;
    0x0001eef0 mov.w r3, 1                                           |     r3 = 1;
    0x0001eef4 it ne                                                 |     
                                                                     |     if (r6 == r3) {
    0x0001eef6 strdne r3, r3, [sp, 0x10]                             |         __asm ("strdne r3, r3, [var_10h]");
                                                                     |         goto label_50;
                                                                     |     }
                                                                     |     if (r6 != r3) {
                                                                     | label_50:
    0x0001eefa bne.w 0x1ecd6                                         |         goto label_5;
                                                                     |     }
    0x0001eefe str r3, [sp, 0x10]                                    |     var_10h = r3;
    0x0001ef00 b 0x1ecd6                                             |     goto label_5;
                                                                     | label_49:
    0x0001ef02 orrs r6, r3                                           |     r6 |= r3;
    0x0001ef04 itt ne                                                |     
                                                                     |     if (r6 == r3) {
    0x0001ef06 movne r3, 1                                           |         r3 = 1;
                                                                     |     }
                                                                     |     if (r6 != r3) {
    0x0001ef08 strne r3, [sp, 0x14]                                  |         var_14h = r3;
                                                                     |         goto label_51;
                                                                     |     }
                                                                     |     if (r6 != r3) {
                                                                     | label_51:
    0x0001ef0a bne.w 0x1ecd6                                         |         goto label_5;
                                                                     |     }
    0x0001ef0e b 0x1ecd2                                             |     goto label_6;
                                                                     | label_45:
    0x0001ef30 cmp r2, 0                                             |     
                                                                     |     if (r2 != 0) {
    0x0001ef32 bne 0x1eea2                                           |         goto label_7;
                                                                     |     }
    0x0001ef34 adds r4, 1                                            |     r4++;
    0x0001ef36 adds r5, 0xc                                          |     r5 += 0xc;
    0x0001ef38 cmp r4, r0                                            |     
                                                                     |     if (r4 != r0) {
    0x0001ef3a bne.w 0x1ee24                                         |         goto label_8;
                                                                     |     }
                                                                     | label_46:
    0x0001ef3e add.w r3, ip, 1                                       |     r3 = ip + 1;
    0x0001ef42 uxth r3, r3                                           |     r3 = (int16_t) r3;
                                                                     | label_18:
    0x0001ef44 ldr.w r2, [sb, 0x14]                                  |     r2 = *((sb + 0x14));
    0x0001ef48 movs r1, 0                                            |     r1 = 0;
    0x0001ef4a strh.w r3, [r8, 0x28]                                 |     *((r8 + 0x28)) = r3;
    0x0001ef4e ldr.w r3, [sb, 0x20]                                  |     r3 = *((sb + 0x20));
    0x0001ef52 str.w r2, [r8, 0x18]                                  |     __asm ("str.w r2, [r8, 0x18]");
    0x0001ef56 ldr.w r2, [sb, 0x1c]                                  |     r2 = *((sb + 0x1c));
    0x0001ef5a strb.w r2, [r8, 0x1c]                                 |     *((r8 + 0x1c)) = r2;
    0x0001ef5e ldr.w r2, [sb, 0x18]                                  |     r2 = *((sb + 0x18));
    0x0001ef62 str.w r1, [sb, 0x1c]                                  |     __asm ("str.w r1, [sb, 0x1c]");
    0x0001ef66 str.w r2, [r8, 0x20]                                  |     __asm ("str.w r2, [r8, 0x20]");
    0x0001ef6a cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0001ef6c bne 0x1f05e                                           |         goto label_52;
                                                                     |     }
                                                                     | label_15:
    0x0001ef6e vldr d7, [sb, 0x28]                                   |     __asm ("vldr d7, [sb, 0x28]");
    0x0001ef72 vmov.f64 d16, 1.000000e+00                            |     __asm ("vmov.f64 d16, 1");
    0x0001ef76 strb.w r3, [r8, 0x1d]                                 |     *((r8 + 0x1d)) = r3;
    0x0001ef7a movs r3, 0                                            |     r3 = 0;
    0x0001ef7c strh.w r3, [r8, 0x12]                                 |     *((r8 + 0x12)) = r3;
    0x0001ef80 vcmpe.f64 d7, d16                                     |     __asm ("vcmpe.f64 d7, d16");
    0x0001ef84 vmrs apsr_nzcv, fpscr                                 |     __asm ("vmrs apsr_nzcv, fpscr");
                                                                     |     if (r3 >= 0) {
    0x0001ef88 bls 0x1efa6                                           |         
    0x0001ef8a vcmpe.f64 d7, d10                                     |         __asm ("vcmpe.f64 d7, d10");
    0x0001ef8e vmrs apsr_nzcv, fpscr                                 |         __asm ("vmrs apsr_nzcv, fpscr");
                                                                     |         if (r3 < 0) {
    0x0001ef92 bls 0x1f090                                           |             goto label_53;
                                                                     |         }
    0x0001ef94 vmov r3, s15                                          |         __asm ("vmov r3, s15");
    0x0001ef98 lsrs r3, r3, 0x14                                     |         r3 >>= 0x14;
    0x0001ef9a subw r3, r3, 0x3fe                                    |         __asm ("subw r3, r3, aav.0x000000ff");
    0x0001ef9e add.w r3, r3, r3, lsl 2                               |         r3 += (r3 << 2);
    0x0001efa2 lsls r3, r3, 1                                        |         r3 <<= 1;
    0x0001efa4 sxth r3, r3                                           |         __asm ("sxth r3, r3");
                                                                     |     }
                                                                     | label_17:
    0x0001efa6 ldrd r0, r1, [sb, 0x30]                               |     __asm ("ldrd r0, r1, [sb, 0x30]");
    0x0001efaa strh.w r3, [r8, 0x14]                                 |     *((r8 + 0x14)) = r3;
    0x0001efae bl 0x73ac                                             |     fcn_000073ac (r0, r1);
    0x0001efb2 ldr r3, [sp, 0x30]                                    |     r3 = var_30h;
    0x0001efb4 mov r2, r8                                            |     r2 = r8;
    0x0001efb6 strh.w r0, [r8, 0x16]                                 |     *((r8 + 0x16)) = r0;
    0x0001efba ldr r1, [r3, 0x10]                                    |     r1 = *((r3 + 0x10));
    0x0001efbc ldr r0, [r3]                                          |     r0 = *(r3);
    0x0001efbe bl 0xfab8                                             |     fcn_0000fab8 (r0, r1, r2);
    0x0001efc2 ldrb.w r3, [r8, 0x1c]                                 |     r3 = *((r8 + 0x1c));
    0x0001efc6 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0001efc8 beq.w 0x1eea2                                         |         goto label_7;
                                                                     |     }
    0x0001efcc ldr.w r0, [r8, 0x20]                                  |     r0 = *((r8 + 0x20));
    0x0001efd0 blx 0x6050                                            |     fcn_00006050 ();
    0x0001efd4 movs r3, 0                                            |     r3 = 0;
    0x0001efd6 strb.w r3, [r8, 0x1c]                                 |     *((r8 + 0x1c)) = r3;
    0x0001efda b 0x1eea2                                             |     goto label_7;
                                                                     | label_47:
    0x0001efdc ldr r3, [sp, 0xc]                                     |     r3 = var_ch;
    0x0001efde movs r4, 1                                            |     r4 = 1;
    0x0001efe0 ldr r1, [pc, 0xd4]                                    |     
    0x0001efe2 ldr r0, [sp, 8]                                       |     r0 = var_8h;
    0x0001efe4 ldr r2, [r3]                                          |     r2 = *(r3);
    0x0001efe6 add r1, pc                                            |     r1 = 0x3e0a2;
    0x0001efe8 bl 0x1ca34                                            |     fcn_0001ca34 (r0);
    0x0001efec ldr.w r3, [sb, 0x1c]                                  |     r3 = *((sb + 0x1c));
    0x0001eff0 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0001eff2 beq.w 0x1eeba                                         |         goto label_9;
                                                                     |     }
                                                                     | label_48:
    0x0001eff6 ldr.w r0, [sb, 0x18]                                  |     r0 = *((sb + 0x18));
    0x0001effa blx 0x6050                                            |     fcn_00006050 ();
    0x0001effe b 0x1eeba                                             |     goto label_9;
                                                                     | label_36:
    0x0001f000 ldr.w r0, [sb, 0x18]                                  |     r0 = *((sb + 0x18));
    0x0001f004 blx 0x6050                                            |     fcn_00006050 ();
    0x0001f008 b 0x1ed20                                             |     goto label_10;
                                                                     | label_22:
    0x0001f00a ldr r0, [sp, 0x18]                                    |     r0 = var_18h;
    0x0001f00c mov r1, r7                                            |     r1 = r7;
    0x0001f00e bl 0xd3a0                                             |     fcn_0000d3a0 (r0, r1);
    0x0001f012 mov r5, sl                                            |     r5 = sl;
    0x0001f014 mov r4, sl                                            |     r4 = sl;
    0x0001f016 mov sb, r0                                            |     sb = r0;
    0x0001f018 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0001f01a bne.w 0x1eb7c                                         |         goto label_11;
                                                                     |     }
                                                                     | label_25:
    0x0001f01e ldr r1, [pc, 0x9c]                                    |     
    0x0001f020 movs r4, 7                                            |     r4 = 7;
    0x0001f022 ldr r0, [sp, 8]                                       |     r0 = var_8h;
    0x0001f024 add r1, pc                                            |     r1 = 0x3e0e6;
    0x0001f026 bl 0x1ca34                                            |     fcn_0001ca34 (r0);
    0x0001f02a b 0x1eec2                                             |     goto label_12;
                                                                     | label_19:
    0x0001f02c lsls r5, r4, 3                                        |     r5 = r4 << 3;
    0x0001f02e add r7, r5                                            |     r7 += r5;
    0x0001f030 b 0x1eb6c                                             |     goto label_13;
                                                                     | label_39:
    0x0001f032 ldr r3, [sp, 8]                                       |     r3 = var_8h;
    0x0001f034 movs r2, 1                                            |     r2 = 1;
    0x0001f036 ldr r3, [r3]                                          |     r3 = *(r3);
    0x0001f038 strb.w r2, [r3, 0x40]                                 |     *((r3 + 0x40)) = r2;
    0x0001f03c b 0x1ed70                                             |     goto label_14;
                                                                     | label_40:
    0x0001f03e cmp.w r0, 0x204                                       |     
                                                                     |     if (r0 != 0x204) {
    0x0001f042 beq 0x1f064                                           |         
    0x0001f044 uxtb r0, r0                                           |         r0 = (int8_t) r0;
    0x0001f046 cmp r0, 0x1a                                          |         
                                                                     |         if (r0 > 0x1a) {
    0x0001f048 bgt 0x1f07e                                           |             goto label_54;
                                                                     |         }
    0x0001f04a ldr r3, [pc, 0x74]                                    |         
    0x0001f04c add r3, pc                                            |         r3 = 0x3e112;
    0x0001f04e add.w r3, r3, r0, lsl 2                               |         r3 += (r0 << 2);
    0x0001f052 ldr.w r2, [r3, 0x158]                                 |         r2 = *((r3 + 0x158));
                                                                     |         if (r2 != 0) {
    0x0001f056 cbnz r2, 0x1f068                                      |             goto label_55;
                                                                     |         }
    0x0001f058 ldr r2, [pc, 0x68]                                    |         
    0x0001f05a add r2, pc                                            |         r2 = 0x3e122;
    0x0001f05c b 0x1f068                                             |         goto label_55;
                                                                     | label_52:
    0x0001f05e ldrsb.w r3, [sb, 8]                                   |         r3 = *((sb + 8));
    0x0001f062 b 0x1ef6e                                             |         goto label_15;
                                                                     |     }
    0x0001f064 ldr r2, [pc, 0x60]                                    |     
    0x0001f066 add r2, pc                                            |     r2 = 0x3e132;
                                                                     |     do {
                                                                     | label_55:
    0x0001f068 ldr r1, [pc, 0x60]                                    |         
    0x0001f06a ldr r0, [sp, 8]                                       |         r0 = var_8h;
    0x0001f06c add r1, pc                                            |         r1 = 0x3e13c;
    0x0001f06e bl 0x1ca34                                            |         fcn_0001ca34 (r0);
    0x0001f072 b 0x1ed70                                             |         goto label_14;
                                                                     | label_20:
    0x0001f074 movs r3, 0                                            |         r3 = 0;
    0x0001f076 movs r7, 0x38                                         |         r7 = 0x38;
    0x0001f078 str r3, [sp, 0x14]                                    |         var_14h = r3;
    0x0001f07a str r3, [sp, 4]                                       |         var_4h = r3;
    0x0001f07c b 0x1eb1e                                             |         goto label_16;
                                                                     | label_54:
    0x0001f07e ldr r2, [pc, 0x50]                                    |         
    0x0001f080 add r2, pc                                            |         r2 = 0x3e156;
    0x0001f082 b 0x1f068                                             |         
                                                                     |     } while (1);
                                                                     | label_29:
    0x0001f084 ldr r0, [sp, 0x18]                                    |     r0 = var_18h;
    0x0001f086 mov r1, sb                                            |     r1 = sb;
    0x0001f088 movs r4, 7                                            |     r4 = 7;
    0x0001f08a bl 0xe12c                                             |     fcn_0000e12c (r0, r1);
    0x0001f08e b 0x1eec2                                             |     goto label_12;
                                                                     | label_53:
    0x0001f090 vmov r0, r1, d7                                       |     __asm ("vmov r0, r1, d7");
    0x0001f094 bl 0x5e610                                            |     r0 = fcn_0005e610 (r0, r1);
    0x0001f098 bl 0x73ac                                             |     r0 = fcn_000073ac (r0, r1);
    0x0001f09c mov r3, r0                                            |     r3 = r0;
    0x0001f09e b 0x1efa6                                             |     goto label_17;
                                                                     | label_44:
    0x0001f0a0 ldr r3, [sp, 4]                                       |     r3 = var_4h;
    0x0001f0a2 strh.w r3, [r8, 0x1e]                                 |     *((r8 + 0x1e)) = r3;
    0x0001f0a6 b 0x1ef44                                             |     goto label_18;
                                                                     |     if (r4 == 7) {
                                                                     | label_23:
    0x0001f0a8 beq 0x1f02c                                           |         goto label_19;
                                                                     |     }
    0x0001f0aa movs r5, 0                                            |     r5 = 0;
    0x0001f0ac mov r4, r5                                            |     r4 = r5;
    0x0001f0ae b 0x1eb6c                                             |     goto label_13;
                                                                     | label_38:
    0x0001f0b0 movs r3, 0                                            |     r3 = 0;
    0x0001f0b2 ldr r3, [r3, 8]                                       |     r3 = *((r3 + 8));
    0x0001f0b4 udf 0xff                                              |     __asm ("udf 0xff");
                                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x201b4 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.000201b4 ()                                      | void fcn_000201b4 (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;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h_2;
                                                                 |     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_48h;
                                                                 |     int16_t var_4ch;
                                                                 |     int16_t var_50h;
                                                                 |     int16_t var_64h;
                                                                 |     int16_t var_68h;
                                                                 |     int16_t var_6ch;
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_a0h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x000201b4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x000201b8 mov r5, r3                                        |     r5 = r3;
    0x000201ba ldr.w r0, [pc, 0]                                 |     r0 = *(0x000201bc);
    0x000201be movs r0, r0                                       |     
    0x000201c0 ldr.w r3, [pc, 0x434]                             |     
    0x000201c4 add r4, pc                                        |     r4 += pc;
    0x000201c6 ldr r6, [r5, 0x24]                                |     r6 = *((r5 + 0x24));
    0x000201c8 ldr r3, [r4, r3]                                  |     r3 = *((r4 + r3));
    0x000201ca lsls r6, r6, 0x12                                 |     r6 <<= 0x12;
    0x000201cc ldr r3, [r3]                                      |     r3 = *(0x205f8);
    0x000201ce str r3, [sp, 0x6c]                                |     var_6ch = r3;
    0x000201d0 mov.w r3, 0                                       |     r3 = 0;
    0x000201d4 ldr r3, [sp, 0x98]                                |     r3 = var_0h;
    0x000201d6 str r3, [sp, 8]                                   |     var_8h = r3;
    0x000201d8 ldr r3, [sp, 0x9c]                                |     r3 = var_4h;
    0x000201da str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x000201dc ldrh.w r3, [sp, 0xa0]                             |     r3 = var_a0h;
                                                                 |     if (r6 >= r6) {
    0x000201e0 bmi 0x20204                                       |         
    0x000201e2 lsls r4, r3, 0x19                                 |         r4 = r3 << 0x19;
    0x000201e4 invalid                                           |         
    0x000201e6 movs r0, r0                                       |         
    0x000201e8 lsrs r0, r6, 0xc                                  |         r0 = r6 >> 0xc;
    0x000201ea mov r8, r1                                        |         r8 = r1;
    0x000201ec mov r7, r2                                        |         r7 = r2;
                                                                 |         if (r0 == r6) {
    0x000201ee bne 0x20220                                       |             
    0x000201f0 lsls r2, r6, 0x15                                 |             r2 = r6 << 0x15;
                                                                 |             if (r2 < r6) {
    0x000201f2 bmi.w 0x203bc                                     |                 goto label_7;
                                                                 |             }
    0x000201f6 ldrh r2, [r5, 0x18]                               |             r2 = *((r5 + 0x18));
    0x000201f8 cmp r2, 0                                         |             
                                                                 |             if (r2 == 0) {
    0x000201fa beq.w 0x203bc                                     |                 goto label_7;
                                                                 |             }
    0x000201fe ldr r2, [pc, 0x3fc]                               |             
    0x00020200 add r2, pc                                        |             r2 = 0x40802;
    0x00020202 b 0x20224                                         |             
                                                                 |         } else {
    0x00020204 ldr r2, [pc, 0x3f8]                               |             
    0x00020206 ldr r3, [pc, 0x3f0]                               |             r3 = *(0x205fa);
    0x00020208 add r2, pc                                        |             r2 = 0x4080c;
    0x0002020a ldr r3, [r2, r3]                                  |             r3 = *(0x4080c);
    0x0002020c ldr r2, [r3]                                      |             r2 = *(0x4080c);
    0x0002020e ldr r3, [sp, 0x6c]                                |             r3 = var_6ch;
    0x00020210 eors r2, r3                                       |             r2 ^= r3;
    0x00020212 mov.w r3, 0                                       |             r3 = 0;
                                                                 |             if (r2 != r3) {
    0x00020216 bne.w 0x205ee                                     |                 goto label_8;
                                                                 |             }
    0x0002021a add sp, 0x74                                      |             
    0x0002021c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |             
                                                                 |         }
    0x00020220 ldr r2, [pc, 0x3e0]                               |         
    0x00020222 add r2, pc                                        |         r2 = 0x4082a;
                                                                 |     }
                                                                 | label_1:
    0x00020224 ldr r3, [r0, 8]                                   |     r3 = *((r0 + 8));
    0x00020226 lsls r4, r7, 3                                    |     r4 = r7 << 3;
    0x00020228 ldr.w sl, [r0]                                    |     sl = *(r0);
    0x0002022c ldr r1, [pc, 0x3d8]                               |     
    0x0002022e str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00020230 ldr.w r3, [r0, 0x1d0]                             |     r3 = *((r0 + 0x1d0));
    0x00020234 mov r0, sl                                        |     r0 = sl;
    0x00020236 add r1, pc                                        |     r1 = 0x40842;
    0x00020238 str r4, [sp, 0x10]                                |     var_10h = r4;
    0x0002023a str r3, [sp, 0x18]                                |     var_18h_2 = r3;
    0x0002023c bl 0x1babc                                        |     fcn_0001babc (r0);
    0x00020240 adds r2, r4, r7                                   |     r2 = r4 + r7;
    0x00020242 mov r3, r0                                        |     r3 = r0;
    0x00020244 add.w r2, r8, r2, lsl 3                           |     r2 = r8 + (r2 << 3);
    0x00020248 ldr r1, [r2, 0x1c]                                |     r1 = *((r2 + 0x1c));
    0x0002024a cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0002024c beq.w 0x203c8                                     |         goto label_9;
                                                                 |     }
    0x00020250 ldrb.w r2, [r2, 0x2e]                             |     r2 = *((r2 + 0x2e));
    0x00020254 mov r1, r0                                        |     r1 = r0;
    0x00020256 mov r0, sl                                        |     r0 = sl;
    0x00020258 str r2, [sp]                                      |     *(sp) = r2;
    0x0002025a ldr r2, [pc, 0x3b0]                               |     
    0x0002025c add r2, pc                                        |     r2 = 0x4086e;
    0x0002025e bl 0x2014c                                        |     r0 = fcn_0002014c (r0, r1);
    0x00020262 mov sb, r0                                        |     sb = r0;
                                                                 | label_2:
    0x00020264 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00020266 add r3, r7                                        |     r3 += r7;
    0x00020268 add.w r3, r8, r3, lsl 3                           |     r3 = r8 + (r3 << 3);
    0x0002026c ldr r3, [r3, 0x14]                                |     r3 = *((r3 + 0x14));
                                                                 |     if (r3 != 0) {
    0x0002026e cbz r3, 0x20282                                   |         
    0x00020270 ldr r2, [pc, 0x39c]                               |         
    0x00020272 mov r1, sb                                        |         r1 = sb;
    0x00020274 str r3, [sp]                                      |         *(sp) = r3;
    0x00020276 mov r0, sl                                        |         r0 = sl;
    0x00020278 mov r3, sb                                        |         r3 = sb;
    0x0002027a add r2, pc                                        |         r2 = 0x4088e;
    0x0002027c bl 0x2014c                                        |         r0 = fcn_0002014c (r0, r1);
    0x00020280 mov sb, r0                                        |         sb = r0;
                                                                 |     }
    0x00020282 ands r4, r6, 0x500                                |     r4 = r6 & 0x500;
                                                                 |     if (r4 == r6) {
    0x00020286 bne 0x2031a                                       |         
    0x00020288 ldr r2, [r5, 0x1c]                                |         r2 = *((r5 + 0x1c));
    0x0002028a str r2, [sp, 0x28]                                |         var_28h = r2;
    0x0002028c cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x0002028e beq 0x2031a                                       |             goto label_10;
                                                                 |         }
    0x00020290 ldr r3, [sp, 0x10]                                |         r3 = var_10h;
    0x00020292 ldr r2, [r2, 4]                                   |         r2 = *((r2 + 4));
    0x00020294 ldrh r1, [r5, 0x18]                               |         r1 = *((r5 + 0x18));
    0x00020296 add r3, r7                                        |         r3 += r7;
    0x00020298 ldrh r0, [r5, 0x1a]                               |         r0 = *((r5 + 0x1a));
    0x0002029a add.w r3, r8, r3, lsl 3                           |         r3 = r8 + (r3 << 3);
    0x0002029e str r2, [sp, 0x2c]                                |         var_2ch = r2;
    0x000202a0 str r1, [sp, 0x24]                                |         var_24h = r1;
    0x000202a2 ldr r3, [r3, 0x18]                                |         r3 = *((r3 + 0x18));
    0x000202a4 str r0, [sp, 0x30]                                |         var_30h = r0;
    0x000202a6 ldr r2, [r3, 4]                                   |         r2 = *((r3 + 4));
    0x000202a8 str r2, [sp, 0x1c]                                |         var_1ch = r2;
    0x000202aa cmp r1, 0                                         |         
                                                                 |         if (r1 != 0) {
    0x000202ac bne.w 0x20468                                     |             goto label_11;
                                                                 |         }
    0x000202b0 ldr r4, [r5, 0x24]                                |         r4 = *((r5 + 0x24));
    0x000202b2 ands r4, r4, 0x30                                 |         r4 &= 0x30;
                                                                 |         if (r4 == r4) {
    0x000202b6 beq.w 0x20422                                     |             goto label_12;
                                                                 |         }
    0x000202ba ldr r3, [sp, 0x24]                                |         r3 = var_24h;
    0x000202bc add.w fp, sp, 0x50                                |         
    0x000202c0 ldr r1, [pc, 0x350]                               |         
    0x000202c2 movs r2, 2                                        |         r2 = 2;
    0x000202c4 mov r0, fp                                        |         r0 = fp;
    0x000202c6 str.w sl, [sp, 0x50]                              |         __asm ("str.w sl, [var_50h]");
    0x000202ca strd r3, r3, [sp, 0x54]                           |         __asm ("strd r3, r3, [sp, 0x54]");
    0x000202ce strd r3, r3, [sp, 0x5c]                           |         __asm ("strd r3, r3, [sp, 0x5c]");
    0x000202d2 mov.w r3, 0xca00                                  |         
    0x000202d6 movt r3, 0x3b9a                                   |         r3 = 0x3b9aca00;
    0x000202da add r1, pc                                        |         r1 = 0x408f2;
    0x000202dc str r3, [sp, 0x64]                                |         var_64h = r3;
    0x000202de movs r3, 1                                        |         r3 = 1;
    0x000202e0 strh.w r3, [sp, 0x68]                             |         var_68h = r3;
    0x000202e4 bl 0x1a768                                        |         fcn_0001a768 (r0, r1, r2);
                                                                 | label_3:
    0x000202e8 ldr r3, [r5, 0x24]                                |         r3 = *((r5 + 0x24));
    0x000202ea lsls r1, r3, 0x1a                                 |         r1 = r3 << 0x1a;
                                                                 |         if (r1 >= r3) {
    0x000202ec bpl 0x203dc                                       |             goto label_13;
                                                                 |         }
    0x000202ee ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x000202f0 ldr r2, [sp, 0x24]                                |         r2 = var_24h;
    0x000202f2 ldrsh.w r3, [r3, r2, lsl 1]                       |         offset_0 = r2 << 1;
                                                                 |         r3 = *((r3 + offset_0));
    0x000202f6 cmp r3, 0                                         |         
                                                                 |         if (r3 < 0) {
    0x000202f8 blt.w 0x2059e                                     |             goto label_14;
                                                                 |         }
    0x000202fc ldr r2, [sp, 0x1c]                                |         r2 = var_1ch;
    0x000202fe add.w r3, r3, r3, lsl 1                           |         r3 += (r3 << 1);
    0x00020302 ldr.w r2, [r2, r3, lsl 3]                         |         offset_1 = r3 << 3;
                                                                 |         r2 = *((r2 + offset_1));
    0x00020306 ldr r4, [sp, 0x24]                                |         r4 = var_24h;
    0x00020308 mov r0, fp                                        |         r0 = fp;
    0x0002030a ldr r3, [pc, 0x30c]                               |         
    0x0002030c mov r1, r4                                        |         r1 = r4;
    0x0002030e add r3, pc                                        |         r3 = 0x4092c;
    0x00020310 bl 0x1a8ec                                        |         fcn_0001a8ec (r0, r1, r2);
    0x00020314 ldr r3, [r5, 0x24]                                |         r3 = *((r5 + 0x24));
    0x00020316 adds r1, r4, 1                                    |         r1 = r4 + 1;
    0x00020318 b 0x203de                                         |         goto label_15;
                                                                 |     }
                                                                 | label_10:
    0x0002031a lsls r4, r6, 0x17                                 |     r4 = r6 << 0x17;
                                                                 |     if (r4 >= r6) {
    0x0002031c bpl 0x2039e                                       |         goto label_16;
                                                                 |     }
    0x0002031e lsls r0, r6, 0x1c                                 |     r0 = r6 << 0x1c;
                                                                 |     if (r0 == r6) {
    0x00020320 beq 0x2039e                                       |         goto label_16;
                                                                 |     }
    0x00020322 ldr r2, [pc, 0x2f8]                               |     
    0x00020324 mov r3, sb                                        |     r3 = sb;
    0x00020326 mov r1, sb                                        |     r1 = sb;
    0x00020328 mov r0, sl                                        |     r0 = sl;
    0x0002032a add r2, pc                                        |     r2 = 0x4094c;
    0x0002032c bl 0x2014c                                        |     fcn_0002014c (r0, r1);
    0x00020330 tst.w r6, 5                                       |     
    0x00020334 mov sb, r0                                        |     sb = r0;
                                                                 |     if ((r6 & 5) != 0) {
    0x00020336 bne.w 0x205ac                                     |         goto label_17;
                                                                 |     }
    0x0002033a cmp.w fp, 0x30                                    |     
                                                                 |     if (fp == 0x30) {
    0x0002033e beq.w 0x205d6                                     |         goto label_18;
                                                                 |     }
    0x00020342 lsls r1, r6, 0x1a                                 |     r1 = r6 << 0x1a;
                                                                 |     if (r1 < r6) {
    0x00020344 bmi.w 0x205c4                                     |         goto label_19;
                                                                 |     }
    0x00020348 lsls r2, r6, 0x1b                                 |     r2 = r6 << 0x1b;
                                                                 |     if (r2 >= r6) {
    0x0002034a bpl 0x2035c                                       |         goto label_0;
                                                                 |     }
    0x0002034c ldr r2, [pc, 0x2d0]                               |     
    0x0002034e mov r3, r0                                        |     r3 = r0;
    0x00020350 mov r1, r0                                        |     r1 = r0;
    0x00020352 mov r0, sl                                        |     r0 = sl;
    0x00020354 add r2, pc                                        |     r2 = 0x40978;
    0x00020356 bl 0x2014c                                        |     r0 = fcn_0002014c (r0, r1);
    0x0002035a mov sb, r0                                        |     sb = r0;
                                                                 |     do {
                                                                 | label_0:
    0x0002035c ldr r2, [pc, 0x2c4]                               |         
    0x0002035e mov r3, sb                                        |         r3 = sb;
    0x00020360 mov r0, sl                                        |         r0 = sl;
    0x00020362 mov r1, sb                                        |         r1 = sb;
    0x00020364 add r2, pc                                        |         r2 = 0x4098c;
    0x00020366 bl 0x2014c                                        |         fcn_0002014c (r0, r1);
    0x0002036a ldr r2, [pc, 0x2bc]                               |         
    0x0002036c ldr r3, [pc, 0x288]                               |         r3 = *(0x205f8);
    0x0002036e add r2, pc                                        |         r2 = 0x4099c;
    0x00020370 ldr r3, [r2, r3]                                  |         r3 = *(0x4099c);
    0x00020372 ldr r2, [r3]                                      |         r2 = *(0x4099c);
    0x00020374 ldr r3, [sp, 0x6c]                                |         r3 = var_6ch;
    0x00020376 eors r2, r3                                       |         r2 ^= r3;
    0x00020378 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0002037c bne.w 0x205ee                                     |             goto label_8;
                                                                 |         }
    0x00020380 ldr r4, [sp, 0xc]                                 |         r4 = var_ch;
    0x00020382 movs r1, 0x9e                                     |         r1 = 0x9e;
    0x00020384 str r0, [sp, 0x9c]                                |         var_4h = r0;
    0x00020386 ldr r3, [sp, 8]                                   |         r3 = var_8h;
    0x00020388 str r4, [sp, 0x98]                                |         var_0h = r4;
    0x0002038a mov.w r4, -1                                      |         r4 = -1;
    0x0002038e ldr r2, [sp, 0x18]                                |         r2 = var_18h_2;
    0x00020390 ldr r0, [sp, 0x14]                                |         r0 = var_14h;
    0x00020392 str r4, [sp, 0xa0]                                |         var_a0h = r4;
    0x00020394 add sp, 0x74                                      |         
    0x00020396 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |         
    0x0002039a b.w 0x1977c                                       |         void (*0x1977c)() ();
                                                                 | label_16:
    0x0002039e lsls r3, r6, 0x15                                 |         r3 = r6 << 0x15;
    0x000203a0 bpl 0x2035c                                       |         
                                                                 |     } while (r3 >= r6);
    0x000203a2 ldr r3, [r5, 0x20]                                |     r3 = *((r5 + 0x20));
    0x000203a4 mov r1, sb                                        |     r1 = sb;
    0x000203a6 ldr r2, [pc, 0x284]                               |     
    0x000203a8 mov r0, sl                                        |     r0 = sl;
    0x000203aa str r3, [sp, 4]                                   |     var_4h_2 = r3;
    0x000203ac ldr r3, [r5, 0x18]                                |     r3 = *((r5 + 0x18));
    0x000203ae add r2, pc                                        |     r2 = 0x409e0;
    0x000203b0 str r3, [sp]                                      |     *(sp) = r3;
    0x000203b2 mov r3, sb                                        |     r3 = sb;
    0x000203b4 bl 0x2014c                                        |     r0 = fcn_0002014c (r0, r1);
    0x000203b8 mov sb, r0                                        |     sb = r0;
    0x000203ba b 0x2035c                                         |     goto label_0;
                                                                 | label_7:
    0x000203bc lsls r4, r3, 0x1e                                 |     r4 = r3 << 0x1e;
                                                                 |     if (r4 != r3) {
    0x000203be bne.w 0x2058c                                     |         goto label_20;
                                                                 |     }
    0x000203c2 ldr r2, [pc, 0x26c]                               |     
    0x000203c4 add r2, pc                                        |     r2 = 0x409fa;
    0x000203c6 b 0x20224                                         |     goto label_1;
                                                                 | label_9:
    0x000203c8 ldr r2, [r2, 0x10]                                |     r2 = *((r2 + 0x10));
    0x000203ca mov r1, r0                                        |     r1 = r0;
    0x000203cc mov r0, sl                                        |     r0 = sl;
    0x000203ce str r2, [sp]                                      |     *(sp) = r2;
    0x000203d0 ldr r2, [pc, 0x260]                               |     
    0x000203d2 add r2, pc                                        |     r2 = 0x40a0a;
    0x000203d4 bl 0x2014c                                        |     r0 = fcn_0002014c (r0, r1);
    0x000203d8 mov sb, r0                                        |     sb = r0;
    0x000203da b 0x20264                                         |     goto label_2;
                                                                 | label_13:
    0x000203dc ldr r1, [sp, 0x24]                                |     r1 = var_24h;
                                                                 | label_15:
    0x000203de lsls r2, r3, 0x1b                                 |     r2 = r3 << 0x1b;
                                                                 |     if (r2 < r3) {
    0x000203e0 bpl 0x20404                                       |         
    0x000203e2 ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x000203e4 ldr r2, [sp, 0x24]                                |         r2 = var_24h;
    0x000203e6 ldrsh.w r3, [r3, r2, lsl 1]                       |         offset_2 = r2 << 1;
                                                                 |         r3 = *((r3 + offset_2));
    0x000203ea cmp r3, 0                                         |         
                                                                 |         if (r3 < 0) {
    0x000203ec blt.w 0x20598                                     |             goto label_21;
                                                                 |         }
    0x000203f0 ldr r2, [sp, 0x1c]                                |         r2 = var_1ch;
    0x000203f2 add.w r3, r3, r3, lsl 1                           |         r3 += (r3 << 1);
    0x000203f6 ldr.w r2, [r2, r3, lsl 3]                         |         offset_3 = r3 << 3;
                                                                 |         r2 = *((r2 + offset_3));
    0x000203fa ldr r3, [pc, 0x23c]                               |         
    0x000203fc mov r0, fp                                        |         r0 = fp;
    0x000203fe add r3, pc                                        |         r3 = 0x40a3c;
    0x00020400 bl 0x1a8ec                                        |         fcn_0001a8ec (r0, r1, r2);
                                                                 |     }
    0x00020404 ldr r1, [pc, 0x234]                               |     
    0x00020406 movs r2, 1                                        |     r2 = 1;
    0x00020408 mov r0, fp                                        |     r0 = fp;
    0x0002040a add r1, pc                                        |     r1 = 0x40a4a;
    0x0002040c bl 0x1a768                                        |     fcn_0001a768 (r0, r1, r2);
    0x00020410 mov r0, fp                                        |     r0 = fp;
    0x00020412 bl 0x171d4                                        |     fcn_000171d4 (r0);
    0x00020416 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00020418 mov r4, r0                                        |     r4 = r0;
    0x0002041a add r3, r7                                        |     r3 += r7;
    0x0002041c add.w r7, r8, r3, lsl 3                           |     r7 = r8 + (r3 << 3);
    0x00020420 ldr r3, [r7, 0x18]                                |     r3 = *((r7 + 0x18));
                                                                 | label_12:
    0x00020422 ldrb.w r3, [r3, 0x2c]                             |     r3 = *((r3 + 0x2c));
    0x00020426 lsls r3, r3, 0x1a                                 |     r3 <<= 0x1a;
                                                                 |     if (r3 < r3) {
    0x00020428 bpl 0x2043a                                       |         
    0x0002042a ldr r3, [sp, 0x28]                                |         r3 = var_28h;
    0x0002042c ldrb.w r3, [r3, 0x37]                             |         r3 = *((r3 + 0x37));
    0x00020430 and r3, r3, 3                                     |         r3 &= 3;
    0x00020434 cmp r3, 2                                         |         
                                                                 |         if (r3 == 2) {
    0x00020436 beq.w 0x205a4                                     |             goto label_22;
                                                                 |         }
                                                                 |     }
    0x0002043a lsls r7, r6, 0x11                                 |     r7 = r6 << 0x11;
                                                                 |     if (r7 < r6) {
    0x0002043c bmi.w 0x20592                                     |         goto label_23;
                                                                 |     }
    0x00020440 lsls r5, r6, 0x19                                 |     r5 = r6 << 0x19;
                                                                 |     if (r5 < r6) {
    0x00020442 bmi.w 0x205be                                     |         goto label_24;
                                                                 |     }
    0x00020446 ldr r2, [pc, 0x1f8]                               |     
    0x00020448 add r2, pc                                        |     r2 = 0x40a8e;
                                                                 | label_6:
    0x0002044a ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x0002044c mov r1, sb                                        |     r1 = sb;
    0x0002044e str r4, [sp, 4]                                   |     var_4h_2 = r4;
    0x00020450 mov r0, sl                                        |     r0 = sl;
    0x00020452 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00020454 str r3, [sp]                                      |     *(sp) = r3;
    0x00020456 mov r3, sb                                        |     r3 = sb;
    0x00020458 bl 0x2014c                                        |     fcn_0002014c (r0, r1);
    0x0002045c mov r1, r4                                        |     r1 = r4;
    0x0002045e mov sb, r0                                        |     sb = r0;
    0x00020460 mov r0, sl                                        |     r0 = sl;
    0x00020462 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x00020466 b 0x2035c                                         |     goto label_0;
                                                                 | label_11:
    0x00020468 ldr r3, [pc, 0x1d8]                               |     
    0x0002046a add.w fp, sp, 0x50                                |     
    0x0002046e ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x00020470 mov r0, fp                                        |     r0 = fp;
    0x00020472 ldr r2, [pc, 0x1d4]                               |     
    0x00020474 add r3, pc                                        |     r3 = 0x40abc;
    0x00020476 strd r4, r4, [sp, 0x54]                           |     __asm ("strd r4, r4, [sp, 0x54]");
    0x0002047a str r3, [sp, 0x20]                                |     var_20h = r3;
    0x0002047c subs r1, 2                                        |     r1 -= 2;
    0x0002047e ldr r3, [pc, 0x1cc]                               |     
    0x00020480 add r2, pc                                        |     r2 = 0x40ace;
    0x00020482 str r1, [sp, 0x34]                                |     var_34h = r1;
    0x00020484 ldr r1, [pc, 0x1c8]                               |     
    0x00020486 add r3, pc                                        |     r3 = 0x40ad8;
    0x00020488 str r2, [sp, 0x3c]                                |     var_3ch = r2;
    0x0002048a str r3, [sp, 0x38]                                |     var_38h = r3;
    0x0002048c mov.w r3, 0xca00                                  |     
    0x00020490 movt r3, 0x3b9a                                   |     r3 = 0x3b9aca00;
    0x00020494 add r1, pc                                        |     r1 = 0x40ae8;
    0x00020496 str r3, [sp, 0x64]                                |     var_64h = r3;
    0x00020498 movs r2, 2                                        |     r2 = 2;
    0x0002049a movs r3, 1                                        |     r3 = 1;
    0x0002049c strd r4, r4, [sp, 0x5c]                           |     __asm ("strd r4, r4, [sp, 0x5c]");
    0x000204a0 str.w sl, [sp, 0x50]                              |     __asm ("str.w sl, [var_50h]");
    0x000204a4 strh.w r3, [sp, 0x68]                             |     var_68h = r3;
    0x000204a8 bl 0x1a768                                        |     fcn_0001a768 (r0, r1, r2);
    0x000204ac strd sl, r6, [sp, 0x40]                           |     __asm ("strd sl, r6, [sp, 0x40]");
    0x000204b0 str.w sb, [sp, 0x48]                              |     __asm ("str.w sb, [var_48h]");
    0x000204b4 ldr.w sl, [sp, 0x30]                              |     sl = var_30h;
    0x000204b8 str r5, [sp, 0x4c]                                |     var_4ch = r5;
    0x000204ba str.w r8, [sp, 0x30]                              |     __asm ("str.w r8, [var_30h]");
    0x000204be ldr.w sb, [sp, 0x24]                              |     sb = var_24h;
    0x000204c2 ldr.w r8, [sp, 0x34]                              |     r8 = var_34h;
    0x000204c6 str r7, [sp, 0x34]                                |     var_34h = r7;
    0x000204c8 mov r7, r4                                        |     r7 = r4;
    0x000204ca ldrd r4, r5, [sp, 0x38]                           |     __asm ("ldrd r4, r5, [var_38h]");
    0x000204ce ldrsh r2, [r8, 2]!                                |     r2 = *((r8 += 2));
    0x000204d2 cmp r2, 0                                         |     
    0x000204d4 ittet ge                                          |     
                                                                 |     if (r2 < 0) {
    0x000204d6 ldrge r3, [sp, 0x1c]                              |         r3 = var_1ch;
                                                                 |     }
                                                                 |     if (r2 < 0) {
    0x000204d8 addge r2, r2, r2, lsl 1                           |         r2 += (r2 << 1);
                                                                 |     }
                                                                 |     if (r2 < 0) {
    0x000204dc ldrge r6, [sp, 0x20]                              |         r6 = var_20h;
                                                                 |     }
                                                                 |     if (r2 >= 0) {
    0x000204de ldr.w r6, [r3, r2, lsl 3]                         |         offset_4 = r2 << 3;
                                                                 |         r6 = *((r3 + offset_4));
                                                                 |     }
    0x000204e2 cmp r7, sl                                        |     
                                                                 |     if (r7 < sl) {
    0x000204e4 bge 0x20534                                       |         
    0x000204e6 cmp r7, 0                                         |         
                                                                 |         if (r7 != 0) {
    0x000204e8 bne 0x20570                                       |             goto label_25;
                                                                 |         }
                                                                 | label_4:
    0x000204ea movs r2, 4                                        |         r2 = 4;
    0x000204ec mov r1, r4                                        |         r1 = r4;
    0x000204ee mov r0, fp                                        |         r0 = fp;
    0x000204f0 bl 0x1a768                                        |         fcn_0001a768 (r0, r1, r2);
    0x000204f4 mov r2, r6                                        |         r2 = r6;
                                                                 |         if (r6 != 0) {
    0x000204f6 cbz r6, 0x2050c                                   |             
    0x000204f8 ldrb r2, [r6]                                     |             r2 = *(r6);
                                                                 |             if (r2 == 0) {
    0x000204fa cbz r2, 0x2050c                                   |                 goto label_26;
                                                                 |             }
    0x000204fc mov r2, r6                                        |             r2 = r6;
    0x000204fe ldrb.w r0, [r2, r1]                               |             r0 = *((r2 + r1));
    0x00020502 movs r0, r0                                       |             
    0x00020504 subs r0, r0, r4                                   |             r0 -= r4;
    0x00020506 movs r0, r0                                       |             
    0x00020508 movs r0, 0                                        |             r0 = 0;
    0x0002050a cmp r0, r0                                        |             
                                                                 |         }
                                                                 | label_26:
    0x0002050c cmp r0, r0                                        |         
    0x0002050e mov r0, fp                                        |         r0 = fp;
    0x00020510 lsls r2, r7, 3                                    |         r2 = r7 << 3;
    0x00020512 str.w pc, [r2, 0x8ff]                             |         __asm ("str.w pc, aav.0x000000ff");
    0x00020516 invalid                                           |         
    0x00020518 lsls r7, r7, 3                                    |         r7 <<= 3;
    0x0002051a invalid                                           |         
    0x0002051e movs r0, r0                                       |         
    0x00020520 invalid                                           |         
    0x00020524 lsls r7, r7, 3                                    |         r7 <<= 3;
    0x00020526 movs r0, r0                                       |         
    0x00020528 invalid                                           |         
    0x0002052c lsls r5, r3, 3                                    |         r5 = r3 << 3;
    0x0002052e movs r0, r0                                       |         
    0x00020530 ldr r5, [sp]                                      |         r5 = *(sp);
    0x00020532 b 0x202e8                                         |         goto label_3;
                                                                 |     }
                                                                 |     if (r7 != 0) {
    0x00020534 cbnz r7, 0x2057e                                  |         goto label_27;
                                                                 |     }
                                                                 | label_5:
    0x00020536 mov r2, r6                                        |     r2 = r6;
    0x00020538 eors r6, r1                                       |     r6 ^= r1;
    0x0002053a movs r2, r2                                       |     
                                                                 |     if (r0 == 0) {
    0x0002053c cbz r0, 0x20540                                   |         goto label_28;
                                                                 |     }
    0x0002053e mov r2, r6                                        |     r2 = r6;
                                                                 |     do {
                                                                 | label_28:
    0x00020540 movs r2, r2                                       |         
    0x00020542 movs r0, r0                                       |         
    0x00020544 cmp r3, 0                                         |         
    0x00020546 bne 0x20540                                       |         
                                                                 |     } while (r3 != 0);
    0x00020548 adds r2, r2, 6                                    |     r2 += 6;
    0x0002054a bic r1, r2, 0x40                                  |     r1 = BIT_MASK (r2, 0x40);
    0x0002054e movs r0, r0                                       |     
    0x00020550 movs r0, r0                                       |     
    0x00020552 movs r0, r0                                       |     
    0x00020554 invalid                                           |     
    0x00020558 str r0, [r3, 0x64]                                |     *((r3 + 0x64)) = r0;
    0x0002055a movs r2, 1                                        |     r2 = 1;
    0x0002055c lsls r1, r7, 9                                    |     r1 = r7 << 9;
    0x0002055e movs r0, r0                                       |     
    0x00020560 invalid                                           |     
    0x00020564 movs r2, 1                                        |     r2 = 1;
    0x00020566 mov r0, fp                                        |     r0 = fp;
    0x00020568 invalid                                           |     
    0x0002056c invalid                                           |     
                                                                 | label_25:
    0x00020570 ldr r1, [pc, 0xe8]                                |     
    0x00020572 movs r2, 5                                        |     r2 = 5;
    0x00020574 bx fp                                             |     return void (*fp)() ();
    0x00020576 add r1, pc                                        |     r1 = 0x40bd6;
    0x00020578 bl 0x1a768                                        |     fcn_0001a768 (r0, r1, r2);
    0x0002057c b 0x204ea                                         |     goto label_4;
                                                                 | label_27:
    0x0002057e ldr r1, [pc, 0xe0]                                |     
    0x00020580 movs r2, 5                                        |     r2 = 5;
    0x00020582 mov r0, fp                                        |     r0 = fp;
    0x00020584 add r1, pc                                        |     r1 = 0x40bea;
    0x00020586 bl 0x1a768                                        |     fcn_0001a768 (r0, r1, r2);
    0x0002058a b 0x20536                                         |     goto label_5;
                                                                 | label_20:
    0x0002058c ldr r2, [pc, 0xd4]                                |     
    0x0002058e add r2, pc                                        |     r2 = 0x40bf6;
    0x00020590 invalid                                           |     
                                                                 | label_23:
    0x00020592 ldr r2, [pc, 0xd4]                                |     r2 = *(0x2066a);
    0x00020594 strh r2, [r7, 0x3a]                               |     *((r7 + 0x3a)) = r2;
    0x00020596 ldm r6!, {r4, r5, r7}                             |     r4 = *(r6!);
                                                                 |     r5 = *((r6! + 4));
                                                                 |     r7 = *((r6! + 8));
                                                                 | label_21:
    0x00020598 invalid                                           |     
    0x0002059c invalid                                           |     
                                                                 | label_14:
    0x0002059e invalid                                           |     
    0x000205a2 lsls r5, r0, 8                                    |     r5 = r0 << 8;
                                                                 | label_22:
    0x000205a4 strb r0, [r0]                                     |     *(r0) = r0;
    0x000205a6 cmp r0, 0xa0                                      |     
    0x000205a8 add r0, sl                                        |     r0 += sl;
    0x000205aa b 0x2044a                                         |     goto label_6;
                                                                 | label_17:
    0x000205ac ldr r2, [pc, 0xc8]                                |     r2 = *(0x20678);
    0x000205ae mov r3, r0                                        |     r3 = r0;
    0x000205b0 movs r1, r0                                       |     r1 = r0;
    0x000205b2 movs r0, r0                                       |     
    0x000205b4 add r0, r0                                        |     r0 += r0;
    0x000205b6 bl 0x2014c                                        |     r0 = fcn_0002014c (r0, r1);
    0x000205ba mov sb, r0                                        |     sb = r0;
    0x000205bc b 0x2035c                                         |     goto label_0;
                                                                 | label_24:
    0x000205be ldr r2, [pc, 0xbc]                                |     
    0x000205c0 add r2, pc                                        |     r2 = 0x40c42;
    0x000205c2 b 0x2044a                                         |     goto label_6;
                                                                 | label_19:
    0x000205c4 movs r6, r5                                       |     r6 = r5;
    0x000205c6 movs r0, r0                                       |     
    0x000205c8 add r0, r0                                        |     r0 += r0;
    0x000205ca movs r2, r2                                       |     
    0x000205cc add r0, r0                                        |     r0 += r0;
    0x000205ce bl 0x2014c                                        |     r0 = fcn_0002014c (r0, r1);
    0x000205d2 mov sb, r0                                        |     sb = r0;
    0x000205d4 b 0x2035c                                         |     goto label_0;
                                                                 | label_18:
    0x000205d6 ldr r2, [pc, 0xac]                                |     
    0x000205d8 mov r3, r0                                        |     r3 = r0;
    0x000205da mov r1, r0                                        |     r1 = r0;
    0x000205dc mov r0, sl                                        |     r0 = sl;
    0x000205de add r2, pc                                        |     r2 = 0x40c68;
    0x000205e0 bl 0x2014c                                        |     r0 = fcn_0002014c (r0, r1);
    0x000205e4 mov sb, r0                                        |     sb = r0;
    0x000205e6 b 0x2035c                                         |     goto label_0;
    0x000205e8 ldr r2, [pc, 0x9c]                                |     
    0x000205ea add r2, pc                                        |     r2 = 0x40c76;
    0x000205ec b 0x2044a                                         |     goto label_6;
                                                                 | label_8:
    0x000205ee blx 0x6498                                        |     fcn_00006498 ();
    0x000205f2 nop                                               |     
    0x000205f4 ldrb r4, [r2, 0xa]                                |     r4 = *((r2 + 0xa));
    0x000205f6 movs r5, r0                                       |     r5 = r0;
    0x000205f8 lsls r0, r1, 0xe                                  |     r0 = r1 << 0xe;
    0x000205fa movs r0, r0                                       |     
    0x000205fc invalid                                           |     
                                                                 | }


r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x2074c).
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-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x20bdc).
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-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x21dec */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00021dec ()                                      | void fcn_00021dec (int16_t arg1, int16_t arg2, int16_t arg3, uint32_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00021dec push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00021df0 mov r8, r0                                        |     r8 = r0;
    0x00021df2 ldr r5, [r0]                                      |     r5 = *(r0);
    0x00021df4 sub sp, 0x14                                      |     
    0x00021df6 mov r6, r1                                        |     r6 = r1;
    0x00021df8 mov r7, r3                                        |     r7 = r3;
    0x00021dfa mov r4, r2                                        |     r4 = r2;
    0x00021dfc cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00021dfe beq.w 0x21f5e                                     |         goto label_9;
                                                                 |     }
                                                                 | label_5:
    0x00021e02 ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
    0x00021e04 cbz r3, 0x21e0e                                   |     
                                                                 |     while (r3 != 0) {
                                                                 | label_8:
    0x00021e06 mov r0, r4                                        |         r0 = r4;
    0x00021e08 add sp, 0x14                                      |         
    0x00021e0a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_4:
    0x00021e0e ldr.w r3, [r5, 0xd4]                              |         r3 = *((r5 + 0xd4));
                                                                 |         if (r3 != 0) {
    0x00021e12 cbz r3, 0x21e3a                                   |             
    0x00021e14 mov r1, r7                                        |             r1 = r7;
    0x00021e16 mov r0, r5                                        |             r0 = r5;
    0x00021e18 bl 0xd418                                         |             r0 = fcn_0000d418 (r0, r1);
    0x00021e1c mov sb, r0                                        |             sb = r0;
    0x00021e1e cmp r0, 0                                         |             
                                                                 |             if (r0 == 0) {
    0x00021e20 beq 0x21eb0                                       |                 goto label_1;
                                                                 |             }
    0x00021e22 ldr.w r0, [r5, 0xdc]                              |             r0 = *((r5 + 0xdc));
    0x00021e26 mov r1, r5                                        |             r1 = r5;
    0x00021e28 ldr.w r4, [r5, 0xd4]                              |             r4 = *((r5 + 0xd4));
    0x00021e2c mov r3, sb                                        |             r3 = sb;
    0x00021e2e mov r2, r6                                        |             r2 = r6;
    0x00021e30 blx r4                                            |             uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00021e32 mov r1, sb                                        |             r1 = sb;
    0x00021e34 mov r0, r5                                        |             r0 = r5;
    0x00021e36 bl 0xe12c                                         |             fcn_0000e12c (r0, r1);
                                                                 |         }
    0x00021e3a ldr.w r3, [r5, 0xd8]                              |         r3 = *((r5 + 0xd8));
    0x00021e3e cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x00021e40 beq 0x21eb0                                       |             
    0x00021e42 movs r1, 0x28                                     |             r1 = 0x28;
    0x00021e44 mov r0, r5                                        |             r0 = r5;
    0x00021e46 bl 0xdb58                                         |             r0 = fcn_0000db58 (r0, r1);
    0x00021e4a mov sb, r0                                        |             sb = r0;
    0x00021e4c cmp r0, 0                                         |             
                                                                 |             if (r0 == 0) {
    0x00021e4e beq 0x21f22                                       |                 goto label_10;
                                                                 |             }
    0x00021e50 movs r3, 1                                        |             r3 = 1;
    0x00021e52 movs r2, 0                                        |             r2 = 0;
    0x00021e54 strh r3, [r0, 0x1c]                               |             *((r0 + 0x1c)) = r3;
    0x00021e56 mov r1, r7                                        |             r1 = r7;
    0x00021e58 str r5, [r0]                                      |             *(r0) = r5;
    0x00021e5a str r2, [sp]                                      |             *(sp) = r2;
    0x00021e5c mov.w r2, -1                                      |             r2 = -1;
    0x00021e60 bl 0x17978                                        |             fcn_00017978 (r0, r1, r2, r3, r4);
    0x00021e64 movs r1, 2                                        |             r1 = 2;
    0x00021e66 mov r0, sb                                        |             r0 = sb;
    0x00021e68 bl 0x2098c                                        |             r0 = fcn_0002098c (r0);
    0x00021e6c mov r3, r0                                        |             r3 = r0;
                                                                 |             if (r0 != 0) {
    0x00021e6e cbz r0, 0x21e80                                   |                 
    0x00021e70 ldr r2, [r5, 0x10]                                |                 r2 = *((r5 + 0x10));
    0x00021e72 mov r1, r5                                        |                 r1 = r5;
    0x00021e74 ldrd r4, r0, [r5, 0xd8]                           |                 __asm ("ldrd r4, r0, [r5, 0xd8]");
    0x00021e78 ldr r2, [r2, 0xc]                                 |                 r2 = *((r2 + 0xc));
    0x00021e7a ldrb.w r2, [r2, 0x4d]                             |                 r2 = *((r2 + 0x4d));
    0x00021e7e blx r4                                            |                 uint32_t (*r4)(uint32_t, uint32_t) (r1, r2);
                                                                 |             }
    0x00021e80 ldrh.w r3, [sb, 0x1c]                             |             r3 = *((sb + 0x1c));
    0x00021e84 movw r2, 0x2460                                   |             r2 = 0x2460;
    0x00021e88 tst r2, r3                                        |             
                                                                 |             if ((r2 & r3) != 0) {
    0x00021e8a bne 0x21f7e                                       |                 goto label_11;
                                                                 |             }
                                                                 | label_7:
    0x00021e8c ldr.w r1, [sb, 0x24]                              |             r1 = *((sb + 0x24));
                                                                 |             if (r1 != 0) {
    0x00021e90 cbz r1, 0x21ea0                                   |                 
    0x00021e92 ldr.w r0, [sb]                                    |                 r0 = *(sb);
    0x00021e96 bl 0xe12c                                         |                 fcn_0000e12c (r0, r1);
    0x00021e9a movs r3, 0                                        |                 r3 = 0;
    0x00021e9c str.w r3, [sb, 0x24]                              |                 __asm ("str.w r3, [sb, 0x24]");
                                                                 |             }
    0x00021ea0 movs r3, 0                                        |             r3 = 0;
    0x00021ea2 ldr.w r0, [sb]                                    |             r0 = *(sb);
    0x00021ea6 mov r1, sb                                        |             r1 = sb;
    0x00021ea8 str.w r3, [sb, 4]                                 |             __asm ("str.w r3, [sb, 4]");
    0x00021eac bl 0xe12c                                         |             fcn_0000e12c (r0, r1);
                                                                 |         }
                                                                 | label_1:
    0x00021eb0 cmp r7, 0                                         |         
                                                                 |         if (r7 == 0) {
    0x00021eb2 beq 0x21f42                                       |             goto label_12;
                                                                 |         }
                                                                 | label_2:
    0x00021eb4 movs r2, 0                                        |         r2 = 0;
    0x00021eb6 mov r1, r7                                        |         r1 = r7;
    0x00021eb8 mov r0, r5                                        |         r0 = r5;
    0x00021eba bl 0x1408c                                        |         r0 = fcn_0001408c (r0, r1, r2);
                                                                 | label_3:
    0x00021ebe cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00021ec0 beq 0x21f48                                       |             goto label_13;
                                                                 |         }
    0x00021ec2 mov.w sl, 0x14                                    |         sl = 0x14;
    0x00021ec6 mvn fp, 0x13                                      |         
    0x00021eca smlabb r6, sl, r6, fp                             |         __asm ("smlabb r6, sl, r6, fp");
    0x00021ece adds r4, r0, r6                                   |         r4 = r0 + r6;
    0x00021ed0 ldr r3, [r4, 0xc]                                 |         r3 = *((r4 + 0xc));
    0x00021ed2 cmp r3, 0                                         |         
    0x00021ed4 bne 0x21e06                                       |         
                                                                 |     }
    0x00021ed6 ldr r1, [r0, r6]                                  |     r1 = *((r0 + r6));
    0x00021ed8 movs r6, 3                                        |     r6 = 3;
    0x00021eda ldr.w sb, [pc, 0xc8]                              |     
    0x00021ede str r7, [sp, 8]                                   |     var_8h = r7;
    0x00021ee0 mov r7, r1                                        |     r7 = r1;
    0x00021ee2 str r4, [sp, 0xc]                                 |     var_ch = r4;
    0x00021ee4 add sb, pc                                        |     sb = 0x43e8e;
    0x00021ee6 addw r3, sb, 0xa55                                |     __asm ("addw r3, sb, aav.0x000000ff");
    0x00021eea addw sb, sb, 0xa57                                |     __asm ("addw sb, sb, aav.0x000000ff");
    0x00021eee mov r4, sb                                        |     r4 = sb;
    0x00021ef0 mov sb, r5                                        |     sb = r5;
    0x00021ef2 mov r5, r3                                        |     r5 = r3;
                                                                 |     if (r7 == 0) {
    0x00021ef4 cbz r7, 0x21f1c                                   |         goto label_14;
                                                                 |     }
                                                                 |     do {
    0x00021ef6 movs r2, 0                                        |         r2 = 0;
    0x00021ef8 mov r1, r7                                        |         r1 = r7;
    0x00021efa mov r0, sb                                        |         r0 = sb;
    0x00021efc bl 0x1408c                                        |         r0 = fcn_0001408c (r0, r1, r2);
                                                                 | label_0:
    0x00021f00 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00021f02 beq 0x21f9e                                       |             goto label_15;
                                                                 |         }
    0x00021f04 smlabb r6, sl, r6, fp                             |         __asm ("smlabb r6, sl, r6, fp");
    0x00021f08 add r0, r6                                        |         r0 += r6;
    0x00021f0a ldr r2, [r0, 0xc]                                 |         r2 = *((r0 + 0xc));
    0x00021f0c cmp r2, 0                                         |         
                                                                 |         if (r2 != 0) {
    0x00021f0e bne 0x21f86                                       |             goto label_16;
                                                                 |         }
    0x00021f10 cmp r5, r4                                        |         
                                                                 |         if (r5 == r4) {
    0x00021f12 beq 0x21f46                                       |             goto label_17;
                                                                 |         }
    0x00021f14 ldrb r6, [r5], 1                                  |         r6 = *(r5);
                                                                 |         r5++;
    0x00021f18 cmp r7, 0                                         |         
    0x00021f1a bne 0x21ef6                                       |         
                                                                 |     } while (r7 != 0);
                                                                 | label_14:
    0x00021f1c ldr.w r0, [sb, 8]                                 |     r0 = *((sb + 8));
    0x00021f20 b 0x21f00                                         |     goto label_0;
                                                                 | label_10:
    0x00021f22 movs r1, 2                                        |     r1 = 2;
    0x00021f24 bl 0x2098c                                        |     r0 = fcn_0002098c (r0);
    0x00021f28 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00021f2a beq 0x21eb0                                       |         goto label_1;
                                                                 |     }
    0x00021f2c ldr r2, [r5, 0x10]                                |     r2 = *((r5 + 0x10));
    0x00021f2e mov r3, r0                                        |     r3 = r0;
    0x00021f30 mov r1, r5                                        |     r1 = r5;
    0x00021f32 ldrd r4, r0, [r5, 0xd8]                           |     __asm ("ldrd r4, r0, [r5, 0xd8]");
    0x00021f36 ldr r2, [r2, 0xc]                                 |     r2 = *((r2 + 0xc));
    0x00021f38 ldrb.w r2, [r2, 0x4d]                             |     r2 = *((r2 + 0x4d));
    0x00021f3c blx r4                                            |     uint32_t (*r4)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
    0x00021f3e cmp r7, 0                                         |     
                                                                 |     if (r7 != 0) {
    0x00021f40 bne 0x21eb4                                       |         goto label_2;
                                                                 |     }
                                                                 | label_12:
    0x00021f42 ldr r0, [r5, 8]                                   |     r0 = *((r5 + 8));
    0x00021f44 b 0x21ebe                                         |     goto label_3;
                                                                 | label_17:
    0x00021f46 ldr r7, [sp, 8]                                   |     r7 = var_8h;
                                                                 | label_13:
    0x00021f48 ldr r1, [pc, 0x5c]                                |     
    0x00021f4a mov r0, r8                                        |     r0 = r8;
    0x00021f4c mov r2, r7                                        |     r2 = r7;
    0x00021f4e movs r4, 0                                        |     r4 = 0;
    0x00021f50 add r1, pc                                        |     r1 = 0x43efc;
    0x00021f52 bl 0x1ca34                                        |     fcn_0001ca34 (r0);
    0x00021f56 mov r0, r4                                        |     r0 = r4;
    0x00021f58 add sp, 0x14                                      |     
    0x00021f5a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 |     if (r3 == 0) {
                                                                 | label_9:
    0x00021f5e cbz r3, 0x21f7a                                   |         goto label_18;
                                                                 |     }
    0x00021f60 mov r1, r3                                        |     r1 = r3;
    0x00021f62 mov r0, r5                                        |     r0 = r5;
    0x00021f64 bl 0x1408c                                        |     r0 = fcn_0001408c (r0, r1, r2);
                                                                 | label_6:
    0x00021f68 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00021f6a beq.w 0x21e0e                                     |         goto label_4;
                                                                 |     }
    0x00021f6e movs r3, 0x14                                     |     r3 = 0x14;
    0x00021f70 mla r0, r3, r6, r0                                |     __asm ("mla r0, r3, r6, r0");
    0x00021f74 sub.w r4, r0, 0x14                                |     r4 = r0 - 0x14;
    0x00021f78 b 0x21e02                                         |     goto label_5;
                                                                 | label_18:
    0x00021f7a ldr r0, [r5, 8]                                   |     r0 = *((r5 + 8));
    0x00021f7c b 0x21f68                                         |     goto label_6;
                                                                 | label_11:
    0x00021f7e mov r0, sb                                        |     r0 = sb;
    0x00021f80 bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x00021f84 b 0x21e8c                                         |     goto label_7;
                                                                 | label_16:
    0x00021f86 ldr r3, [r0]                                      |     r3 = *(r0);
    0x00021f88 ldr r4, [sp, 0xc]                                 |     r4 = var_ch;
    0x00021f8a ldr r5, [r0, 4]                                   |     r5 = *((r0 + 4));
    0x00021f8c ldr r1, [r0, 8]                                   |     r1 = *((r0 + 8));
    0x00021f8e ldr r2, [r0, 0xc]                                 |     r2 = *((r0 + 0xc));
    0x00021f90 str r3, [r4]                                      |     *(r4) = r3;
    0x00021f92 movs r3, 0                                        |     r3 = 0;
    0x00021f94 str r5, [r4, 4]                                   |     *((r4 + 4)) = r5;
    0x00021f96 str r1, [r4, 8]                                   |     *((r4 + 8)) = r1;
    0x00021f98 str r2, [r4, 0xc]                                 |     *((r4 + 0xc)) = r2;
    0x00021f9a str r3, [r4, 0x10]                                |     *((r4 + 0x10)) = r3;
    0x00021f9c b 0x21e06                                         |     goto label_8;
                                                                 | label_15:
    0x00021f9e ldr r3, [r0, 0xc]                                 |     r3 = *((r0 + 0xc));
    0x00021fa0 udf 0xff                                          |     __asm ("udf 0xff");
                                                                 | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x21ff4 */
                                                                     | #include <stdint.h>
                                                                     |  
    ; (fcn) fcn.00021ff4 ()                                          | void fcn_00021ff4 (uint32_t arg1, int16_t arg2) {
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
    0x00021ff4 push.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00021ff8 ldr r4, [r0, 0x40]                                    |     r4 = *((r0 + 0x40));
    0x00021ffa cmp r4, 0                                             |     
                                                                     |     if (r4 != 0) {
    0x00021ffc bne 0x220c0                                           |         goto label_3;
                                                                     |     }
    0x00021ffe ldr.w sl, [r1, 0x28]                                  |     sl = *((r1 + 0x28));
    0x00022002 mov r5, r0                                            |     r5 = r0;
    0x00022004 mov sb, r1                                            |     sb = r1;
    0x00022006 ldr r0, [r0]                                          |     r0 = *(r0);
    0x00022008 cmp.w sl, 0                                           |     
                                                                     |     if (sl != 0) {
    0x0002200c beq 0x2202a                                           |         
    0x0002200e ldr.w r2, [sl, 0xc]                                   |         r2 = *((sl + 0xc));
    0x00022012 ldr.w r3, [sl]                                        |         r3 = *(sl);
    0x00022016 cmp r2, r0                                            |         
                                                                     |         if (r2 == r0) {
    0x00022018 beq 0x22098                                           |             goto label_4;
                                                                     |         }
    0x0002201a subs r3, 1                                            |         r3--;
    0x0002201c str.w r3, [sl]                                        |         __asm ("str.w r3, [sl]");
    0x00022020 cmp r3, 0                                             |         
                                                                     |         if (r3 == 0) {
    0x00022022 beq 0x220d4                                           |             goto label_5;
                                                                     |         }
                                                                     | label_2:
    0x00022024 movs r3, 0                                            |         r3 = 0;
    0x00022026 str.w r3, [sb, 0x28]                                  |         __asm ("str.w r3, [sb, 0x28]");
                                                                     |     }
    0x0002202a ldrb.w r2, [sb, 0x37]                                 |     r2 = *((sb + 0x37));
    0x0002202e ldrh.w r7, [sb, 0x34]                                 |     r7 = *((sb + 0x34));
    0x00022032 ldrh.w r1, [sb, 0x32]                                 |     r1 = *((sb + 0x32));
    0x00022036 ands r2, r2, 0                                        |     r2 = 0;
                                                                     |     if (r2 == r2) {
    0x0002203a beq 0x220ca                                           |         goto label_6;
                                                                     |     }
    0x0002203c subs r2, r7, r1                                       |     r2 = r7 - r1;
    0x0002203e bl 0xd9f0                                             |     r0 = fcn_0000d9f0 (r0, r1, r2);
    0x00022042 mov sl, r0                                            |     sl = r0;
                                                                     | label_1:
    0x00022044 cmp.w sl, 0                                           |     
                                                                     |     if (sl == 0) {
    0x00022048 beq 0x220b6                                           |         goto label_7;
                                                                     |     }
                                                                     |     if (r7 == 0) {
    0x0002204a cbz r7, 0x2208c                                       |         goto label_8;
                                                                     |     }
    0x0002204c ldr.w r8, [pc, 0x90]                                  |     
    0x00022050 add.w r6, sl, 0x10                                    |     r6 = sl + 0x10;
    0x00022054 add r8, pc                                            |     r8 = 0x44138;
    0x00022056 b 0x2206e                                             |     
                                                                     |     while (r0 == 0) {
                                                                     | label_0:
    0x00022058 ldr.w r3, [sb, 0x1c]                                  |         r3 = *((sb + 0x1c));
    0x0002205c str r0, [r6, 4]!                                      |         *((r6 += 4)) = r0;
    0x00022060 ldrb r2, [r3, r4]                                     |         r2 = *((r3 + r4));
    0x00022062 ldr.w r3, [sl, 0x10]                                  |         r3 = *((sl + 0x10));
    0x00022066 strb r2, [r3, r4]                                     |         *((r3 + r4)) = r2;
    0x00022068 adds r4, 1                                            |         r4++;
    0x0002206a cmp r7, r4                                            |         
                                                                     |         if (r7 == r4) {
    0x0002206c beq 0x2208c                                           |             goto label_8;
                                                                     |         }
    0x0002206e ldr.w r3, [sb, 0x20]                                  |         r3 = *((sb + 0x20));
    0x00022072 mov r1, r8                                            |         r1 = r8;
    0x00022074 ldr.w fp, [r3, r4, lsl 2]                             |         offset_0 = r4 << 2;
                                                                     |         fp = *((r3 + offset_0));
    0x00022078 mov r0, fp                                            |         r0 = fp;
    0x0002207a blx 0x67b8                                            |         r0 = fcn_000067b8 ();
    0x0002207e cmp r0, 0                                             |         
    0x00022080 beq 0x22058                                           |         
                                                                     |     }
    0x00022082 mov r1, fp                                            |     r1 = fp;
    0x00022084 mov r0, r5                                            |     r0 = r5;
    0x00022086 bl 0x21fac                                            |     fcn_00021fac (r0, r1);
    0x0002208a b 0x22058                                             |     goto label_0;
                                                                     | label_8:
    0x0002208c ldr r3, [r5, 0x40]                                    |     r3 = *((r5 + 0x40));
    0x0002208e ldr.w r2, [sl]                                        |     r2 = *(sl);
                                                                     |     if (r3 != 0) {
    0x00022092 cbnz r3, 0x220a8                                      |         goto label_9;
                                                                     |     }
    0x00022094 str.w sl, [sb, 0x28]                                  |     __asm ("str.w sl, [sb, 0x28]");
                                                                     |     do {
                                                                     | label_4:
    0x00022098 ldr.w r3, [sl]                                        |         r3 = *(sl);
    0x0002209c mov r0, sl                                            |         r0 = sl;
    0x0002209e adds r3, 1                                            |         r3++;
    0x000220a0 str.w r3, [sl]                                        |         __asm ("str.w r3, [sl]");
    0x000220a4 pop.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                     | label_9:
    0x000220a8 subs r2, 1                                            |         r2--;
    0x000220aa str.w r2, [sl]                                        |         __asm ("str.w r2, [sl]");
                                                                     |         if (r2 == 0) {
    0x000220ae cbnz r2, 0x220b6                                      |             
    0x000220b0 mov r0, sl                                            |             r0 = sl;
    0x000220b2 blx 0x6050                                            |             fcn_00006050 ();
                                                                     |         }
                                                                     | label_7:
    0x000220b6 ldr.w sl, [sb, 0x28]                                  |         sl = *((sb + 0x28));
    0x000220ba cmp.w sl, 0                                           |         
    0x000220be bne 0x22098                                           |         
                                                                     |     } while (sl != 0);
                                                                     | label_3:
    0x000220c0 mov.w sl, 0                                           |     sl = 0;
    0x000220c4 mov r0, sl                                            |     r0 = sl;
    0x000220c6 pop.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                     | label_6:
    0x000220ca mov r1, r7                                            |     r1 = r7;
    0x000220cc bl 0xd9f0                                             |     r0 = fcn_0000d9f0 (r0, r1, r2);
    0x000220d0 mov sl, r0                                            |     sl = r0;
    0x000220d2 b 0x22044                                             |     goto label_1;
                                                                     | label_5:
    0x000220d4 mov r0, sl                                            |     r0 = sl;
    0x000220d6 blx 0x6050                                            |     fcn_00006050 ();
    0x000220da ldr r0, [r5]                                          |     r0 = *(r5);
    0x000220dc b 0x22024                                             |     goto label_2;
                                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x221f4 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.000221f4 ()                                      | void fcn_000221f4 (int16_t arg_1h, int16_t arg_1h_2, int16_t arg1) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_ch;
                                                                 |     r0 = arg1;
    0x000221f4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x000221f8 sub sp, 0x14                                      |     
    0x000221fa ldr r3, [r0]                                      |     r3 = *(r0);
    0x000221fc ldr.w r8, [r0, 0x194]                             |     r8 = *((r0 + 0x194));
    0x00022200 ldr r4, [r0, 8]                                   |     r4 = *((r0 + 8));
    0x00022202 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00022204 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x00022208 beq 0x222f8                                       |         goto label_3;
                                                                 |     }
    0x0002220a mov r6, r0                                        |     r6 = r0;
    0x0002220c mov.w sl, 0                                       |     sl = 0;
                                                                 | label_0:
    0x00022210 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00022212 ldr.w r2, [r8, 8]                                 |     r2 = *((r8 + 8));
    0x00022216 ldr.w fp, [r8, 0xc]                               |     fp = *((r8 + 0xc));
    0x0002221a ldr r1, [r3, 0x10]                                |     r1 = *((r3 + 0x10));
    0x0002221c ldrb r3, [r6, 0x13]                               |     r3 = *((r6 + 0x13));
    0x0002221e add.w r1, r1, r2, lsl 4                           |     r1 += (r2 << 4);
    0x00022222 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00022224 beq 0x222fe                                       |         goto label_4;
                                                                 |     }
    0x00022226 subs r3, 1                                        |     r3--;
    0x00022228 uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x0002222a adds r0, r3, 6                                    |     r0 = r3 + 6;
    0x0002222c strb r3, [r6, 0x13]                               |     *((r6 + 0x13)) = r3;
    0x0002222e ldr.w r5, [r6, r0, lsl 2]                         |     offset_0 = r0 << 2;
                                                                 |     r5 = *((r6 + offset_0));
                                                                 | label_1:
    0x00022232 ldr r3, [r1, 0xc]                                 |     r3 = *((r1 + 0xc));
    0x00022234 movs r7, 0x36                                     |     r7 = 0x36;
    0x00022236 add.w sb, fp, 1                                   |     sb += arg_1h;
    0x0002223a movs r1, 0                                        |     r1 = 0;
    0x0002223c mov r0, r6                                        |     r0 = r6;
    0x0002223e ldr r3, [r3, 0x48]                                |     r3 = *((r3 + 0x48));
    0x00022240 str r7, [sp]                                      |     *(sp) = r7;
    0x00022242 bl 0x22140                                        |     fcn_00022140 (r0, r1, r2, r3, r4);
    0x00022246 movs r3, 0                                        |     r3 = 0;
    0x00022248 mov r2, sb                                        |     r2 = sb;
    0x0002224a movs r1, 0x4d                                     |     r1 = 0x4d;
    0x0002224c mov r0, r4                                        |     r0 = r4;
    0x0002224e str.w sl, [sp]                                    |     __asm ("str.w sl, [sp]");
    0x00022252 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00022256 movs r2, 0                                        |     r2 = 0;
    0x00022258 mov r7, r0                                        |     r7 = r0;
    0x0002225a mov r3, sb                                        |     r3 = sb;
    0x0002225c movs r1, 0x46                                     |     r1 = 0x46;
    0x0002225e mov r0, r4                                        |     r0 = r4;
    0x00022260 str.w sl, [sp]                                    |     __asm ("str.w sl, [sp]");
    0x00022264 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00022268 ldr r3, [r4, 0x20]                                |     r3 = *((r4 + 0x20));
    0x0002226a movs r1, 0x30                                     |     r1 = 0x30;
    0x0002226c ldr r0, [r4, 0x18]                                |     r0 = *((r4 + 0x18));
    0x0002226e cmp r7, r3                                        |     
    0x00022270 ittt lo                                           |     
                                                                 |     if (r7 >= r3) {
    0x00022272 ldrlo r2, [r4, 4]                                 |         r2 = *((r4 + 4));
                                                                 |     }
                                                                 |     if (r7 >= r3) {
    0x00022274 addlo r7, r7, r7, lsl 2                           |         r7 += (r7 << 2);
                                                                 |     }
                                                                 |     if (r7 < r3) {
    0x00022278 add.w r2, r2, r7, lsl 2                           |         r2 += (r7 << 2);
                                                                 |     }
    0x0002227c add.w r7, r3, -1                                  |     r7 = r3 + -1;
    0x00022280 it lo                                             |     
                                                                 |     if (r7 >= r3) {
    0x00022282 strlo r3, [r2, 8]                                 |         *((r2 + 8)) = r3;
                                                                 |     }
    0x00022284 movs r3, 2                                        |     r3 = 2;
    0x00022286 str r7, [r0, 0x58]                                |     *((r0 + 0x58)) = r7;
    0x00022288 add.w r2, fp, -1                                  |     r2 = fp + -1;
    0x0002228c mov r0, r4                                        |     r0 = r4;
    0x0002228e str r5, [sp]                                      |     *(sp) = r5;
    0x00022290 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00022294 mov r3, r5                                        |     r3 = r5;
    0x00022296 movs r2, 0                                        |     r2 = 0;
    0x00022298 movs r1, 0x49                                     |     r1 = 0x49;
    0x0002229a mov r0, r4                                        |     r0 = r4;
    0x0002229c str.w sb, [sp]                                    |     __asm ("str.w sb, [sp]");
    0x000222a0 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000222a4 ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
                                                                 |     if (r3 != 0) {
    0x000222a6 cbz r3, 0x222b8                                   |         
    0x000222a8 ldr r2, [r4, 0x20]                                |         r2 = *((r4 + 0x20));
    0x000222aa movs r1, 8                                        |         r1 = 8;
    0x000222ac add.w r2, r2, r2, lsl 2                           |         r2 += (r2 << 2);
    0x000222b0 add.w r3, r3, r2, lsl 2                           |         r3 += (r2 << 2);
    0x000222b4 strb r1, [r3, -0x11]                              |         *((r3 - 0x11)) = r1;
                                                                 |     }
    0x000222b8 movs r3, 0                                        |     r3 = 0;
    0x000222ba movs r1, 0x3b                                     |     r1 = 0x3b;
    0x000222bc mov r2, r3                                        |     r2 = r3;
    0x000222be mov r0, r4                                        |     r0 = r4;
    0x000222c0 str.w sl, [sp]                                    |     __asm ("str.w sl, [sp]");
    0x000222c4 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
                                                                 |     if (r5 == 0) {
    0x000222c8 cbz r5, 0x222ee                                   |         goto label_2;
                                                                 |     }
    0x000222ca ldrb r0, [r6, 0x13]                               |     r0 = *((r6 + 0x13));
    0x000222cc cmp r0, 7                                         |     
                                                                 |     if (r0 > 7) {
    0x000222ce bhi 0x222ee                                       |         goto label_2;
                                                                 |     }
    0x000222d0 add.w r3, r6, 0x74                                |     r3 = r6 + 0x74;
    0x000222d4 add.w r1, r6, 0x13c                               |     r1 = r6 + 0x13c;
                                                                 |     do {
    0x000222d8 ldr r2, [r3, 0xc]                                 |         r2 = *((r3 + 0xc));
    0x000222da cmp r5, r2                                        |         
                                                                 |         if (r5 == r2) {
    0x000222dc beq 0x22306                                       |             goto label_5;
                                                                 |         }
    0x000222de adds r3, 0x14                                     |         r3 += 0x14;
    0x000222e0 cmp r3, r1                                        |         
    0x000222e2 bne 0x222d8                                       |         
                                                                 |     } while (r3 != r1);
    0x000222e4 adds r3, r0, 1                                    |     r3 = r0 + 1;
    0x000222e6 adds r0, 6                                        |     r0 += 6;
    0x000222e8 strb r3, [r6, 0x13]                               |     *((r6 + 0x13)) = r3;
    0x000222ea str.w r5, [r6, r0, lsl 2]                         |     __asm ("str.w r5, [r6, r0, lsl 2]");
                                                                 | label_2:
    0x000222ee ldr.w r8, [r8]                                    |     r8 = *(r8);
    0x000222f2 cmp.w r8, 0                                       |     
                                                                 |     if (r8 != 0) {
    0x000222f6 bne 0x22210                                       |         goto label_0;
                                                                 |     }
                                                                 | label_3:
    0x000222f8 add sp, 0x14                                      |     
    0x000222fa pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_4:
    0x000222fe ldr r5, [r6, 0x48]                                |     r5 = *((r6 + 0x48));
    0x00022300 adds r5, 1                                        |     r5++;
    0x00022302 str r5, [r6, 0x48]                                |     *((r6 + 0x48)) = r5;
    0x00022304 b 0x22232                                         |     goto label_1;
                                                                 | label_5:
    0x00022306 movs r2, 1                                        |     r2 = 1;
    0x00022308 strb r2, [r3, 6]                                  |     *((r3 + 6)) = r2;
    0x0002230a b 0x222ee                                         |     goto label_2;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x22450 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00022450 ()                                      | void fcn_00022450 (int16_t arg_13h, int16_t arg_14h, int16_t arg_24h, int16_t arg_38h, int16_t arg_3ch, int16_t arg_44h, int16_t arg_48h, int16_t arg_74h, int16_t arg_13ch, int16_t arg_198h, int16_t arg_60h, int16_t arg_68h, int16_t arg_70h, 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_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;
    0x00022450 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00022454 sub sp, 0x3c                                      |     
    0x00022456 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00022458 mov fp, r0                                        |     
    0x0002245a ldrd sl, r3, [sp, 0x60]                           |     __asm ("ldrd sl, r3, [arg_60h]");
    0x0002245e ldr r4, [r0, 8]                                   |     r4 = *((r0 + 8));
    0x00022460 strd r2, r1, [sp, 0x28]                           |     __asm ("strd r2, r1, [var_28h]");
    0x00022464 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00022466 ldrd r7, r3, [sp, 0x68]                           |     __asm ("ldrd r7, r3, [arg_68h]");
    0x0002246a str r3, [sp, 0x14]                                |     var_14h = r3;
    0x0002246c ldr r3, [sp, 0x70]                                |     r3 = *(arg_70h);
    0x0002246e str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00022470 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00022472 beq.w 0x22794                                     |         goto label_13;
                                                                 |     }
                                                                 | label_6:
    0x00022476 ldr.w r3, [fp, 0x44]                              |     r3 = *(arg_44h);
    0x0002247a ldr r0, [r4, 0x18]                                |     r0 = *((r4 + 0x18));
    0x0002247c subs r3, 1                                        |     r3--;
    0x0002247e str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00022480 bl 0x19ed0                                        |     fcn_00019ed0 (r0);
    0x00022484 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00022486 mov r6, r0                                        |     r6 = r0;
    0x00022488 adds r3, 1                                        |     r3++;
                                                                 |     if (r3 == 1) {
    0x0002248a beq.w 0x22664                                     |         goto label_14;
                                                                 |     }
                                                                 | label_1:
    0x0002248e ldr.w r5, [sl, 0x14]                              |     r5 = *((sl + 0x14));
    0x00022492 cmp r5, 0                                         |     
                                                                 |     if (r5 <= 0) {
    0x00022494 ble 0x224c2                                       |         goto label_15;
                                                                 |     }
    0x00022496 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00022498 mov.w r8, 0                                       |     r8 = 0;
    0x0002249c sub.w sb, r3, 4                                   |     sb = r3 - 4;
                                                                 |     do {
    0x000224a0 movs r3, 0                                        |         r3 = 0;
    0x000224a2 movs r1, 0x4c                                     |         r1 = 0x4c;
    0x000224a4 str r3, [sp]                                      |         *(sp) = r3;
    0x000224a6 mov r0, r4                                        |         r0 = r4;
    0x000224a8 ldr r2, [sb, 4]!                                  |         r2 = *((sb += 4));
    0x000224ac mov r3, r6                                        |         r3 = r6;
    0x000224ae add.w r8, r8, 1                                   |         r8++;
    0x000224b2 add r2, r7                                        |         r2 += r7;
    0x000224b4 adds r2, 1                                        |         r2++;
    0x000224b6 bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000224ba ldr.w r5, [sl, 0x14]                              |         r5 = *((sl + 0x14));
    0x000224be cmp r5, r8                                        |         
    0x000224c0 bgt 0x224a0                                       |         
                                                                 |     } while (r5 > r8);
                                                                 | label_15:
    0x000224c2 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x000224c4 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000224c6 bne.w 0x225f6                                     |         goto label_4;
                                                                 |     }
    0x000224ca ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x000224cc ldrb.w r3, [fp, 0x13]                             |     r3 = *(arg_13h);
    0x000224d0 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000224d2 beq.w 0x2269a                                     |         goto label_16;
                                                                 |     }
    0x000224d6 ldrd r2, r1, [fp, 0x38]                           |     __asm ("ldrd r2, r1, [arg_38h]");
    0x000224da cmp r2, r5                                        |     
    0x000224dc str r1, [sp, 0x24]                                |     var_24h = r1;
                                                                 |     if (r2 < r5) {
    0x000224de blt.w 0x22678                                     |         goto label_17;
                                                                 |     }
    0x000224e2 subs r2, r2, r5                                   |     r2 -= r5;
    0x000224e4 str.w r2, [fp, 0x38]                              |     __asm ("str.w r2, [arg_38h]");
    0x000224e8 adds r2, r1, r5                                   |     r2 = r1 + r5;
    0x000224ea str.w r2, [fp, 0x3c]                              |     __asm ("str.w r2, [arg_3ch]");
    0x000224ee cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000224f0 beq.w 0x2268c                                     |         goto label_18;
                                                                 |     }
                                                                 | label_2:
    0x000224f4 subs r3, 1                                        |     r3--;
    0x000224f6 uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x000224f8 strb.w r3, [fp, 0x13]                             |     *(arg_13h) = r3;
    0x000224fc adds r3, 6                                        |     r3 += 6;
    0x000224fe ldr.w r3, [fp, r3, lsl 2]                         |     offset_0 = r3 << 2;
                                                                 |     r3 = *((fp + offset_0));
    0x00022502 str r3, [sp, 0x30]                                |     var_30h = r3;
                                                                 | label_3:
    0x00022504 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00022506 movs r1, 0x35                                     |     r1 = 0x35;
    0x00022508 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x0002250a mov r0, r4                                        |     r0 = r4;
    0x0002250c str r3, [sp]                                      |     *(sp) = r3;
    0x0002250e ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00022510 ldr r3, [r3, 0x2c]                                |     r3 = *((r3 + 0x2c));
    0x00022512 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00022516 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x00022518 mov r0, fp                                        |     r0 = fp;
    0x0002251a bl 0x220e4                                        |     fcn_000220e4 (r0, r1);
    0x0002251e ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00022520 cmp r5, 0                                         |     
    0x00022522 sub.w r3, r3, 1                                   |     r3--;
    0x00022526 clz r3, r3                                        |     r3 &= r3;
    0x0002252a lsr.w r3, r3, 5                                   |     r3 >>= 5;
    0x0002252e str r3, [sp, 0x2c]                                |     var_2ch = r3;
                                                                 |     if (r5 <= 0) {
    0x00022530 ble.w 0x227a8                                     |         goto label_19;
                                                                 |     }
    0x00022534 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00022536 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00022538 str r5, [sp, 0x20]                                |     var_20h = r5;
    0x0002253a subs r3, 4                                        |     r3 -= 4;
    0x0002253c mov r8, r2                                        |     r8 = r2;
    0x0002253e adds r2, r5, r2                                   |     r2 = r5 + r2;
    0x00022540 mov sb, r3                                        |     sb = r3;
    0x00022542 mov r5, r2                                        |     r5 = r2;
    0x00022544 str r3, [sp, 0x34]                                |     var_34h = r3;
                                                                 |     do {
    0x00022546 movs r3, 0                                        |         r3 = 0;
    0x00022548 movs r1, 0x21                                     |         r1 = 0x21;
    0x0002254a str r3, [sp]                                      |         *(sp) = r3;
    0x0002254c mov r0, r4                                        |         r0 = r4;
    0x0002254e ldr r2, [sb, 4]!                                  |         r2 = *((sb += 4));
    0x00022552 mov r3, r8                                        |         r3 = r8;
    0x00022554 add.w r8, r8, 1                                   |         r8++;
    0x00022558 adds r2, 1                                        |         r2++;
    0x0002255a add r2, r7                                        |         r2 += r7;
    0x0002255c bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00022560 cmp r5, r8                                        |         
    0x00022562 bne 0x22546                                       |         
                                                                 |     } while (r5 != r8);
    0x00022564 ldr.w r2, [sl]                                    |     r2 = *(sl);
    0x00022568 ldrd r1, r3, [sp, 0x28]                           |     __asm ("ldrd r1, r3, [var_28h]");
    0x0002256c ldr r5, [sp, 0x20]                                |     r5 = var_20h;
    0x0002256e cmp r2, r1                                        |     
    0x00022570 ite ne                                            |     
                                                                 |     if (r2 == r1) {
    0x00022572 movne r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r2 != r1) {
    0x00022574 andeq r3, r3, 1                                   |         r3 &= 1;
                                                                 |     }
    0x00022578 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0002257a bne.w 0x227d0                                     |         goto label_20;
                                                                 |     }
                                                                 | label_8:
    0x0002257e ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x00022580 mov r0, r4                                        |     r0 = r4;
    0x00022582 bl 0xdafc                                         |     fcn_0000dafc (r0, r1);
    0x00022586 ldr r7, [sp, 0x30]                                |     r7 = var_30h;
    0x00022588 mov r3, r5                                        |     r3 = r5;
    0x0002258a ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x0002258c movs r1, 0x30                                     |     r1 = 0x30;
    0x0002258e strd r0, r5, [sp, 4]                              |     __asm ("strd r0, r5, [var_4h]");
    0x00022592 mov r0, r4                                        |     r0 = r4;
    0x00022594 str r7, [sp]                                      |     *(sp) = r7;
    0x00022596 bl 0x1977c                                        |     fcn_0001977c (r0, r1, r2, r3, r4, r5);
    0x0002259a movs r3, 0                                        |     r3 = 0;
    0x0002259c ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x0002259e str r3, [sp, 4]                                   |     var_4h = r3;
    0x000225a0 movs r1, 0x43                                     |     r1 = 0x43;
    0x000225a2 mov r3, r6                                        |     r3 = r6;
    0x000225a4 mov r0, r4                                        |     r0 = r4;
    0x000225a6 str r7, [sp]                                      |     *(sp) = r7;
    0x000225a8 bl 0x19a3c                                        |     fcn_00019a3c (r0, r1, r2, r3, r4, r5);
                                                                 |     if (r7 == 0) {
    0x000225ac cbz r7, 0x225da                                   |         goto label_10;
                                                                 |     }
    0x000225ae ldrb.w r0, [fp, 0x13]                             |     r0 = *(arg_13h);
    0x000225b2 cmp r0, 7                                         |     
                                                                 |     if (r0 > 7) {
    0x000225b4 bhi 0x225da                                       |         goto label_10;
                                                                 |     }
    0x000225b6 add.w r3, fp, 0x74                                |     r3 += arg_74h;
    0x000225ba add.w r1, fp, 0x13c                               |     r1 += arg_13ch;
                                                                 |     do {
    0x000225be ldr r2, [r3, 0xc]                                 |         r2 = *((r3 + 0xc));
    0x000225c0 cmp r7, r2                                        |         
                                                                 |         if (r7 == r2) {
    0x000225c2 beq.w 0x22850                                     |             goto label_21;
                                                                 |         }
    0x000225c6 adds r3, 0x14                                     |         r3 += 0x14;
    0x000225c8 cmp r3, r1                                        |         
    0x000225ca bne 0x225be                                       |         
                                                                 |     } while (r3 != r1);
    0x000225cc adds r3, r0, 1                                    |     r3 = r0 + 1;
    0x000225ce adds r0, 6                                        |     r0 += 6;
    0x000225d0 strb.w r3, [fp, 0x13]                             |     *(arg_13h) = r3;
    0x000225d4 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x000225d6 str.w r3, [fp, r0, lsl 2]                         |     __asm ("str.w r3, [fp, r0, lsl 2]");
                                                                 | label_10:
    0x000225da ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x000225dc mov r2, r5                                        |     r2 = r5;
    0x000225de mov r0, fp                                        |     r0 = fp;
    0x000225e0 bl 0xaea0                                         |     fcn_0000aea0 (r0, r1, r2);
    0x000225e4 ldr.w r3, [fp, 0x38]                              |     r3 = *(arg_38h);
    0x000225e8 cmp r3, r5                                        |     
    0x000225ea ittt lt                                           |     
                                                                 |     if (r3 >= r5) {
    0x000225ec movlt r3, r1                                      |         r3 = r1;
                                                                 |     }
                                                                 |     if (r3 >= r5) {
    0x000225ee strlt r5, [fp, 0x38]                              |         *(arg_38h) = r5;
                                                                 |     }
                                                                 |     if (r3 < r5) {
    0x000225f2 str.w r3, [fp, 0x3c]                              |         __asm ("str.w r3, [arg_3ch]");
                                                                 |     }
                                                                 | label_4:
    0x000225f6 ldrb.w r2, [sl, 0x18]                             |     r2 = *((sl + 0x18));
                                                                 |     if (r2 != 0) {
    0x000225fa cbnz r2, 0x2261a                                  |         goto label_5;
                                                                 |     }
    0x000225fc ldr.w r3, [fp]                                    |     r3 = *(fp);
    0x00022600 ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x00022602 lsls r0, r3, 7                                    |     r0 = r3 << 7;
                                                                 |     if (r0 < r3) {
    0x00022604 bmi 0x22652                                       |         goto label_22;
                                                                 |     }
    0x00022606 ldr.w r3, [fp, 0x198]                             |     r3 = *(arg_198h);
    0x0002260a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0002260c beq.w 0x2277e                                     |         goto label_23;
                                                                 |     }
    0x00022610 ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x00022612 cmp r1, 1                                         |     
                                                                 |     if (r1 != 1) {
    0x00022614 bne 0x2261a                                       |         goto label_5;
                                                                 |     }
                                                                 | label_0:
    0x00022616 movs r1, 1                                        |     r1 = 1;
    0x00022618 strb r1, [r3, 0x15]                               |     *((r3 + 0x15)) = r1;
                                                                 |     do {
                                                                 | label_5:
    0x0002261a movs r1, 0                                        |         r1 = 0;
    0x0002261c ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x0002261e str r1, [sp]                                      |         *(sp) = r1;
    0x00022620 mov r0, r4                                        |         r0 = r4;
    0x00022622 movs r1, 0x83                                     |         r1 = 0x83;
    0x00022624 bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
                                                                 | label_11:
    0x00022628 mvns r6, r6                                       |         r6 = ~r6;
    0x0002262a ldr r5, [r4, 0x18]                                |         r5 = *((r4 + 0x18));
                                                                 |         if (r6 >= r6) {
    0x0002262c bmi 0x22638                                       |             
    0x0002262e ldr r3, [r5, 0x70]                                |             r3 = *((r5 + 0x70));
                                                                 |             if (r3 == 0) {
    0x00022630 cbz r3, 0x22638                                   |                 goto label_24;
                                                                 |             }
    0x00022632 ldr r2, [r4, 0x20]                                |             r2 = *((r4 + 0x20));
    0x00022634 str.w r2, [r3, r6, lsl 2]                         |             __asm ("str.w r2, [r3, r6, lsl 2]");
                                                                 |         }
                                                                 | label_24:
    0x00022638 ldr r1, [r4, 0x20]                                |         r1 = *((r4 + 0x20));
    0x0002263a movs r3, 0                                        |         r3 = 0;
    0x0002263c ldr r2, [sp, 0x18]                                |         r2 = var_18h;
    0x0002263e mov r0, r4                                        |         r0 = r4;
    0x00022640 subs r1, 1                                        |         r1--;
    0x00022642 str r1, [r5, 0x58]                                |         *((r5 + 0x58)) = r1;
    0x00022644 movs r1, 0x3b                                     |         r1 = 0x3b;
    0x00022646 str r3, [sp, 0x60]                                |         *(arg_60h) = r3;
    0x00022648 add sp, 0x3c                                      |         
    0x0002264a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |         
    0x0002264e b.w 0x18bf8                                       |         void (*0x18bf8)() ();
                                                                 | label_22:
    0x00022652 ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x00022654 cmp r3, 1                                         |         
    0x00022656 bne 0x2261a                                       |         
                                                                 |     } while (r3 != 1);
    0x00022658 ldr.w r3, [fp, 0x198]                             |     r3 = *(arg_198h);
    0x0002265c cmp r3, 0                                         |     
    0x0002265e it eq                                             |     
                                                                 |     if (r3 != 0) {
    0x00022660 moveq r3, fp                                      |         r3 = fp;
                                                                 |     }
    0x00022662 b 0x22616                                         |     goto label_0;
                                                                 | label_14:
    0x00022664 movs r3, 0                                        |     r3 = 0;
    0x00022666 movs r1, 0x84                                     |     r1 = 0x84;
    0x00022668 str r3, [sp]                                      |     *(sp) = r3;
    0x0002266a mov r3, r0                                        |     r3 = r0;
    0x0002266c ldrb.w r2, [sl, 0x18]                             |     r2 = *((sl + 0x18));
    0x00022670 mov r0, r4                                        |     r0 = r4;
    0x00022672 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00022676 b 0x2248e                                         |     goto label_1;
                                                                 | label_17:
    0x00022678 ldr.w r2, [fp, 0x48]                              |     r2 = *(arg_48h);
    0x0002267c adds r1, r2, 1                                    |     r1 = r2 + 1;
    0x0002267e add r2, r5                                        |     r2 += r5;
    0x00022680 str r1, [sp, 0x24]                                |     var_24h = r1;
    0x00022682 str.w r2, [fp, 0x48]                              |     __asm ("str.w r2, [arg_48h]");
    0x00022686 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00022688 bne.w 0x224f4                                     |         goto label_2;
                                                                 |     }
                                                                 | label_18:
    0x0002268c ldr.w r3, [fp, 0x48]                              |     r3 = *(arg_48h);
    0x00022690 adds r3, 1                                        |     r3++;
    0x00022692 str r3, [sp, 0x30]                                |     var_30h = r3;
    0x00022694 str.w r3, [fp, 0x48]                              |     __asm ("str.w r3, [arg_48h]");
    0x00022698 b 0x22504                                         |     goto label_3;
                                                                 | label_16:
    0x0002269a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0002269c beq 0x2279c                                       |         goto label_25;
                                                                 |     }
    0x0002269e subs r3, 1                                        |     r3--;
    0x000226a0 uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x000226a2 strb.w r3, [fp, 0x13]                             |     *(arg_13h) = r3;
    0x000226a6 adds r3, 6                                        |     r3 += 6;
    0x000226a8 ldr.w r5, [fp, r3, lsl 2]                         |     offset_1 = r3 << 2;
                                                                 |     r5 = *((fp + offset_1));
                                                                 | label_7:
    0x000226ac ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x000226ae mov.w r8, 0                                       |     r8 = 0;
    0x000226b2 movs r1, 0x22                                     |     r1 = 0x22;
    0x000226b4 mov r0, r4                                        |     r0 = r4;
    0x000226b6 ldr r2, [r3]                                      |     r2 = *(r3);
    0x000226b8 mov r3, r5                                        |     r3 = r5;
    0x000226ba str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x000226be adds r2, 1                                        |     r2++;
    0x000226c0 add r2, r7                                        |     r2 += r7;
    0x000226c2 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000226c6 mov r3, r8                                        |     r3 = r8;
    0x000226c8 mov r2, r5                                        |     r2 = r5;
    0x000226ca movs r1, 0x26                                     |     r1 = 0x26;
    0x000226cc str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x000226d0 mov r0, r4                                        |     r0 = r4;
    0x000226d2 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000226d6 ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x000226da mov r8, r0                                        |     r8 = r0;
    0x000226dc ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x000226de ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x000226e0 cmp r3, r2                                        |     
    0x000226e2 it eq                                             |     
                                                                 |     if (r3 == r2) {
    0x000226e4 cmpeq r1, 1                                       |         __asm ("cmpeq r1, 1");
                                                                 |     }
                                                                 |     if (r3 == r2) {
    0x000226e6 beq.w 0x22874                                     |         goto label_26;
                                                                 |     }
                                                                 | label_12:
    0x000226ea ldr r7, [sp, 0x18]                                |     r7 = var_18h;
    0x000226ec movs r1, 0x35                                     |     r1 = 0x35;
    0x000226ee ldrd r3, r2, [sp, 0x28]                           |     __asm ("ldrd r3, r2, [var_28h]");
    0x000226f2 mov r0, fp                                        |     r0 = fp;
    0x000226f4 str r1, [sp]                                      |     *(sp) = r1;
    0x000226f6 mov r1, r7                                        |     r1 = r7;
    0x000226f8 bl 0x22140                                        |     fcn_00022140 (r0, r1, r2, r3, r4);
    0x000226fc movs r3, 0                                        |     r3 = 0;
    0x000226fe mov r2, r7                                        |     r2 = r7;
    0x00022700 movs r1, 0x44                                     |     r1 = 0x44;
    0x00022702 mov r0, r4                                        |     r0 = r4;
    0x00022704 str r5, [sp]                                      |     *(sp) = r5;
    0x00022706 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0002270a movs r2, 0                                        |     r2 = 0;
    0x0002270c movs r1, 0x10                                     |     r1 = 0x10;
    0x0002270e mov r3, r6                                        |     r3 = r6;
    0x00022710 str r2, [sp]                                      |     *(sp) = r2;
    0x00022712 mov r0, r4                                        |     r0 = r4;
    0x00022714 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00022718 ldr r3, [r4, 0x20]                                |     r3 = *((r4 + 0x20));
    0x0002271a cmp r3, 1                                         |     
    0x0002271c sub.w r2, r3, 2                                   |     r2 = r3 - 2;
    0x00022720 itt hi                                            |     
                                                                 |     if (r3 <= 1) {
    0x00022722 ldrhi r1, [r4, 4]                                 |         r1 = *((r4 + 4));
                                                                 |     }
                                                                 |     if (r3 <= 1) {
    0x00022724 addhi r2, r2, r2, lsl 2                           |         r2 += (r2 << 2);
                                                                 |     }
    0x00022728 add.w r0, r3, -1                                  |     r0 = r3 + -1;
    0x0002272c it hi                                             |     
                                                                 |     if (r3 <= 1) {
    0x0002272e addhi r1, r1, r2, lsl 2                           |         r1 += (r2 << 2);
                                                                 |     }
    0x00022732 ldr r2, [r4, 0x18]                                |     r2 = *((r4 + 0x18));
    0x00022734 it hi                                             |     
                                                                 |     if (r3 <= 1) {
    0x00022736 strhi r3, [r1, 8]                                 |         *((r1 + 8)) = r3;
                                                                 |     }
    0x00022738 cmp r8, r3                                        |     
    0x0002273a itttt lo                                          |     
                                                                 |     if (r8 >= r3) {
    0x0002273c ldrlo r1, [r4, 4]                                 |         r1 = *((r4 + 4));
                                                                 |     }
                                                                 |     if (r8 >= r3) {
    0x0002273e addlo r8, r8, r8, lsl 2                           |         r8 += (r8 << 2);
                                                                 |     }
                                                                 |     if (r8 >= r3) {
    0x00022742 addlo r1, r1, r8, lsl 2                           |         r1 += (r8 << 2);
                                                                 |     }
                                                                 |     if (r8 < r3) {
    0x00022746 str r3, [r1, 8]                                   |         *((r1 + 8)) = r3;
                                                                 |     }
    0x00022748 str r0, [r2, 0x58]                                |     *((r2 + 0x58)) = r0;
    0x0002274a cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x0002274c beq.w 0x225f6                                     |         goto label_4;
                                                                 |     }
    0x00022750 ldrb.w r0, [fp, 0x13]                             |     r0 = *(arg_13h);
    0x00022754 cmp r0, 7                                         |     
                                                                 |     if (r0 > 7) {
    0x00022756 bhi.w 0x225f6                                     |         goto label_4;
                                                                 |     }
    0x0002275a add.w r3, fp, 0x74                                |     r3 += arg_74h;
    0x0002275e add.w r1, fp, 0x13c                               |     r1 += arg_13ch;
                                                                 |     do {
    0x00022762 ldr r2, [r3, 0xc]                                 |         r2 = *((r3 + 0xc));
    0x00022764 cmp r5, r2                                        |         
                                                                 |         if (r5 == r2) {
    0x00022766 beq.w 0x2286e                                     |             goto label_27;
                                                                 |         }
    0x0002276a adds r3, 0x14                                     |         r3 += 0x14;
    0x0002276c cmp r3, r1                                        |         
    0x0002276e bne 0x22762                                       |         
                                                                 |     } while (r3 != r1);
    0x00022770 adds r3, r0, 1                                    |     r3 = r0 + 1;
    0x00022772 adds r0, 6                                        |     r0 += 6;
    0x00022774 strb.w r3, [fp, 0x13]                             |     *(arg_13h) = r3;
    0x00022778 str.w r5, [fp, r0, lsl 2]                         |     __asm ("str.w r5, [fp, r0, lsl 2]");
    0x0002277c b 0x225f6                                         |     goto label_4;
                                                                 | label_23:
    0x0002277e ldrb.w r3, [fp, 0x14]                             |     r3 = *(arg_14h);
    0x00022782 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00022784 beq 0x22856                                       |         goto label_28;
                                                                 |     }
    0x00022786 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00022788 cmp r3, 1                                         |     
    0x0002278a it eq                                             |     
                                                                 |     if (r3 == 1) {
    0x0002278c moveq r3, fp                                      |         r3 = fp;
                                                                 |         goto label_29;
                                                                 |     }
                                                                 |     if (r3 == 1) {
                                                                 | label_29:
    0x0002278e beq.w 0x22616                                     |         goto label_0;
                                                                 |     }
    0x00022792 b 0x2261a                                         |     goto label_5;
                                                                 | label_13:
    0x00022794 bl 0x192c8                                        |     r0 = fcn_000192c8 (r0);
    0x00022798 mov r4, r0                                        |     r4 = r0;
    0x0002279a b 0x22476                                         |     goto label_6;
                                                                 | label_25:
    0x0002279c ldr.w r5, [fp, 0x48]                              |     r5 = *(arg_48h);
    0x000227a0 adds r5, 1                                        |     r5++;
    0x000227a2 str.w r5, [fp, 0x48]                              |     __asm ("str.w r5, [arg_48h]");
    0x000227a6 b 0x226ac                                         |     goto label_7;
                                                                 | label_19:
    0x000227a8 ldr.w r2, [sl]                                    |     r2 = *(sl);
    0x000227ac ldrd r1, r3, [sp, 0x28]                           |     __asm ("ldrd r1, r3, [var_28h]");
    0x000227b0 cmp r2, r1                                        |     
    0x000227b2 ite ne                                            |     
                                                                 |     if (r2 == r1) {
    0x000227b4 movne r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r2 != r1) {
    0x000227b6 andeq r3, r3, 1                                   |         r3 &= 1;
                                                                 |     }
    0x000227ba cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000227bc beq.w 0x2257e                                     |         goto label_8;
                                                                 |     }
                                                                 | label_9:
    0x000227c0 movs r2, 0                                        |     r2 = 0;
    0x000227c2 mov r3, r6                                        |     r3 = r6;
    0x000227c4 movs r1, 0x10                                     |     r1 = 0x10;
    0x000227c6 mov r0, r4                                        |     r0 = r4;
    0x000227c8 str r2, [sp]                                      |     *(sp) = r2;
    0x000227ca bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000227ce b 0x2257e                                         |     goto label_8;
                                                                 | label_20:
    0x000227d0 ldr r3, [r4, 0x20]                                |     r3 = *((r4 + 0x20));
    0x000227d2 mov.w r8, 0                                       |     r8 = 0;
    0x000227d6 str r5, [sp, 0x20]                                |     var_20h = r5;
    0x000227d8 str r6, [sp, 0x2c]                                |     var_2ch = r6;
    0x000227da add r3, r5                                        |     r3 += r5;
    0x000227dc add.w sb, r3, 1                                   |     sb = r3 + 1;
    0x000227e0 lsls r3, r5, 1                                    |     r3 = r5 << 1;
    0x000227e2 ldr r5, [sp, 0x34]                                |     r5 = var_34h;
    0x000227e4 str.w fp, [sp, 0x34]                              |     __asm ("str.w fp, [var_34h]");
    0x000227e8 mov r6, r3                                        |     r6 = r3;
    0x000227ea ldr.w fp, [sp, 0x28]                              |     fp = var_28h;
    0x000227ee str.w sl, [sp, 0x28]                              |     __asm ("str.w sl, [var_28h]");
    0x000227f2 mov sl, sb                                        |     sl = sb;
    0x000227f4 ldr.w sb, [sp, 0x1c]                              |     sb = var_1ch;
                                                                 |     do {
    0x000227f8 ldr.w r1, [sb, 4]                                 |         r1 = *((sb + 4));
    0x000227fc mov r3, sl                                        |         r3 = sl;
    0x000227fe ldrsh.w r0, [fp, 0x24]                            |         r0 = *(arg_24h);
    0x00022802 ldr r2, [r5, 4]!                                  |         r2 = *((r5 += 4));
    0x00022806 ldrsh.w r1, [r1, r8]                              |         r1 = *((r1 + r8));
    0x0002280a add.w r8, r8, 2                                   |         r8 += 2;
    0x0002280e adds r2, 1                                        |         r2++;
    0x00022810 cmp r0, r1                                        |         
    0x00022812 add.w r1, r1, 1                                   |         r1++;
    0x00022816 add r1, r7                                        |         r1 += r7;
    0x00022818 it eq                                             |         
                                                                 |         if (r0 != r1) {
    0x0002281a moveq r1, r7                                      |             r1 = r7;
                                                                 |         }
    0x0002281c add r2, r7                                        |         r2 += r7;
    0x0002281e str r1, [sp]                                      |         *(sp) = r1;
    0x00022820 mov r0, r4                                        |         r0 = r4;
    0x00022822 movs r1, 0x4e                                     |         r1 = 0x4e;
    0x00022824 bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00022828 ldr r2, [r4, 4]                                   |         r2 = *((r4 + 4));
                                                                 |         if (r2 != 0) {
    0x0002282a cbz r2, 0x2283e                                   |             
    0x0002282c ldr r1, [r4, 0x20]                                |             r1 = *((r4 + 0x20));
    0x0002282e mov.w r3, 8                                       |             r3 = 8;
    0x00022832 add.w r1, r1, r1, lsl 2                           |             r1 += (r1 << 2);
    0x00022836 add.w r2, r2, r1, lsl 2                           |             r2 += (r1 << 2);
    0x0002283a strb r3, [r2, -0x11]                              |             *((r2 - 0x11)) = r3;
                                                                 |         }
    0x0002283e cmp r6, r8                                        |         
    0x00022840 bne 0x227f8                                       |         
                                                                 |     } while (r6 != r8);
    0x00022842 ldr r5, [sp, 0x20]                                |     r5 = var_20h;
    0x00022844 ldr r6, [sp, 0x2c]                                |     r6 = var_2ch;
    0x00022846 ldr.w fp, [sp, 0x34]                              |     fp = var_34h;
    0x0002284a ldr.w sl, [sp, 0x28]                              |     sl = var_28h;
    0x0002284e b 0x227c0                                         |     goto label_9;
                                                                 | label_21:
    0x00022850 movs r2, 1                                        |     r2 = 1;
    0x00022852 strb r2, [r3, 6]                                  |     *((r3 + 6)) = r2;
    0x00022854 b 0x225da                                         |     goto label_10;
                                                                 | label_28:
    0x00022856 mvn r2, 1                                         |     r2 = ~1;
    0x0002285a movs r1, 4                                        |     r1 = 4;
    0x0002285c strd r2, r1, [sp]                                 |     __asm ("strd r2, r1, [sp]");
    0x00022860 mov r0, fp                                        |     r0 = fp;
    0x00022862 movs r2, 2                                        |     r2 = 2;
    0x00022864 movw r1, 0x313                                    |     r1 = 0x313;
    0x00022868 bl 0x19494                                        |     fcn_00019494 (r0, r1, r2, r3, r4, r5);
    0x0002286c b 0x22628                                         |     goto label_11;
                                                                 | label_27:
    0x0002286e movs r2, 1                                        |     r2 = 1;
    0x00022870 strb r2, [r3, 6]                                  |     *((r3 + 6)) = r2;
    0x00022872 b 0x225f6                                         |     goto label_4;
                                                                 | label_26:
    0x00022874 mov r3, r6                                        |     r3 = r6;
    0x00022876 mov r2, r7                                        |     r2 = r7;
    0x00022878 movs r1, 0x4f                                     |     r1 = 0x4f;
    0x0002287a mov r0, r4                                        |     r0 = r4;
    0x0002287c str r5, [sp]                                      |     *(sp) = r5;
    0x0002287e bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00022882 ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x00022884 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00022886 beq.w 0x226ea                                     |         goto label_12;
                                                                 |     }
    0x0002288a ldr r2, [r4, 0x20]                                |     r2 = *((r4 + 0x20));
    0x0002288c add.w r2, r2, r2, lsl 2                           |     r2 += (r2 << 2);
    0x00022890 add.w r3, r3, r2, lsl 2                           |     r3 += (r2 << 2);
    0x00022894 movs r2, 0x88                                     |     r2 = 0x88;
    0x00022896 strb r2, [r3, -0x11]                              |     *((r3 - 0x11)) = r2;
    0x0002289a b 0x226ea                                         |     goto label_12;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x22f8c */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00022f8c ()                                      | void fcn_00022f8c (int16_t arg_bp_ch, int16_t arg_14h, int16_t arg_ch, int16_t arg1) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     r0 = arg1;
    0x00022f8c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00022f90 sub sp, 0x14                                      |     
    0x00022f92 ldrb r3, [r0, 0xe]                                |     r3 = *(arg_chxe);
    0x00022f94 ldrb r2, [r0, 0xd]                                |     r2 = *(arg_chxd);
    0x00022f96 ldr r5, [r0, 0x14]                                |     r5 = *(arg_chx14);
    0x00022f98 str r3, [sp]                                      |     *(sp) = r3;
    0x00022f9a cmp r2, r3                                        |     
                                                                 |     if (r2 <= r3) {
    0x00022f9c blo 0x2309c                                       |         goto label_11;
                                                                 |     }
    0x00022f9e ldr.w fp, [r0, 4]                                 |     fp = *((r0 + 4));
    0x00022fa2 mov r8, r0                                        |     r8 = r0;
    0x00022fa4 add.w r3, r0, 0x1c                                |     r3 += arg_chx1c;
    0x00022fa8 str r3, [sp, 4]                                   |     var_4h = r3;
                                                                 | label_3:
    0x00022faa ldr r3, [sp]                                      |     r3 = *(sp);
    0x00022fac add.w r3, r8, r3, lsl 2                           |     r3 = r8 + (r3 << 2);
    0x00022fb0 ldrd r7, sb, [r3, 0x10]                           |     __asm ("ldrd r7, sb, [r3, 0x10]");
    0x00022fb4 cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x00022fb8 beq 0x23082                                       |         goto label_12;
                                                                 |     }
                                                                 | label_2:
    0x00022fba ldr.w r2, [fp, 0xc]                               |     r2 = *(arg_bp_ch);
    0x00022fbe ldr.w r4, [fp, 0x14]                              |     r4 = *(arg_14h);
    0x00022fc2 cmp r5, r2                                        |     
                                                                 |     if (r5 >= r2) {
    0x00022fc4 bge 0x2306a                                       |         goto label_13;
                                                                 |     }
    0x00022fc6 adds r5, 1                                        |     r5++;
    0x00022fc8 add.w sl, r8, 0x18                                |     sl = r8 + 0x18;
    0x00022fcc add.w r3, r5, r5, lsl 1                           |     r3 = r5 + (r5 << 1);
    0x00022fd0 add.w r4, r4, r3, lsl 4                           |     r4 += (r3 << 4);
    0x00022fd4 b 0x22fe0                                         |     
                                                                 |     while (r3 != r7) {
                                                                 | label_0:
    0x00022fd6 cmp r2, r5                                        |         
    0x00022fd8 add.w r4, r4, 0x30                                |         r4 += 0x30;
                                                                 |         if (r2 <= r5) {
    0x00022fdc ble 0x2306a                                       |             goto label_13;
                                                                 |         }
                                                                 | label_1:
    0x00022fde adds r5, 1                                        |         r5++;
    0x00022fe0 ldr r3, [r4, -0x28]                               |         r3 = *((r4 - 0x28));
    0x00022fe4 sub.w r6, r4, 0x30                                |         r6 = r4 - 0x30;
    0x00022fe8 cmp r3, r7                                        |         
    0x00022fea bne 0x22fd6                                       |         
                                                                 |     }
    0x00022fec ldr r3, [r4, -0x24]                               |     r3 = *((r4 - 0x24));
    0x00022ff0 cmp r3, sb                                        |     
                                                                 |     if (r3 != sb) {
    0x00022ff2 bne 0x22fd6                                       |         goto label_0;
                                                                 |     }
    0x00022ff4 ldr r3, [sp]                                      |     r3 = *(sp);
    0x00022ff6 cmp r3, 2                                         |     
                                                                 |     if (r3 < 2) {
    0x00022ff8 bls 0x23004                                       |         goto label_14;
                                                                 |     }
    0x00022ffa ldr r3, [r4, -0x30]                               |     r3 = *((r4 - 0x30));
    0x00022ffe ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x00023000 lsls r0, r3, 0x1f                                 |     r0 = r3 << 0x1f;
                                                                 |     if (r0 < r3) {
    0x00023002 bmi 0x22fd6                                       |         goto label_0;
                                                                 |     }
                                                                 | label_14:
    0x00023004 ldrh r2, [r4, -0x1e]                              |     r2 = *((r4 - 0x1e));
    0x00023008 lsls r1, r2, 0x15                                 |     r1 = r2 << 0x15;
                                                                 |     if (r1 < r2) {
    0x0002300a bpl 0x23016                                       |         
    0x0002300c ldrb.w ip, [r8, 0xd]                              |         ip = *((r8 + 0xd));
    0x00023010 cmp.w ip, 0x15                                    |         
                                                                 |         if (ip < 0x15) {
    0x00023014 bls 0x230e0                                       |             goto label_15;
                                                                 |         }
                                                                 |     }
                                                                 | label_9:
    0x00023016 ldr.w r3, [r8, 0x10]                              |     r3 = *((r8 + 0x10));
    0x0002301a tst r2, r3                                        |     
                                                                 |     if ((r2 & r3) != 0) {
    0x0002301c beq 0x23060                                       |         
    0x0002301e ldr.w r3, [r8, 8]                                 |         r3 = *((r8 + 8));
                                                                 |         if (r3 != 0) {
    0x00023022 cbz r3, 0x23028                                   |             
    0x00023024 lsls r1, r2, 0x18                                 |             r1 = r2 << 0x18;
                                                                 |             if (r1 >= r2) {
    0x00023026 bpl 0x230a0                                       |                 goto label_16;
                                                                 |             }
                                                                 |         }
                                                                 | label_7:
    0x00023028 lsls r3, r2, 0x1e                                 |         r3 = r2 << 0x1e;
                                                                 |         if (r3 < r2) {
    0x0002302a bpl 0x2304e                                       |             
    0x0002302c ldr r3, [r4, -0x30]                               |             r3 = *((r4 - 0x30));
    0x00023030 ldr r3, [r3, 0x10]                                |             r3 = *((r3 + 0x10));
    0x00023032 ldrb r2, [r3]                                     |             r2 = *(r3);
    0x00023034 cmp r2, 0x9a                                      |             
                                                                 |             if (r2 != 0x9a) {
    0x00023036 bne 0x2304e                                       |                 goto label_17;
                                                                 |             }
    0x00023038 ldr r1, [r3, 0x1c]                                |             r1 = *((r3 + 0x1c));
    0x0002303a ldr.w r2, [r8, 0x18]                              |             r2 = *((r8 + 0x18));
    0x0002303e cmp r1, r2                                        |             
                                                                 |             if (r1 != r2) {
    0x00023040 bne 0x2304e                                       |                 goto label_17;
                                                                 |             }
    0x00023042 ldrsh.w r2, [r3, 0x20]                            |             r2 = *((r3 + 0x20));
    0x00023046 ldr.w r3, [r8, 0x1c]                              |             r3 = *((r8 + 0x1c));
    0x0002304a cmp r2, r3                                        |             
                                                                 |             if (r2 == r3) {
    0x0002304c beq 0x2305a                                       |                 goto label_6;
                                                                 |             }
                                                                 |         }
                                                                 | label_17:
    0x0002304e str.w r5, [r8, 0x14]                              |         __asm ("str.w r5, [r8, 0x14]");
                                                                 | label_4:
    0x00023052 mov r0, r6                                        |         r0 = r6;
    0x00023054 add sp, 0x14                                      |         
    0x00023056 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_6:
    0x0002305a ldrb.w r3, [r8, 0xe]                              |         r3 = *((r8 + 0xe));
    0x0002305e str r3, [sp]                                      |         *(sp) = r3;
                                                                 |     }
                                                                 | label_5:
    0x00023060 ldr.w r2, [fp, 0xc]                               |     r2 = *(arg_bp_ch);
    0x00023064 adds r4, 0x30                                     |     r4 += 0x30;
    0x00023066 cmp r2, r5                                        |     
                                                                 |     if (r2 > r5) {
    0x00023068 bgt 0x22fde                                       |         goto label_1;
                                                                 |     }
                                                                 | label_13:
    0x0002306a ldr.w r3, [r8, 4]                                 |     r3 = *((r8 + 4));
    0x0002306e movs r5, 0                                        |     r5 = 0;
    0x00023070 ldr.w fp, [r3, 4]                                 |     fp = *((r3 + 4));
    0x00023074 str.w fp, [r8, 4]                                 |     __asm ("str.w fp, [r8, 4]");
    0x00023078 cmp.w fp, 0                                       |     
                                                                 |     if (fp != 0) {
    0x0002307c bne 0x22fba                                       |         goto label_2;
                                                                 |     }
    0x0002307e ldrb.w r2, [r8, 0xd]                              |     r2 = *((r8 + 0xd));
                                                                 | label_12:
    0x00023082 ldr r3, [sp]                                      |     r3 = *(sp);
    0x00023084 movs r5, 0                                        |     r5 = 0;
    0x00023086 ldr.w fp, [r8]                                    |     fp = *(r8);
    0x0002308a adds r3, 2                                        |     r3 += 2;
    0x0002308c uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x0002308e str.w fp, [r8, 4]                                 |     __asm ("str.w fp, [r8, 4]");
    0x00023092 cmp r2, r3                                        |     
    0x00023094 str r3, [sp]                                      |     *(sp) = r3;
    0x00023096 strb.w r3, [r8, 0xe]                              |     *((r8 + 0xe)) = r3;
                                                                 |     if (r2 >= r3) {
    0x0002309a bhs 0x22faa                                       |         goto label_3;
                                                                 |     }
                                                                 | label_11:
    0x0002309c movs r6, 0                                        |     r6 = 0;
    0x0002309e b 0x23052                                         |     goto label_4;
                                                                 | label_16:
    0x000230a0 ldr.w r2, [fp]                                    |     r2 = *(fp);
    0x000230a4 ldr r3, [r4, -0x30]                               |     r3 = *((r4 - 0x30));
    0x000230a8 ldrb.w r1, [r8, 0xc]                              |     r1 = *((r8 + 0xc));
    0x000230ac ldr r2, [r2]                                      |     r2 = *(r2);
    0x000230ae mov r0, r3                                        |     r0 = r3;
    0x000230b0 str r3, [sp, 8]                                   |     var_8h = r3;
    0x000230b2 str r2, [sp, 0xc]                                 |     var_ch = r2;
    0x000230b4 bl 0xc3ec                                         |     fcn_0000c3ec (r0, r1);
    0x000230b8 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x000230ba cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000230bc beq 0x23060                                       |         goto label_5;
                                                                 |     }
    0x000230be ldrd r1, r2, [r3, 0xc]                            |     __asm ("ldrd r1, r2, [r3, 0xc]");
    0x000230c2 ldr r0, [sp, 0xc]                                 |     r0 = var_ch;
    0x000230c4 bl 0x22f58                                        |     r0 = fcn_00022f58 (r0, r1, r2);
    0x000230c8 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000230ca beq 0x2314e                                       |         goto label_18;
                                                                 |     }
                                                                 | label_10:
    0x000230cc ldr r0, [r0]                                      |     r0 = *(r0);
    0x000230ce ldr.w r1, [r8, 8]                                 |     r1 = *((r8 + 8));
    0x000230d2 blx 0x6164                                        |     r0 = fcn_00006164 ();
    0x000230d6 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000230d8 bne 0x2305a                                       |         goto label_6;
                                                                 |     }
    0x000230da ldrh r2, [r4, -0x1e]                              |     r2 = *((r4 - 0x1e));
    0x000230de b 0x23028                                         |     goto label_7;
                                                                 | label_15:
    0x000230e0 ldr r3, [r4, -0x30]                               |     r3 = *((r4 - 0x30));
    0x000230e4 ldr r0, [r3, 0x10]                                |     r0 = *((r3 + 0x10));
                                                                 |     if (r0 != 0) {
    0x000230e6 cbnz r0, 0x230f8                                  |         goto label_19;
                                                                 |     }
    0x000230e8 b 0x230fe                                         |     goto label_20;
                                                                 |     do {
    0x000230ea lsls r3, r3, 0xd                                  |         r3 <<= 0xd;
    0x000230ec itett mi                                          |         
                                                                 |         if (r3 >= r3) {
    0x000230ee ldrmi r3, [r0, 0x14]                              |             r3 = *((r0 + 0x14));
                                                                 |         }
                                                                 |         if (r3 < r3) {
    0x000230f0 ldrpl r0, [r0, 0xc]                               |             r0 = *((r0 + 0xc));
                                                                 |         }
                                                                 |         if (r3 >= r3) {
    0x000230f2 ldrmi r3, [r3, 4]                                 |             r3 = *((r3 + 4));
                                                                 |         }
                                                                 |         if (r3 >= r3) {
    0x000230f4 ldrmi r0, [r3]                                    |             r0 = *(r3);
                                                                 |         }
                                                                 |         if (r0 == 0) {
    0x000230f6 cbz r0, 0x230fe                                   |             goto label_20;
                                                                 |         }
                                                                 | label_19:
    0x000230f8 ldr r3, [r0, 4]                                   |         r3 = *((r0 + 4));
    0x000230fa lsls r1, r3, 0x13                                 |         r1 = r3 << 0x13;
    0x000230fc bmi 0x230ea                                       |         
                                                                 |     } while (r1 < r3);
                                                                 | label_20:
    0x000230fe ldr r1, [r0, 0x1c]                                |     r1 = *((r0 + 0x1c));
    0x00023100 cmp.w ip, 0                                       |     
                                                                 |     if (ip == 0) {
    0x00023104 beq 0x23156                                       |         goto label_21;
                                                                 |     }
    0x00023106 strd r2, r7, [sp, 8]                              |     __asm ("strd r2, r7, [var_8h]");
    0x0002310a movs r3, 0                                        |     r3 = 0;
    0x0002310c ldr r7, [sp, 4]                                   |     r7 = var_4h;
    0x0002310e b 0x23116                                         |     
                                                                 |     while (r2 != r1) {
                                                                 | label_8:
    0x00023110 adds r3, 2                                        |         r3 += 2;
    0x00023112 cmp r3, ip                                        |         
                                                                 |         if (r3 >= ip) {
    0x00023114 bge 0x23130                                       |             goto label_22;
                                                                 |         }
    0x00023116 ldr.w r2, [sl, r3, lsl 2]                         |         offset_0 = r3 << 2;
                                                                 |         r2 = *((sl + offset_0));
    0x0002311a cmp r2, r1                                        |         
    0x0002311c bne 0x23110                                       |         
                                                                 |     }
    0x0002311e ldrsh.w lr, [r0, 0x20]                            |     
    0x00023122 ldr.w r2, [r7, r3, lsl 2]                         |     offset_1 = r3 << 2;
                                                                 |     r2 = *((r7 + offset_1));
    0x00023126 cmp r2, lr                                        |     
                                                                 |     if (r2 != lr) {
    0x00023128 bne 0x23110                                       |         goto label_8;
                                                                 |     }
    0x0002312a ldrd r2, r7, [sp, 8]                              |     __asm ("ldrd r2, r7, [var_8h]");
    0x0002312e b 0x23016                                         |     goto label_9;
                                                                 | label_22:
    0x00023130 ldrd r2, r7, [sp, 8]                              |     __asm ("ldrd r2, r7, [var_8h]");
                                                                 |     if (r2 != lr) {
    0x00023134 bne.w 0x23016                                     |         goto label_9;
                                                                 |     }
                                                                 |     do {
    0x00023138 ldrsh.w r0, [r0, 0x20]                            |         r0 = *((r0 + 0x20));
    0x0002313c add.w r3, r8, r3, lsl 2                           |         r3 = r8 + (r3 << 2);
    0x00023140 add.w ip, ip, 2                                   |         
    0x00023144 strd r1, r0, [r3, 0x18]                           |         __asm ("strd r1, r0, [r3, 0x18]");
    0x00023148 strb.w ip, [r8, 0xd]                              |         *((r8 + 0xd)) = ip;
    0x0002314c b 0x23016                                         |         goto label_9;
                                                                 | label_18:
    0x0002314e ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x00023150 ldr r3, [r3]                                      |         r3 = *(r3);
    0x00023152 ldr r0, [r3, 8]                                   |         r0 = *((r3 + 8));
    0x00023154 b 0x230cc                                         |         goto label_10;
                                                                 | label_21:
    0x00023156 mov r3, ip                                        |         r3 = ip;
    0x00023158 b 0x23138                                         |         
                                                                 |     } while (1);
                                                                 | }


r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x23260).
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-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x23750).
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-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x23c74 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00023c74 ()                                      | void fcn_00023c74 (int16_t arg1, 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_4ch;
                                                                 |     int16_t var_50h;
                                                                 |     int16_t var_54h;
                                                                 |     int16_t var_58h;
                                                                 |     int16_t var_5ch;
                                                                 |     int16_t var_64h;
                                                                 |     int16_t var_74h;
                                                                 |     int16_t var_80h;
                                                                 |     int32_t var_8h_2;
                                                                 |     int32_t var_10h_2;
                                                                 |     int32_t var_2h;
                                                                 |     int16_t var_b0h;
                                                                 |     int16_t var_b8h;
                                                                 |     int32_t var_ch_2;
                                                                 |     int32_t var_sp_0h;
                                                                 |     int32_t var_2h_2;
                                                                 |     int16_t var_e8h;
                                                                 |     int16_t var_f0h;
                                                                 |     int16_t var_120h;
                                                                 |     int16_t var_2bch;
                                                                 |     int16_t var_2c4h;
                                                                 |     r0 = arg1;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00023c74 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00023c78 sub.w sp, sp, 0x2c4                               |     
    0x00023c7c str r0, [sp, 0x4c]                                |     var_4ch = r0;
    0x00023c7e mov r5, r0                                        |     r5 = r0;
    0x00023c80 ldr r4, [r0]                                      |     r4 = *(r0);
    0x00023c82 ldr r0, [pc, 0x2e4]                               |     
    0x00023c84 ldr r1, [pc, 0x2e4]                               |     r1 = *(0x23f6c);
    0x00023c86 add r0, pc                                        |     r0 = 0x47bf4;
    0x00023c88 ldr r1, [r0, r1]                                  |     
    0x00023c8a ldr r1, [r1]                                      |     r1 = *(0x47bf4);
    0x00023c8c str r1, [sp, 0x2bc]                               |     var_2bch = r1;
    0x00023c8e mov.w r1, 0                                       |     r1 = 0;
    0x00023c92 ldr r1, [r5, 4]                                   |     r1 = *((r5 + 4));
    0x00023c94 strd r2, r3, [sp, 0x30]                           |     __asm ("strd r2, r3, [var_30h]");
    0x00023c98 str r1, [sp, 0x48]                                |     var_48h = r1;
    0x00023c9a ldrh r1, [r4, 0x22]                               |     r1 = *((r4 + 0x22));
    0x00023c9c ands r1, r1, 0x80                                 |     r1 &= 0x80;
    0x00023ca0 beq 0x23cc6                                       |     
                                                                 |     while (r6 < r2) {
                                                                 | label_0:
    0x00023ca2 movs r3, 0                                        |         r3 = 0;
    0x00023ca4 str r3, [sp, 0x24]                                |         var_24h = r3;
                                                                 | label_7:
    0x00023ca6 ldr r2, [pc, 0x2c8]                               |         
    0x00023ca8 ldr r3, [pc, 0x2c0]                               |         r3 = *(0x23f6c);
    0x00023caa add r2, pc                                        |         r2 = 0x47c20;
    0x00023cac ldr r3, [r2, r3]                                  |         r3 = *(0x47c20);
    0x00023cae ldr r2, [r3]                                      |         r2 = *(0x47c20);
    0x00023cb0 ldr r3, [sp, 0x2bc]                               |         r3 = var_2bch;
    0x00023cb2 eors r2, r3                                       |         r2 ^= r3;
    0x00023cb4 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00023cb8 bne.w 0x23f62                                     |             goto label_10;
                                                                 |         }
    0x00023cbc ldr r0, [sp, 0x24]                                |         r0 = var_24h;
    0x00023cbe add.w sp, sp, 0x2c4                               |         
    0x00023cc2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
    0x00023cc6 ldr r5, [sp, 0x48]                                |         r5 = var_48h;
    0x00023cc8 add.w fp, sp, 0x78                                |         
    0x00023ccc mov r0, fp                                        |         r0 = fp;
    0x00023cce ldr r3, [r5, 0xc]                                 |         r3 = *((r5 + 0xc));
    0x00023cd0 ldr r2, [r5, 0x14]                                |         r2 = *((r5 + 0x14));
    0x00023cd2 add.w r3, r3, r3, lsl 1                           |         r3 += (r3 << 1);
    0x00023cd6 add.w r6, r2, r3, lsl 4                           |         r6 = r2 + (r3 << 4);
    0x00023cda ldr r3, [sp, 0x4c]                                |         r3 = var_4ch;
    0x00023cdc movs r2, 0x38                                     |         r2 = 0x38;
    0x00023cde str r6, [sp, 0x3c]                                |         var_3ch = r6;
    0x00023ce0 ldr.w sl, [r3, 0xc]                               |         sl = *((r3 + 0xc));
    0x00023ce4 blx 0x5fcc                                        |         fcn_00005fcc ();
    0x00023ce8 ldr r2, [r4, 4]                                   |         r2 = *((r4 + 4));
    0x00023cea ldrb.w r3, [sl, 0x10]                             |         r3 = *((sl + 0x10));
    0x00023cee adds r2, 8                                        |         r2 += 8;
    0x00023cf0 add.w r3, r3, r3, lsl 3                           |         r3 += (r3 << 3);
    0x00023cf4 add.w r3, r2, r3, lsl 3                           |         r3 = r2 + (r3 << 3);
    0x00023cf8 ldr r2, [r5, 0x14]                                |         r2 = *((r5 + 0x14));
    0x00023cfa str r3, [sp, 0x38]                                |         var_38h = r3;
    0x00023cfc ldr r3, [r3, 0x28]                                |         r3 = *((r3 + 0x28));
    0x00023cfe cmp r6, r2                                        |         
    0x00023d00 str r2, [sp, 8]                                   |         var_8h = r2;
    0x00023d02 str r3, [sp, 0x44]                                |         var_44h = r3;
    0x00023d04 bls 0x23ca2                                       |         
                                                                 |     }
    0x00023d06 add r3, sp, 0x120                                 |     r3 += var_120h;
    0x00023d08 str r3, [sp, 0x50]                                |     var_50h = r3;
    0x00023d0a b 0x23d18                                         |     goto label_11;
                                                                 | label_1:
    0x00023d0c ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x00023d0e ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x00023d10 adds r3, 0x30                                     |     r3 += 0x30;
    0x00023d12 cmp r2, r3                                        |     
    0x00023d14 str r3, [sp, 8]                                   |     var_8h = r3;
                                                                 |     if (r2 < r3) {
    0x00023d16 bls 0x23ca2                                       |         goto label_0;
                                                                 |     }
                                                                 | label_11:
    0x00023d18 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x00023d1a ldrh r3, [r3, 0x12]                               |     r3 = *((r3 + 0x12));
    0x00023d1c lsls r2, r3, 0x17                                 |     r2 = r3 << 0x17;
                                                                 |     if (r2 >= r3) {
    0x00023d1e bpl 0x23d0c                                       |         goto label_1;
                                                                 |     }
    0x00023d20 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x00023d22 ldrd r2, r1, [sl, 8]                              |     __asm ("ldrd r2, r1, [sl, 8]");
    0x00023d26 ldr r0, [r3, 0xc]                                 |     r0 = *((r3 + 0xc));
    0x00023d28 ldr.w r3, [r0, 0x198]                             |     r3 = *((r0 + 0x198));
    0x00023d2c ands r3, r2                                       |     r3 &= r2;
    0x00023d2e ldr.w r2, [r0, 0x19c]                             |     r2 = *((r0 + 0x19c));
    0x00023d32 ands r2, r1                                       |     r2 &= r1;
    0x00023d34 orrs r3, r2                                       |     r3 |= r2;
                                                                 |     if (r3 == r2) {
    0x00023d36 beq 0x23d0c                                       |         goto label_1;
                                                                 |     }
    0x00023d38 ldr r3, [r0, 0xc]                                 |     r3 = *((r0 + 0xc));
    0x00023d3a add r2, sp, 0x64                                  |     r2 += var_64h;
    0x00023d3c ldr r7, [r0, 0x14]                                |     r7 = *((r0 + 0x14));
    0x00023d3e add.w r1, sl, 0x18                                |     r1 = sl + 0x18;
    0x00023d42 ldr r5, [sp, 0x4c]                                |     r5 = var_4ch;
    0x00023d44 mov r4, r2                                        |     r4 = r2;
    0x00023d46 str r2, [sp, 0x20]                                |     var_20h = r2;
    0x00023d48 movs r6, 0                                        |     r6 = 0;
    0x00023d4a add.w r3, r3, r3, lsl 1                           |     r3 += (r3 << 1);
    0x00023d4e str r1, [sp, 0x58]                                |     var_58h = r1;
    0x00023d50 add.w r8, sp, 0xb0                                |     r8 += var_b0h;
    0x00023d54 add.w r3, r7, r3, lsl 4                           |     r3 = r7 + (r3 << 4);
    0x00023d58 str.w r8, [sp, 0x74]                              |     __asm ("str.w r8, [var_74h]");
    0x00023d5c str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x00023d5e ldm r5!, {r0, r1, r2, r3}                         |     r0 = *(r5!);
                                                                 |     r1 = *((r5! + 4));
                                                                 |     r2 = *((r5! + 8));
                                                                 |     r3 = *((r5! + 12));
    0x00023d60 stm r4!, {r0, r1, r2, r3}                         |     *(r4!) = r0;
                                                                 |     *((r4! + 4)) = r1;
                                                                 |     *((r4! + 8)) = r2;
                                                                 |     *((r4! + 12)) = r3;
    0x00023d62 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00023d64 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00023d66 cmp r7, r3                                        |     
    0x00023d68 str r6, [r2, 8]                                   |     *((r2 + 8)) = r6;
                                                                 |     if (r7 >= r3) {
    0x00023d6a bhs.w 0x23f38                                     |         goto label_12;
                                                                 |     }
    0x00023d6e movs r3, 1                                        |     r3 = 1;
    0x00023d70 str.w sl, [sp, 0x5c]                              |     __asm ("str.w sl, [var_5ch]");
    0x00023d74 str r6, [sp, 0x24]                                |     var_24h = r6;
    0x00023d76 mov sl, r7                                        |     sl = r7;
    0x00023d78 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00023d7a b 0x23dd0                                         |     
                                                                 |     while (r3 < r3) {
    0x00023d7c ldr.w r3, [sl, 0xc]                               |         r3 = *((sl + 0xc));
                                                                 | label_3:
    0x00023d80 ldr r0, [sp, 0x20]                                |         r0 = var_20h;
    0x00023d82 ldr r2, [sp, 0x30]                                |         r2 = var_30h;
    0x00023d84 str r3, [r0, 4]                                   |         *((r0 + 4)) = r3;
    0x00023d86 mov.w r3, 0                                       |         r3 = 0;
    0x00023d8a strh.w r3, [r8]                                   |         *(r8) = r3;
    0x00023d8e ldr r3, [sp, 0x38]                                |         r3 = var_38h;
    0x00023d90 ldr r3, [r3, 0x10]                                |         r3 = *((r3 + 0x10));
    0x00023d92 ldrb.w r3, [r3, 0x2c]                             |         r3 = *((r3 + 0x2c));
    0x00023d96 tst.w r3, 0x10                                    |         
    0x00023d9a ldr r3, [sp, 0x34]                                |         r3 = var_34h;
                                                                 |         if ((r3 & 0x10) == 0) {
    0x00023d9c beq 0x23dfc                                       |             goto label_13;
                                                                 |         }
    0x00023d9e bl 0x1eaac                                        |         fcn_0001eaac (r0, r1, r2, r3, r4);
    0x00023da2 ldrh.w r4, [r8]                                   |         r4 = *(r8);
    0x00023da6 str r0, [sp, 0x24]                                |         var_24h = r0;
    0x00023da8 cmp r4, 0                                         |         
                                                                 |         if (r4 == 0) {
    0x00023daa beq 0x23e0c                                       |             goto label_14;
                                                                 |         }
                                                                 | label_4:
    0x00023dac ldr r3, [sp, 0x1c]                                |         r3 = var_1ch;
    0x00023dae cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00023db0 beq 0x23e16                                       |             goto label_15;
                                                                 |         }
    0x00023db2 movs r3, 0x30                                     |         r3 = 0x30;
    0x00023db4 lsls r2, r4, 4                                    |         r2 = r4 << 4;
    0x00023db6 add r1, sp, 0xb8                                  |         r1 += var_b8h;
    0x00023db8 strh.w r4, [fp]                                   |         *(fp) = r4;
    0x00023dbc add r0, sp, 0x80                                  |         r0 += var_80h;
    0x00023dbe blx 0x6124                                        |         fcn_00006124 ();
    0x00023dc2 movs r3, 0                                        |         r3 = 0;
    0x00023dc4 str r3, [sp, 0x1c]                                |         var_1ch = r3;
                                                                 | label_2:
    0x00023dc6 ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x00023dc8 add.w sl, sl, 0x30                                |         sl += 0x30;
    0x00023dcc cmp r3, sl                                        |         
                                                                 |         if (r3 < sl) {
    0x00023dce bls 0x23ec4                                       |             goto label_16;
                                                                 |         }
                                                                 | label_6:
    0x00023dd0 ldrh.w r3, [sl, 0x12]                             |         r3 = *((sl + 0x12));
    0x00023dd4 lsls r3, r3, 0x16                                 |         r3 <<= 0x16;
    0x00023dd6 bmi 0x23d7c                                       |         
                                                                 |     }
    0x00023dd8 ldr.w r3, [sl, 8]                                 |     r3 = *((sl + 8));
    0x00023ddc ldr r2, [sp, 0x44]                                |     r2 = var_44h;
    0x00023dde cmp r3, r2                                        |     
                                                                 |     if (r3 != r2) {
    0x00023de0 bne 0x23dc6                                       |         goto label_2;
                                                                 |     }
    0x00023de2 ldr r1, [sp, 0x48]                                |     r1 = var_48h;
    0x00023de4 ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x00023de6 ldr r3, [r1]                                      |     r3 = *(r1);
    0x00023de8 str r1, [r2, 4]                                   |     *((r2 + 4)) = r1;
    0x00023dea str.w sl, [r2, 0x14]                              |     __asm ("str.w sl, [r2, 0x14]");
    0x00023dee str r3, [r2]                                      |     *(r2) = r3;
    0x00023df0 mov r3, r2                                        |     r3 = r2;
    0x00023df2 movs r2, 0x48                                     |     r2 = 0x48;
    0x00023df4 strb r2, [r3, 8]                                  |     *((r3 + 8)) = r2;
    0x00023df6 movs r2, 1                                        |     r2 = 1;
    0x00023df8 str r2, [r3, 0xc]                                 |     *((r3 + 0xc)) = r2;
    0x00023dfa b 0x23d80                                         |     goto label_3;
                                                                 | label_13:
    0x00023dfc ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x00023dfe bl 0x23750                                        |     fcn_00023750 (r0, r1, r2);
    0x00023e02 ldrh.w r4, [r8]                                   |     r4 = *(r8);
    0x00023e06 str r0, [sp, 0x24]                                |     var_24h = r0;
    0x00023e08 cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x00023e0a bne 0x23dac                                       |         goto label_4;
                                                                 |     }
                                                                 | label_14:
    0x00023e0c ldr.w sl, [sp, 0x5c]                              |     sl = var_5ch;
    0x00023e10 strh.w r4, [fp]                                   |     *(fp) = r4;
    0x00023e14 b 0x23ec8                                         |     goto label_17;
                                                                 | label_15:
    0x00023e16 ldrh.w r5, [fp]                                   |     r5 = *(fp);
    0x00023e1a movs r3, 0x30                                     |     r3 = 0x30;
    0x00023e1c add r1, sp, 0x80                                  |     r1 += var_80h;
    0x00023e1e add r0, sp, 0xf0                                  |     r0 += var_f0h;
    0x00023e20 add r7, sp, 0xe8                                  |     r7 += var_e8h;
    0x00023e22 str r5, [sp, 0x40]                                |     var_40h = r5;
    0x00023e24 lsls r2, r5, 4                                    |     r2 = r5 << 4;
    0x00023e26 strh.w r5, [sp, 0xe8]                             |     var_e8h = r5;
    0x00023e2a blx 0x6124                                        |     fcn_00006124 ();
    0x00023e2e ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00023e30 strh.w r3, [fp]                                   |     *(fp) = r3;
    0x00023e34 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00023e36 beq 0x23dc6                                       |         goto label_2;
                                                                 |     }
    0x00023e38 str r7, [sp, 0x18]                                |     var_18h = r7;
    0x00023e3a str r3, [sp, 0x28]                                |     var_28h = r3;
    0x00023e3c str.w sl, [sp, 0x54]                              |     __asm ("str.w sl, [var_54h]");
                                                                 |     if (r4 == 0) {
                                                                 | label_5:
    0x00023e40 cbz r4, 0x23e9e                                   |         goto label_18;
                                                                 |     }
    0x00023e42 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00023e44 mov r4, r8                                        |     r4 = r8;
    0x00023e46 movs r6, 0                                        |     r6 = 0;
    0x00023e48 str.w r8, [sp, 0xc]                               |     __asm ("str.w r8, [var_ch]");
    0x00023e4c ldr r2, [r3, 8]                                   |     r2 = *((r3 + 8));
    0x00023e4e ldrsh.w sb, [r3, 0x10]                            |     sb = *((r3 + 0x10));
    0x00023e52 ldrsh.w r7, [r3, 0x12]                            |     r7 = *((r3 + 0x12));
    0x00023e56 str r2, [sp, 0x10]                                |     var_10h = r2;
    0x00023e58 ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
    0x00023e5a str r2, [sp, 0x14]                                |     var_14h = r2;
                                                                 |     do {
    0x00023e5c ldr r2, [r4, 8]                                   |         r2 = var_b8h;
    0x00023e5e mov r0, sb                                        |         r0 = sb;
    0x00023e60 ldr r3, [sp, 0x10]                                |         r3 = var_10h;
    0x00023e62 adds r6, 1                                        |         r6++;
    0x00023e64 ldr r5, [r4, 0xc]                                 |         r5 = var_ch_2;
    0x00023e66 adds r4, 0x10                                     |         r4 += 0x10;
    0x00023e68 ldrsh.w r1, [r4]                                  |         r1 = *(r4);
    0x00023e6c orr.w sl, r3, r2                                  |         sl = r3 | r2;
    0x00023e70 ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x00023e72 orrs r5, r3                                       |         r5 |= r3;
    0x00023e74 bl 0x9fdc                                         |         fcn_00009fdc (r0, r1);
    0x00023e78 ldrsh.w r1, [r4, 2]                               |         r1 = var_2h_2;
    0x00023e7c mov r8, r0                                        |         r8 = r0;
    0x00023e7e mov r0, r7                                        |         r0 = r7;
    0x00023e80 bl 0x9fdc                                         |         fcn_00009fdc (r0, r1);
    0x00023e84 mov r3, r5                                        |         r3 = r5;
    0x00023e86 strd r8, r0, [sp]                                 |         __asm ("strd r8, r0, [sp]");
    0x00023e8a mov r2, sl                                        |         r2 = sl;
    0x00023e8c mov r0, fp                                        |         r0 = fp;
    0x00023e8e bl 0xab08                                         |         fcn_0000ab08 (r0, r1, r2, r3, r4);
    0x00023e92 ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x00023e94 ldrh r3, [r3]                                     |         r3 = *(r3);
    0x00023e96 cmp r3, r6                                        |         
    0x00023e98 bgt 0x23e5c                                       |         
                                                                 |     } while (r3 > r6);
    0x00023e9a ldr.w r8, [sp, 0xc]                               |     r8 = var_ch;
                                                                 | label_18:
    0x00023e9e ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00023ea0 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00023ea2 adds r2, 0x10                                     |     r2 += 0x10;
    0x00023ea4 str r2, [sp, 0x18]                                |     var_18h = r2;
    0x00023ea6 adds r3, 1                                        |     r3++;
    0x00023ea8 ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x00023eaa str r3, [sp, 0x28]                                |     var_28h = r3;
    0x00023eac cmp r3, r2                                        |     
                                                                 |     if (r3 < r2) {
    0x00023eae bge 0x23eb6                                       |         
    0x00023eb0 ldrh.w r4, [r8]                                   |         r4 = *(r8);
    0x00023eb4 b 0x23e40                                         |         goto label_5;
                                                                 |     }
    0x00023eb6 ldr.w sl, [sp, 0x54]                              |     sl = var_54h;
    0x00023eba ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00023ebc add.w sl, sl, 0x30                                |     sl += 0x30;
    0x00023ec0 cmp r3, sl                                        |     
                                                                 |     if (r3 > sl) {
    0x00023ec2 bhi 0x23dd0                                       |         goto label_6;
                                                                 |     }
                                                                 | label_16:
    0x00023ec4 ldr.w sl, [sp, 0x5c]                              |     sl = var_5ch;
                                                                 | label_17:
    0x00023ec8 movs r1, 1                                        |     r1 = 1;
    0x00023eca ldr.w r2, [sl, 0x2c]                              |     r2 = *((sl + 0x2c));
    0x00023ece strh.w r1, [sl, 0x28]                             |     *((sl + 0x28)) = r1;
    0x00023ed2 movs r3, 0                                        |     r3 = 0;
    0x00023ed4 ldr r1, [sp, 8]                                   |     r1 = var_8h;
    0x00023ed6 str r1, [r2]                                      |     *(r2) = r1;
    0x00023ed8 mov.w r2, 0x2000                                  |     r2 = 0x2000;
    0x00023edc str.w r2, [sl, 0x24]                              |     __asm ("str.w r2, [sl, 0x24]");
    0x00023ee0 ldr r2, [sp, 0x58]                                |     r2 = var_58h;
    0x00023ee2 strh.w r3, [sl, 0x12]                             |     *((sl + 0x12)) = r3;
    0x00023ee6 strb.w r3, [sl, 0x11]                             |     *((sl + 0x11)) = r3;
    0x00023eea str.w r3, [sl, 0x18]                              |     __asm ("str.w r3, [sl, 0x18]");
    0x00023eee str r3, [r2, 4]                                   |     *((r2 + 4)) = r3;
    0x00023ef0 str r3, [r2, 8]                                   |     *((r2 + 8)) = r3;
    0x00023ef2 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00023ef4 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00023ef6 bne.w 0x23ca6                                     |         goto label_7;
                                                                 |     }
                                                                 | label_9:
    0x00023efa ldr r6, [sp, 0x4c]                                |     r6 = var_4ch;
    0x00023efc mov r4, fp                                        |     r4 = fp;
    0x00023efe movs r5, 0                                        |     r5 = 0;
                                                                 | label_8:
    0x00023f00 ldrh.w r3, [fp]                                   |     r3 = *(fp);
    0x00023f04 cmp r3, r5                                        |     
                                                                 |     if (r3 <= r5) {
    0x00023f06 ble.w 0x23d0c                                     |         goto label_1;
                                                                 |     }
    0x00023f0a ldrh r3, [r4, 0x10]                               |     r3 = var_10h_2;
    0x00023f0c adds r4, 0x10                                     |     r4 += 0x10;
    0x00023f0e ldr r1, [r6, 0x10]                                |     r1 = *((r6 + 0x10));
    0x00023f10 mov r2, sl                                        |     r2 = sl;
    0x00023f12 ldr r0, [r6]                                      |     r0 = *(r6);
    0x00023f14 adds r5, 1                                        |     r5++;
    0x00023f16 adds r3, 1                                        |     r3++;
    0x00023f18 strh.w r3, [sl, 0x14]                             |     *((sl + 0x14)) = r3;
    0x00023f1c ldrsh.w r3, [r4, 2]                               |     r3 = var_2h;
    0x00023f20 ldrd r8, sb, [r4, -0x8]                           |     __asm ("ldrd r8, sb, [r4, -0x8]");
    0x00023f24 strh.w r3, [sl, 0x16]                             |     *((sl + 0x16)) = r3;
    0x00023f28 strd r8, sb, [sl]                                 |     __asm ("strd r8, sb, [sl]");
    0x00023f2c bl 0xfab8                                         |     r0 = fcn_0000fab8 (r0, r1, r2);
    0x00023f30 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00023f32 beq 0x23f00                                       |         goto label_8;
                                                                 |     }
    0x00023f34 str r0, [sp, 0x24]                                |     var_24h = r0;
    0x00023f36 b 0x23ca6                                         |     goto label_7;
                                                                 | label_12:
    0x00023f38 movs r2, 1                                        |     r2 = 1;
    0x00023f3a ldr.w r3, [sl, 0x2c]                              |     r3 = *((sl + 0x2c));
    0x00023f3e strh.w r2, [sl, 0x28]                             |     *((sl + 0x28)) = r2;
    0x00023f42 ldr r2, [sp, 8]                                   |     r2 = var_8h;
    0x00023f44 str r2, [r3]                                      |     *(r3) = r2;
    0x00023f46 mov.w r3, 0x2000                                  |     r3 = 0x2000;
    0x00023f4a str.w r3, [sl, 0x24]                              |     __asm ("str.w r3, [sl, 0x24]");
    0x00023f4e ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x00023f50 strh.w r6, [sl, 0x12]                             |     *((sl + 0x12)) = r6;
    0x00023f54 strb.w r6, [sl, 0x11]                             |     *((sl + 0x11)) = r6;
    0x00023f58 str.w r6, [sl, 0x18]                              |     __asm ("str.w r6, [sl, 0x18]");
    0x00023f5c str r6, [r3, 4]                                   |     *((r3 + 4)) = r6;
    0x00023f5e str r6, [r3, 8]                                   |     *((r3 + 8)) = r6;
    0x00023f60 b 0x23efa                                         |     goto label_9;
                                                                 | label_10:
    0x00023f62 blx 0x6498                                        |     fcn_00006498 ();
    0x00023f66 nop                                               |     
    0x00023f68 subs r7, 0xd2                                     |     r7 -= 0xd2;
    0x00023f6a movs r5, r0                                       |     r5 = r0;
    0x00023f6c lsls r0, r1, 0xe                                  |     r0 = r1 << 0xe;
    0x00023f6e movs r0, r0                                       |     
    0x00023f70 subs r7, 0xae                                     |     r7 -= 0xae;
    0x00023f72 movs r5, r0                                       |     r5 = r0;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x24004 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00024004 ()                                      | void fcn_00024004 (int16_t arg_40h, int16_t arg1, int16_t arg2, int16_t arg3) {
                                                                 |     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_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_44h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
    0x00024004 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x00024008 mov r4, r2                                        |     r4 = r2;
    0x0002400a ldr.w fp, [r0]                                    |     fp = *(r0);
    0x0002400e sub sp, 0x4c                                      |     
    0x00024010 ldr r2, [pc, 0xe4]                                |     
    0x00024012 ldr r3, [pc, 0xe8]                                |     r3 = *(0x240fe);
    0x00024014 ldrb.w r6, [fp, 0x40]                             |     r6 = *(arg_40h);
    0x00024018 add r2, pc                                        |     r2 = 0x48114;
    0x0002401a str r1, [sp, 0x18]                                |     var_18h = r1;
    0x0002401c ldr r3, [r2, r3]                                  |     
    0x0002401e ldr r3, [r3]                                      |     r3 = *(0x48114);
    0x00024020 str r3, [sp, 0x44]                                |     var_44h = r3;
    0x00024022 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r6 != 0) {
    0x00024026 cbz r6, 0x24042                                   |         
                                                                 | label_0:
    0x00024028 ldr r2, [pc, 0xd4]                                |         
    0x0002402a ldr r3, [pc, 0xd0]                                |         r3 = *(0x240fe);
    0x0002402c add r2, pc                                        |         r2 = 0x48130;
    0x0002402e ldr r3, [r2, r3]                                  |         r3 = *(0x48130);
    0x00024030 ldr r2, [r3]                                      |         r2 = *(0x48130);
    0x00024032 ldr r3, [sp, 0x44]                                |         r3 = var_44h;
    0x00024034 eors r2, r3                                       |         r2 ^= r3;
    0x00024036 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0002403a bne 0x240f4                                       |             goto label_5;
                                                                 |         }
    0x0002403c add sp, 0x4c                                      |         
    0x0002403e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 |     }
    0x00024042 add.w sl, sp, 0x24                                |     sl += var_24h;
    0x00024046 mov r5, r1                                        |     r5 = r1;
    0x00024048 mov sb, r0                                        |     sb = r0;
    0x0002404a movs r2, 0x20                                     |     r2 = 0x20;
    0x0002404c mov r1, r6                                        |     r1 = r6;
    0x0002404e mov r0, sl                                        |     r0 = sl;
    0x00024050 blx 0x5fcc                                        |     fcn_00005fcc ();
    0x00024054 ldr r3, [r4, 0x20]                                |     r3 = *((r4 + 0x20));
    0x00024056 str r3, [sp, 0x28]                                |     var_28h = r3;
    0x00024058 ldr r3, [r4]                                      |     r3 = *(r4);
    0x0002405a ldr r4, [r5, 4]                                   |     r4 = *((r5 + 4));
    0x0002405c ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0002405e str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00024060 ldrsh.w r3, [r5, 0x26]                            |     r3 = *((r5 + 0x26));
    0x00024064 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x00024066 ble 0x240ee                                       |         goto label_6;
                                                                 |     }
    0x00024068 mov r8, r6                                        |     r8 = r6;
    0x0002406a strd r6, r6, [sp, 0xc]                            |     __asm ("strd r6, r6, [var_ch]");
                                                                 |     do {
    0x0002406e ldr r3, [sp, 0x1c]                                |         r3 = var_1ch;
    0x00024070 add.w r2, r4, 0x16                                |         r2 = r4 + 0x16;
    0x00024074 mov r0, sl                                        |         r0 = sl;
    0x00024076 ldr.w r7, [r3, r6, lsl 2]                         |         offset_0 = r6 << 2;
                                                                 |         r7 = *((r3 + offset_0));
    0x0002407a movs r3, 0                                        |         r3 = 0;
    0x0002407c str r3, [sp]                                      |         *(sp) = r3;
    0x0002407e str r2, [sp, 4]                                   |         var_4h = r2;
    0x00024080 mov r2, r3                                        |         r2 = r3;
    0x00024082 mov r1, r7                                        |         r1 = r7;
    0x00024084 bl 0xc4bc                                         |         r0 = fcn_0000c4bc (r0, r1, r2, r3, r4, r5);
    0x00024088 mov r1, r0                                        |         r1 = r0;
    0x0002408a mov r0, fp                                        |         r0 = fp;
    0x0002408c bl 0xd418                                         |         fcn_0000d418 (r0, r1);
    0x00024090 ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x00024092 ldrb r5, [r4, 0x16]                               |         r5 = *((r4 + 0x16));
    0x00024094 str r0, [r4, 0xc]                                 |         *((r4 + 0xc)) = r0;
    0x00024096 mov r0, r7                                        |         r0 = r7;
    0x00024098 adds r5, r5, r3                                   |         r5 += r3;
    0x0002409a ldr r3, [sp, 0x10]                                |         r3 = var_10h;
    0x0002409c adc r3, r3, 0                                     |         __asm ("adc r3, r3, 0");
    0x000240a0 str r3, [sp, 0x14]                                |         var_14h = r3;
    0x000240a2 bl 0xb8a4                                         |         r0 = fcn_0000b8a4 (r0);
    0x000240a6 cmp r0, 0                                         |         
    0x000240a8 mov r1, r7                                        |         r1 = r7;
    0x000240aa it eq                                             |         
                                                                 |         if (r0 != 0) {
    0x000240ac moveq r0, 0x62                                    |             r0 = 0x62;
                                                                 |         }
    0x000240ae strb r0, [r4, 0x15]                               |         *((r4 + 0x15)) = r0;
    0x000240b0 mov r0, sb                                        |         r0 = sb;
    0x000240b2 bl 0x22e78                                        |         fcn_00022e78 (r0, r1);
    0x000240b6 ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x000240b8 str r5, [sp, 0xc]                                 |         var_ch = r5;
    0x000240ba str r3, [sp, 0x10]                                |         var_10h = r3;
                                                                 |         if (r0 != 0) {
    0x000240bc cbz r0, 0x240c8                                   |             
    0x000240be ldr r1, [r0]                                      |             r1 = *(r0);
    0x000240c0 mov r0, fp                                        |             r0 = fp;
    0x000240c2 bl 0xd418                                         |             fcn_0000d418 (r0, r1);
    0x000240c6 str r0, [r4, 0x10]                                |             *((r4 + 0x10)) = r0;
                                                                 |         }
    0x000240c8 ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x000240ca add.w r8, r8, 1                                   |         r8++;
    0x000240ce adds r4, 0x18                                     |         r4 += 0x18;
    0x000240d0 adds r6, 5                                        |         r6 += 5;
    0x000240d2 ldrsh.w r3, [r3, 0x26]                            |         r3 = *((r3 + 0x26));
    0x000240d6 cmp r3, r8                                        |         
    0x000240d8 bgt 0x2406e                                       |         
                                                                 |     } while (r3 > r8);
    0x000240da ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x000240dc lsls r0, r5, 2                                    |     r0 = r5 << 2;
    0x000240de lsls r1, r3, 2                                    |     r1 = r3 << 2;
    0x000240e0 orr.w r1, r1, r5, lsr 30                          |     r1 |= (r5 >> 30);
                                                                 |     do {
    0x000240e4 bl 0x73ac                                         |         fcn_000073ac (r0, r1);
    0x000240e8 ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x000240ea strh r0, [r3, 0x2a]                               |         *((r3 + 0x2a)) = r0;
    0x000240ec b 0x24028                                         |         goto label_0;
                                                                 | label_6:
    0x000240ee mov r0, r6                                        |         r0 = r6;
    0x000240f0 mov r1, r6                                        |         r1 = r6;
    0x000240f2 b 0x240e4                                         |         
                                                                 |     } while (1);
                                                                 | label_5:
    0x000240f4 blx 0x6498                                        |     fcn_00006498 ();
    0x000240f8 subs r4, 0x40                                     |     r4 -= 0x40;
    0x000240fa movs r5, r0                                       |     r5 = r0;
    0x000240fc lsls r0, r1, 0xe                                  |     r0 = r1 << 0xe;
    0x000240fe movs r0, r0                                       |     
    0x00024100 subs r4, 0x2c                                     |     r4 -= 0x2c;
    0x00024102 movs r5, r0                                       |     r5 = r0;
    0x00024104 push {r3, r4, r5, r6, r7, lr}                     |     
    0x00024106 ldrh r3, [r1, 6]                                  |     r3 = *((r1 + 6));
    0x00024108 ands r5, r3, 0x20                                 |     r5 = r3 & 0x20;
                                                                 |     if (r5 == r3) {
    0x0002410c bne 0x24122                                       |         
    0x0002410e ldr r6, [r1, 0x20]                                |         r6 = *((r1 + 0x20));
    0x00024110 orr r3, r3, 0x20                                  |         r3 |= 0x20;
    0x00024114 ldr r7, [r0, 0xc]                                 |         r7 = *((r0 + 0xc));
    0x00024116 strh r3, [r1, 6]                                  |         *((r1 + 6)) = r3;
    0x00024118 mov r4, r6                                        |         r4 = r6;
    0x0002411a ldr r2, [r4], 8                                   |         r2 = *(r4);
                                                                 |         r4 += 8;
    0x0002411e cmp r2, 0                                         |         
                                                                 |         if (r2 > 0) {
    0x00024120 bgt 0x2413c                                       |             goto label_7;
                                                                 |         }
                                                                 |     }
                                                                 | label_1:
    0x00024122 pop {r3, r4, r5, r6, r7, pc}                      |     
                                                                 |     do {
                                                                 | label_3:
    0x00024124 mov r2, r3                                        |         r2 = r3;
    0x00024126 ldr r3, [r3, 0x34]                                |         r3 = *((r3 + 0x34));
    0x00024128 cmp r3, 0                                         |         
    0x0002412a bne 0x24124                                       |         
                                                                 |     } while (r3 != 0);
                                                                 | label_4:
    0x0002412c mov r0, r7                                        |     r0 = r7;
    0x0002412e bl 0x24004                                        |     fcn_00024004 (r0, r1, r2, r3);
    0x00024132 ldr r2, [r6]                                      |     r2 = *(r6);
                                                                 | label_2:
    0x00024134 adds r5, 1                                        |     r5++;
    0x00024136 adds r4, 0x48                                     |     r4 += 0x48;
    0x00024138 cmp r2, r5                                        |     
                                                                 |     if (r2 <= r5) {
    0x0002413a ble 0x24122                                       |         goto label_1;
                                                                 |     }
                                                                 | label_7:
    0x0002413c ldr r1, [r4, 0x10]                                |     r1 = *((r4 + 0x10));
    0x0002413e cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00024140 beq 0x24134                                       |         goto label_2;
                                                                 |     }
    0x00024142 ldrb.w r3, [r1, 0x2c]                             |     r3 = *((r1 + 0x2c));
    0x00024146 lsls r3, r3, 0x1e                                 |     r3 <<= 0x1e;
                                                                 |     if (r3 >= r3) {
    0x00024148 bpl 0x24134                                       |         goto label_2;
                                                                 |     }
    0x0002414a ldr r3, [r4, 0x14]                                |     r3 = *((r4 + 0x14));
    0x0002414c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0002414e beq 0x24134                                       |         goto label_2;
                                                                 |     }
    0x00024150 mov r2, r3                                        |     r2 = r3;
    0x00024152 ldr r3, [r3, 0x34]                                |     r3 = *((r3 + 0x34));
    0x00024154 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00024156 bne 0x24124                                       |         goto label_3;
                                                                 |     }
    0x00024158 b 0x2412c                                         |     goto label_4;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x244e4 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.000244e4 ()                                      | void fcn_000244e4 (int16_t arg_e0h, int16_t arg_e4h, int16_t arg_e8h, 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_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_9ch;
                                                                 |     int16_t var_a0h;
                                                                 |     int16_t var_a4h;
                                                                 |     int32_t var_a8h;
                                                                 |     int32_t var_a8h_2;
                                                                 |     int16_t var_b0h;
                                                                 |     int16_t var_b4h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x000244e4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x000244e8 sub sp, 0xbc                                      |     
    0x000244ea str r2, [sp, 0x74]                                |     var_74h = r2;
    0x000244ec mov sb, r1                                        |     sb = r1;
    0x000244ee mov r1, r3                                        |     r1 = r3;
    0x000244f0 ldr.w r2, [pc, 0x67c]                             |     
    0x000244f4 ldrh.w r4, [sp, 0xe0]                             |     r4 = *(arg_e0h);
    0x000244f8 ldr.w r3, [pc, 0x678]                             |     r3 = *(0x24b74);
    0x000244fc add r2, pc                                        |     r2 = 0x49070;
    0x000244fe str r0, [sp, 0x2c]                                |     var_2ch = r0;
    0x00024500 str r4, [sp, 0x60]                                |     var_60h = r4;
    0x00024502 ldr r3, [r2, r3]                                  |     
    0x00024504 ldr r2, [sp, 0xe4]                                |     r2 = *(arg_e4h);
    0x00024506 ldr r3, [r3]                                      |     r3 = *(0x49070);
    0x00024508 str r3, [sp, 0xb4]                                |     var_b4h = r3;
    0x0002450a mov.w r3, 0                                       |     r3 = 0;
    0x0002450e ldr r3, [r0]                                      |     r3 = *(r0);
    0x00024510 str r2, [sp, 0x78]                                |     var_78h = r2;
    0x00024512 ldr r2, [sp, 0xe8]                                |     r2 = *(arg_e8h);
    0x00024514 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00024516 str r2, [sp, 0x90]                                |     var_90h = r2;
    0x00024518 str r3, [sp, 0x6c]                                |     var_6ch = r3;
                                                                 |     if (r4 != 0) {
    0x0002451a cbz r4, 0x24524                                   |         
    0x0002451c ldrh r3, [r3, 0x3c]                               |         r3 = *((r3 + 0x3c));
    0x0002451e lsls r5, r3, 0x18                                 |         r5 = r3 << 0x18;
                                                                 |         if (r5 < r3) {
    0x00024520 bmi.w 0x248d4                                     |             goto label_25;
                                                                 |         }
                                                                 |     }
    0x00024524 ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x00024528 str r3, [sp, 0x94]                                |     var_94h = r3;
    0x0002452a uxth r3, r3                                       |     r3 = (int16_t) r3;
    0x0002452c cmp r3, 0x3f                                      |     
                                                                 |     if (r3 > 0x3f) {
    0x0002452e bhi.w 0x248d4                                     |         goto label_25;
                                                                 |     }
    0x00024532 mov r4, r3                                        |     r4 = r3;
    0x00024534 str r3, [sp, 0x34]                                |     var_34h = r3;
    0x00024536 sub.w r2, r4, 0x20                                |     r2 = r4 - 0x20;
    0x0002453a movs r3, 1                                        |     r3 = 1;
    0x0002453c rsb.w r0, r4, 0x20                                |     r0 = 0x20 - r4;
    0x00024540 lsl.w r2, r3, r2                                  |     r2 = r3 << r2;
    0x00024544 lsr.w r0, r3, r0                                  |     r0 = r3 >> r0;
    0x00024548 lsls r3, r4                                       |     r3 <<= r4;
    0x0002454a orrs r2, r0                                       |     r2 |= r0;
    0x0002454c subs r3, 1                                        |     r3--;
    0x0002454e adc r2, r2, -1                                    |     __asm ("adc r2, r2, -1");
    0x00024552 str r3, [sp, 0x64]                                |     var_64h = r3;
    0x00024554 orrs r3, r2                                       |     r3 |= r2;
    0x00024556 str r2, [sp, 0x68]                                |     var_68h = r2;
                                                                 |     if (r3 == r2) {
    0x00024558 beq.w 0x24b4c                                     |         goto label_26;
                                                                 |     }
    0x0002455c ldr.w r2, [pc, 0x618]                             |     r2 = *(0x00024b78);
    0x00024560 and r3, r1, 0x300                                 |     r3 = r1 & 0x300;
    0x00024564 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00024566 movs r3, 0                                        |     r3 = 0;
    0x00024568 mov sl, r3                                        |     sl = r3;
    0x0002456a mov fp, r3                                        |     
    0x0002456c add r2, pc                                        |     r2 += pc;
    0x0002456e str r3, [sp, 0x44]                                |     var_44h = r3;
    0x00024570 str r2, [sp, 0x84]                                |     var_84h = r2;
    0x00024572 ldr.w r2, [pc, 0x608]                             |     r2 = *(0x00024b7c);
    0x00024576 strd r3, r3, [sp, 0x4c]                           |     __asm ("strd r3, r3, [var_4ch]");
    0x0002457a str r3, [sp, 0x48]                                |     var_48h = r3;
    0x0002457c add r2, pc                                        |     r2 += pc;
    0x0002457e str r3, [sp, 0x54]                                |     var_54h = r3;
    0x00024580 str r2, [sp, 0x88]                                |     var_88h = r2;
                                                                 | label_6:
    0x00024582 ldr r3, [sp, 0x60]                                |     r3 = var_60h;
    0x00024584 ldr r2, [sp, 0x44]                                |     r2 = var_44h;
    0x00024586 cmp r3, r2                                        |     
    0x00024588 itett gt                                          |     
                                                                 |     if (r3 <= r2) {
    0x0002458a ldrgt r3, [sp, 0x74]                              |         r3 = var_74h;
                                                                 |     }
                                                                 |     if (r3 > r2) {
    0x0002458c ldrle r3, [sp, 0x78]                              |         r3 = var_78h;
                                                                 |     }
                                                                 |     if (r3 <= r2) {
    0x0002458e ldrgt r3, [r3, 0x18]                              |         r3 = *((r3 + 0x18));
                                                                 |     }
                                                                 |     if (r3 <= r2) {
    0x00024590 ldrgt r3, [r3, r2, lsl 2]                         |         offset_0 = r2 << 2;
                                                                 |         r3 = *((r3 + offset_0));
                                                                 |     }
    0x00024594 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00024596 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00024598 ldr r3, [r3, 0x24]                                |     r3 = *((r3 + 0x24));
    0x0002459a ands r2, r3, 0x400                                |     r2 = r3 & 0x400;
    0x0002459e str r2, [sp, 0x5c]                                |     var_5ch = r2;
                                                                 |     if (r2 != r3) {
    0x000245a0 bne.w 0x24b2c                                     |         goto label_27;
                                                                 |     }
    0x000245a4 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x000245a6 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x000245a8 ldrb r2, [r2, 0x10]                               |     r2 = *((r2 + 0x10));
    0x000245aa ldr r1, [r0, 4]                                   |     r1 = *((r0 + 4));
    0x000245ac add.w r2, r2, r2, lsl 3                           |     r2 += (r2 << 3);
    0x000245b0 add.w r1, r1, r2, lsl 3                           |     r1 += (r2 << 3);
    0x000245b4 ldr r2, [r1, 0x30]                                |     r2 = *((r1 + 0x30));
    0x000245b6 str r2, [sp, 0x18]                                |     var_18h = r2;
    0x000245b8 ldr r2, [sp, 0x34]                                |     r2 = var_34h;
    0x000245ba cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000245bc beq.w 0x24af0                                     |         goto label_28;
                                                                 |     }
    0x000245c0 add.w r3, r0, 0x148                               |     r3 = r0 + 0x148;
    0x000245c4 ldr r5, [sp, 0x5c]                                |     r5 = var_5ch;
    0x000245c6 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x000245c8 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x000245ca mvns r3, r3                                       |     r3 = ~r3;
    0x000245cc str r3, [sp, 0x20]                                |     var_20h = r3;
    0x000245ce mov r3, sb                                        |     r3 = sb;
    0x000245d0 mov sb, r2                                        |     sb = r2;
                                                                 | label_0:
    0x000245d2 rsb.w r7, r5, 0x20                                |     r7 = 0x20 - r5;
    0x000245d6 lsr.w r2, sl, r5                                  |     r2 = sl >> r5;
    0x000245da lsl.w r1, fp, r7                                  |     r1 = fp << r7;
    0x000245de sub.w r6, r5, 0x20                                |     r6 = r5 - 0x20;
    0x000245e2 orrs r2, r1                                       |     r2 |= r1;
    0x000245e4 lsr.w r1, fp, r6                                  |     r1 = fp >> r6;
    0x000245e8 orrs r2, r1                                       |     r2 |= r1;
    0x000245ea lsls r4, r2, 0x1f                                 |     r4 = r2 << 0x1f;
                                                                 |     if (r4 < r2) {
    0x000245ec bmi 0x24626                                       |         goto label_10;
                                                                 |     }
    0x000245ee ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x000245f0 add.w r8, r5, r5, lsl 2                           |     r8 = r5 + (r5 << 2);
    0x000245f4 ldr.w r4, [r2, r8, lsl 2]                         |     offset_1 = r8 << 2;
                                                                 |     r4 = *((r2 + offset_1));
                                                                 |     if (r4 != 0) {
    0x000245f8 cbnz r4, 0x2460e                                  |         goto label_29;
                                                                 |     }
    0x000245fa b 0x24b68                                         |     goto label_30;
                                                                 |     do {
    0x000245fc lsls r0, r2, 0xd                                  |         r0 = r2 << 0xd;
    0x000245fe itett mi                                          |         
                                                                 |         if (r0 >= r2) {
    0x00024600 ldrmi r2, [r4, 0x14]                              |             r2 = *((r4 + 0x14));
                                                                 |         }
                                                                 |         if (r0 < r2) {
    0x00024602 ldrpl r4, [r4, 0xc]                               |             r4 = *((r4 + 0xc));
                                                                 |         }
                                                                 |         if (r0 >= r2) {
    0x00024604 ldrmi r2, [r2, 4]                                 |             r2 = *((r2 + 4));
                                                                 |         }
                                                                 |         if (r0 >= r2) {
    0x00024606 ldrmi r4, [r2]                                    |             r4 = *(r2);
                                                                 |         }
    0x00024608 cmp r4, 0                                         |         
                                                                 |         if (r4 == 0) {
    0x0002460a beq.w 0x24b68                                     |             goto label_30;
                                                                 |         }
                                                                 | label_29:
    0x0002460e ldr r2, [r4, 4]                                   |         r2 = *((r4 + 4));
    0x00024610 ands r1, r2, 0x1000                               |         r1 = r2 & 0x1000;
    0x00024614 bne 0x245fc                                       |         
                                                                 |     } while (r1 != r2);
    0x00024616 ldrb r2, [r4]                                     |     r2 = *(r4);
    0x00024618 cmp r2, 0x9a                                      |     
                                                                 |     if (r2 == 0x9a) {
    0x0002461a bne 0x24626                                       |         
    0x0002461c ldr r2, [r4, 0x1c]                                |         r2 = *((r4 + 0x1c));
    0x0002461e ldr r0, [sp, 0x18]                                |         r0 = var_18h;
    0x00024620 cmp r2, r0                                        |         
                                                                 |         if (r2 == r0) {
    0x00024622 beq.w 0x24992                                     |             goto label_31;
                                                                 |         }
                                                                 |     }
                                                                 | label_10:
    0x00024626 adds r5, 1                                        |     r5++;
    0x00024628 cmp sb, r5                                        |     
                                                                 |     if (sb != r5) {
    0x0002462a bne 0x245d2                                       |         goto label_0;
                                                                 |     }
    0x0002462c mov sb, r3                                        |     sb = r3;
    0x0002462e ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00024630 ldr r3, [r3, 0x24]                                |     r3 = *((r3 + 0x24));
    0x00024632 lsls r2, r3, 0x13                                 |     r2 = r3 << 0x13;
                                                                 |     if (r2 < r3) {
    0x00024634 bmi.w 0x249e6                                     |         goto label_32;
                                                                 |     }
                                                                 | label_19:
    0x00024638 lsls r7, r3, 0x17                                 |     r7 = r3 << 0x17;
                                                                 |     if (r7 < r3) {
    0x0002463a bmi.w 0x24a92                                     |         goto label_33;
                                                                 |     }
    0x0002463e ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00024640 ldr r2, [r3, 0x1c]                                |     r2 = *((r3 + 0x1c));
    0x00024642 str r2, [sp, 0x28]                                |     var_28h = r2;
    0x00024644 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00024646 beq.w 0x248d4                                     |         goto label_25;
                                                                 |     }
    0x0002464a ldrb.w r3, [r2, 0x37]                             |     r3 = *((r2 + 0x37));
    0x0002464e lsls r6, r3, 0x1d                                 |     r6 = r3 << 0x1d;
                                                                 |     if (r6 < r3) {
    0x00024650 bmi.w 0x248d4                                     |         goto label_25;
                                                                 |     }
    0x00024654 ldrb.w r3, [r2, 0x36]                             |     r3 = *((r2 + 0x36));
    0x00024658 ldrh r1, [r2, 0x34]                               |     r1 = *((r2 + 0x34));
    0x0002465a subs r3, 0                                        |     
    0x0002465c it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x0002465e movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x00024660 str r1, [sp, 0x30]                                |     var_30h = r1;
    0x00024662 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00024664 ldrh r3, [r2, 0x32]                               |     r3 = *((r2 + 0x32));
    0x00024666 str r3, [sp, 0x8c]                                |     var_8ch = r3;
    0x00024668 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0002466a beq.w 0x2486c                                     |         goto label_34;
                                                                 |     }
                                                                 | label_15:
    0x0002466e ldr r2, [sp, 0x44]                                |     r2 = var_44h;
    0x00024670 movs r0, 1                                        |     r0 = 1;
    0x00024672 mov.w r8, 0                                       |     r8 = 0;
    0x00024676 str.w r8, [sp, 0x58]                              |     __asm ("str.w r8, [var_58h]");
    0x0002467a sub.w r3, r2, 0x20                                |     r3 = r2 - 0x20;
    0x0002467e str.w r8, [sp, 0x70]                              |     __asm ("str.w r8, [var_70h]");
    0x00024682 lsl.w r1, r0, r3                                  |     r1 = r0 << r3;
    0x00024686 rsb.w r3, r2, 0x20                                |     r3 = 0x20 - r2;
    0x0002468a lsr.w r3, r0, r3                                  |     r3 = r0 >> r3;
    0x0002468e str.w r8, [sp, 0x40]                              |     __asm ("str.w r8, [var_40h]");
    0x00024692 orrs r3, r1                                       |     r3 |= r1;
    0x00024694 str r3, [sp, 0x80]                                |     var_80h = r3;
    0x00024696 lsl.w r3, r0, r2                                  |     r3 = r0 << r2;
    0x0002469a str r3, [sp, 0x7c]                                |     var_7ch = r3;
    0x0002469c ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0002469e adds r2, r3, r0                                   |     r2 = r3 + r0;
    0x000246a0 mov r3, r2                                        |     r3 = r2;
    0x000246a2 mov r2, sb                                        |     r2 = sb;
    0x000246a4 mov sb, r8                                        |     sb = r8;
    0x000246a6 mov r8, r3                                        |     r8 = r3;
    0x000246a8 b 0x246d2                                         |     
                                                                 |     while (r3 > sb) {
    0x000246aa ldrh r1, [r0, 0x1a]                               |         r1 = *((r0 + 0x1a));
                                                                 |         if (r1 != 0) {
    0x000246ac cbnz r1, 0x246e0                                  |             goto label_35;
                                                                 |         }
    0x000246ae ldr r1, [r0, 0x2c]                                |         r1 = *((r0 + 0x2c));
    0x000246b0 ldr r1, [r1, r4]                                  |         r1 = *((r1 + r4));
    0x000246b2 ldrh r1, [r1, 0x12]                               |         r1 = *((r1 + 0x12));
    0x000246b4 tst.w r1, 0x82                                    |         
                                                                 |         if ((r1 & 0x82) == 0) {
    0x000246b8 beq 0x246e0                                       |             goto label_35;
                                                                 |         }
    0x000246ba ldr r3, [sp, 0x20]                                |         r3 = var_20h;
    0x000246bc tst.w r1, 0x80                                    |         
    0x000246c0 it ne                                             |         
                                                                 |         if ((r1 & 0x80) == 0) {
    0x000246c2 movne r3, 0                                       |             r3 = 0;
                                                                 |         }
    0x000246c4 add.w sb, sb, 1                                   |         sb++;
    0x000246c8 str r3, [sp, 0x20]                                |         var_20h = r3;
    0x000246ca ldr r3, [sp, 0x30]                                |         r3 = var_30h;
    0x000246cc cmp sb, r3                                        |         
                                                                 |         if (sb >= r3) {
    0x000246ce bge.w 0x24864                                     |             goto label_36;
                                                                 |         }
                                                                 | label_1:
    0x000246d2 ldr r0, [sp, 0x1c]                                |         r0 = var_1ch;
    0x000246d4 lsl.w r4, sb, 2                                   |         r4 = sb << 2;
    0x000246d8 str r4, [sp, 0x24]                                |         var_24h = r4;
    0x000246da ldrh r3, [r0, 0x18]                               |         r3 = *((r0 + 0x18));
    0x000246dc cmp r3, sb                                        |         
    0x000246de bgt 0x246aa                                       |         
                                                                 |     }
                                                                 | label_35:
    0x000246e0 ldr r4, [sp, 0x28]                                |     r4 = var_28h;
    0x000246e2 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x000246e4 beq.w 0x24974                                     |         goto label_37;
                                                                 |     }
    0x000246e8 ldr r1, [r4, 4]                                   |     r1 = *((r4 + 4));
    0x000246ea ldrsh.w r0, [r1, sb, lsl 1]                       |     offset_2 = sb << 1;
                                                                 |     r0 = *((r1 + offset_2));
    0x000246ee mov r1, r4                                        |     r1 = r4;
    0x000246f0 ldr r1, [r1, 0x1c]                                |     r1 = *((r1 + 0x1c));
    0x000246f2 ldr r4, [r4, 0xc]                                 |     r4 = *((r4 + 0xc));
    0x000246f4 ldrb.w r1, [r1, sb]                               |     r1 = *((r1 + sb));
    0x000246f8 str r1, [sp, 0x3c]                                |     var_3ch = r1;
    0x000246fa ldrsh.w r1, [r4, 0x24]                            |     r1 = *((r4 + 0x24));
    0x000246fe cmp r1, r0                                        |     
                                                                 |     if (r1 == r0) {
    0x00024700 beq.w 0x24980                                     |         goto label_38;
                                                                 |     }
    0x00024704 ldr r1, [sp, 0x20]                                |     r1 = var_20h;
    0x00024706 str r0, [sp, 0x14]                                |     var_14h = r0;
    0x00024708 cmp r0, 0                                         |     
    0x0002470a ite lt                                            |     
                                                                 |     if (r0 >= 0) {
    0x0002470c movlt r1, 0                                       |         r1 = 0;
                                                                 |     }
                                                                 |     if (r0 < 0) {
    0x0002470e andge r1, r1, 1                                   |         r1 &= 1;
                                                                 |     }
                                                                 |     if (r1 != 0) {
    0x00024712 cbz r1, 0x24732                                   |         
    0x00024714 cmp r3, sb                                        |         
    0x00024716 itt gt                                            |         
                                                                 |         if (r3 <= sb) {
    0x00024718 movgt r3, 1                                       |             r3 = 1;
                                                                 |         }
                                                                 |         if (r3 <= sb) {
    0x0002471a strgt r3, [sp, 0x20]                              |             var_20h = r3;
                                                                 |         }
                                                                 |         if (r3 > sb) {
    0x0002471c bgt 0x24732                                       |             goto label_7;
                                                                 |         }
    0x0002471e ldr r3, [r4, 4]                                   |         r3 = *((r4 + 4));
    0x00024720 add.w r1, r0, r0, lsl 1                           |         r1 = r0 + (r0 << 1);
    0x00024724 add.w r3, r3, r1, lsl 3                           |         r3 += (r1 << 3);
    0x00024728 ldrb r3, [r3, 0x14]                               |         r3 = *((r3 + 0x14));
    0x0002472a subs r3, 0                                        |         
    0x0002472c it ne                                             |         
                                                                 |         if (r3 == 0) {
    0x0002472e movne r3, 1                                       |             r3 = 1;
                                                                 |         }
    0x00024730 str r3, [sp, 0x20]                                |         var_20h = r3;
                                                                 |     }
                                                                 | label_7:
    0x00024732 movs r4, 1                                        |     r4 = 1;
    0x00024734 mov lr, sb                                        |     lr = sb;
    0x00024736 cmp r4, r8                                        |     
    0x00024738 mov sb, r2                                        |     sb = r2;
    0x0002473a add.w r6, r4, -1                                  |     r6 = r4 + -1;
                                                                 |     if (r4 == r8) {
    0x0002473e beq.w 0x24916                                     |         goto label_8;
                                                                 |     }
                                                                 | label_3:
    0x00024742 rsb.w r7, r6, 0x20                                |     r7 = 0x20 - r6;
    0x00024746 lsr.w r3, sl, r6                                  |     r3 = sl >> r6;
    0x0002474a lsl.w r1, fp, r7                                  |     r1 = fp << r7;
    0x0002474e orrs r3, r1                                       |     r3 |= r1;
    0x00024750 sub.w r1, r4, 0x21                                |     r1 = r4 - 0x21;
    0x00024754 lsr.w r1, fp, r1                                  |     r1 = fp >> r1;
    0x00024758 orrs r3, r1                                       |     r3 |= r1;
    0x0002475a lsls r5, r3, 0x1f                                 |     r5 = r3 << 0x1f;
                                                                 |     if (r5 < r3) {
    0x0002475c bmi.w 0x2490a                                     |         goto label_39;
                                                                 |     }
    0x00024760 add.w r5, r4, r4, lsl 2                           |     r5 = r4 + (r4 << 2);
    0x00024764 ldr.w r3, [sb, 4]                                 |     r3 = *((sb + 4));
    0x00024768 mov r2, lr                                        |     r2 = lr;
    0x0002476a lsls r5, r5, 2                                    |     r5 <<= 2;
    0x0002476c subs r5, 0x14                                     |     r5 -= 0x14;
    0x0002476e ldr r1, [r3, r5]                                  |     r1 = *((r3 + r5));
    0x00024770 add.w ip, r3, r5                                  |     
    0x00024774 mov r3, r1                                        |     r3 = r1;
                                                                 |     if (r1 != 0) {
    0x00024776 cbnz r1, 0x24788                                  |         goto label_40;
                                                                 |     }
    0x00024778 b 0x24792                                         |     goto label_41;
                                                                 |     do {
    0x0002477a lsls r0, r0, 0xd                                  |         r0 <<= 0xd;
    0x0002477c itett mi                                          |         
                                                                 |         if (r0 >= r0) {
    0x0002477e ldrmi r3, [r3, 0x14]                              |             r3 = *((r3 + 0x14));
                                                                 |         }
                                                                 |         if (r0 < r0) {
    0x00024780 ldrpl r3, [r3, 0xc]                               |             r3 = *((r3 + 0xc));
                                                                 |         }
                                                                 |         if (r0 >= r0) {
    0x00024782 ldrmi r3, [r3, 4]                                 |             r3 = *((r3 + 4));
                                                                 |         }
                                                                 |         if (r0 >= r0) {
    0x00024784 ldrmi r3, [r3]                                    |             r3 = *(r3);
                                                                 |         }
                                                                 |         if (r3 == 0) {
    0x00024786 cbz r3, 0x24790                                   |             goto label_42;
                                                                 |         }
                                                                 | label_40:
    0x00024788 ldr r0, [r3, 4]                                   |         r0 = *((r3 + 4));
    0x0002478a tst.w r0, 0x1000                                  |         
    0x0002478e bne 0x2477a                                       |         
                                                                 |     } while ((r0 & 0x1000) != 0);
                                                                 | label_42:
    0x00024790 mov lr, r2                                        |     lr = r2;
                                                                 | label_41:
    0x00024792 ldr r0, [sp, 0x10]                                |     r0 = var_10h;
    0x00024794 ldrb r2, [r3]                                     |     r2 = *(r3);
    0x00024796 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00024798 bne.w 0x248f2                                     |         goto label_43;
                                                                 |     }
    0x0002479c cmp r2, 0x9a                                      |     
                                                                 |     if (r2 != 0x9a) {
    0x0002479e bne.w 0x24916                                     |         goto label_8;
                                                                 |     }
    0x000247a2 ldr r0, [r3, 0x1c]                                |     r0 = *((r3 + 0x1c));
    0x000247a4 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x000247a6 cmp r0, r2                                        |     
                                                                 |     if (r0 != r2) {
    0x000247a8 bne.w 0x24916                                     |         goto label_8;
                                                                 |     }
    0x000247ac ldrsh.w r3, [r3, 0x20]                            |     r3 = *((r3 + 0x20));
    0x000247b0 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x000247b2 cmp r3, r2                                        |     
                                                                 |     if (r3 != r2) {
    0x000247b4 bne.w 0x24916                                     |         goto label_8;
                                                                 |     }
                                                                 | label_2:
    0x000247b8 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x000247ba cmp r3, 0                                         |     
                                                                 |     if (r3 < 0) {
    0x000247bc blt.w 0x24b0a                                     |         goto label_44;
                                                                 |     }
    0x000247c0 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x000247c2 str.w lr, [sp, 0x38]                              |     __asm ("str.w lr, [var_38h]");
    0x000247c6 ldr r0, [r3]                                      |     r0 = *(r3);
    0x000247c8 bl 0x22e78                                        |     fcn_00022e78 (r0, r1);
    0x000247cc ldr.w lr, [sp, 0x38]                              |     lr = var_38h;
    0x000247d0 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000247d2 beq.w 0x249e0                                     |         goto label_45;
                                                                 |     }
                                                                 | label_11:
    0x000247d6 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x000247d8 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x000247da ldr r0, [r0]                                      |     r0 = *(r0);
    0x000247dc ldr r3, [r3, 0x20]                                |     r3 = *((r3 + 0x20));
    0x000247de str.w lr, [sp, 0x38]                              |     __asm ("str.w lr, [var_38h]");
    0x000247e2 ldr r1, [r3, r2]                                  |     r1 = *((r3 + r2));
    0x000247e4 blx 0x6164                                        |     fcn_00006164 ();
    0x000247e8 ldr.w lr, [sp, 0x38]                              |     lr = var_38h;
    0x000247ec cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000247ee bne.w 0x24988                                     |         goto label_46;
                                                                 |     }
    0x000247f2 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x000247f4 mov r2, sb                                        |     r2 = sb;
    0x000247f6 mov sb, lr                                        |     sb = lr;
    0x000247f8 ldrh r3, [r3, 0x22]                               |     r3 = *((r3 + 0x22));
    0x000247fa lsls r0, r3, 0x17                                 |     r0 = r3 << 0x17;
                                                                 |     if (r0 >= r3) {
    0x000247fc bmi 0x2483c                                       |         
    0x000247fe ldr r3, [r2, 4]                                   |         r3 = *((r2 + 4));
    0x00024800 add.w ip, r3, r5                                  |         
                                                                 | label_21:
    0x00024804 ldr r1, [sp, 0x40]                                |         r1 = var_40h;
    0x00024806 ldrb.w r3, [ip, 0xc]                              |         r3 = *((ip + 0xc));
    0x0002480a cmp r1, 0                                         |         
                                                                 |         if (r1 != 0) {
    0x0002480c bne.w 0x24aa0                                     |             goto label_47;
                                                                 |         }
    0x00024810 ldr r1, [sp, 0x3c]                                |         r1 = var_3ch;
    0x00024812 cmp r3, r1                                        |         
    0x00024814 eor.w r0, r3, r1                                  |         r0 = r3 ^ r1;
    0x00024818 str r0, [sp, 0x70]                                |         var_70h = r0;
                                                                 |         if (r3 != r1) {
    0x0002481a beq 0x2482e                                       |             
    0x0002481c ldr r1, [sp, 0x90]                                |             r1 = var_90h;
    0x0002481e ldr r0, [sp, 0x7c]                                |             r0 = var_7ch;
    0x00024820 ldr r3, [r1]                                      |             r3 = *(r1);
    0x00024822 orrs r3, r0                                       |             r3 |= r0;
    0x00024824 ldr r0, [sp, 0x80]                                |             r0 = var_80h;
    0x00024826 str r3, [r1]                                      |             *(r1) = r3;
    0x00024828 ldr r3, [r1, 4]                                   |             r3 = *((r1 + 4));
    0x0002482a orrs r3, r0                                       |             r3 |= r0;
    0x0002482c str r3, [r1, 4]                                   |             *((r1 + 4)) = r3;
                                                                 |         }
                                                                 | label_16:
    0x0002482e ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x00024830 cmp r3, 0                                         |         
    0x00024832 mov.w r3, 1                                       |         r3 = 1;
    0x00024836 it lt                                             |         
                                                                 |         if (r3 >= 0) {
    0x00024838 strlt r3, [sp, 0x58]                              |             var_58h = r3;
                                                                 |         }
    0x0002483a str r3, [sp, 0x40]                                |         var_40h = r3;
                                                                 |     }
                                                                 | label_20:
    0x0002483c movs r1, 1                                        |     r1 = 1;
    0x0002483e sub.w r3, r6, 0x20                                |     r3 = r6 - 0x20;
    0x00024842 lsr.w r7, r1, r7                                  |     r7 = r1 >> r7;
    0x00024846 lsl.w r3, r1, r3                                  |     r3 = r1 << r3;
    0x0002484a lsl.w r6, r1, r6                                  |     r6 = r1 << r6;
    0x0002484e orrs r3, r7                                       |     r3 |= r7;
    0x00024850 orr.w fp, r3, fp                                  |     
    0x00024854 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00024856 add.w sb, sb, 1                                   |     sb++;
    0x0002485a orr.w sl, r6, sl                                  |     sl = r6 | sl;
    0x0002485e cmp sb, r3                                        |     
                                                                 |     if (sb < r3) {
    0x00024860 blt.w 0x246d2                                     |         goto label_1;
                                                                 |     }
                                                                 | label_36:
    0x00024864 mov sb, r2                                        |     sb = r2;
                                                                 | label_4:
    0x00024866 ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x00024868 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0002486a bne 0x2492a                                       |         goto label_48;
                                                                 |     }
                                                                 | label_34:
    0x0002486c ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0002486e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00024870 bne 0x2492a                                       |         goto label_48;
                                                                 |     }
                                                                 | label_5:
    0x00024872 ldrd r3, r2, [sp, 0x64]                           |     __asm ("ldrd r3, r2, [var_64h]");
    0x00024876 cmp r2, fp                                        |     
    0x00024878 it eq                                             |     
                                                                 |     if (r2 == fp) {
    0x0002487a cmpeq r3, sl                                      |         __asm ("cmpeq r3, sl");
                                                                 |     }
                                                                 |     if (r2 == fp) {
    0x0002487c beq.w 0x24b4c                                     |         goto label_26;
                                                                 |     }
    0x00024880 ldr r2, [sp, 0x34]                                |     r2 = var_34h;
    0x00024882 subs r3, r2, 1                                    |     r3 = r2 - 1;
    0x00024884 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x00024886 ble 0x248d4                                       |         goto label_25;
                                                                 |     }
    0x00024888 movs r0, 1                                        |     r0 = 1;
    0x0002488a subs r2, 0x21                                     |     r2 -= 0x21;
    0x0002488c rsb.w r1, r3, 0x20                                |     r1 = 0x20 - r3;
    0x00024890 lsl.w r2, r0, r2                                  |     r2 = r0 << r2;
    0x00024894 lsr.w r1, r0, r1                                  |     r1 = r0 >> r1;
    0x00024898 orrs r2, r1                                       |     r2 |= r1;
    0x0002489a lsl.w r1, r0, r3                                  |     r1 = r0 << r3;
    0x0002489e b 0x248ba                                         |     
                                                                 |     while (r4 != r2) {
    0x000248a0 subs r3, 1                                        |         r3--;
                                                                 |         if (r3 == 1) {
    0x000248a2 beq 0x248d4                                       |             goto label_25;
                                                                 |         }
    0x000248a4 sub.w r2, r3, 0x20                                |         r2 = r3 - 0x20;
    0x000248a8 rsb.w r4, r3, 0x20                                |         r4 = 0x20 - r3;
    0x000248ac lsl.w r2, r0, r2                                  |         r2 = r0 << r2;
    0x000248b0 lsr.w r4, r0, r4                                  |         r4 = r0 >> r4;
    0x000248b4 lsl.w r1, r0, r3                                  |         r1 = r0 << r3;
    0x000248b8 orrs r2, r4                                       |         r2 |= r4;
    0x000248ba subs r1, 1                                        |         r1--;
    0x000248bc adc r2, r2, -1                                    |         __asm ("adc r2, r2, -1");
    0x000248c0 and.w r5, r1, sl                                  |         r5 = r1 & sl;
    0x000248c4 and.w r4, r2, fp                                  |         r4 = r2 & fp;
    0x000248c8 cmp r4, r2                                        |         
    0x000248ca it eq                                             |         
                                                                 |         if (r4 == r2) {
    0x000248cc cmpeq r5, r1                                      |             __asm ("cmpeq r5, r1");
                                                                 |         }
    0x000248ce bne 0x248a0                                       |         
                                                                 |     }
    0x000248d0 sxtb r0, r3                                       |     r0 = (int32_t) r3;
    0x000248d2 b 0x248d6                                         |     goto label_24;
                                                                 | label_25:
    0x000248d4 movs r0, 0                                        |     r0 = 0;
                                                                 | label_24:
    0x000248d6 ldr r2, [pc, 0x2a8]                               |     
    0x000248d8 ldr r3, [pc, 0x298]                               |     r3 = *(0x24b74);
    0x000248da add r2, pc                                        |     r2 = 0x49460;
    0x000248dc ldr r3, [r2, r3]                                  |     r3 = *(0x49460);
    0x000248de ldr r2, [r3]                                      |     r2 = *(0x49460);
    0x000248e0 ldr r3, [sp, 0xb4]                                |     r3 = var_b4h;
    0x000248e2 eors r2, r3                                       |     r2 ^= r3;
    0x000248e4 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x000248e8 bne.w 0x24b64                                     |         goto label_49;
                                                                 |     }
    0x000248ec add sp, 0xbc                                      |     
    0x000248ee pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_43:
    0x000248f2 cmp r2, 0x9a                                      |     
                                                                 |     if (r2 != 0x9a) {
    0x000248f4 bne 0x2490a                                       |         goto label_39;
                                                                 |     }
    0x000248f6 ldr r0, [r3, 0x1c]                                |     r0 = *((r3 + 0x1c));
    0x000248f8 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x000248fa cmp r2, r0                                        |     
                                                                 |     if (r2 != r0) {
    0x000248fc bne 0x2490a                                       |         goto label_39;
                                                                 |     }
    0x000248fe ldrsh.w r3, [r3, 0x20]                            |     r3 = *((r3 + 0x20));
    0x00024902 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x00024904 cmp r3, r2                                        |     
                                                                 |     if (r3 == r2) {
    0x00024906 beq.w 0x247b8                                     |         goto label_2;
                                                                 |     }
                                                                 | label_39:
    0x0002490a adds r4, 1                                        |     r4++;
                                                                 | label_9:
    0x0002490c cmp r4, r8                                        |     
    0x0002490e add.w r6, r4, -1                                  |     r6 = r4 + -1;
                                                                 |     if (r4 != r8) {
    0x00024912 bne.w 0x24742                                     |         goto label_3;
                                                                 |     }
                                                                 | label_8:
    0x00024916 mov r8, lr                                        |     r8 = lr;
                                                                 | label_17:
    0x00024918 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x0002491c beq 0x24924                                       |         goto label_50;
                                                                 |     }
    0x0002491e ldr r3, [sp, 0x8c]                                |     r3 = var_8ch;
    0x00024920 cmp r3, r8                                        |     
                                                                 |     if (r3 <= r8) {
    0x00024922 ble 0x24866                                       |         goto label_4;
                                                                 |     }
                                                                 | label_50:
    0x00024924 ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x00024926 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00024928 beq 0x24872                                       |         goto label_5;
                                                                 |     }
                                                                 | label_48:
    0x0002492a ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x0002492c ldr r1, [sp, 0x4c]                                |     r1 = var_4ch;
    0x0002492e ldr r3, [r2, 8]                                   |     r3 = *((r2 + 8));
    0x00024930 orrs r1, r3                                       |     r1 |= r3;
    0x00024932 ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x00024934 ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x00024936 str r1, [sp, 0x4c]                                |     var_4ch = r1;
    0x00024938 orrs r2, r3                                       |     r2 |= r3;
    0x0002493a ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0002493c str r2, [sp, 0x50]                                |     var_50h = r2;
    0x0002493e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00024940 bne 0x249f8                                       |         goto label_51;
                                                                 |     }
                                                                 | label_12:
    0x00024942 ldr r3, [sp, 0x64]                                |     r3 = var_64h;
    0x00024944 ldr r2, [sp, 0x44]                                |     r2 = var_44h;
    0x00024946 cmp sl, r3                                        |     
    0x00024948 ldr r3, [sp, 0x68]                                |     r3 = var_68h;
    0x0002494a add.w r2, r2, 1                                   |     r2++;
    0x0002494e str r2, [sp, 0x44]                                |     var_44h = r2;
    0x00024950 sbcs.w r3, fp, r3                                 |     __asm ("sbcs.w r3, fp, r3");
                                                                 |     if (sl >= r3) {
    0x00024954 bhs.w 0x24b52                                     |         goto label_52;
                                                                 |     }
    0x00024958 ldr r3, [sp, 0x60]                                |     r3 = var_60h;
    0x0002495a cmp r2, r3                                        |     
                                                                 |     if (r2 > r3) {
    0x0002495c bgt.w 0x24b5e                                     |         goto label_53;
                                                                 |     }
    0x00024960 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00024962 ldr r1, [sp, 0x48]                                |     r1 = var_48h;
    0x00024964 ldr r3, [r2, 8]                                   |     r3 = *((r2 + 8));
    0x00024966 orrs r1, r3                                       |     r1 |= r3;
    0x00024968 ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x0002496a ldr r2, [sp, 0x54]                                |     r2 = var_54h;
    0x0002496c str r1, [sp, 0x48]                                |     var_48h = r1;
    0x0002496e orrs r2, r3                                       |     r2 |= r3;
    0x00024970 str r2, [sp, 0x54]                                |     var_54h = r2;
    0x00024972 b 0x24582                                         |     goto label_6;
                                                                 | label_37:
    0x00024974 mov.w r3, -1                                      |     r3 = -1;
    0x00024978 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x0002497a ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x0002497c str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x0002497e b 0x24732                                         |     goto label_7;
                                                                 | label_38:
    0x00024980 mov.w r3, -1                                      |     r3 = -1;
    0x00024984 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00024986 b 0x24732                                         |     goto label_7;
                                                                 | label_46:
    0x00024988 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0002498a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0002498c beq 0x24916                                       |         goto label_8;
                                                                 |     }
    0x0002498e adds r4, 1                                        |     r4++;
    0x00024990 b 0x2490c                                         |     goto label_9;
                                                                 | label_31:
    0x00024992 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00024994 movs r3, 0x82                                     |     r3 = 0x82;
    0x00024996 ldrsh.w r2, [r4, 0x20]                            |     r2 = *((r4 + 0x20));
    0x0002499a str r3, [sp, 8]                                   |     var_8h = r3;
    0x0002499c ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0002499e str r1, [sp, 0xc]                                 |     var_ch = r1;
    0x000249a0 str r3, [sp]                                      |     *(sp) = r3;
    0x000249a2 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x000249a4 mvns r1, r3                                       |     r1 = ~r3;
    0x000249a6 str r1, [sp, 4]                                   |     var_4h = r1;
    0x000249a8 mov r1, r0                                        |     r1 = r0;
    0x000249aa ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x000249ac bl 0x231d0                                        |     fcn_000231d0 (r0, r1, r2, r3, r4, r5);
    0x000249b0 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x000249b2 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000249b4 beq.w 0x24626                                     |         goto label_10;
                                                                 |     }
    0x000249b8 ldrh r1, [r0, 0x12]                               |     r1 = *((r0 + 0x12));
    0x000249ba lsls r1, r1, 0x1e                                 |     r1 <<= 0x1e;
                                                                 |     if (r1 < r1) {
    0x000249bc bpl 0x249c8                                       |         
    0x000249be ldrsh.w r1, [r4, 0x20]                            |         r1 = *((r4 + 0x20));
    0x000249c2 str r0, [sp, 0x28]                                |         var_28h = r0;
    0x000249c4 cmp r1, 0                                         |         
                                                                 |         if (r1 >= 0) {
    0x000249c6 bge 0x24ab2                                       |             goto label_54;
                                                                 |         }
                                                                 |     }
                                                                 | label_18:
    0x000249c8 movs r2, 1                                        |     r2 = 1;
    0x000249ca lsl.w r1, r2, r6                                  |     r1 = r2 << r6;
    0x000249ce lsr.w r7, r2, r7                                  |     r7 = r2 >> r7;
    0x000249d2 lsls r2, r5                                       |     r2 <<= r5;
    0x000249d4 orrs r1, r7                                       |     r1 |= r7;
    0x000249d6 orr.w fp, r1, fp                                  |     
    0x000249da orr.w sl, r2, sl                                  |     sl = r2 | sl;
    0x000249de b 0x24626                                         |     goto label_10;
                                                                 | label_45:
    0x000249e0 ldr r3, [sp, 0x6c]                                |     r3 = var_6ch;
    0x000249e2 ldr r0, [r3, 8]                                   |     r0 = *((r3 + 8));
    0x000249e4 b 0x247d6                                         |     goto label_11;
                                                                 | label_32:
    0x000249e6 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x000249e8 ldr r1, [sp, 0x4c]                                |     r1 = var_4ch;
    0x000249ea ldr r3, [r2, 8]                                   |     r3 = *((r2 + 8));
    0x000249ec orrs r1, r3                                       |     r1 |= r3;
    0x000249ee ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x000249f0 ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x000249f2 str r1, [sp, 0x4c]                                |     var_4ch = r1;
    0x000249f4 orrs r2, r3                                       |     r2 |= r3;
    0x000249f6 str r2, [sp, 0x50]                                |     var_50h = r2;
                                                                 | label_51:
    0x000249f8 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x000249fa movs r5, 0                                        |     r5 = 0;
    0x000249fc ldr.w r8, [sp, 0x5c]                              |     r8 = var_5ch;
    0x00024a00 adds r3, 0x44                                     |     r3 += 0x44;
    0x00024a02 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00024a04 b 0x24a22                                         |     goto label_55;
                                                                 | label_14:
    0x00024a06 ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x00024a08 bic.w r0, r0, r3                                  |     r0 = BIT_MASK (r0, r3);
    0x00024a0c ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x00024a0e bic.w r1, r1, r3                                  |     r1 = BIT_MASK (r1, r3);
    0x00024a12 orrs r0, r1                                       |     r0 |= r1;
                                                                 |     if (r0 == r1) {
    0x00024a14 beq 0x24a7a                                       |         goto label_56;
                                                                 |     }
                                                                 | label_13:
    0x00024a16 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00024a18 adds r5, 1                                        |     r5++;
    0x00024a1a add.w r8, r8, 0x14                                |     r8 += 0x14;
    0x00024a1e cmp r3, r5                                        |     
                                                                 |     if (r3 <= r5) {
    0x00024a20 ble 0x24942                                       |         goto label_12;
                                                                 |     }
                                                                 | label_55:
    0x00024a22 rsb.w r7, r5, 0x20                                |     r7 = 0x20 - r5;
    0x00024a26 lsr.w r4, sl, r5                                  |     r4 = sl >> r5;
    0x00024a2a lsl.w r2, fp, r7                                  |     r2 = fp << r7;
    0x00024a2e sub.w r6, r5, 0x20                                |     r6 = r5 - 0x20;
    0x00024a32 orrs r4, r2                                       |     r4 |= r2;
    0x00024a34 lsr.w r2, fp, r6                                  |     r2 = fp >> r6;
    0x00024a38 orrs r4, r2                                       |     r4 |= r2;
    0x00024a3a ands r4, r4, 1                                    |     r4 &= 1;
                                                                 |     if (r4 != r4) {
    0x00024a3e bne 0x24a16                                       |         goto label_13;
                                                                 |     }
    0x00024a40 ldr.w r2, [sb, 4]                                 |     r2 = *((sb + 4));
    0x00024a44 ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x00024a46 ldr.w r2, [r2, r8]                                |     r2 = *((r2 + r8));
    0x00024a4a mov r1, r2                                        |     r1 = r2;
    0x00024a4c str r2, [sp, 0x14]                                |     var_14h = r2;
    0x00024a4e bl 0xbc08                                         |     r0 = fcn_0000bc08 (r0, r1);
    0x00024a52 orrs.w ip, r0, r1                                 |     
    0x00024a56 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
                                                                 |     if (ip != r0) {
    0x00024a58 bne 0x24a06                                       |         goto label_14;
                                                                 |     }
    0x00024a5a ldr r3, [sp, 0x84]                                |     r3 = var_84h;
    0x00024a5c mov r1, r2                                        |     r1 = r2;
    0x00024a5e add r0, sp, 0x9c                                  |     r0 += var_9ch;
    0x00024a60 movs r2, 1                                        |     r2 = 1;
    0x00024a62 str r2, [sp, 0xb0]                                |     var_b0h = r2;
    0x00024a64 str r3, [sp, 0x9c]                                |     var_9ch = r3;
    0x00024a66 ldr r3, [sp, 0x88]                                |     r3 = var_88h;
    0x00024a68 str r4, [sp, 0xa4]                                |     var_a4h = r4;
    0x00024a6a strd r4, r4, [sp, 0xa8]                           |     __asm ("strd r4, r4, [var_a8h]");
    0x00024a6e str r3, [sp, 0xa0]                                |     var_a0h = r3;
    0x00024a70 bl 0xc6b0                                         |     fcn_0000c6b0 (r0, r1);
    0x00024a74 ldr r2, [sp, 0xb0]                                |     r2 = var_b0h;
    0x00024a76 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00024a78 beq 0x24a16                                       |         goto label_13;
                                                                 |     }
                                                                 | label_56:
    0x00024a7a movs r2, 1                                        |     r2 = 1;
    0x00024a7c lsl.w r1, r2, r6                                  |     r1 = r2 << r6;
    0x00024a80 lsr.w r7, r2, r7                                  |     r7 = r2 >> r7;
    0x00024a84 lsls r2, r5                                       |     r2 <<= r5;
    0x00024a86 orrs r1, r7                                       |     r1 |= r7;
    0x00024a88 orr.w fp, r1, fp                                  |     
    0x00024a8c orr.w sl, r2, sl                                  |     sl = r2 | sl;
    0x00024a90 b 0x24a16                                         |     goto label_13;
                                                                 | label_33:
    0x00024a92 movs r3, 1                                        |     r3 = 1;
    0x00024a94 movs r2, 0                                        |     r2 = 0;
    0x00024a96 str r3, [sp, 0x30]                                |     var_30h = r3;
    0x00024a98 str r2, [sp, 0x28]                                |     var_28h = r2;
    0x00024a9a str r2, [sp, 0x8c]                                |     var_8ch = r2;
    0x00024a9c str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00024a9e b 0x2466e                                         |     goto label_15;
                                                                 | label_47:
    0x00024aa0 ldr r1, [sp, 0x3c]                                |     r1 = var_3ch;
    0x00024aa2 ldr r0, [sp, 0x70]                                |     r0 = var_70h;
    0x00024aa4 eors r1, r0                                       |     r1 ^= r0;
    0x00024aa6 cmp r1, r3                                        |     
                                                                 |     if (r1 == r3) {
    0x00024aa8 beq.w 0x2482e                                     |         goto label_16;
                                                                 |     }
    0x00024aac mov r8, sb                                        |     r8 = sb;
    0x00024aae mov sb, r2                                        |     sb = r2;
    0x00024ab0 b 0x24918                                         |     goto label_17;
                                                                 | label_54:
    0x00024ab2 ldr r1, [r3, 4]                                   |     r1 = *((r3 + 4));
    0x00024ab4 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00024ab6 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00024ab8 ldr.w r1, [r1, r8, lsl 2]                         |     offset_3 = r8 << 2;
                                                                 |     r1 = *((r1 + offset_3));
    0x00024abc ldr r0, [r3]                                      |     r0 = *(r3);
    0x00024abe bl 0x22e78                                        |     fcn_00022e78 (r0, r1);
    0x00024ac2 ldrd r3, r2, [sp, 0x24]                           |     __asm ("ldrd r3, r2, [var_28h]");
    0x00024ac6 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00024ac8 beq 0x24b20                                       |         goto label_57;
                                                                 |     }
                                                                 | label_22:
    0x00024aca str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00024acc ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00024ace ldr r4, [r0]                                      |     r4 = *(r0);
    0x00024ad0 ldr r1, [r2]                                      |     r1 = *(r2);
    0x00024ad2 ldr r0, [r3]                                      |     r0 = *(r3);
    0x00024ad4 bl 0x22e78                                        |     fcn_00022e78 (r0, r1);
    0x00024ad8 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
                                                                 |     if (r0 == 0) {
    0x00024ada cbz r0, 0x24b26                                   |         goto label_58;
                                                                 |     }
                                                                 | label_23:
    0x00024adc ldr r1, [r0]                                      |     r1 = *(r0);
    0x00024ade mov r0, r4                                        |     r0 = r4;
    0x00024ae0 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00024ae2 blx 0x6164                                        |     fcn_00006164 ();
    0x00024ae6 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00024ae8 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00024aea beq.w 0x249c8                                     |         goto label_18;
                                                                 |     }
    0x00024aee b 0x24626                                         |     goto label_10;
                                                                 | label_28:
    0x00024af0 lsls r1, r3, 0x13                                 |     r1 = r3 << 0x13;
                                                                 |     if (r1 >= r3) {
    0x00024af2 bpl.w 0x24638                                     |         goto label_19;
                                                                 |     }
    0x00024af6 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00024af8 ldr r1, [sp, 0x4c]                                |     r1 = var_4ch;
    0x00024afa ldr r3, [r2, 8]                                   |     r3 = *((r2 + 8));
    0x00024afc orrs r1, r3                                       |     r1 |= r3;
    0x00024afe ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x00024b00 ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x00024b02 str r1, [sp, 0x4c]                                |     var_4ch = r1;
    0x00024b04 orrs r2, r3                                       |     r2 |= r3;
    0x00024b06 str r2, [sp, 0x50]                                |     var_50h = r2;
    0x00024b08 b 0x24942                                         |     goto label_12;
                                                                 | label_44:
    0x00024b0a ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00024b0c mov r2, sb                                        |     r2 = sb;
    0x00024b0e mov sb, lr                                        |     sb = lr;
    0x00024b10 ldrh r3, [r3, 0x22]                               |     r3 = *((r3 + 0x22));
    0x00024b12 lsls r4, r3, 0x17                                 |     r4 = r3 << 0x17;
    0x00024b14 itt mi                                            |     
                                                                 |     if (r4 >= r3) {
    0x00024b16 movmi r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r4 < r3) {
    0x00024b18 strmi r3, [sp, 0x58]                              |         var_58h = r3;
                                                                 |         goto label_59;
                                                                 |     }
                                                                 |     if (r4 < r3) {
                                                                 | label_59:
    0x00024b1a bmi.w 0x2483c                                     |         goto label_20;
                                                                 |     }
    0x00024b1e b 0x24804                                         |     goto label_21;
                                                                 | label_57:
    0x00024b20 ldr r1, [sp, 0x6c]                                |     r1 = var_6ch;
    0x00024b22 ldr r0, [r1, 8]                                   |     r0 = *((r1 + 8));
    0x00024b24 b 0x24aca                                         |     goto label_22;
                                                                 | label_58:
    0x00024b26 ldr r2, [sp, 0x6c]                                |     r2 = var_6ch;
    0x00024b28 ldr r0, [r2, 8]                                   |     r0 = *((r2 + 8));
    0x00024b2a b 0x24adc                                         |     goto label_23;
                                                                 | label_27:
    0x00024b2c ldrd r3, r2, [sp, 0x64]                           |     __asm ("ldrd r3, r2, [var_64h]");
    0x00024b30 cmp r2, fp                                        |     
    0x00024b32 it eq                                             |     
                                                                 |     if (r2 == fp) {
    0x00024b34 cmpeq r3, sl                                      |         __asm ("cmpeq r3, sl");
                                                                 |     }
    0x00024b36 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00024b38 ldrsb.w r2, [r3, 0x1d]                            |     r2 = *((r3 + 0x1d));
    0x00024b3c ite eq                                            |     
                                                                 |     if (r2 != fp) {
    0x00024b3e moveq r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r2 == fp) {
    0x00024b40 movne r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00024b42 cmp r2, 0                                         |     
    0x00024b44 it ne                                             |     
                                                                 |     if (r2 == 0) {
    0x00024b46 orrne r3, r3, 1                                   |         r3 |= 1;
                                                                 |     }
                                                                 |     if (r3 == 0) {
    0x00024b4a cbz r3, 0x24b5e                                   |         goto label_53;
                                                                 |     }
                                                                 |     do {
                                                                 | label_26:
    0x00024b4c ldrsb.w r0, [sp, 0x94]                            |         r0 = var_94h;
    0x00024b50 b 0x248d6                                         |         goto label_24;
                                                                 | label_52:
    0x00024b52 ldrd r3, r2, [sp, 0x64]                           |         __asm ("ldrd r3, r2, [var_64h]");
    0x00024b56 cmp fp, r2                                        |         
    0x00024b58 it eq                                             |         
                                                                 |         if (fp == r2) {
    0x00024b5a cmpeq sl, r3                                      |             __asm ("cmpeq sl, r3");
                                                                 |         }
    0x00024b5c beq 0x24b4c                                       |         
                                                                 |     } while (fp == r2);
                                                                 | label_53:
    0x00024b5e mov.w r0, -1                                      |     r0 = -1;
    0x00024b62 b 0x248d6                                         |     goto label_24;
                                                                 | label_49:
    0x00024b64 blx 0x6498                                        |     fcn_00006498 ();
                                                                 | label_30:
    0x00024b68 movs r3, 0                                        |     r3 = 0;
    0x00024b6a ldrb r3, [r3]                                     |     r3 = *(r3);
    0x00024b6c udf 0xff                                          |     __asm ("udf 0xff");
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x24b84 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00024b84 ()                                      | void fcn_00024b84 (int16_t arg1, int16_t arg2) {
                                                                 |     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;
                                                                 |     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;
                                                                 |     int32_t var_78h_2;
                                                                 |     int16_t var_84h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     if (? < ?) {
    0x00024b84 ldrbhs pc, [r0, -0x8df]!                          |         pc = *((r0 -= 0x8df));
                                                                 |     }
    0x00024b88 ldr.w r3, [pc, 0x570]                             |     
    0x00024b8c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00024b90 add r2, pc                                        |     r2 += pc;
    0x00024b92 vpush {d8}                                        |     __asm ("vpush {d8}");
    0x00024b96 sub sp, 0x8c                                      |     
    0x00024b98 str r0, [sp, 0x1c]                                |     var_1ch = r0;
    0x00024b9a ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x00024b9c ldr r2, [r0]                                      |     r2 = *(r0);
    0x00024b9e ldr r3, [r3]                                      |     r3 = *(0x250fc);
    0x00024ba0 str r3, [sp, 0x84]                                |     var_84h = r3;
    0x00024ba2 mov.w r3, 0                                       |     r3 = 0;
    0x00024ba6 ldrb.w r3, [r0, 0x29]                             |     r3 = *((r0 + 0x29));
    0x00024baa str r2, [sp, 0x64]                                |     var_64h = r2;
    0x00024bac ldr r2, [r2]                                      |     r2 = *(r2);
    0x00024bae cmp r3, 1                                         |     
    0x00024bb0 str r3, [sp, 0x5c]                                |     var_5ch = r3;
    0x00024bb2 it le                                             |     
                                                                 |     if (r3 > 1) {
    0x00024bb4 movle r5, 1                                       |         r5 = 1;
                                                                 |     }
    0x00024bb6 str r1, [sp, 0x48]                                |     var_48h = r1;
    0x00024bb8 str r2, [sp, 0x68]                                |     var_68h = r2;
    0x00024bba it le                                             |     
                                                                 |     if (r3 > 1) {
    0x00024bbc strle r5, [sp, 0x14]                              |         var_14h = r5;
                                                                 |     }
                                                                 |     if (r3 > 1) {
    0x00024bbe ble 0x24bca                                       |         
    0x00024bc0 cmp r3, 2                                         |         
    0x00024bc2 ite ne                                            |         
                                                                 |         if (r3 == 2) {
    0x00024bc4 movne r5, 0xa                                     |             r5 = 0xa;
                                                                 |         }
                                                                 |         if (r3 != 2) {
    0x00024bc6 moveq r5, 5                                       |             r5 = 5;
                                                                 |         }
    0x00024bc8 str r5, [sp, 0x14]                                |         var_14h = r5;
                                                                 |     }
    0x00024bca ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00024bcc ldr r2, [sp, 0x48]                                |     r2 = var_48h;
    0x00024bce ldr r6, [sp, 0x5c]                                |     r6 = var_5ch;
    0x00024bd0 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00024bd2 ldr r0, [sp, 0x68]                                |     r0 = var_68h;
    0x00024bd4 add.w r1, r6, 8                                   |     r1 = r6 + 8;
    0x00024bd8 cmp r3, 0                                         |     
    0x00024bda it ne                                             |     
                                                                 |     if (r3 != 0) {
    0x00024bdc cmpne r2, 0                                       |         __asm ("cmpne r2, 0");
                                                                 |     }
    0x00024bde mul r1, r5, r1                                    |     r1 = r5 * r1;
    0x00024be2 iteet ne                                          |     
                                                                 |     if (r3 == 0) {
    0x00024be4 ldrne r3, [r3]                                    |         r3 = *(r3);
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x00024be6 moveq r4, 0                                       |         r4 = 0;
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x00024be8 streq r4, [sp, 0x28]                              |         var_28h = r4;
                                                                 |     }
                                                                 |     if (r3 == 0) {
    0x00024bea strne r3, [sp, 0x28]                              |         var_28h = r3;
                                                                 |     }
    0x00024bec it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x00024bee lslne r4, r3, 1                                   |         r4 = r3 << 1;
                                                                 |     }
    0x00024bf0 add.w r1, r4, r1, lsl 3                           |     r1 = r4 + (r1 << 3);
    0x00024bf4 bl 0xd3a0                                         |     r0 = fcn_0000d3a0 (r0, r1);
    0x00024bf8 mov r7, r0                                        |     r7 = r0;
    0x00024bfa str r0, [sp, 0x6c]                                |     var_6ch = r0;
    0x00024bfc cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00024bfe beq.w 0x2506c                                     |         goto label_16;
                                                                 |     }
    0x00024c02 lsls r5, r5, 5                                    |     r5 <<= 5;
    0x00024c04 lsls r6, r6, 2                                    |     r6 <<= 2;
    0x00024c06 adds r3, r0, r5                                   |     r3 = r0 + r5;
    0x00024c08 movs r2, 0x20                                     |     r2 = 0x20;
    0x00024c0a movs r1, 0                                        |     r1 = 0;
    0x00024c0c mov r0, r3                                        |     r0 = r3;
    0x00024c0e mov r8, r3                                        |     r8 = r3;
    0x00024c10 str r3, [sp, 0x58]                                |     var_58h = r3;
    0x00024c12 str r6, [sp, 0x70]                                |     var_70h = r6;
    0x00024c14 add r5, r8                                        |     r5 += r8;
    0x00024c16 blx 0x5fcc                                        |     fcn_00005fcc ();
    0x00024c1a ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x00024c1c mov r3, r7                                        |     r3 = r7;
    0x00024c1e lsls r0, r2, 1                                    |     r0 = r2 << 1;
    0x00024c20 add.w r1, r7, r2, lsl 6                           |     r1 = r7 + (r2 << 6);
    0x00024c24 mov r2, r5                                        |     r2 = r5;
                                                                 |     do {
    0x00024c26 str r2, [r3, 0x18]                                |         *((r3 + 0x18)) = r2;
    0x00024c28 adds r3, 0x20                                     |         r3 += 0x20;
    0x00024c2a cmp r1, r3                                        |         
    0x00024c2c add r2, r6                                        |         r2 += r6;
    0x00024c2e bne 0x24c26                                       |         
                                                                 |     } while (r1 != r3);
    0x00024c30 ldr r3, [sp, 0x70]                                |     r3 = var_70h;
    0x00024c32 mla r3, r0, r3, r5                                |     __asm ("mla r3, r0, r3, r5");
    0x00024c36 str r3, [sp, 0x40]                                |     var_40h = r3;
    0x00024c38 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00024c3a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00024c3c bne.w 0x25026                                     |         goto label_17;
                                                                 |     }
    0x00024c40 ldr r3, [sp, 0x64]                                |     r3 = var_64h;
    0x00024c42 ldr r2, [sp, 0x58]                                |     r2 = var_58h;
    0x00024c44 ldr.w r3, [r3, 0x1a8]                             |     r3 = *((r3 + 0x1a8));
    0x00024c48 cmp r3, 0x2e                                      |     
    0x00024c4a it hs                                             |     
                                                                 |     if (r3 < 0x2e) {
    0x00024c4c movhs r3, 0x2e                                    |         r3 = 0x2e;
                                                                 |     }
    0x00024c4e strh r3, [r2, 0x10]                               |     *((r2 + 0x10)) = r3;
    0x00024c50 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00024c52 str r3, [sp, 0x40]                                |     var_40h = r3;
                                                                 | label_11:
    0x00024c54 ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x00024c56 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00024c58 beq.w 0x25066                                     |         goto label_18;
                                                                 |     }
    0x00024c5c ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x00024c5e movs r3, 0                                        |     r3 = 0;
    0x00024c60 vmov.i32 d8, 0                                    |     __asm ("vmov.i32 d8, 0");
    0x00024c64 str r3, [sp, 0x38]                                |     var_38h = r3;
    0x00024c66 str r3, [sp, 0x30]                                |     var_30h = r3;
    0x00024c68 lsls r2, r2, 5                                    |     r2 <<= 5;
    0x00024c6a str r3, [sp, 0x44]                                |     var_44h = r3;
    0x00024c6c str r3, [sp, 0x60]                                |     var_60h = r3;
    0x00024c6e str r2, [sp, 0x74]                                |     var_74h = r2;
    0x00024c70 ldr r2, [sp, 0x6c]                                |     r2 = var_6ch;
    0x00024c72 str r2, [sp, 0x10]                                |     var_10h = r2;
    0x00024c74 movs r2, 1                                        |     r2 = 1;
    0x00024c76 str r2, [sp, 0x34]                                |     var_34h = r2;
                                                                 | label_8:
    0x00024c78 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00024c7a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00024c7c beq.w 0x24e78                                     |         goto label_19;
                                                                 |     }
    0x00024c80 ldr r3, [sp, 0x60]                                |     r3 = var_60h;
    0x00024c82 mov.w fp, 0                                       |     
    0x00024c86 str.w fp, [sp, 0x20]                              |     __asm ("str.w fp, [var_20h]");
    0x00024c8a lsls r2, r3, 2                                    |     r2 = r3 << 2;
    0x00024c8c uxth r3, r3                                       |     r3 = (int16_t) r3;
    0x00024c8e str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x00024c90 ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x00024c92 str r2, [sp, 0x2c]                                |     var_2ch = r2;
    0x00024c94 ldr r2, [sp, 0x74]                                |     r2 = var_74h;
    0x00024c96 add.w sb, r3, 0x20                                |     sb = r3 + 0x20;
    0x00024c9a ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00024c9c add r3, r2                                        |     r3 += r2;
    0x00024c9e str r3, [sp, 0x4c]                                |     var_4ch = r3;
                                                                 | label_7:
    0x00024ca0 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00024ca2 ldr r4, [r3, 0x10]                                |     r4 = *((r3 + 0x10));
    0x00024ca4 sub.w r3, sb, 0x20                                |     r3 = sb - 0x20;
    0x00024ca8 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00024caa cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00024cac beq.w 0x24e62                                     |         goto label_20;
                                                                 |     }
    0x00024cb0 mov r7, fp                                        |     r7 = fp;
    0x00024cb2 b 0x24cbc                                         |     
                                                                 |     while (r3 != r2) {
                                                                 | label_0:
    0x00024cb4 ldr r4, [r4, 0x30]                                |         r4 = *((r4 + 0x30));
    0x00024cb6 cmp r4, 0                                         |         
                                                                 |         if (r4 == 0) {
    0x00024cb8 beq.w 0x24e60                                     |             goto label_21;
                                                                 |         }
    0x00024cbc ldrsb r8, [sb, -0xa]                              |         r8 = *((sb - 0xa));
    0x00024cc0 vstr d8, [sp, 0x78]                               |         __asm ("vstr d8, [sp, 0x78]");
    0x00024cc4 ldrd r5, r6, [sb, -0x20]                          |         __asm ("ldrd r5, r6, [sb, -0x20]");
    0x00024cc8 ldr r3, [r4]                                      |         r3 = *(r4);
    0x00024cca ldr r2, [r4, 4]                                   |         r2 = *((r4 + 4));
    0x00024ccc bic.w r3, r3, r5                                  |         r3 = BIT_MASK (r3, r5);
    0x00024cd0 bic.w r2, r2, r6                                  |         r2 = BIT_MASK (r2, r6);
    0x00024cd4 orrs r3, r2                                       |         r3 |= r2;
    0x00024cd6 bne 0x24cb4                                       |         
                                                                 |     }
    0x00024cd8 ldrd r1, r2, [r4, 8]                              |     __asm ("ldrd r1, r2, [r4, 8]");
    0x00024cdc and.w r0, r5, r1                                  |     r0 = r5 & r1;
    0x00024ce0 and.w r3, r6, r2                                  |     r3 = r6 & r2;
    0x00024ce4 orrs r3, r0                                       |     r3 |= r0;
                                                                 |     if (r3 != r0) {
    0x00024ce6 bne 0x24cb4                                       |         goto label_0;
                                                                 |     }
    0x00024ce8 ldrh sl, [sb, -0x10]                              |     sl = *((sb - 0x10));
    0x00024cec orrs r5, r1                                       |     r5 |= r1;
    0x00024cee ldrh r1, [r4, 0x14]                               |     r1 = *((r4 + 0x14));
    0x00024cf0 orrs r6, r2                                       |     r6 |= r2;
    0x00024cf2 ldrsh.w r0, [r4, 0x12]                            |     r0 = *((r4 + 0x12));
    0x00024cf6 add r1, sl                                        |     r1 += sl;
    0x00024cf8 sxth r1, r1                                       |     __asm ("sxth r1, r1");
    0x00024cfa bl 0x9fdc                                         |     fcn_00009fdc (r0, r1);
    0x00024cfe ldrsh r1, [sb, -0xc]                              |     r1 = *((sb - 0xc));
    0x00024d02 bl 0x9fdc                                         |     fcn_00009fdc (r0, r1);
    0x00024d06 ldrh r3, [r4, 0x16]                               |     r3 = *((r4 + 0x16));
    0x00024d08 cmp.w r8, 0                                       |     
    0x00024d0c mov fp, r0                                        |     
    0x00024d0e add sl, r3                                        |     sl += r3;
    0x00024d10 sxth.w sl, sl                                     |     __asm ("sxth.w sl, sl");
                                                                 |     if (r8 < 0) {
    0x00024d14 blt 0x24e06                                       |         goto label_22;
                                                                 |     }
    0x00024d16 ldrd r2, r3, [sb, -0x18]                          |     __asm ("ldrd r2, r3, [sb, -0x18]");
    0x00024d1a strd r2, r3, [sp, 0x78]                           |     __asm ("strd r2, r3, [var_78h]");
                                                                 | label_4:
    0x00024d1e ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00024d20 cmp r3, r8                                        |     
                                                                 |     if (r3 <= r8) {
    0x00024d22 ble 0x24e24                                       |         goto label_23;
                                                                 |     }
    0x00024d24 ldr r1, [sp, 0x40]                                |     r1 = var_40h;
    0x00024d26 sxth.w r2, r8                                     |     __asm ("sxth.w r2, r8");
    0x00024d2a ldrsh.w r3, [r1, r2, lsl 1]                       |     offset_0 = r2 << 1;
                                                                 |     r3 = *((r1 + offset_0));
    0x00024d2e add.w r2, r1, r2, lsl 1                           |     r2 = r1 + (r2 << 1);
    0x00024d32 str r2, [sp, 0x18]                                |     var_18h = r2;
    0x00024d34 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00024d36 beq.w 0x24ea4                                     |         goto label_24;
                                                                 |     }
                                                                 | label_9:
    0x00024d3a mov r1, r3                                        |     r1 = r3;
    0x00024d3c mov r0, fp                                        |     r0 = fp;
    0x00024d3e bl 0x9fdc                                         |     r0 = fcn_00009fdc (r0, r1);
    0x00024d42 mov ip, r0                                        |     
    0x00024d44 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x00024d46 beq 0x24e2a                                       |         goto label_25;
                                                                 |     }
                                                                 | label_5:
    0x00024d48 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00024d4a movs r0, 0                                        |     r0 = 0;
    0x00024d4c b 0x24d56                                         |     
                                                                 |     while (r6 != r2) {
                                                                 | label_1:
    0x00024d4e adds r0, 1                                        |         r0++;
    0x00024d50 adds r3, 0x20                                     |         r3 += 0x20;
    0x00024d52 cmp r7, r0                                        |         
                                                                 |         if (r7 == r0) {
    0x00024d54 beq 0x24e30                                       |             goto label_26;
                                                                 |         }
    0x00024d56 ldrd r1, r2, [r3]                                 |         __asm ("ldrd r1, r2, [r3]");
    0x00024d5a cmp r6, r2                                        |         
    0x00024d5c it eq                                             |         
                                                                 |         if (r6 == r2) {
    0x00024d5e cmpeq r5, r1                                      |             __asm ("cmpeq r5, r1");
                                                                 |         }
    0x00024d60 bne 0x24d4e                                       |         
                                                                 |     }
    0x00024d62 ldrb r2, [r3, 0x16]                               |     r2 = *((r3 + 0x16));
    0x00024d64 eor.w r2, r8, r2                                  |     r2 = r8 ^ r2;
    0x00024d68 lsls r2, r2, 0x18                                 |     r2 <<= 0x18;
                                                                 |     if (r2 < r2) {
    0x00024d6a bmi 0x24d4e                                       |         goto label_1;
                                                                 |     }
    0x00024d6c ldrsh.w r2, [r3, 0x12]                            |     r2 = *((r3 + 0x12));
    0x00024d70 cmp ip, r2                                        |     
                                                                 |     if (ip > r2) {
    0x00024d72 bgt 0x24cb4                                       |         goto label_0;
                                                                 |     }
                                                                 |     if (ip == r2) {
    0x00024d74 beq.w 0x24e98                                     |         goto label_27;
                                                                 |     }
                                                                 | label_6:
    0x00024d78 ldrd r1, r2, [sb, -0x20]                          |     __asm ("ldrd r1, r2, [sb, -0x20]");
    0x00024d7c ldr r0, [r4, 8]                                   |     r0 = *((r4 + 8));
    0x00024d7e ldr r5, [sp, 0x2c]                                |     r5 = var_2ch;
    0x00024d80 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00024d82 orrs r1, r0                                       |     r1 |= r0;
    0x00024d84 ldr r0, [r4, 0xc]                                 |     r0 = *((r4 + 0xc));
    0x00024d86 str r1, [r3]                                      |     *(r3) = r1;
    0x00024d88 orrs r2, r0                                       |     r2 |= r0;
    0x00024d8a ldr r0, [r3, 0x18]                                |     r0 = *((r3 + 0x18));
    0x00024d8c str r2, [r3, 4]                                   |     *((r3 + 4)) = r2;
    0x00024d8e mov r2, r5                                        |     r2 = r5;
    0x00024d90 vldr d16, [sp, 0x78]                              |     __asm ("vldr d16, [sp, 0x78]");
    0x00024d94 strb.w r8, [r3, 0x16]                             |     *((r3 + 0x16)) = r8;
    0x00024d98 strh.w sl, [r3, 0x10]                             |     *((r3 + 0x10)) = sl;
    0x00024d9c vstr d16, [r3, 8]                                 |     __asm ("vstr d16, [r3, 8]");
    0x00024da0 strh.w ip, [r3, 0x12]                             |     *((r3 + 0x12)) = ip;
    0x00024da4 strh.w fp, [r3, 0x14]                             |     *((r3 + 0x14)) = fp;
    0x00024da8 ldr r1, [sb, -0x8]                                |     r1 = *((sb - 0x8));
    0x00024dac blx 0x6214                                        |     fcn_00006214 ();
    0x00024db0 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00024db2 ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x00024db4 str r4, [r3, r5]                                  |     *((r3 + r5)) = r4;
    0x00024db6 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00024db8 cmp r3, r7                                        |     
                                                                 |     if (r3 > r7) {
    0x00024dba bgt.w 0x24cb4                                     |         goto label_0;
                                                                 |     }
    0x00024dbe ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00024dc0 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x00024dc2 ldrsh.w r0, [r3, 0x12]                            |     r0 = *((r3 + 0x12));
    0x00024dc6 adds r3, 0x20                                     |     r3 += 0x20;
    0x00024dc8 ldrsh r6, [r3, -0x10]                             |     r6 = *((r3 - 0x10));
    0x00024dcc cmp r2, 1                                         |     
    0x00024dce str r0, [sp, 0x30]                                |     var_30h = r0;
    0x00024dd0 str r6, [sp, 0x38]                                |     var_38h = r6;
                                                                 |     if (r2 == 1) {
    0x00024dd2 beq.w 0x24f00                                     |         goto label_28;
                                                                 |     }
    0x00024dd6 movs r1, 0                                        |     r1 = 0;
    0x00024dd8 ldr r5, [sp, 0x4c]                                |     r5 = var_4ch;
    0x00024dda movs r2, 1                                        |     r2 = 1;
    0x00024ddc mov ip, r1                                        |     
    0x00024dde b 0x24df0                                         |     
                                                                 |     while (r1 > r0) {
    0x00024de0 ldrsh.w r6, [r3, 0x14]                            |         r6 = *((r3 + 0x14));
                                                                 | label_3:
    0x00024de4 mov r0, r1                                        |         r0 = r1;
    0x00024de6 mov ip, r2                                        |         
                                                                 | label_2:
    0x00024de8 adds r3, 0x20                                     |         r3 += 0x20;
    0x00024dea adds r2, 1                                        |         r2++;
    0x00024dec cmp r3, r5                                        |         
                                                                 |         if (r3 == r5) {
    0x00024dee beq 0x24e8e                                       |             goto label_29;
                                                                 |         }
    0x00024df0 ldrsh.w r1, [r3, 0x12]                            |         r1 = *((r3 + 0x12));
    0x00024df4 cmp r1, r0                                        |         
    0x00024df6 bgt 0x24de0                                       |         
                                                                 |     }
                                                                 |     if (r1 != r0) {
    0x00024df8 bne 0x24de8                                       |         goto label_2;
                                                                 |     }
    0x00024dfa ldrsh.w lr, [r3, 0x14]                            |     
    0x00024dfe cmp lr, r6                                        |     
                                                                 |     if (lr <= r6) {
    0x00024e00 ble 0x24de8                                       |         goto label_2;
                                                                 |     }
    0x00024e02 mov r6, lr                                        |     r6 = lr;
    0x00024e04 b 0x24de4                                         |     goto label_3;
                                                                 | label_22:
    0x00024e06 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00024e08 ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x00024e0a str r4, [sp, 4]                                   |     var_4h = r4;
    0x00024e0c str r3, [sp]                                      |     *(sp) = r3;
    0x00024e0e add r3, sp, 0x78                                  |     r3 += var_78h;
    0x00024e10 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00024e12 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00024e14 ldrh r3, [r0, 0x22]                               |     r3 = *((r0 + 0x22));
    0x00024e16 ldr r1, [r0, 8]                                   |     r1 = *((r0 + 8));
    0x00024e18 bl 0x244e4                                        |     r0 = fcn_000244e4 (r0, r1, r2, r3, r4, r5, r6);
    0x00024e1c subs.w r8, r0, 0                                  |     r8 = r0 - 0;
                                                                 |     if (r8 >= r0) {
    0x00024e20 bge.w 0x24d1e                                     |         goto label_4;
                                                                 |     }
                                                                 | label_23:
    0x00024e24 mov ip, fp                                        |     
    0x00024e26 cmp r7, 0                                         |     
                                                                 |     if (r7 != 0) {
    0x00024e28 bne 0x24d48                                       |         goto label_5;
                                                                 |     }
                                                                 |     do {
                                                                 | label_25:
    0x00024e2a mov r3, r7                                        |         r3 = r7;
    0x00024e2c adds r7, 1                                        |         r7++;
    0x00024e2e b 0x24e58                                         |         goto label_30;
                                                                 | label_26:
    0x00024e30 ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x00024e32 cmp r3, r7                                        |         
    0x00024e34 bgt 0x24e2a                                       |         
                                                                 |     } while (r3 > r7);
    0x00024e36 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00024e38 cmp ip, r3                                        |     
                                                                 |     if (ip > r3) {
    0x00024e3a bgt.w 0x24cb4                                     |         goto label_0;
                                                                 |     }
    0x00024e3e ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x00024e40 ite eq                                            |     
                                                                 |     if (ip != r3) {
    0x00024e42 moveq r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (ip == r3) {
    0x00024e44 movne r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00024e46 cmp fp, r2                                        |     
    0x00024e48 ite lt                                            |     
                                                                 |     if (fp >= r2) {
    0x00024e4a movlt r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (fp < r2) {
    0x00024e4c andge r3, r3, 1                                   |         r3 &= 1;
                                                                 |     }
    0x00024e50 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00024e52 bne.w 0x24cb4                                     |         goto label_0;
                                                                 |     }
    0x00024e56 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
                                                                 | label_30:
    0x00024e58 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x00024e5a add.w r3, r2, r3, lsl 5                           |     r3 = r2 + (r3 << 5);
    0x00024e5e b 0x24d78                                         |     goto label_6;
                                                                 | label_21:
    0x00024e60 mov fp, r7                                        |     
                                                                 | label_20:
    0x00024e62 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00024e64 add.w sb, sb, 0x20                                |     sb += 0x20;
    0x00024e68 ldr r2, [sp, 0x34]                                |     r2 = var_34h;
    0x00024e6a adds r3, 1                                        |     r3++;
    0x00024e6c cmp r3, r2                                        |     
    0x00024e6e str r3, [sp, 0x20]                                |     var_20h = r3;
                                                                 |     if (r3 != r2) {
    0x00024e70 bne.w 0x24ca0                                     |         goto label_7;
                                                                 |     }
    0x00024e74 str.w fp, [sp, 0x34]                              |     __asm ("str.w fp, [var_34h]");
                                                                 | label_19:
    0x00024e78 ldr r1, [sp, 0x10]                                |     r1 = var_10h;
    0x00024e7a ldr r2, [sp, 0x60]                                |     r2 = var_60h;
    0x00024e7c ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x00024e7e str r1, [sp, 0x58]                                |     var_58h = r1;
    0x00024e80 ldr r1, [sp, 0x5c]                                |     r1 = var_5ch;
    0x00024e82 adds r2, 1                                        |     r2++;
    0x00024e84 str r2, [sp, 0x60]                                |     var_60h = r2;
    0x00024e86 cmp r1, r2                                        |     
                                                                 |     if (r1 == r2) {
    0x00024e88 beq 0x24f06                                       |         goto label_31;
                                                                 |     }
    0x00024e8a str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00024e8c b 0x24c78                                         |     goto label_8;
                                                                 | label_29:
    0x00024e8e str.w ip, [sp, 0x44]                              |     __asm ("str.w ip, [var_44h]");
    0x00024e92 str r0, [sp, 0x30]                                |     var_30h = r0;
    0x00024e94 str r6, [sp, 0x38]                                |     var_38h = r6;
    0x00024e96 b 0x24cb4                                         |     goto label_0;
                                                                 | label_27:
    0x00024e98 ldrsh.w r2, [r3, 0x10]                            |     r2 = *((r3 + 0x10));
    0x00024e9c cmp r2, sl                                        |     
                                                                 |     if (r2 > sl) {
    0x00024e9e bgt.w 0x24d78                                     |         goto label_6;
                                                                 |     }
    0x00024ea2 b 0x24cb4                                         |     goto label_0;
                                                                 | label_24:
    0x00024ea4 ldr r1, [sp, 0x28]                                |     r1 = var_28h;
    0x00024ea6 movs r0, 0x64                                     |     r0 = 0x64;
    0x00024ea8 str r3, [sp, 0x54]                                |     var_54h = r3;
    0x00024eaa sub.w r2, r1, r8                                  |     r2 = r1 - r8;
    0x00024eae mul r0, r2, r0                                    |     r0 = r2 * r0;
    0x00024eb2 bl 0x5ded8                                        |     r0 = fcn_0005ded8 (r0, r1);
    0x00024eb6 asrs r1, r0, 0x1f                                 |     r1 = r0 >> 0x1f;
    0x00024eb8 bl 0x73ac                                         |     fcn_000073ac (r0, r1);
    0x00024ebc ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00024ebe uxth r2, r0                                       |     r2 = (int16_t) r0;
    0x00024ec0 ldrh r3, [r3, 0x22]                               |     r3 = *((r3 + 0x22));
    0x00024ec2 str r3, [sp, 0x50]                                |     var_50h = r3;
    0x00024ec4 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00024ec6 cmp r3, 0xa                                       |     
    0x00024ec8 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x00024eca bgt 0x24eea                                       |     
                                                                 |     while (1) {
    0x00024ecc ldr r1, [sp, 0x48]                                |         r1 = var_48h;
    0x00024ece subs r1, 0x42                                     |         r1 -= 0x42;
    0x00024ed0 add r2, r1                                        |         r2 += r1;
    0x00024ed2 add r3, r2                                        |         r3 += r2;
    0x00024ed4 ldr r2, [sp, 0x50]                                |         r2 = var_50h;
    0x00024ed6 uxth r3, r3                                       |         r3 = (int16_t) r3;
    0x00024ed8 lsls r1, r2, 0x15                                 |         r1 = r2 << 0x15;
    0x00024eda ldr r2, [sp, 0x18]                                |         r2 = var_18h;
    0x00024edc ite pl                                            |         
                                                                 |         if (r1 < r2) {
    0x00024ede addpl r3, 0x10                                    |             r3 += 0x10;
                                                                 |         }
                                                                 |         if (r1 >= r2) {
    0x00024ee0 addmi r3, 0x20                                    |             r3 += 0x20;
                                                                 |         }
    0x00024ee2 uxth r3, r3                                       |         r3 = (int16_t) r3;
    0x00024ee4 sxth r3, r3                                       |         __asm ("sxth r3, r3");
    0x00024ee6 strh r3, [r2]                                     |         *(r2) = r3;
    0x00024ee8 b 0x24d3a                                         |         goto label_9;
    0x00024eea ldr r3, [sp, 0x48]                                |         r3 = var_48h;
    0x00024eec str r2, [sp, 0x54]                                |         var_54h = r2;
    0x00024eee mov r0, r3                                        |         r0 = r3;
    0x00024ef0 asrs r1, r3, 0x1f                                 |         r1 = r3 >> 0x1f;
    0x00024ef2 bl 0x73ac                                         |         r0 = fcn_000073ac (r0, r1);
    0x00024ef6 sub.w r3, r0, 0x21                                |         r3 = r0 - 0x21;
    0x00024efa ldr r2, [sp, 0x54]                                |         r2 = var_54h;
    0x00024efc uxth r3, r3                                       |         r3 = (int16_t) r3;
    0x00024efe b 0x24ecc                                         |         
                                                                 |     }
                                                                 | label_28:
    0x00024f00 movs r3, 0                                        |     r3 = 0;
    0x00024f02 str r3, [sp, 0x44]                                |     var_44h = r3;
    0x00024f04 b 0x24cb4                                         |     goto label_0;
                                                                 | label_31:
    0x00024f06 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00024f08 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00024f0a beq.w 0x2508a                                     |         goto label_32;
                                                                 |     }
    0x00024f0e ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00024f10 cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x00024f12 beq 0x24f36                                       |         goto label_33;
                                                                 |     }
    0x00024f14 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x00024f16 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00024f18 add.w r0, r2, r3, lsl 5                           |     r0 = r2 + (r3 << 5);
    0x00024f1c add.w r3, r2, 0x20                                |     r3 = r2 + 0x20;
                                                                 |     do {
    0x00024f20 ldrsh.w r1, [r3, 0x12]                            |         r1 = *((r3 + 0x12));
    0x00024f24 ldrsh.w r4, [r2, 0x12]                            |         r4 = *((r2 + 0x12));
    0x00024f28 cmp r4, r1                                        |         
    0x00024f2a it gt                                             |         
                                                                 |         if (r4 <= r1) {
    0x00024f2c movgt r2, r3                                      |             r2 = r3;
                                                                 |         }
    0x00024f2e adds r3, 0x20                                     |         r3 += 0x20;
    0x00024f30 cmp r0, r3                                        |         
    0x00024f32 bne 0x24f20                                       |         
                                                                 |     } while (r0 != r3);
    0x00024f34 str r2, [sp, 0x10]                                |     var_10h = r2;
                                                                 | label_33:
    0x00024f36 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00024f38 movs r1, 0                                        |     r1 = 0;
    0x00024f3a ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00024f3c ldr r5, [sp, 0x5c]                                |     r5 = var_5ch;
    0x00024f3e ldr r0, [r3, 0x18]                                |     r0 = *((r3 + 0x18));
    0x00024f40 ldr r4, [r2, 4]                                   |     r4 = *((r2 + 4));
    0x00024f42 subs r0, 4                                        |     r0 -= 4;
                                                                 |     do {
    0x00024f44 ldr r3, [r0, 4]!                                  |         r3 = *((r0 += 4));
    0x00024f48 adds r1, 1                                        |         r1++;
    0x00024f4a cmp r5, r1                                        |         
    0x00024f4c add.w r2, r2, 0x48                                |         r2 += 0x48;
    0x00024f50 str.w r3, [r2, 0x2d0]                             |         __asm ("str.w r3, aav.0x000000ff");
    0x00024f54 ldrb r3, [r3, 0x10]                               |         r3 = *((r3 + 0x10));
    0x00024f56 strb.w r3, [r2, 0x2bc]                            |         *((r2 + 0x2bc)) = r3;
    0x00024f5a add.w r3, r3, r3, lsl 3                           |         r3 += (r3 << 3);
    0x00024f5e add.w r3, r4, r3, lsl 3                           |         r3 = r4 + (r3 << 3);
    0x00024f62 ldr r3, [r3, 0x30]                                |         r3 = *((r3 + 0x30));
    0x00024f64 str.w r3, [r2, 0x29c]                             |         __asm ("str.w r3, aav.0x000000ff");
    0x00024f68 bgt 0x24f44                                       |         
                                                                 |     } while (r5 > r1);
                                                                 | label_13:
    0x00024f6a ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00024f6c ldrh r3, [r3, 0x22]                               |     r3 = *((r3 + 0x22));
    0x00024f6e and r3, r3, 0x600                                 |     r3 &= 0x600;
    0x00024f72 cmp.w r3, 0x400                                   |     
    0x00024f76 beq 0x24fd2                                       |     
                                                                 |     while (r3 == 0) {
                                                                 | label_10:
    0x00024f78 ldr r3, [sp, 0x1c]                                |         r3 = var_1ch;
    0x00024f7a ldr r1, [r3, 8]                                   |         r1 = *((r3 + 8));
                                                                 |         if (r1 != 0) {
    0x00024f7c cbz r1, 0x24fa4                                   |             
    0x00024f7e ldrh r2, [r3, 0x22]                               |             r2 = *((r3 + 0x22));
    0x00024f80 ldr r3, [sp, 0x10]                                |             r3 = var_10h;
    0x00024f82 lsls r0, r2, 0x16                                 |             r0 = r2 << 0x16;
    0x00024f84 ldrsb.w r3, [r3, 0x16]                            |             r3 = *((r3 + 0x16));
                                                                 |             if (r0 >= r2) {
    0x00024f88 bpl 0x25050                                       |                 goto label_34;
                                                                 |             }
    0x00024f8a ldr r0, [r1]                                      |             r0 = *(r1);
    0x00024f8c cmp r3, r0                                        |             
                                                                 |             if (r3 == r0) {
    0x00024f8e beq.w 0x250ac                                     |                 goto label_35;
                                                                 |             }
                                                                 | label_12:
    0x00024f92 lsls r3, r2, 0x14                                 |             r3 = r2 << 0x14;
                                                                 |             if (r3 >= r2) {
    0x00024f94 bpl 0x24fa4                                       |                 goto label_15;
                                                                 |             }
    0x00024f96 ldr r3, [sp, 0x1c]                                |             r3 = var_1ch;
    0x00024f98 ldrsb.w r2, [r3, 0x24]                            |             r2 = *((r3 + 0x24));
    0x00024f9c ldr r3, [r1]                                      |             r3 = *(r1);
    0x00024f9e cmp r2, r3                                        |             
                                                                 |             if (r2 == r3) {
    0x00024fa0 beq.w 0x250b6                                     |                 goto label_36;
                                                                 |             }
                                                                 |         }
                                                                 | label_15:
    0x00024fa4 ldr r3, [sp, 0x10]                                |         r3 = var_10h;
    0x00024fa6 ldr r2, [sp, 0x1c]                                |         r2 = var_1ch;
    0x00024fa8 ldrh r3, [r3, 0x10]                               |         r3 = *((r3 + 0x10));
    0x00024faa strh r3, [r2, 0x20]                               |         *((r2 + 0x20)) = r3;
    0x00024fac ldr r2, [pc, 0x150]                               |         
    0x00024fae ldr r3, [pc, 0x14c]                               |         r3 = *(0x250fe);
    0x00024fb0 add r2, pc                                        |         r2 = 0x4a0b4;
    0x00024fb2 ldr r3, [r2, r3]                                  |         r3 = *(0x4a0b4);
    0x00024fb4 ldr r2, [r3]                                      |         r2 = *(0x4a0b4);
    0x00024fb6 ldr r3, [sp, 0x84]                                |         r3 = var_84h;
    0x00024fb8 eors r2, r3                                       |         r2 ^= r3;
    0x00024fba mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00024fbe bne 0x250a8                                       |             goto label_37;
                                                                 |         }
                                                                 | label_14:
    0x00024fc0 ldrd r0, r1, [sp, 0x68]                           |         __asm ("ldrd r0, r1, [var_68h]");
    0x00024fc4 add sp, 0x8c                                      |         
    0x00024fc6 vpop {d8}                                         |         __asm ("vpop {d8}");
    0x00024fca pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |         
    0x00024fce b.w 0xe12c                                        |         void (*0xe12c)() ();
    0x00024fd2 ldr r3, [sp, 0x1c]                                |         r3 = var_1ch;
    0x00024fd4 ldr r2, [sp, 0x48]                                |         r2 = var_48h;
    0x00024fd6 ldrb.w r3, [r3, 0x28]                             |         r3 = *((r3 + 0x28));
    0x00024fda cmp r2, 0                                         |         
    0x00024fdc clz r3, r3                                        |         r3 &= r3;
    0x00024fe0 lsr.w r3, r3, 5                                   |         r3 >>= 5;
    0x00024fe4 it eq                                             |         
                                                                 |         if (r2 != 0) {
    0x00024fe6 moveq r3, 0                                       |             r3 = 0;
                                                                 |         }
    0x00024fe8 cmp r3, 0                                         |         
    0x00024fea beq 0x24f78                                       |         
                                                                 |     }
    0x00024fec ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x00024fee add r3, sp, 0x78                                  |     r3 += var_78h;
    0x00024ff0 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00024ff2 ldr r1, [sp, 0x70]                                |     r1 = var_70h;
    0x00024ff4 ldr r3, [r2, 0x18]                                |     r3 = *((r2 + 0x18));
    0x00024ff6 ldr r4, [sp, 0x1c]                                |     r4 = var_1ch;
    0x00024ff8 add r3, r1                                        |     r3 += r1;
    0x00024ffa ldr r3, [r3, -0x4]                                |     r3 = *((r3 - 0x4));
    0x00024ffe mov r0, r4                                        |     r0 = r4;
    0x00025000 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00025002 ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x00025004 subs r3, 1                                        |     r3--;
    0x00025006 uxth r3, r3                                       |     r3 = (int16_t) r3;
    0x00025008 str r3, [sp]                                      |     *(sp) = r3;
    0x0002500a mov.w r3, 0x200                                   |     r3 = 0x200;
    0x0002500e ldr r1, [r4, 0xc]                                 |     r1 = *((r4 + 0xc));
    0x00025010 bl 0x244e4                                        |     fcn_000244e4 (r0, r1, r2, r3, r4, r5, r6);
    0x00025014 ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
    0x00025016 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00025018 cmp r0, r3                                        |     
    0x0002501a ittt eq                                           |     
                                                                 |     if (r0 != r3) {
    0x0002501c ldreq r2, [sp, 0x1c]                              |         r2 = var_1ch;
                                                                 |     }
                                                                 |     if (r0 != r3) {
    0x0002501e moveq r3, 2                                       |         r3 = 2;
                                                                 |     }
                                                                 |     if (r0 != r3) {
    0x00025020 strbeq r3, [r2, 0x28]                             |         *((r2 + 0x28)) = r3;
                                                                 |     }
    0x00025024 b 0x24f78                                         |     goto label_10;
                                                                 | label_17:
    0x00025026 mov r2, r4                                        |     r2 = r4;
    0x00025028 ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x0002502a movs r1, 0                                        |     r1 = 0;
    0x0002502c blx 0x5fcc                                        |     fcn_00005fcc ();
    0x00025030 ldr r3, [sp, 0x64]                                |     r3 = var_64h;
    0x00025032 ldr r2, [sp, 0x58]                                |     r2 = var_58h;
    0x00025034 ldr.w r3, [r3, 0x1a8]                             |     r3 = *((r3 + 0x1a8));
    0x00025038 cmp r3, 0x2e                                      |     
    0x0002503a it hs                                             |     
                                                                 |     if (r3 < 0x2e) {
    0x0002503c movhs r3, 0x2e                                    |         r3 = 0x2e;
                                                                 |     }
    0x0002503e strh r3, [r2, 0x10]                               |     *((r2 + 0x10)) = r3;
    0x00025040 ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x00025042 cmp r3, 0                                         |     
    0x00025044 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00025046 it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x00025048 movne r3, -1                                      |         r3 = -1;
                                                                 |     }
    0x0002504c strb r3, [r2, 0x16]                               |     *((r2 + 0x16)) = r3;
    0x0002504e b 0x24c54                                         |     goto label_11;
                                                                 | label_34:
    0x00025050 ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x00025052 bic.w r3, r3, r3, asr 31                          |     r3 = BIT_MASK (r3, r3);
    0x00025056 strb.w r3, [r0, 0x24]                             |     *((r0 + 0x24)) = r3;
    0x0002505a ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0002505c ldrd r4, r5, [r3, 8]                              |     __asm ("ldrd r4, r5, [r3, 8]");
    0x00025060 strd r4, r5, [r0, 0x18]                           |     __asm ("strd r4, r5, [r0, 0x18]");
    0x00025064 b 0x24f92                                         |     goto label_12;
                                                                 | label_18:
    0x00025066 ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x00025068 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x0002506a b 0x24f6a                                         |     goto label_13;
                                                                 | label_16:
    0x0002506c ldr r2, [pc, 0x94]                                |     
    0x0002506e ldr r3, [pc, 0x8c]                                |     r3 = *(0x250fe);
    0x00025070 add r2, pc                                        |     r2 = 0x4a178;
    0x00025072 ldr r3, [r2, r3]                                  |     r3 = *(0x4a178);
    0x00025074 ldr r2, [r3]                                      |     r2 = *(0x4a178);
    0x00025076 ldr r3, [sp, 0x84]                                |     r3 = var_84h;
    0x00025078 eors r2, r3                                       |     r2 ^= r3;
    0x0002507a mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x0002507e bne 0x250a8                                       |         goto label_37;
                                                                 |     }
    0x00025080 add sp, 0x8c                                      |     
    0x00025082 vpop {d8}                                         |     __asm ("vpop {d8}");
    0x00025086 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_32:
    0x0002508a ldr r1, [pc, 0x7c]                                |     
    0x0002508c ldr r0, [sp, 0x64]                                |     r0 = var_64h;
    0x0002508e add r1, pc                                        |     r1 = 0x4a19c;
    0x00025090 bl 0x1ca34                                        |     fcn_0001ca34 (r0);
    0x00025094 ldr r2, [pc, 0x74]                                |     
    0x00025096 ldr r3, [pc, 0x64]                                |     r3 = *(0x250fe);
    0x00025098 add r2, pc                                        |     r2 = 0x4a1a8;
    0x0002509a ldr r3, [r2, r3]                                  |     r3 = *(0x4a1a8);
    0x0002509c ldr r2, [r3]                                      |     r2 = *(0x4a1a8);
    0x0002509e ldr r3, [sp, 0x84]                                |     r3 = var_84h;
    0x000250a0 eors r2, r3                                       |     r2 ^= r3;
    0x000250a2 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 == r3) {
    0x000250a6 beq 0x24fc0                                       |         goto label_14;
                                                                 |     }
                                                                 | label_37:
    0x000250a8 blx 0x6498                                        |     fcn_00006498 ();
                                                                 | label_35:
    0x000250ac ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x000250ae movs r3, 2                                        |     r3 = 2;
    0x000250b0 strb.w r3, [r0, 0x28]                             |     *((r0 + 0x28)) = r3;
    0x000250b4 b 0x24f92                                         |     goto label_12;
                                                                 | label_36:
    0x000250b6 ldr r0, [sp, 0x10]                                |     r0 = var_10h;
    0x000250b8 add r2, sp, 0x78                                  |     r2 += var_78h;
    0x000250ba ldr r4, [sp, 0x70]                                |     r4 = var_70h;
    0x000250bc str r2, [sp, 8]                                   |     var_8h = r2;
    0x000250be ldr r2, [r0, 0x18]                                |     r2 = *((r0 + 0x18));
    0x000250c0 ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x000250c2 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x000250c6 add r2, r4                                        |     r2 += r4;
    0x000250c8 ldr r4, [sp, 0x1c]                                |     r4 = var_1ch;
    0x000250ca ldr r2, [r2, -0x4]                                |     r2 = *((r2 - 0x4));
    0x000250ce subs r3, 1                                        |     r3--;
    0x000250d0 uxth r3, r3                                       |     r3 = (int16_t) r3;
    0x000250d2 vstr d16, [sp, 0x78]                              |     __asm ("vstr d16, [sp, 0x78]");
    0x000250d6 strd r3, r2, [sp]                                 |     __asm ("strd r3, r2, [sp]");
    0x000250da movs r3, 0                                        |     r3 = 0;
    0x000250dc mov r2, r0                                        |     r2 = r0;
    0x000250de mov r0, r4                                        |     r0 = r4;
    0x000250e0 bl 0x244e4                                        |     fcn_000244e4 (r0, r1, r2, r3, r4, r5, r6);
    0x000250e4 ldr r3, [r4, 8]                                   |     r3 = *((r4 + 8));
    0x000250e6 ldr r3, [r3]                                      |     r3 = *(r3);
    0x000250e8 subs r3, r3, r0                                   |     r3 -= r0;
    0x000250ea clz r3, r3                                        |     r3 &= r3;
    0x000250ee lsrs r3, r3, 5                                    |     r3 >>= 5;
    0x000250f0 strb.w r3, [r4, 0x25]                             |     *((r4 + 0x25)) = r3;
    0x000250f4 b 0x24fa4                                         |     goto label_15;
                                                                 | }
    ; assembly                               | /* r2dec pseudo code output */
                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x25110 */
                                             | #include <stdint.h>
                                             |  
    ; (fcn) fcn.00025110 ()                  | void fcn_00025110 (int16_t arg1, int16_t arg2, int16_t arg3) {
                                             |     r0 = arg1;
                                             |     r1 = arg2;
                                             |     r2 = arg3;
    0x00025110 push {r4, r5, r6, lr}         |     
    0x00025112 mov r5, r1                    |     r5 = r1;
    0x00025114 ldr r1, [r1, 0x34]            |     r1 = *((r1 + 0x34));
    0x00025116 mov r6, r0                    |     r6 = r0;
    0x00025118 mov r4, r2                    |     r4 = r2;
                                             |     if (r1 == 0) {
    0x0002511a cbz r1, 0x25124               |         goto label_0;
                                             |     }
    0x0002511c bl 0x25110                    |     r0 = fcn_00025110 (r0, r1, r2);
    0x00025120 cbz r0, 0x25124               |     
                                             |     while (r4 >= r2) {
    0x00025122 pop {r4, r5, r6, pc}          |         
                                             | label_0:
    0x00025124 ldr r3, [r5]                  |         r3 = *(r5);
    0x00025126 ldr r2, [r3]                  |         r2 = *(r3);
    0x00025128 cmp r4, r2                    |         
    0x0002512a it ge                         |         
                                             |         if (r4 < r2) {
    0x0002512c movge r0, 0                   |             r0 = 0;
                                             |         }
    0x0002512e bge 0x25122                   |         
                                             |     }
    0x00025130 ldr r3, [r3, 4]               |     r3 = *((r3 + 4));
    0x00025132 add.w r4, r4, r4, lsl 2       |     r4 += (r4 << 2);
    0x00025136 mov r0, r6                    |     r0 = r6;
    0x00025138 ldr.w r1, [r3, r4, lsl 2]     |     offset_0 = r4 << 2;
                                             |     r1 = *((r3 + offset_0));
    0x0002513c pop.w {r4, r5, r6, lr}        |     
    0x00025140 b.w 0x22e78                   |     return void (*0x22e78)() ();
                                             | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x25144 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00025144 ()                                      | void fcn_00025144 (int16_t arg_0h, 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_14h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x00025144 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00025148 sub sp, 0x2c                                      |     
    0x0002514a ldr.w sl, [r1, 0x30]                              |     sl = *((r1 + 0x30));
    0x0002514e mov fp, r0                                        |     
    0x00025150 ldr r2, [pc, 0x14c]                               |     
    0x00025152 ldr.w r5, [sl]                                    |     r5 = *(sl);
    0x00025156 ldr r6, [r0]                                      |     r6 = *(r0);
    0x00025158 ldr r3, [pc, 0x148]                               |     r3 = *(0x252a4);
    0x0002515a add r2, pc                                        |     r2 = 0x4a3fe;
    0x0002515c str r1, [sp, 0xc]                                 |     var_ch = r1;
    0x0002515e add.w r4, r5, r5, lsl 2                           |     r4 = r5 + (r5 << 2);
    0x00025162 str r6, [sp, 0x10]                                |     var_10h = r6;
    0x00025164 ldr r3, [r2, r3]                                  |     
    0x00025166 adds r4, 0x22                                     |     r4 += 0x22;
    0x00025168 mov r0, r4                                        |     r0 = r4;
    0x0002516a ldr r3, [r3]                                      |     r3 = *(0x4a3fe);
    0x0002516c str r3, [sp, 0x24]                                |     var_24h = r3;
    0x0002516e mov.w r3, 0                                       |     r3 = 0;
    0x00025172 str r5, [sp, 4]                                   |     var_4h = r5;
    0x00025174 bl 0xd300                                         |     r0 = fcn_0000d300 (r0, r1, r2, r3, r4);
    0x00025178 mov sb, r0                                        |     sb = r0;
    0x0002517a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0002517c beq 0x25270                                       |         goto label_2;
                                                                 |     }
    0x0002517e mov r2, r4                                        |     r2 = r4;
    0x00025180 movs r1, 0                                        |     r1 = 0;
    0x00025182 blx 0x5fcc                                        |     fcn_00005fcc ();
    0x00025186 ldr r3, [r6, 0x10]                                |     r3 = *((r6 + 0x10));
    0x00025188 cmp r5, 0                                         |     
    0x0002518a ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
    0x0002518c add.w r3, r5, 7                                   |     r3 = r5 + 7;
    0x00025190 add.w r3, sb, r3, lsl 2                           |     r3 = sb + (r3 << 2);
    0x00025194 str.w r3, [sb, 0x10]                              |     __asm ("str.w r3, [sb, 0x10]");
    0x00025198 mov.w r3, 1                                       |     r3 = 1;
    0x0002519c add.w r1, r5, r3                                  |     r1 = r5 + r3;
    0x000251a0 strh.w r3, [sb, 8]                                |     *((sb + 8)) = r3;
    0x000251a4 strh.w r1, [sb, 6]                                |     *((sb + 6)) = r1;
    0x000251a8 ldrb.w r2, [r2, 0x4d]                             |     r2 = *((r2 + 0x4d));
    0x000251ac str.w r3, [sb]                                    |     __asm ("str.w r3, [sb]");
    0x000251b0 str.w r6, [sb, 0xc]                               |     __asm ("str.w r6, [sb, 0xc]");
    0x000251b4 strb.w r2, [sb, 4]                                |     *((sb + 4)) = r2;
                                                                 |     if (r5 <= 0) {
    0x000251b8 ble 0x25278                                       |         goto label_3;
                                                                 |     }
    0x000251ba add.w r3, sb, 0x10                                |     r3 = sb + 0x10;
    0x000251be movs r4, 0                                        |     r4 = 0;
    0x000251c0 str r3, [sp]                                      |     *(sp) = r3;
    0x000251c2 add r3, sp, 0x1c                                  |     r3 += var_1ch;
    0x000251c4 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x000251c6 b 0x251f0                                         |     
                                                                 |     while (r2 < r2) {
    0x000251c8 mov r1, r7                                        |         r1 = r7;
    0x000251ca mov r0, fp                                        |         r0 = fp;
    0x000251cc bl 0x22e78                                        |         fcn_00022e78 (r0, r1);
    0x000251d0 ldr.w r3, [sl, 4]                                 |         r3 = *((sl + 4));
    0x000251d4 mov r5, r0                                        |         r5 = r0;
    0x000251d6 add r3, r8                                        |         r3 += r8;
                                                                 | label_0:
    0x000251d8 ldr r2, [sp]                                      |         r2 = *(sp);
    0x000251da str r5, [r2, 4]!                                  |         *((r2 += 4)) = r5;
    0x000251de ldrb r3, [r3, 0xc]                                |         r3 = *((r3 + 0xc));
    0x000251e0 str r2, [sp]                                      |         *(sp) = r2;
    0x000251e2 ldr.w r2, [sb, 0x10]                              |         r2 = *((sb + 0x10));
    0x000251e6 strb r3, [r2, r4]                                 |         *((r2 + r4)) = r3;
    0x000251e8 adds r4, 1                                        |         r4++;
    0x000251ea ldr r3, [sp, 4]                                   |         r3 = var_4h;
    0x000251ec cmp r3, r4                                        |         
                                                                 |         if (r3 == r4) {
    0x000251ee beq 0x25278                                       |             goto label_3;
                                                                 |         }
    0x000251f0 ldr.w r3, [sl, 4]                                 |         r3 = *((sl + 4));
    0x000251f4 add.w r6, r4, r4, lsl 2                           |         r6 = r4 + (r4 << 2);
    0x000251f8 lsl.w r8, r6, 2                                   |         r8 = r6 << 2;
    0x000251fc ldr.w r7, [r3, r6, lsl 2]                         |         offset_0 = r6 << 2;
                                                                 |         r7 = *((r3 + offset_0));
    0x00025200 add r3, r8                                        |         r3 += r8;
    0x00025202 ldr r2, [r7, 4]                                   |         r2 = *((r7 + 4));
    0x00025204 lsls r2, r2, 0x17                                 |         r2 <<= 0x17;
    0x00025206 bmi 0x251c8                                       |         
                                                                 |     }
    0x00025208 ldrh r2, [r3, 0x10]                               |     r2 = *((r3 + 0x10));
    0x0002520a mov r0, fp                                        |     r0 = fp;
    0x0002520c ldr r1, [sp, 0xc]                                 |     r1 = var_ch;
    0x0002520e subs r2, 1                                        |     r2--;
    0x00025210 bl 0x25110                                        |     r0 = fcn_00025110 (r0, r1, r2);
    0x00025214 mov r5, r0                                        |     r5 = r0;
    0x00025216 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00025218 beq 0x25294                                       |         goto label_4;
                                                                 |     }
                                                                 | label_1:
    0x0002521a ldr r0, [r5]                                      |     r0 = *(r5);
    0x0002521c ldr.w r3, [sl, 4]                                 |     r3 = *((sl + 4));
    0x00025220 str r0, [sp, 0x1c]                                |     var_1ch = r0;
    0x00025222 add.w r1, r3, r8                                  |     r1 = r3 + r8;
    0x00025226 str r3, [sp, 8]                                   |     var_8h = r3;
                                                                 |     if (r0 == 0) {
    0x00025228 cbz r0, 0x25242                                   |         goto label_5;
                                                                 |     }
    0x0002522a ldrb r3, [r0]                                     |     r3 = *(r0);
                                                                 |     if (r3 == 0) {
    0x0002522c cbz r3, 0x25242                                   |         goto label_5;
                                                                 |     }
    0x0002522e mov r3, r0                                        |     r3 = r0;
                                                                 |     do {
    0x00025230 ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x00025234 cmp r2, 0                                         |         
    0x00025236 bne 0x25230                                       |         
                                                                 |     } while (r2 != 0);
    0x00025238 subs r3, r3, r0                                   |     r3 -= r0;
    0x0002523a bic r3, r3, 0xc0000000                            |     r3 = BIT_MASK (r3, 0xc0000000);
    0x0002523e str r3, [sp, 0x20]                                |     var_20h = r3;
                                                                 |     if (r3 != 0) {
    0x00025240 cbnz r3, 0x2524c                                  |         goto label_6;
                                                                 |     }
                                                                 | label_5:
    0x00025242 mov r3, r1                                        |     r3 = r1;
                                                                 |     do {
    0x00025244 ldr r2, [sp, 8]                                   |         r2 = var_8h;
    0x00025246 str.w r7, [r2, r6, lsl 2]                         |         __asm ("str.w r7, [r2, r6, lsl 2]");
    0x0002524a b 0x251d8                                         |         goto label_0;
                                                                 | label_6:
    0x0002524c ldr.w r0, [fp]                                    |         r0 = *(fp);
    0x00025250 movs r3, 1                                        |         r3 = 1;
    0x00025252 ldr r2, [sp, 0x14]                                |         r2 = var_14h;
    0x00025254 movs r1, 0x5f                                     |         r1 = 0x5f;
    0x00025256 bl 0xd7ac                                         |         r0 = fcn_0000d7ac (r0, r1, r2, r3);
                                                                 |         if (r0 != 0) {
    0x0002525a cbz r0, 0x25268                                   |             
    0x0002525c ldr r3, [r0, 4]                                   |             r3 = *((r0 + 4));
    0x0002525e str r7, [r0, 0xc]                                 |             *((r0 + 0xc)) = r7;
    0x00025260 mov r7, r0                                        |             r7 = r0;
    0x00025262 orr r3, r3, 0x1100                                |             r3 |= 0x1100;
    0x00025266 str r3, [r0, 4]                                   |             *((r0 + 4)) = r3;
                                                                 |         }
    0x00025268 ldr.w r3, [sl, 4]                                 |         r3 = *((sl + 4));
    0x0002526c add r3, r8                                        |         r3 += r8;
    0x0002526e b 0x25244                                         |         
                                                                 |     } while (1);
                                                                 | label_2:
    0x00025270 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x00025272 movs r3, 1                                        |     r3 = 1;
    0x00025274 strb.w r3, [r2, 0x40]                             |     *((r2 + 0x40)) = r3;
                                                                 | label_3:
    0x00025278 ldr r2, [pc, 0x2c]                                |     
    0x0002527a ldr r3, [pc, 0x28]                                |     r3 = *(0x252a6);
    0x0002527c add r2, pc                                        |     r2 = 0x4a528;
    0x0002527e ldr r3, [r2, r3]                                  |     r3 = *(0x4a528);
    0x00025280 ldr r2, [r3]                                      |     r2 = *(0x4a528);
    0x00025282 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00025284 eors r2, r3                                       |     r2 ^= r3;
    0x00025286 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 == r3) {
    0x0002528a bne 0x2529a                                       |         
    0x0002528c mov r0, sb                                        |         r0 = sb;
    0x0002528e add sp, 0x2c                                      |         
    0x00025290 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_4:
    0x00025294 ldr r3, [sp, 0x10]                                |         r3 = var_10h;
    0x00025296 ldr r5, [r3, 8]                                   |         r5 = *((r3 + 8));
    0x00025298 b 0x2521a                                         |         goto label_1;
                                                                 |     }
    0x0002529a blx 0x6498                                        |     fcn_00006498 ();
    0x0002529e nop                                               |     
    0x000252a0 cmp r2, 0xfe                                      |     
    0x000252a2 movs r5, r0                                       |     r5 = r0;
    0x000252a4 lsls r0, r1, 0xe                                  |     r0 = r1 << 0xe;
    0x000252a6 movs r0, r0                                       |     
    0x000252a8 cmp r1, 0xdc                                      |     
    0x000252aa movs r5, r0                                       |     r5 = r0;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x25dd0 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00025dd0 ()                                      | void fcn_00025dd0 (int16_t arg_40h, int16_t arg1, uint32_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00025dd0 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x00025dd4 mov r8, r2                                        |     r8 = r2;
    0x00025dd6 ldr r2, [pc, 0x2a8]                               |     
    0x00025dd8 mov r7, r3                                        |     r7 = r3;
    0x00025dda sub sp, 0x1c                                      |     
    0x00025ddc mov sl, r1                                        |     sl = r1;
    0x00025dde ldr r3, [pc, 0x2a4]                               |     r3 = *(0x26086);
    0x00025de0 add r2, pc                                        |     r2 = 0x4be66;
    0x00025de2 ldr.w sb, [sp, 0x40]                              |     sb = *(arg_40h);
    0x00025de6 ldr r3, [r2, r3]                                  |     
    0x00025de8 ldr r3, [r3]                                      |     r3 = *(0x4be66);
    0x00025dea str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00025dec mov.w r3, 0                                       |     r3 = 0;
    0x00025df0 movs r3, 0                                        |     r3 = 0;
    0x00025df2 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00025df4 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00025df6 beq.w 0x2600c                                     |         goto label_7;
                                                                 |     }
    0x00025dfa ldrb r5, [r1]                                     |     r5 = *(r1);
    0x00025dfc mov r6, r0                                        |     r6 = r0;
    0x00025dfe cmp r5, 0x9f                                      |     
    0x00025e00 it eq                                             |     
                                                                 |     if (r5 != 0x9f) {
    0x00025e02 ldrbeq r5, [r1, 0x26]                             |         r5 = *((r1 + 0x26));
                                                                 |     }
    0x00025e06 cmp r5, 0x9d                                      |     
                                                                 |     if (r5 == 0x9d) {
    0x00025e08 beq.w 0x25f60                                     |         goto label_8;
                                                                 |     }
    0x00025e0c cmp r5, 0x61                                      |     
                                                                 |     if (r5 == 0x61) {
    0x00025e0e bne 0x25eae                                       |         
    0x00025e10 ldr.w fp, [pc, 0x274]                             |         
    0x00025e14 movs r3, 1                                        |         r3 = 1;
    0x00025e16 str r3, [sp, 0xc]                                 |         var_ch = r3;
    0x00025e18 add fp, pc                                        |         fp = 0x4bea4;
                                                                 | label_2:
    0x00025e1a movs r1, 0x28                                     |         r1 = 0x28;
    0x00025e1c mov r0, r6                                        |         r0 = r6;
    0x00025e1e bl 0xdb58                                         |         r0 = fcn_0000db58 (r0, r1);
    0x00025e22 mov r4, r0                                        |         r4 = r0;
    0x00025e24 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00025e26 beq.w 0x25f2c                                     |             goto label_9;
                                                                 |         }
    0x00025e2a ldrd r2, r3, [sl, 4]                              |         __asm ("ldrd r2, r3, [sl, 4]");
    0x00025e2e mov.w sl, 1                                       |         sl = 1;
    0x00025e32 str r6, [r0]                                      |         *(r0) = r6;
    0x00025e34 str r0, [sp, 0x10]                                |         var_10h = r0;
    0x00025e36 lsls r2, r2, 0x15                                 |         r2 <<= 0x15;
    0x00025e38 strh.w sl, [r0, 0x1c]                             |         *((r0 + 0x1c)) = sl;
                                                                 |         if (r2 < r2) {
    0x00025e3c bmi.w 0x25fc4                                     |             goto label_10;
                                                                 |         }
    0x00025e40 ldr r1, [pc, 0x248]                               |         
    0x00025e42 mov r2, fp                                        |         r2 = fp;
    0x00025e44 mov r0, r6                                        |         r0 = r6;
    0x00025e46 add r1, pc                                        |         r1 = 0x4bed6;
    0x00025e48 bl 0x1babc                                        |         r0 = fcn_0001babc (r0);
    0x00025e4c cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00025e4e beq.w 0x26014                                     |             goto label_11;
                                                                 |         }
    0x00025e52 ldr r2, [pc, 0x23c]                               |         
    0x00025e54 mov r1, r0                                        |         r1 = r0;
    0x00025e56 mov r3, sl                                        |         r3 = sl;
    0x00025e58 mov r0, r4                                        |         r0 = r4;
    0x00025e5a add r2, pc                                        |         r2 = 0x4bef0;
    0x00025e5c str r2, [sp]                                      |         *(sp) = r2;
    0x00025e5e mov.w r2, -1                                      |         r2 = -1;
    0x00025e62 bl 0x17978                                        |         fcn_00017978 (r0, r1, r2, r3, r4);
                                                                 | label_1:
    0x00025e66 subs r5, 0x84                                     |         r5 -= 0x84;
    0x00025e68 movs r2, 1                                        |         r2 = 1;
    0x00025e6a cmp r5, 1                                         |         
    0x00025e6c it ls                                             |         
                                                                 |         if (r5 <= 1) {
    0x00025e6e cmpls r7, 0x62                                    |             __asm ("cmpls r7, 0x62");
                                                                 |         }
    0x00025e70 mov r0, r4                                        |         r0 = r4;
    0x00025e72 ite eq                                            |         
                                                                 |         if (r5 != 1) {
    0x00025e74 moveq r1, 0x63                                    |             r1 = 0x63;
                                                                 |         }
                                                                 |         if (r5 == 1) {
    0x00025e76 movne r1, r7                                      |             r1 = r7;
                                                                 |         }
    0x00025e78 bl 0x25cf0                                        |         fcn_00025cf0 (r0, r1, r2);
    0x00025e7c ldrh r3, [r4, 0x1c]                               |         r3 = *((r4 + 0x1c));
    0x00025e7e tst.w r3, 0xc                                     |         
    0x00025e82 itt ne                                            |         
                                                                 |         if ((r3 & 0xc) != 0) {
    0x00025e84 bicne r3, r3, 2                                   |             __asm ("bicne r3, r3, 2");
                                                                 |         }
                                                                 |         if ((r3 & 0xc) != 0) {
    0x00025e88 strh r3, [r4, 0x1c]                               |             *((r4 + 0x1c)) = r3;
                                                                 |         }
    0x00025e8a cmp.w r8, 1                                       |         
                                                                 |         if (r8 == 1) {
    0x00025e8e beq.w 0x26008                                     |             goto label_12;
                                                                 |         }
    0x00025e92 ldrh r5, [r4, 0x1c]                               |         r5 = *((r4 + 0x1c));
    0x00025e94 ands r5, r5, 2                                    |         r5 &= 2;
                                                                 |         if (r5 == r5) {
    0x00025e98 beq 0x25f5a                                       |             goto label_0;
                                                                 |         }
    0x00025e9a ldrb r3, [r4, 0x1e]                               |         r3 = *((r4 + 0x1e));
    0x00025e9c cmp r3, r8                                        |         
                                                                 |         if (r3 == r8) {
    0x00025e9e beq.w 0x26008                                     |             goto label_12;
                                                                 |         }
    0x00025ea2 mov r1, r8                                        |         r1 = r8;
    0x00025ea4 mov r0, r4                                        |         r0 = r4;
    0x00025ea6 bl 0x17460                                        |         r0 = fcn_00017460 (r0, r1);
    0x00025eaa mov r5, r0                                        |         r5 = r0;
    0x00025eac b 0x25f5a                                         |         goto label_0;
                                                                 |     }
    0x00025eae sub.w r3, r5, 0x84                                |     r3 = r5 - 0x84;
    0x00025eb2 cmp r3, 1                                         |     
                                                                 |     if (r3 < 1) {
    0x00025eb4 bls.w 0x2606a                                     |         goto label_13;
                                                                 |     }
    0x00025eb8 cmp r5, 0x84                                      |     
                                                                 |     if (r5 <= 0x84) {
    0x00025eba ble 0x25f1c                                       |         goto label_14;
                                                                 |     }
    0x00025ebc cmp r5, 0x86                                      |     
                                                                 |     if (r5 != 0x86) {
    0x00025ebe bne 0x25f52                                       |         goto label_15;
                                                                 |     }
    0x00025ec0 movs r1, 0x28                                     |     r1 = 0x28;
    0x00025ec2 bl 0xd3a0                                         |     r0 = fcn_0000d3a0 (r0, r1);
    0x00025ec6 mov r4, r0                                        |     r4 = r0;
                                                                 |     if (r0 == 0) {
    0x00025ec8 cbz r0, 0x25f2c                                   |         goto label_9;
                                                                 |     }
    0x00025eca movs r2, 0x24                                     |     r2 = 0x24;
    0x00025ecc movs r1, 0                                        |     r1 = 0;
    0x00025ece adds r0, 4                                        |     r0 += 4;
    0x00025ed0 blx 0x5fcc                                        |     fcn_00005fcc ();
    0x00025ed4 ldr.w r3, [sl, 8]                                 |     r3 = *((sl + 8));
    0x00025ed8 movs r2, 1                                        |     r2 = 1;
    0x00025eda str r6, [r4]                                      |     *(r4) = r6;
    0x00025edc strh r2, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r2;
    0x00025ede ldrb r5, [r3, 2]                                  |     r5 = *((r3 + 2));
    0x00025ee0 adds r1, r3, 2                                    |     r1 = r3 + 2;
    0x00025ee2 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00025ee4 beq.w 0x26060                                     |         goto label_16;
                                                                 |     }
    0x00025ee8 mov r3, r1                                        |     r3 = r1;
                                                                 |     do {
    0x00025eea ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x00025eee cmp r2, 0                                         |         
    0x00025ef0 bne 0x25eea                                       |         
                                                                 |     } while (r2 != 0);
    0x00025ef2 subs r2, r3, r1                                   |     r2 = r3 - r1;
    0x00025ef4 bic r2, r2, 0xc0000000                            |     r2 = BIT_MASK (r2, 0xc0000000);
    0x00025ef8 subs r2, 1                                        |     r2--;
    0x00025efa add.w r5, r2, r2, lsr 31                          |     r5 = r2 + (r2 >> 31);
    0x00025efe asrs r5, r5, 1                                    |     r5 >>= 1;
                                                                 | label_6:
    0x00025f00 mov r0, r6                                        |     r0 = r6;
    0x00025f02 bl 0xd4ac                                         |     fcn_0000d4ac (r0, r1, r2);
    0x00025f06 ldr r3, [pc, 0x18c]                               |     
    0x00025f08 mov r1, r0                                        |     r1 = r0;
    0x00025f0a mov r2, r5                                        |     r2 = r5;
    0x00025f0c mov r0, r4                                        |     r0 = r4;
    0x00025f0e movs r5, 0                                        |     r5 = 0;
    0x00025f10 add r3, pc                                        |     r3 = 0x4bfaa;
    0x00025f12 str r3, [sp]                                      |     *(sp) = r3;
    0x00025f14 movs r3, 0                                        |     r3 = 0;
    0x00025f16 bl 0x17978                                        |     fcn_00017978 (r0, r1, r2, r3, r4);
    0x00025f1a b 0x25f5a                                         |     goto label_0;
                                                                 | label_14:
    0x00025f1c cmp r5, 0x65                                      |     
                                                                 |     if (r5 != 0x65) {
    0x00025f1e bne 0x25f56                                       |         goto label_17;
                                                                 |     }
    0x00025f20 movs r1, 0x28                                     |     r1 = 0x28;
    0x00025f22 bl 0xd3a0                                         |     r0 = fcn_0000d3a0 (r0, r1);
    0x00025f26 mov r4, r0                                        |     r4 = r0;
    0x00025f28 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00025f2a bne 0x25ff4                                       |         goto label_18;
                                                                 |     }
                                                                 | label_9:
    0x00025f2c movs r5, 7                                        |     r5 = 7;
    0x00025f2e movs r3, 1                                        |     r3 = 1;
    0x00025f30 strb.w r3, [r6, 0x40]                             |     *((r6 + 0x40)) = r3;
                                                                 |     do {
                                                                 | label_3:
    0x00025f34 ldr r2, [pc, 0x160]                               |         
    0x00025f36 ldr r3, [pc, 0x14c]                               |         r3 = *(0x26086);
    0x00025f38 add r2, pc                                        |         r2 = 0x4bfd4;
    0x00025f3a ldr r3, [r2, r3]                                  |         r3 = *(0x4bfd4);
    0x00025f3c ldr r2, [r3]                                      |         r2 = *(0x4bfd4);
    0x00025f3e ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x00025f40 eors r2, r3                                       |         r2 ^= r3;
    0x00025f42 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00025f46 bne.w 0x26066                                     |             goto label_19;
                                                                 |         }
    0x00025f4a mov r0, r5                                        |         r0 = r5;
    0x00025f4c add sp, 0x1c                                      |         
    0x00025f4e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_15:
    0x00025f52 cmp r5, 0x9d                                      |         
                                                                 |         if (r5 == 0x9d) {
    0x00025f54 beq 0x26040                                       |             goto label_20;
                                                                 |         }
                                                                 | label_17:
    0x00025f56 movs r4, 0                                        |         r4 = 0;
    0x00025f58 mov r5, r4                                        |         r5 = r4;
                                                                 | label_0:
    0x00025f5a str.w r4, [sb]                                    |         __asm ("str.w r4, [sb]");
    0x00025f5e b 0x25f34                                         |         
                                                                 |     } while (1);
                                                                 | label_8:
    0x00025f60 ldr.w sl, [r1, 0xc]                               |     sl = *((r1 + 0xc));
    0x00025f64 ldrb.w r5, [sl]                                   |     r5 = *(sl);
    0x00025f68 add.w r3, r5, 0x7c                                |     r3 = r5 + 0x7c;
    0x00025f6c uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x00025f6e cmp r3, 1                                         |     
                                                                 |     if (r3 < 1) {
    0x00025f70 bls 0x25fe6                                       |         goto label_21;
                                                                 |     }
                                                                 | label_4:
    0x00025f72 add r3, sp, 0x10                                  |     r3 += var_10h;
    0x00025f74 mov r1, sl                                        |     r1 = sl;
    0x00025f76 str r3, [sp]                                      |     *(sp) = r3;
    0x00025f78 mov r0, r6                                        |     r0 = r6;
    0x00025f7a mov r3, r7                                        |     r3 = r7;
    0x00025f7c mov r2, r8                                        |     r2 = r8;
    0x00025f7e bl 0x25dd0                                        |     fcn_00025dd0 (r0, r1, r2, r3, r4);
    0x00025f82 ldr r4, [sp, 0x10]                                |     r4 = var_10h;
    0x00025f84 mov r5, r0                                        |     r5 = r0;
    0x00025f86 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00025f88 bne 0x26008                                       |         goto label_12;
                                                                 |     }
    0x00025f8a cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00025f8c beq 0x25f5a                                       |         goto label_0;
                                                                 |     }
    0x00025f8e mov r0, r4                                        |     r0 = r4;
    0x00025f90 bl 0xbb20                                         |     fcn_0000bb20 (r0);
    0x00025f94 ldrd r3, r2, [r4, 0x10]                           |     __asm ("ldrd r3, r2, [r4, 0x10]");
    0x00025f98 cmp.w r2, -0x80000000                             |     
    0x00025f9c it eq                                             |     
                                                                 |     if (r2 == -0x80000000) {
    0x00025f9e cmpeq r3, r5                                      |         __asm ("cmpeq r3, r5");
                                                                 |     }
                                                                 |     if (r2 == -0x80000000) {
    0x00025fa0 beq 0x2604e                                       |         goto label_22;
                                                                 |     }
    0x00025fa2 vldr d16, [r4, 8]                                 |     __asm ("vldr d16, [r4, 8]");
    0x00025fa6 rsbs r3, r3, 0                                    |     r3 -= ;
    0x00025fa8 sbc.w r2, r2, r2, lsl 1                           |     __asm ("sbc.w r2, r2, r2, lsl 1");
    0x00025fac str r3, [r4, 0x10]                                |     *((r4 + 0x10)) = r3;
    0x00025fae str r2, [r4, 0x14]                                |     *((r4 + 0x14)) = r2;
    0x00025fb0 vneg.f64 d16, d16                                 |     __asm ("vneg.f64 d16, d16");
                                                                 | label_5:
    0x00025fb4 mov r2, r8                                        |     r2 = r8;
    0x00025fb6 mov r1, r7                                        |     r1 = r7;
    0x00025fb8 mov r0, r4                                        |     r0 = r4;
    0x00025fba vstr d16, [r4, 8]                                 |     __asm ("vstr d16, [r4, 8]");
    0x00025fbe bl 0x25cf0                                        |     fcn_00025cf0 (r0, r1, r2);
    0x00025fc2 b 0x25f5a                                         |     goto label_0;
                                                                 | label_10:
    0x00025fc4 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x00025fc6 ldr r1, [r0, 0x24]                                |     r1 = *((r0 + 0x24));
    0x00025fc8 smull sl, fp, r3, r2                              |     sl:fp = r3 * r2;
                                                                 |     if (r1 != 0) {
    0x00025fcc cbz r1, 0x25fd8                                   |         
    0x00025fce mov r0, r6                                        |         r0 = r6;
    0x00025fd0 bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
    0x00025fd4 movs r3, 0                                        |         r3 = 0;
    0x00025fd6 str r3, [r4, 0x24]                                |         *((r4 + 0x24)) = r3;
                                                                 |     }
    0x00025fd8 movs r3, 0                                        |     r3 = 0;
    0x00025fda strd sl, fp, [r4, 0x10]                           |     __asm ("strd sl, fp, [r4, 0x10]");
    0x00025fde str r3, [r4, 4]                                   |     *((r4 + 4)) = r3;
    0x00025fe0 movs r3, 4                                        |     r3 = 4;
    0x00025fe2 strh r3, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r3;
    0x00025fe4 b 0x25e66                                         |     goto label_1;
                                                                 | label_21:
    0x00025fe6 ldr.w fp, [pc, 0xb4]                              |     
    0x00025fea mov.w r3, -1                                      |     r3 = -1;
    0x00025fee str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00025ff0 add fp, pc                                        |     fp = 0x4c092;
    0x00025ff2 b 0x25e1a                                         |     goto label_2;
                                                                 | label_18:
    0x00025ff4 movs r2, 0x24                                     |     r2 = 0x24;
    0x00025ff6 movs r1, 0                                        |     r1 = 0;
    0x00025ff8 adds r0, 4                                        |     r0 += 4;
    0x00025ffa movs r5, 0                                        |     r5 = 0;
    0x00025ffc blx 0x5fcc                                        |     fcn_00005fcc ();
    0x00026000 movs r3, 1                                        |     r3 = 1;
    0x00026002 str r6, [r4]                                      |     *(r4) = r6;
    0x00026004 strh r3, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r3;
    0x00026006 b 0x25f5a                                         |     goto label_0;
                                                                 | label_12:
    0x00026008 movs r5, 0                                        |     r5 = 0;
    0x0002600a b 0x25f5a                                         |     goto label_0;
                                                                 | label_7:
    0x0002600c mov r5, r1                                        |     r5 = r1;
    0x0002600e str.w r1, [sb]                                    |     __asm ("str.w r1, [sb]");
    0x00026012 b 0x25f34                                         |     goto label_3;
                                                                 | label_11:
    0x00026014 strb.w sl, [r6, 0x40]                             |     *((r6 + 0x40)) = sl;
    0x00026018 movw r2, 0x2460                                   |     r2 = 0x2460;
    0x0002601c ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0002601e tst r2, r3                                        |     
    0x00026020 bne 0x26046                                       |     
                                                                 |     while (1) {
    0x00026022 ldr r1, [r4, 0x24]                                |         r1 = *((r4 + 0x24));
                                                                 |         if (r1 != 0) {
    0x00026024 cbz r1, 0x26030                                   |             
    0x00026026 ldr r0, [r4]                                      |             r0 = *(r4);
    0x00026028 bl 0xe12c                                         |             fcn_0000e12c (r0, r1);
    0x0002602c movs r3, 0                                        |             r3 = 0;
    0x0002602e str r3, [r4, 0x24]                                |             *((r4 + 0x24)) = r3;
                                                                 |         }
    0x00026030 movs r3, 0                                        |         r3 = 0;
    0x00026032 ldr r0, [r4]                                      |         r0 = *(r4);
    0x00026034 mov r1, r4                                        |         r1 = r4;
    0x00026036 str r3, [r4, 4]                                   |         *((r4 + 4)) = r3;
    0x00026038 movs r5, 7                                        |         r5 = 7;
    0x0002603a bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
    0x0002603e b 0x25f34                                         |         goto label_3;
                                                                 | label_20:
    0x00026040 ldr.w sl, [r1, 0xc]                               |         sl = *((r1 + 0xc));
    0x00026044 b 0x25f72                                         |         goto label_4;
    0x00026046 mov r0, r4                                        |         r0 = r4;
    0x00026048 bl 0xfe84                                         |         fcn_0000fe84 (r0);
    0x0002604c b 0x26022                                         |         
                                                                 |     }
                                                                 | label_22:
    0x0002604e ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x00026050 vldr d16, [pc, 0x24]                              |     __asm ("vldr d16, aav.0x000000ff");
    0x00026054 bic r3, r3, 4                                     |     r3 = BIT_MASK (r3, 4);
    0x00026058 orr r3, r3, 8                                     |     r3 |= 8;
    0x0002605c strh r3, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r3;
    0x0002605e b 0x25fb4                                         |     goto label_5;
                                                                 | label_16:
    0x00026060 mov.w r2, -1                                      |     r2 = -1;
    0x00026064 b 0x25f00                                         |     goto label_6;
                                                                 | label_19:
    0x00026066 blx 0x6498                                        |     fcn_00006498 ();
                                                                 | label_13:
    0x0002606a ldr.w fp, [pc, 0x34]                              |     fp = *(0x000260a0);
    0x0002606e movs r3, 1                                        |     r3 = 1;
    0x00026070 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00026072 add fp, pc                                        |     
    0x00026074 b 0x25e1a                                         |     goto label_2;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x27e30 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00027e30 ()                                      | void fcn_00027e30 (int16_t arg_48h, int16_t arg_4ch, int16_t arg_50h, 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;
                                                                 |     int32_t var_ch;
                                                                 |     int32_t var_ch_2;
                                                                 |     int16_t var_1ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00027e30 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00027e34 sub sp, 0x24                                      |     
    0x00027e36 ldrd r7, r6, [sp, 0x50]                           |     __asm ("ldrd r7, r6, [arg_50h]");
                                                                 |     if (r1 != 0) {
    0x00027e3a cbz r1, 0x27e52                                   |         
    0x00027e3c mov r5, r2                                        |         r5 = r2;
    0x00027e3e mov sb, r0                                        |         sb = r0;
    0x00027e40 ldr r2, [sp, 0x4c]                                |         r2 = *(arg_4ch);
    0x00027e42 cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x00027e44 beq 0x27f32                                       |             goto label_6;
                                                                 |         }
    0x00027e46 orrs.w r2, r6, r7                                 |         r2 = r6 | r7;
                                                                 |         if (r2 != r6) {
    0x00027e4a bne 0x27e52                                       |             goto label_0;
                                                                 |         }
    0x00027e4c adds r2, r5, 1                                    |         r2 = r5 + 1;
    0x00027e4e cmp r2, 0x80                                      |         
                                                                 |         if (r2 < 0x80) {
    0x00027e50 bls 0x27e74                                       |             goto label_1;
                                                                 |         }
                                                                 |     }
                                                                 | label_0:
    0x00027e52 blx 0x5fe8                                        |     fcn_00005fe8 ();
    0x00027e56 ldr r1, [pc, 0x1b4]                               |     
    0x00027e58 movw r2, 0xee24                                   |     
    0x00027e5c add.w r3, r0, 0x14                                |     r3 = r0 + 0x14;
    0x00027e60 movt r2, 1                                        |     r2 = 0x1ee24;
    0x00027e64 movs r0, 0x15                                     |     r0 = 0x15;
    0x00027e66 add r1, pc                                        |     r1 = 0x4fe78;
    0x00027e68 blx 0x6820                                        |     fcn_00006820 ();
    0x00027e6c movs r0, 0x15                                     |     r0 = 0x15;
                                                                 | label_5:
    0x00027e6e add sp, 0x24                                      |     
    0x00027e70 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_1:
    0x00027e74 ldrb r4, [r1]                                     |     r4 = *(r1);
                                                                 |     if (r4 == 0) {
    0x00027e76 cbz r4, 0x27e94                                   |         goto label_7;
                                                                 |     }
    0x00027e78 mov r4, r1                                        |     r4 = r1;
                                                                 |     do {
    0x00027e7a ldrb r2, [r4, 1]!                                 |         r2 = *((r4 += 1));
    0x00027e7e cmp r2, 0                                         |         
    0x00027e80 bne 0x27e7a                                       |         
                                                                 |     } while (r2 != 0);
    0x00027e82 subs r4, r4, r1                                   |     r4 -= r1;
    0x00027e84 bic r2, r4, 0xc0000000                            |     r2 = BIT_MASK (r4, 0xc0000000);
    0x00027e88 bic r4, r4, 0xc0000000                            |     r4 = BIT_MASK (r4, 0xc0000000);
    0x00027e8c bic r2, r2, 0xff                                  |     r2 = BIT_MASK (r2, 0xff);
    0x00027e90 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00027e92 bne 0x27e52                                       |         goto label_0;
                                                                 |     }
                                                                 | label_7:
    0x00027e94 and sl, r3, 7                                     |     sl = r3 & 7;
    0x00027e98 and r8, r3, 0x800                                 |     r8 = r3 & 0x800;
    0x00027e9c cmp.w sl, 4                                       |     
                                                                 |     if (sl == 4) {
    0x00027ea0 beq 0x27f9c                                       |         goto label_8;
                                                                 |     }
    0x00027ea2 cmp.w sl, 5                                       |     
    0x00027ea6 it ne                                             |     
                                                                 |     if (sl != 5) {
    0x00027ea8 uxtbne fp, sl                                     |         __asm ("uxtbne fp, sl");
                                                                 |     }
                                                                 |     if (sl == 5) {
    0x00027eac beq 0x27fa8                                       |         goto label_9;
                                                                 |     }
                                                                 | label_4:
    0x00027eae movs r3, 0                                        |     r3 = 0;
    0x00027eb0 mov r2, r4                                        |     r2 = r4;
    0x00027eb2 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00027eb4 mov r0, sb                                        |     r0 = sb;
    0x00027eb6 mov r3, r5                                        |     r3 = r5;
    0x00027eb8 str.w fp, [sp]                                    |     __asm ("str.w fp, [sp]");
    0x00027ebc str r1, [sp, 0x1c]                                |     var_1ch = r1;
    0x00027ebe bl 0x14be8                                        |     fcn_00014be8 (r0, r1, r2, r3, r4, r5);
    0x00027ec2 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
                                                                 |     if (r0 != 0) {
    0x00027ec4 cbz r0, 0x27ed0                                   |         
    0x00027ec6 ldrh r3, [r0, 2]                                  |         r3 = *((r0 + 2));
    0x00027ec8 and r3, r3, 3                                     |         r3 &= 3;
    0x00027ecc cmp r3, sl                                        |         
                                                                 |         if (r3 == sl) {
    0x00027ece beq 0x27f70                                       |             goto label_10;
                                                                 |         }
                                                                 |     }
                                                                 | label_3:
    0x00027ed0 movs r3, 1                                        |     r3 = 1;
    0x00027ed2 mov r2, r4                                        |     r2 = r4;
    0x00027ed4 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00027ed6 mov r0, sb                                        |     r0 = sb;
    0x00027ed8 mov r3, r5                                        |     r3 = r5;
    0x00027eda str.w fp, [sp]                                    |     __asm ("str.w fp, [sp]");
    0x00027ede bl 0x14be8                                        |     r0 = fcn_00014be8 (r0, r1, r2, r3, r4, r5);
    0x00027ee2 mov r4, r0                                        |     r4 = r0;
    0x00027ee4 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00027ee6 beq 0x27fa4                                       |         goto label_11;
                                                                 |     }
    0x00027ee8 ldr.w sl, [r0, 0x20]                              |     sl = *((r0 + 0x20));
    0x00027eec cmp.w sl, 0                                       |     
                                                                 |     if (sl != 0) {
    0x00027ef0 beq 0x27f00                                       |         
    0x00027ef2 ldr.w r3, [sl]                                    |         r3 = *(sl);
    0x00027ef6 subs r3, 1                                        |         r3--;
    0x00027ef8 str.w r3, [sl]                                    |         __asm ("str.w r3, [sl]");
    0x00027efc cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00027efe beq 0x27f60                                       |             goto label_12;
                                                                 |         }
                                                                 |     }
                                                                 | label_2:
    0x00027f00 ldr r3, [sp, 0x58]                                |     r3 = *(arg_58h);
                                                                 |     if (r3 != 0) {
    0x00027f02 cbz r3, 0x27f0c                                   |         
    0x00027f04 ldr r3, [r3]                                      |         r3 = *(r3);
    0x00027f06 ldr r2, [sp, 0x58]                                |         r2 = *(arg_58h);
    0x00027f08 adds r3, 1                                        |         r3++;
    0x00027f0a str r3, [r2]                                      |         *(r2) = r3;
                                                                 |     }
    0x00027f0c ldr r3, [sp, 0x4c]                                |     r3 = *(arg_4ch);
    0x00027f0e movs r0, 0                                        |     r0 = 0;
    0x00027f10 str r7, [r4, 0x10]                                |     *((r4 + 0x10)) = r7;
    0x00027f12 str r6, [r4, 0x14]                                |     *((r4 + 0x14)) = r6;
    0x00027f14 str r3, [r4, 0xc]                                 |     *((r4 + 0xc)) = r3;
    0x00027f16 ldr r3, [sp, 0x58]                                |     r3 = *(arg_58h);
    0x00027f18 strh r5, [r4]                                     |     *(r4) = r5;
    0x00027f1a str r3, [r4, 0x20]                                |     *((r4 + 0x20)) = r3;
    0x00027f1c ldr r3, [sp, 0x48]                                |     r3 = *(arg_48h);
    0x00027f1e str r3, [r4, 4]                                   |     *((r4 + 4)) = r3;
    0x00027f20 ldrh r3, [r4, 2]                                  |     r3 = *((r4 + 2));
    0x00027f22 and r3, r3, 3                                     |     r3 &= 3;
    0x00027f26 orr.w r3, r3, r8                                  |     r3 |= r8;
    0x00027f2a strh r3, [r4, 2]                                  |     *((r4 + 2)) = r3;
    0x00027f2c add sp, 0x24                                      |     
    0x00027f2e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_6:
    0x00027f32 subs r2, r6, 0                                    |     r2 = r6 - 0;
    0x00027f34 it ne                                             |     
                                                                 |     if (r2 == r6) {
    0x00027f36 movne r2, 1                                       |         r2 = 1;
                                                                 |     }
    0x00027f38 cmp r7, 0                                         |     
    0x00027f3a it ne                                             |     
                                                                 |     if (r7 == 0) {
    0x00027f3c movne r2, 0                                       |         r2 = 0;
                                                                 |     }
    0x00027f3e cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00027f40 bne 0x27e52                                       |         goto label_0;
                                                                 |     }
    0x00027f42 clz r2, r6                                        |     r2 &= r6;
    0x00027f46 cmp r7, 0                                         |     
    0x00027f48 lsr.w r2, r2, 5                                   |     r2 >>= 5;
    0x00027f4c it eq                                             |     
                                                                 |     if (r7 != 0) {
    0x00027f4e moveq r2, 0                                       |         r2 = 0;
                                                                 |     }
    0x00027f50 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00027f52 bne.w 0x27e52                                     |         goto label_0;
                                                                 |     }
    0x00027f56 adds r2, r5, 1                                    |     r2 = r5 + 1;
    0x00027f58 cmp r2, 0x80                                      |     
                                                                 |     if (r2 > 0x80) {
    0x00027f5a bhi.w 0x27e52                                     |         goto label_0;
                                                                 |     }
    0x00027f5e b 0x27e74                                         |     goto label_1;
                                                                 | label_12:
    0x00027f60 ldrd r3, r0, [sl, 4]                              |     __asm ("ldrd r3, r0, [sl, 4]");
    0x00027f64 blx r3                                            |     uint32_t (*r3)(uint32_t) (r3);
    0x00027f66 mov r1, sl                                        |     r1 = sl;
    0x00027f68 mov r0, sb                                        |     r0 = sb;
    0x00027f6a bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x00027f6e b 0x27f00                                         |     goto label_2;
                                                                 | label_10:
    0x00027f70 ldrsh.w r3, [r0]                                  |     r3 = *(r0);
    0x00027f74 cmp r3, r5                                        |     
                                                                 |     if (r3 != r5) {
    0x00027f76 bne 0x27ed0                                       |         goto label_3;
                                                                 |     }
    0x00027f78 ldr.w r3, [sb, 0x8c]                              |     r3 = *((sb + 0x8c));
    0x00027f7c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00027f7e bne 0x27ffa                                       |         goto label_13;
                                                                 |     }
    0x00027f80 ldr.w r3, [sb, 4]                                 |     r3 = *((sb + 4));
    0x00027f84 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00027f86 beq 0x27ed0                                       |         goto label_3;
                                                                 |     }
                                                                 |     do {
    0x00027f88 ldrb.w r2, [r3, 0x58]                             |         r2 = *((r3 + 0x58));
    0x00027f8c orr r2, r2, 0x20                                  |         r2 |= 0x20;
    0x00027f90 strb.w r2, [r3, 0x58]                             |         *((r3 + 0x58)) = r2;
    0x00027f94 ldr r3, [r3, 0x34]                                |         r3 = *((r3 + 0x34));
    0x00027f96 cmp r3, 0                                         |         
    0x00027f98 bne 0x27f88                                       |         
                                                                 |     } while (r3 != 0);
    0x00027f9a b 0x27ed0                                         |     goto label_3;
                                                                 | label_8:
    0x00027f9c mov.w fp, 2                                       |     
    0x00027fa0 mov sl, fp                                        |     sl = fp;
    0x00027fa2 b 0x27eae                                         |     goto label_4;
                                                                 | label_11:
    0x00027fa4 movs r0, 7                                        |     r0 = 7;
    0x00027fa6 b 0x27e6e                                         |     goto label_5;
                                                                 | label_9:
    0x00027fa8 ldr r3, [sp, 0x58]                                |     r3 = *(arg_58h);
    0x00027faa mov r2, r5                                        |     r2 = r5;
    0x00027fac mov r0, sb                                        |     r0 = sb;
    0x00027fae str r7, [sp, 8]                                   |     var_8h = r7;
    0x00027fb0 str r1, [sp, 0x1c]                                |     var_1ch = r1;
    0x00027fb2 strd r6, r3, [sp, 0xc]                            |     __asm ("strd r6, r3, [var_ch]");
    0x00027fb6 ldr r3, [sp, 0x4c]                                |     r3 = *(arg_4ch);
    0x00027fb8 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00027fba ldr r3, [sp, 0x48]                                |     r3 = *(arg_48h);
    0x00027fbc str r3, [sp]                                      |     *(sp) = r3;
    0x00027fbe orr r3, r8, 1                                     |     r3 = r8 | 1;
    0x00027fc2 bl 0x27e30                                        |     fcn_00027e30 (r0, r1, r2, r3, r4, r5, r6);
    0x00027fc6 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x00027fc8 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00027fca bne.w 0x27e6e                                     |         goto label_5;
                                                                 |     }
    0x00027fce ldr r3, [sp, 0x58]                                |     r3 = *(arg_58h);
    0x00027fd0 mov r2, r5                                        |     r2 = r5;
    0x00027fd2 mov r0, sb                                        |     r0 = sb;
    0x00027fd4 str r7, [sp, 8]                                   |     var_8h = r7;
    0x00027fd6 strd r6, r3, [sp, 0xc]                            |     __asm ("strd r6, r3, [var_ch]");
    0x00027fda ldr r3, [sp, 0x4c]                                |     r3 = *(arg_4ch);
    0x00027fdc str r3, [sp, 4]                                   |     var_4h = r3;
    0x00027fde ldr r3, [sp, 0x48]                                |     r3 = *(arg_48h);
    0x00027fe0 str r3, [sp]                                      |     *(sp) = r3;
    0x00027fe2 orr r3, r8, 2                                     |     r3 = r8 | 2;
    0x00027fe6 bl 0x27e30                                        |     r0 = fcn_00027e30 (r0, r1, r2, r3, r4, r5, r6);
    0x00027fea cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00027fec bne.w 0x27e6e                                     |         goto label_5;
                                                                 |     }
    0x00027ff0 mov.w fp, 3                                       |     
    0x00027ff4 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x00027ff6 mov sl, fp                                        |     sl = fp;
    0x00027ff8 b 0x27eae                                         |     goto label_4;
                                                                 | label_13:
    0x00027ffa ldr r2, [pc, 0x14]                                |     
    0x00027ffc mov r0, sb                                        |     r0 = sb;
    0x00027ffe movs r1, 5                                        |     r1 = 5;
    0x00028000 add r2, pc                                        |     r2 = 0x50016;
    0x00028002 bl 0x1c64c                                        |     fcn_0001c64c (r0, r1);
    0x00028004 smlad r0, r3, r5, r2                              |     __asm ("smlad r0, r3, r5, r2");
    0x00028008 b 0x27e6e                                         |     goto label_5;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x28920 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00028920 ()                                      | void fcn_00028920 (int16_t arg_40h, int16_t arg_44h, 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;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00028920 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00028924 sub sp, 0x1c                                      |     
    0x00028926 mov r5, r0                                        |     r5 = r0;
    0x00028928 mov r8, r1                                        |     r8 = r1;
    0x0002892a strd r2, r3, [sp, 4]                              |     __asm ("strd r2, r3, [var_4h]");
    0x0002892e cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00028930 beq.w 0x28af0                                     |         goto label_16;
                                                                 |     }
    0x00028934 ldrb r3, [r1]                                     |     r3 = *(r1);
    0x00028936 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00028938 beq.w 0x28b2a                                     |         goto label_17;
                                                                 |     }
    0x0002893c mov r3, r1                                        |     r3 = r1;
                                                                 |     do {
    0x0002893e ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x00028942 cmp r2, 0                                         |         
    0x00028944 bne 0x2893e                                       |         
                                                                 |     } while (r2 != 0);
    0x00028946 sub.w r3, r3, r8                                  |     r3 -= r8;
    0x0002894a bic r3, r3, 0xc0000000                            |     r3 = BIT_MASK (r3, 0xc0000000);
    0x0002894e str r3, [sp, 0x10]                                |     var_10h = r3;
                                                                 | label_10:
    0x00028950 ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x00028952 subs r3, 4                                        |     r3 -= 4;
    0x00028954 tst.w r3, 0xfb                                    |     
                                                                 |     if ((r3 & 0xfb) != 0) {
    0x00028958 beq 0x28988                                       |         
    0x0002895a ldr r2, [sp, 4]                                   |         r2 = var_4h;
    0x0002895c subs r3, r2, 1                                    |         r3 = r2 - 1;
    0x0002895e mov sl, r2                                        |         sl = r2;
    0x00028960 cmp r3, 2                                         |         
                                                                 |         if (r3 < 2) {
    0x00028962 bls.w 0x28b5e                                     |             goto label_18;
                                                                 |         }
                                                                 | label_14:
    0x00028966 blx 0x5fe8                                        |         fcn_00005fe8 ();
    0x0002896a ldr r1, [pc, 0x1f8]                               |         
    0x0002896c movw r2, 0xf0a4                                   |         
    0x00028970 add.w r3, r0, 0x14                                |         r3 = r0 + 0x14;
    0x00028974 movt r2, 1                                        |         r2 = 0x1f0a4;
    0x00028978 movs r0, 0x15                                     |         r0 = 0x15;
    0x0002897a add r1, pc                                        |         r1 = 0x514e4;
    0x0002897c blx 0x6820                                        |         fcn_00006820 ();
    0x00028980 movs r0, 0x15                                     |         r0 = 0x15;
                                                                 | label_12:
    0x00028982 add sp, 0x1c                                      |         
    0x00028984 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 |     }
    0x00028988 movs r3, 2                                        |     r3 = 2;
    0x0002898a mov sl, r3                                        |     sl = r3;
    0x0002898c str r3, [sp, 0xc]                                 |     var_ch = r3;
                                                                 | label_15:
    0x0002898e movs r2, 0                                        |     r2 = 0;
    0x00028990 mov r1, r8                                        |     r1 = r8;
    0x00028992 mov r0, r5                                        |     r0 = r5;
    0x00028994 bl 0x1408c                                        |     r0 = fcn_0001408c (r0, r1, r2);
    0x00028998 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0002899a beq 0x28a64                                       |         goto label_6;
                                                                 |     }
    0x0002899c add.w r3, sl, sl, lsl 2                           |     r3 = sl + (sl << 2);
    0x000289a0 add.w r0, r0, r3, lsl 2                           |     r0 += (r3 << 2);
    0x000289a4 sub.w r3, r0, 0x14                                |     r3 = r0 - 0x14;
    0x000289a8 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x000289aa ldr r3, [r0, -0x8]                                |     r3 = *((r0 - 0x8));
    0x000289ae cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000289b0 beq 0x28a64                                       |         goto label_6;
                                                                 |     }
                                                                 | label_9:
    0x000289b2 ldr.w fp, [r5, 0x8c]                              |     fp = *((r5 + 0x8c));
    0x000289b6 cmp.w fp, 0                                       |     
                                                                 |     if (fp != 0) {
    0x000289ba bne.w 0x28b3c                                     |         goto label_19;
                                                                 |     }
    0x000289be ldr r3, [r5, 4]                                   |     r3 = *((r5 + 4));
                                                                 |     if (r3 == 0) {
    0x000289c0 cbz r3, 0x289d4                                   |         goto label_20;
                                                                 |     }
                                                                 |     do {
    0x000289c2 ldrb.w r2, [r3, 0x58]                             |         r2 = *((r3 + 0x58));
    0x000289c6 orr r2, r2, 0x20                                  |         r2 |= 0x20;
    0x000289ca strb.w r2, [r3, 0x58]                             |         *((r3 + 0x58)) = r2;
    0x000289ce ldr r3, [r3, 0x34]                                |         r3 = *((r3 + 0x34));
    0x000289d0 cmp r3, 0                                         |         
    0x000289d2 bne 0x289c2                                       |         
                                                                 |     } while (r3 != 0);
                                                                 | label_20:
    0x000289d4 ldrd sb, r4, [r5, 0x10]                           |     __asm ("ldrd sb, r4, [r5, 0x10]");
    0x000289d8 cmp r4, 0                                         |     
                                                                 |     if (r4 <= 0) {
    0x000289da ble 0x28a50                                       |         goto label_21;
                                                                 |     }
    0x000289dc movs r7, 0                                        |     r7 = 0;
    0x000289de b 0x289ec                                         |     
                                                                 |     while (r0 == 0) {
    0x000289e0 add.w fp, fp, 1                                   |         
    0x000289e4 add.w sb, sb, 0x10                                |         sb += 0x10;
    0x000289e8 cmp fp, r4                                        |         
                                                                 |         if (fp >= r4) {
    0x000289ea bge 0x28a50                                       |             goto label_21;
                                                                 |         }
                                                                 | label_3:
    0x000289ec ldr.w r0, [sb, 4]                                 |         r0 = *((sb + 4));
    0x000289f0 cmp r0, 0                                         |         
    0x000289f2 beq 0x289e0                                       |         
                                                                 |     }
    0x000289f4 bl 0xd140                                         |     fcn_0000d140 (r0);
    0x000289f8 ldr.w r3, [sb, 0xc]                               |     r3 = *((sb + 0xc));
    0x000289fc ldr r6, [r3, 0x10]                                |     r6 = *((r3 + 0x10));
                                                                 |     if (r6 == 0) {
    0x000289fe cbz r6, 0x28a30                                   |         goto label_22;
                                                                 |     }
                                                                 | label_2:
    0x00028a00 ldr r3, [r6, 8]                                   |     r3 = *((r6 + 8));
    0x00028a02 ldr r4, [r3, 8]                                   |     r4 = *((r3 + 8));
                                                                 |     if (r4 != 0) {
    0x00028a04 cbnz r4, 0x28a0c                                  |         goto label_1;
                                                                 |     }
    0x00028a06 b 0x28a2a                                         |     goto label_23;
                                                                 |     do {
                                                                 | label_0:
    0x00028a08 ldr r4, [r4, 0x14]                                |         r4 = *((r4 + 0x14));
                                                                 |         if (r4 == 0) {
    0x00028a0a cbz r4, 0x28a2a                                   |             goto label_23;
                                                                 |         }
                                                                 | label_1:
    0x00028a0c ldr r0, [r4, 0x28]                                |         r0 = *((r4 + 0x28));
    0x00028a0e cmp r0, 0                                         |         
    0x00028a10 beq 0x28a08                                       |         
                                                                 |     } while (r0 == 0);
    0x00028a12 ldr r3, [r0, 0xc]                                 |     r3 = *((r0 + 0xc));
    0x00028a14 cmp r5, r3                                        |     
                                                                 |     if (r5 != r3) {
    0x00028a16 bne 0x28a08                                       |         goto label_0;
                                                                 |     }
    0x00028a18 ldr r3, [r0]                                      |     r3 = *(r0);
    0x00028a1a subs r3, 1                                        |     r3--;
    0x00028a1c str r3, [r0]                                      |     *(r0) = r3;
    0x00028a1e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00028a20 beq 0x28aae                                       |         goto label_24;
                                                                 |     }
                                                                 | label_4:
    0x00028a22 str r7, [r4, 0x28]                                |     *((r4 + 0x28)) = r7;
    0x00028a24 ldr r4, [r4, 0x14]                                |     r4 = *((r4 + 0x14));
    0x00028a26 cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x00028a28 bne 0x28a0c                                       |         goto label_1;
                                                                 |     }
                                                                 | label_23:
    0x00028a2a ldr r6, [r6]                                      |     r6 = *(r6);
    0x00028a2c cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x00028a2e bne 0x28a00                                       |         goto label_2;
                                                                 |     }
                                                                 | label_22:
    0x00028a30 ldr.w r4, [sb, 4]                                 |     r4 = *((sb + 4));
    0x00028a34 ldrb r3, [r4, 9]                                  |     r3 = *((r4 + 9));
                                                                 |     if (r3 != 0) {
    0x00028a36 cbz r3, 0x28a42                                   |         
    0x00028a38 ldr r6, [r4, 0xc]                                 |         r6 = *((r4 + 0xc));
    0x00028a3a subs r6, 1                                        |         r6--;
    0x00028a3c str r6, [r4, 0xc]                                 |         *((r4 + 0xc)) = r6;
    0x00028a3e cmp r6, 0                                         |         
                                                                 |         if (r6 == 0) {
    0x00028a40 beq 0x28ab4                                       |             goto label_25;
                                                                 |         }
                                                                 |     }
                                                                 | label_5:
    0x00028a42 ldr r4, [r5, 0x14]                                |     r4 = *((r5 + 0x14));
    0x00028a44 add.w fp, fp, 1                                   |     
    0x00028a48 add.w sb, sb, 0x10                                |     sb += 0x10;
    0x00028a4c cmp fp, r4                                        |     
                                                                 |     if (fp < r4) {
    0x00028a4e blt 0x289ec                                       |         goto label_3;
                                                                 |     }
                                                                 | label_21:
    0x00028a50 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00028a52 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x00028a54 ldrb r3, [r3, 4]                                  |     r3 = *((r3 + 4));
    0x00028a56 bic r3, r3, 8                                     |     r3 = BIT_MASK (r3, 8);
    0x00028a5a cmp r3, r2                                        |     
                                                                 |     if (r3 == r2) {
    0x00028a5c beq 0x28ac4                                       |         goto label_26;
                                                                 |     }
    0x00028a5e cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x00028a62 beq 0x28ac0                                       |         goto label_7;
                                                                 |     }
                                                                 | label_6:
    0x00028a64 mov r1, r8                                        |     r1 = r8;
    0x00028a66 movs r2, 1                                        |     r2 = 1;
    0x00028a68 mov r0, r5                                        |     r0 = r5;
    0x00028a6a bl 0x1408c                                        |     r0 = fcn_0001408c (r0, r1, r2);
    0x00028a6e mov r3, r0                                        |     r3 = r0;
                                                                 |     do {
                                                                 | label_8:
    0x00028a70 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00028a72 beq 0x28b22                                       |             goto label_27;
                                                                 |         }
    0x00028a74 add.w sl, sl, sl, lsl 2                           |         sl += (sl << 2);
    0x00028a78 ldr r4, [sp, 0x40]                                |         r4 = *(arg_40h);
    0x00028a7a ldr r2, [sp, 4]                                   |         r2 = var_4h;
    0x00028a7c mov r0, r5                                        |         r0 = r5;
    0x00028a7e add.w r3, r3, sl, lsl 2                           |         r3 += (sl << 2);
    0x00028a82 str r4, [r3, -0x8]                                |         *((r3 - 0x8)) = r4;
    0x00028a86 and r1, r2, 8                                     |         r1 = r2 & 8;
    0x00028a8a ldr r4, [sp, 8]                                   |         r4 = var_8h;
    0x00028a8c ldr r2, [sp, 0xc]                                 |         r2 = var_ch;
    0x00028a8e str r4, [r3, -0xc]                                |         *((r3 - 0xc)) = r4;
    0x00028a92 ldr r4, [sp, 0x44]                                |         r4 = *(arg_44h);
    0x00028a94 orrs r1, r2                                       |         r1 |= r2;
    0x00028a96 movs r2, 0                                        |         r2 = 0;
    0x00028a98 strb r1, [r3, -0x10]                              |         *((r3 - 0x10)) = r1;
    0x00028a9c mov r1, r2                                        |         r1 = r2;
    0x00028a9e str r4, [r3, -0x4]                                |         *((r3 - 0x4)) = r4;
    0x00028aa2 bl 0x1c64c                                        |         fcn_0001c64c (r0, r1);
    0x00028aa6 movs r0, 0                                        |         r0 = 0;
    0x00028aa8 add sp, 0x1c                                      |         
    0x00028aaa pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_24:
    0x00028aae blx 0x6050                                        |         fcn_00006050 ();
    0x00028ab2 b 0x28a22                                         |         goto label_4;
                                                                 | label_25:
    0x00028ab4 ldr r3, [r4, 4]                                   |         r3 = *((r4 + 4));
    0x00028ab6 ldr r0, [r3, 0x38]                                |         r0 = *((r3 + 0x38));
    0x00028ab8 blx 0x63dc                                        |         fcn_000063dc ();
    0x00028abc strb r6, [r4, 0xa]                                |         *((r4 + 0xa)) = r6;
    0x00028abe b 0x28a42                                         |         goto label_5;
                                                                 | label_7:
    0x00028ac0 ldr r3, [r5, 8]                                   |         r3 = *((r5 + 8));
    0x00028ac2 b 0x28a70                                         |         
                                                                 |     } while (1);
                                                                 | label_26:
    0x00028ac4 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x00028ac6 mov r1, r8                                        |     r1 = r8;
    0x00028ac8 add.w r0, r5, 0x1a4                               |     r0 = r5 + 0x1a4;
    0x00028acc bl 0x13f5c                                        |     fcn_00013f5c (r0, r1, r2);
    0x00028ad0 ldr r7, [sp, 0x14]                                |     r7 = var_14h;
    0x00028ad2 mov r4, r0                                        |     r4 = r0;
    0x00028ad4 movs r2, 0                                        |     r2 = 0;
    0x00028ad6 add.w r6, r0, 0x3c                                |     r6 = r0 + 0x3c;
                                                                 |     do {
    0x00028ada ldrb r1, [r4, 4]                                  |         r1 = *((r4 + 4));
    0x00028adc ldrb r3, [r7, 4]                                  |         r3 = *((r7 + 4));
    0x00028ade cmp r1, r3                                        |         
                                                                 |         if (r1 == r3) {
    0x00028ae0 beq 0x28b2e                                       |             goto label_28;
                                                                 |         }
                                                                 | label_11:
    0x00028ae2 adds r4, 0x14                                     |         r4 += 0x14;
    0x00028ae4 cmp r4, r6                                        |         
    0x00028ae6 bne 0x28ada                                       |         
                                                                 |     } while (r4 != r6);
    0x00028ae8 cmp.w r8, 0                                       |     
                                                                 |     if (r8 != 0) {
    0x00028aec bne 0x28a64                                       |         goto label_6;
                                                                 |     }
    0x00028aee b 0x28ac0                                         |     goto label_7;
                                                                 | label_16:
    0x00028af0 ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x00028af2 subs r3, 4                                        |     r3 -= 4;
    0x00028af4 tst.w r3, 0xfb                                    |     
    0x00028af8 ittt eq                                           |     
                                                                 |     if ((r3 & 0xfb) != 0) {
    0x00028afa moveq r3, 2                                       |         r3 = 2;
                                                                 |     }
                                                                 |     if ((r3 & 0xfb) != 0) {
    0x00028afc moveq sl, r3                                      |         sl = r3;
                                                                 |     }
                                                                 |     if ((r3 & 0xfb) != 0) {
    0x00028afe streq r3, [sp, 0xc]                               |         var_ch = r3;
                                                                 |     }
                                                                 |     if ((r3 & 0xfb) != 0) {
    0x00028b00 bne 0x28b4c                                       |         goto label_29;
                                                                 |     }
                                                                 | label_13:
    0x00028b02 ldr r3, [r5, 8]                                   |     r3 = *((r5 + 8));
                                                                 |     if (r3 == 0) {
    0x00028b04 cbz r3, 0x28b22                                   |         goto label_27;
                                                                 |     }
    0x00028b06 add.w sb, sl, sl, lsl 2                           |     sb = sl + (sl << 2);
    0x00028b0a add.w sb, r3, sb, lsl 2                           |     sb = r3 + (sb << 2);
    0x00028b0e sub.w r2, sb, 0x14                                |     r2 = sb - 0x14;
    0x00028b12 str r2, [sp, 0x14]                                |     var_14h = r2;
    0x00028b14 ldr r2, [sb, -0x8]                                |     r2 = *((sb - 0x8));
    0x00028b18 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00028b1a beq 0x28a70                                       |         goto label_8;
                                                                 |     }
    0x00028b1c movs r3, 0                                        |     r3 = 0;
    0x00028b1e str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00028b20 b 0x289b2                                         |     goto label_9;
                                                                 | label_27:
    0x00028b22 movs r0, 7                                        |     r0 = 7;
    0x00028b24 add sp, 0x1c                                      |     
    0x00028b26 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_17:
    0x00028b2a str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00028b2c b 0x28950                                         |     goto label_10;
                                                                 | label_28:
    0x00028b2e ldr r3, [r4, 0x10]                                |     r3 = *((r4 + 0x10));
                                                                 |     if (r3 != 0) {
    0x00028b30 cbz r3, 0x28b38                                   |         
    0x00028b32 ldr r0, [r4, 8]                                   |         r0 = *((r4 + 8));
    0x00028b34 blx r3                                            |         uint32_t (*r3)(uint32_t) (r0);
    0x00028b36 movs r2, 0                                        |         r2 = 0;
                                                                 |     }
    0x00028b38 str r2, [r4, 0xc]                                 |     *((r4 + 0xc)) = r2;
    0x00028b3a b 0x28ae2                                         |     goto label_11;
                                                                 | label_19:
    0x00028b3c ldr r2, [pc, 0x28]                                |     
    0x00028b3e mov r0, r5                                        |     r0 = r5;
    0x00028b40 movs r1, 5                                        |     r1 = 5;
    0x00028b42 add r2, pc                                        |     r2 = 0x516ae;
    0x00028b44 bl 0x1c64c                                        |     fcn_0001c64c (r0, r1);
    0x00028b48 movs r0, 5                                        |     r0 = 5;
    0x00028b4a b 0x28982                                         |     goto label_12;
                                                                 | label_29:
    0x00028b4c ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x00028b4e mov sl, r3                                        |     sl = r3;
    0x00028b50 subs r3, 1                                        |     r3--;
    0x00028b52 cmp r3, 2                                         |     
    0x00028b54 itt ls                                            |     
                                                                 |     if (r3 > 2) {
    0x00028b56 ldrls r3, [sp, 4]                                 |         r3 = var_4h;
                                                                 |     }
                                                                 |     if (r3 <= 2) {
    0x00028b58 strls r3, [sp, 0xc]                               |         var_ch = r3;
                                                                 |         goto label_30;
                                                                 |     }
                                                                 |     if (r3 < 2) {
                                                                 | label_30:
    0x00028b5a bls 0x28b02                                       |         goto label_13;
                                                                 |     }
    0x00028b5c b 0x28966                                         |     goto label_14;
                                                                 | label_18:
    0x00028b5e ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x00028b60 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00028b62 b 0x2898e                                         |     goto label_15;
                                                                 | }


r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x28ea4).
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-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x29d0c */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00029d0c ()                                      | void fcn_00029d0c (int16_t arg_110h, int16_t arg_114h, int16_t arg_118h, int16_t arg_11ch, int16_t arg_120h, 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_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_74h;
                                                                 |     int32_t var_6ch_2;
                                                                 |     int16_t var_7ch;
                                                                 |     int16_t var_e4h;
                                                                 |     int16_t var_e8h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00029d0c svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x00029d10 sub sp, 0xec                                      |     
    0x00029d12 str r2, [sp, 0x20]                                |     var_20h = r2;
    0x00029d14 mov sb, r0                                        |     sb = r0;
    0x00029d16 ldr.w r2, [pc, 0x740]                             |     r2 = *(0x0002a458);
    0x00029d1a str r3, [sp, 0x28]                                |     var_28h = r3;
    0x00029d1c ldr r0, [sp, 0x118]                               |     r0 = *(arg_118h);
    0x00029d1e ldr.w r3, [pc, 0x73c]                             |     
    0x00029d22 add r2, pc                                        |     r2 += pc;
    0x00029d24 str r1, [sp, 0xc]                                 |     var_ch = r1;
    0x00029d26 str r0, [sp, 0x40]                                |     var_40h = r0;
    0x00029d28 ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x00029d2a movs r2, 0                                        |     r2 = 0;
    0x00029d2c ldr r3, [r3]                                      |     r3 = *(0x2a45e);
    0x00029d2e str r3, [sp, 0xe4]                                |     var_e4h = r3;
    0x00029d30 mov.w r3, 0                                       |     r3 = 0;
    0x00029d34 str r2, [sp, 0x64]                                |     var_64h = r2;
    0x00029d36 ldr r2, [sp, 0x11c]                               |     r2 = *(arg_11ch);
    0x00029d38 ldrb.w r3, [sb, 0x2e]                             |     r3 = *((sb + 0x2e));
    0x00029d3c str r2, [sp, 0x38]                                |     var_38h = r2;
    0x00029d3e ldr r2, [sp, 0x120]                               |     r2 = *(arg_120h);
    0x00029d40 str r2, [sp, 0x34]                                |     var_34h = r2;
    0x00029d42 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00029d44 bne 0x29e1e                                       |         goto label_23;
                                                                 |     }
    0x00029d46 ldrb.w r3, [sb, 0x2b]                             |     r3 = *((sb + 0x2b));
                                                                 |     if (r3 == 0) {
    0x00029d4a cbnz r3, 0x29d62                                  |         
    0x00029d4c ldr.w r0, [sb, 4]                                 |         r0 = *((sb + 4));
    0x00029d50 movs r2, 1                                        |         r2 = 1;
    0x00029d52 movs r3, 0xa                                      |         r3 = 0xa;
    0x00029d54 mov r1, r2                                        |         r1 = r2;
    0x00029d56 ldr r4, [r0]                                      |         r4 = *(r0);
    0x00029d58 ldr r4, [r4, 0x38]                                |         r4 = *((r4 + 0x38));
    0x00029d5a blx r4                                            |         uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00029d5c str r0, [sp, 8]                                   |         var_8h = r0;
    0x00029d5e cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x00029d60 bne 0x29de2                                       |             goto label_0;
                                                                 |         }
                                                                 |     }
    0x00029d62 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00029d64 movs r4, 1                                        |     r4 = 1;
    0x00029d66 strb.w r4, [sb, 0x2d]                             |     *((sb + 0x2d)) = r4;
    0x00029d6a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00029d6c bne 0x29e04                                       |         goto label_24;
                                                                 |     }
                                                                 | label_2:
    0x00029d6e ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00029d70 clz r3, r3                                        |     r3 &= r3;
    0x00029d74 lsrs r3, r3, 5                                    |     r3 >>= 5;
    0x00029d76 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00029d78 movs r3, 0                                        |     r3 = 0;
    0x00029d7a str r3, [sp, 0xc]                                 |     var_ch = r3;
                                                                 |     do {
    0x00029d7c add r1, sp, 0x64                                  |         r1 += var_64h;
    0x00029d7e mov r0, sb                                        |         r0 = sb;
    0x00029d80 bl 0x29310                                        |         fcn_00029310 (r0, r1);
    0x00029d84 ldr r4, [sp, 0x64]                                |         r4 = var_64h;
    0x00029d86 str r0, [sp, 8]                                   |         var_8h = r0;
    0x00029d88 cmp r4, 0                                         |         
                                                                 |         if (r4 != 0) {
    0x00029d8a bne 0x29e24                                       |             goto label_25;
                                                                 |         }
    0x00029d8c ldr r3, [sp, 8]                                   |         r3 = var_8h;
    0x00029d8e cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00029d90 beq 0x29e5e                                       |             goto label_26;
                                                                 |         }
    0x00029d92 movs r3, 1                                        |         r3 = 1;
    0x00029d94 str r3, [sp, 0x18]                                |         var_18h = r3;
                                                                 | label_1:
    0x00029d96 ldrb.w r3, [sb, 0x2c]                             |         r3 = *((sb + 0x2c));
    0x00029d9a ldrb.w r1, [sb, 0x2b]                             |         r1 = *((sb + 0x2b));
                                                                 |         if (r3 != 0) {
    0x00029d9e cbz r3, 0x29dbe                                   |             
                                                                 |             if (r1 == 0) {
    0x00029da0 cbnz r1, 0x29db4                                  |                 
    0x00029da2 ldr.w r0, [sb, 4]                                 |                 r0 = *((sb + 4));
    0x00029da6 movs r3, 9                                        |                 r3 = 9;
    0x00029da8 movs r2, 1                                        |                 r2 = 1;
    0x00029daa ldr r4, [r0]                                      |                 r4 = *(r0);
    0x00029dac ldr r4, [r4, 0x38]                                |                 r4 = *((r4 + 0x38));
    0x00029dae blx r4                                            |                 uint32_t (*r4)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
    0x00029db0 ldrb.w r1, [sb, 0x2b]                             |                 r1 = *((sb + 0x2b));
                                                                 |             }
    0x00029db4 movs r3, 0                                        |             r3 = 0;
    0x00029db6 strb.w r3, [sb, 0x2c]                             |             *((sb + 0x2c)) = r3;
    0x00029dba strb.w r3, [sb, 0x2f]                             |             *((sb + 0x2f)) = r3;
                                                                 |         }
                                                                 |         if (r1 == 0) {
    0x00029dbe cbnz r1, 0x29dd0                                  |             
    0x00029dc0 ldr.w r0, [sb, 4]                                 |             r0 = *((sb + 4));
    0x00029dc4 movs r2, 1                                        |             r2 = 1;
    0x00029dc6 mov r1, r2                                        |             r1 = r2;
    0x00029dc8 ldr r3, [r0]                                      |             r3 = *(r0);
    0x00029dca ldr r4, [r3, 0x38]                                |             r4 = *((r3 + 0x38));
    0x00029dcc movs r3, 9                                        |             r3 = 9;
    0x00029dce blx r4                                            |             uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
                                                                 |         }
    0x00029dd0 ldr r2, [sp, 0x18]                                |         r2 = var_18h;
    0x00029dd2 movs r3, 0                                        |         r3 = 0;
    0x00029dd4 strb.w r3, [sb, 0x2d]                             |         *((sb + 0x2d)) = r3;
    0x00029dd8 cmp r2, r3                                        |         
    0x00029dda ldr r2, [sp, 8]                                   |         r2 = var_8h;
    0x00029ddc it eq                                             |         
                                                                 |         if (r2 != r3) {
    0x00029dde moveq r2, 5                                       |             r2 = 5;
                                                                 |         }
    0x00029de0 str r2, [sp, 8]                                   |         var_8h = r2;
                                                                 | label_0:
    0x00029de2 ldr.w r2, [pc, 0x67c]                             |         r2 = *(0x0002a460);
    0x00029de6 ldr.w r3, [pc, 0x674]                             |         r3 = *(0x2a45e);
    0x00029dea add r2, pc                                        |         r2 += pc;
    0x00029dec ldr r3, [r2, r3]                                  |         r3 = *((r2 + r3));
    0x00029dee ldr r2, [r3]                                      |         r2 = *(0x2a45e);
    0x00029df0 ldr r3, [sp, 0xe4]                                |         r3 = var_e4h;
    0x00029df2 eors r2, r3                                       |         r2 ^= r3;
    0x00029df4 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00029df8 bne.w 0x2a454                                     |             goto label_27;
                                                                 |         }
    0x00029dfc ldr r0, [sp, 8]                                   |         r0 = var_8h;
    0x00029dfe add sp, 0xec                                      |         
    0x00029e00 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_24:
    0x00029e04 ldr r2, [sp, 0x28]                                |         r2 = var_28h;
    0x00029e06 movs r3, 0                                        |         r3 = 0;
    0x00029e08 ldr r1, [sp, 0x20]                                |         r1 = var_20h;
    0x00029e0a mov r0, sb                                        |         r0 = sb;
    0x00029e0c str r4, [sp]                                      |         *(sp) = r4;
    0x00029e0e bl 0xb114                                         |         fcn_0000b114 (r0, r1, r2, r3, r4);
    0x00029e12 str r0, [sp, 8]                                   |         var_8h = r0;
                                                                 |         if (r0 != 0) {
    0x00029e14 cbnz r0, 0x29e52                                  |             goto label_28;
                                                                 |         }
    0x00029e16 strb.w r4, [sb, 0x2c]                             |         *((sb + 0x2c)) = r4;
    0x00029e1a str r4, [sp, 0x18]                                |         var_18h = r4;
    0x00029e1c b 0x29d7c                                         |         
                                                                 |     } while (1);
                                                                 | label_23:
    0x00029e1e movs r3, 8                                        |     r3 = 8;
    0x00029e20 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00029e22 b 0x29de2                                         |     goto label_0;
                                                                 | label_25:
    0x00029e24 ldr.w r0, [sb, 4]                                 |     r0 = *((sb + 4));
    0x00029e28 ldr r3, [r0]                                      |     r3 = *(r0);
    0x00029e2a ldr r2, [r3]                                      |     r2 = *(r3);
    0x00029e2c cmp r2, 2                                         |     
                                                                 |     if (r2 > 2) {
    0x00029e2e ble 0x29e3c                                       |         
    0x00029e30 movs r2, 0                                        |         r2 = 0;
    0x00029e32 str r2, [sp]                                      |         *(sp) = r2;
    0x00029e34 movs r2, 0                                        |         r2 = 0;
    0x00029e36 ldr r1, [r3, 0x48]                                |         r1 = *((r3 + 0x48));
    0x00029e38 movs r3, 0                                        |         r3 = 0;
    0x00029e3a blx r1                                            |         uint32_t (*r1)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
                                                                 |     }
    0x00029e3c ldr r3, [sp, 8]                                   |     r3 = var_8h;
                                                                 |     if (r3 == 0) {
    0x00029e3e cbz r3, 0x29e5e                                   |         goto label_26;
                                                                 |     }
    0x00029e40 movs r3, 1                                        |     r3 = 1;
    0x00029e42 str r3, [sp, 0x18]                                |     var_18h = r3;
                                                                 | label_3:
    0x00029e44 movs r2, 0x30                                     |     r2 = 0x30;
    0x00029e46 movs r1, 0                                        |     r1 = 0;
    0x00029e48 add.w r0, sb, 0x34                                |     r0 = sb + 0x34;
    0x00029e4c blx 0x5fcc                                        |     fcn_00005fcc ();
    0x00029e50 b 0x29d96                                         |     goto label_1;
                                                                 | label_28:
    0x00029e52 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x00029e54 cmp r3, 5                                         |     
    0x00029e56 it ne                                             |     
                                                                 |     if (r3 != 5) {
    0x00029e58 strne r4, [sp, 0x18]                              |         var_18h = r4;
                                                                 |         goto label_29;
                                                                 |     }
                                                                 |     if (r3 != 5) {
                                                                 | label_29:
    0x00029e5a bne 0x29d96                                       |         goto label_1;
                                                                 |     }
    0x00029e5c b 0x29d6e                                         |     goto label_2;
                                                                 | label_26:
    0x00029e5e ldr.w r3, [sb, 0x44]                              |     r3 = *((sb + 0x44));
    0x00029e62 str r3, [sp, 0x54]                                |     var_54h = r3;
    0x00029e64 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00029e66 beq.w 0x2a13e                                     |         goto label_30;
                                                                 |     }
    0x00029e6a ldrh.w r3, [sb, 0x42]                             |     r3 = *((sb + 0x42));
    0x00029e6e and r2, r3, 0xfe00                                |     r2 = r3 & 0xfe00;
    0x00029e72 lsls r3, r3, 0x10                                 |     r3 <<= 0x10;
    0x00029e74 and r3, r3, 0x10000                               |     r3 &= 0x10000;
    0x00029e78 orrs r3, r2                                       |     r3 |= r2;
    0x00029e7a ldr r2, [sp, 0x114]                               |     r2 = *(arg_114h);
    0x00029e7c str r3, [sp, 0x58]                                |     var_58h = r3;
    0x00029e7e cmp r2, r3                                        |     
                                                                 |     if (r2 == r3) {
    0x00029e80 beq 0x29eaa                                       |         goto label_31;
                                                                 |     }
    0x00029e82 blx 0x5fe8                                        |     fcn_00005fe8 ();
    0x00029e86 ldr.w r1, [pc, 0x5dc]                             |     
    0x00029e8a add.w r3, r0, 0x14                                |     r3 = r0 + 0x14;
    0x00029e8e movw r2, 0xd326                                   |     r2 = 0xd326;
    0x00029e92 movs r0, 0xb                                      |     r0 = 0xb;
    0x00029e94 add r1, pc                                        |     r1 = 0x542fe;
    0x00029e96 blx 0x6820                                        |     fcn_00006820 ();
    0x00029e9a movs r3, 1                                        |     r3 = 1;
    0x00029e9c str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00029e9e movs r3, 0xb                                      |     r3 = 0xb;
    0x00029ea0 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00029ea2 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00029ea4 beq.w 0x29d96                                     |         goto label_1;
                                                                 |     }
    0x00029ea8 b 0x29e44                                         |     goto label_3;
                                                                 | label_31:
    0x00029eaa ldr.w r3, [sb, 0x20]                              |     r3 = *((sb + 0x20));
    0x00029eae ldr r7, [sp, 0x54]                                |     r7 = var_54h;
    0x00029eb0 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00029eb2 str r3, [sp, 0x5c]                                |     var_5ch = r3;
    0x00029eb4 ldr r3, [r3, 0x60]                                |     r3 = *((r3 + 0x60));
    0x00029eb6 cmp r7, r3                                        |     
                                                                 |     if (r7 < r3) {
    0x00029eb8 bls.w 0x2a188                                     |         goto label_32;
                                                                 |     }
    0x00029ebc add.w r3, r7, 0x21                                |     r3 = r7 + 0x21;
    0x00029ec0 add.w r6, r7, 0xe                                 |     r6 = r7 + 0xe;
    0x00029ec4 lsrs r2, r3, 0xc                                  |     r2 = r3 >> 0xc;
    0x00029ec6 add.w r3, r2, r2, lsl 2                           |     r3 = r2 + (r2 << 2);
    0x00029eca adds r5, r2, 1                                    |     r5 = r2 + 1;
    0x00029ecc str r2, [sp, 0x48]                                |     var_48h = r2;
    0x00029ece add.w r6, r6, r3, lsl 1                           |     r6 += (r3 << 1);
    0x00029ed2 lsls r6, r6, 1                                    |     r6 <<= 1;
    0x00029ed4 mov r0, r6                                        |     r0 = r6;
    0x00029ed6 bl 0xdd58                                         |     fcn_0000dd58 (r0, r1, r2, r3, r4, r5, r6);
    0x00029eda str r0, [sp, 0x3c]                                |     var_3ch = r0;
    0x00029edc cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00029ede beq.w 0x2a160                                     |         goto label_33;
                                                                 |     }
    0x00029ee2 mov r2, r6                                        |     r2 = r6;
    0x00029ee4 movs r1, 0                                        |     r1 = 0;
    0x00029ee6 blx 0x5fcc                                        |     fcn_00005fcc ();
    0x00029eea ldr r4, [sp, 0x3c]                                |     r4 = var_3ch;
    0x00029eec cmp.w r7, 0x1000                                  |     
    0x00029ef0 mov r0, r7                                        |     r0 = r7;
    0x00029ef2 it hs                                             |     
                                                                 |     if (r7 < 0x1000) {
    0x00029ef4 movhs r0, 0x1000                                  |         r0 = 0x1000;
                                                                 |     }
    0x00029ef8 lsls r0, r0, 1                                    |     r0 <<= 1;
    0x00029efa str r5, [r4, 4]                                   |     *((r4 + 4)) = r5;
    0x00029efc bl 0xdd58                                         |     r0 = fcn_0000dd58 (r0, r1, r2, r3, r4, r5, r6);
    0x00029f00 mov fp, r0                                        |     
    0x00029f02 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00029f04 beq.w 0x2a14c                                     |         goto label_34;
                                                                 |     }
    0x00029f08 movs r3, 0                                        |     r3 = 0;
    0x00029f0a add.w sl, sp, 0x70                                |     sl += var_70h;
    0x00029f0e str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00029f10 mvn r3, 0x21                                      |     r3 = ~0x21;
    0x00029f14 str r4, [sp, 0x2c]                                |     var_2ch = r4;
    0x00029f16 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00029f18 str.w sb, [sp, 0x44]                              |     __asm ("str.w sb, [var_44h]");
                                                                 | label_6:
    0x00029f1c ldr r4, [sp, 0x10]                                |     r4 = var_10h;
    0x00029f1e mov r2, sl                                        |     r2 = sl;
    0x00029f20 ldr r0, [sp, 0x44]                                |     r0 = var_44h;
    0x00029f22 mov r1, r4                                        |     r1 = r4;
    0x00029f24 bl 0x1a518                                        |     fcn_0001a518 (r0, r1, r2);
    0x00029f28 mov r2, r4                                        |     r2 = r4;
    0x00029f2a str r4, [sp, 0x30]                                |     var_30h = r4;
    0x00029f2c str r0, [sp, 8]                                   |     var_8h = r0;
    0x00029f2e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00029f30 bne.w 0x2a0ee                                     |         goto label_35;
                                                                 |     }
    0x00029f34 ldr r3, [sp, 0x70]                                |     r3 = var_70h;
    0x00029f36 cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x00029f38 bne.w 0x2a12e                                     |         goto label_36;
                                                                 |     }
    0x00029f3c add.w r7, r3, 0x88                                |     r7 = r3 + 0x88;
    0x00029f40 mov r1, r4                                        |     r1 = r4;
    0x00029f42 movs r0, 1                                        |     r0 = 1;
    0x00029f44 str r0, [sp, 0x50]                                |     var_50h = r0;
                                                                 | label_8:
    0x00029f46 ldr r0, [sp, 0x48]                                |     r0 = var_48h;
    0x00029f48 ldr r4, [sp, 0x10]                                |     r4 = var_10h;
    0x00029f4a cmp r0, r4                                        |     
    0x00029f4c iteee eq                                          |     
                                                                 |     if (r0 != r4) {
    0x00029f4e ldreq r3, [sp, 0x54]                              |         r3 = var_54h;
                                                                 |     }
                                                                 |     if (r0 == r4) {
    0x00029f50 addne r3, r3, 0x4000                              |         r3 += 0x4000;
                                                                 |     }
                                                                 |     if (r0 == r4) {
    0x00029f54 subne r3, r3, r7                                  |         r3 -= r7;
                                                                 |     }
                                                                 |     if (r0 != r4) {
    0x00029f56 asrs r3, r3, 2                                    |         r3 >>= 2;
                                                                 |     }
    0x00029f58 it eq                                             |     
                                                                 |     if (r0 != r4) {
    0x00029f5a subeq r3, r3, r1                                  |         r3 -= r1;
                                                                 |     }
    0x00029f5c ldr r1, [sp, 0x3c]                                |     r1 = var_3ch;
    0x00029f5e str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00029f60 ldr r3, [r1, 4]                                   |     r3 = *((r1 + 4));
    0x00029f62 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x00029f66 add.w r3, r2, r3, lsl 2                           |     r3 = r2 + (r3 << 2);
    0x00029f6a adds r3, 8                                        |     r3 += 8;
    0x00029f6c adds r3, r1, r3                                   |     r3 = r1 + r3;
    0x00029f6e ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x00029f70 str r3, [sp, 0x4c]                                |     var_4ch = r3;
    0x00029f72 cmp r1, 0                                         |     
                                                                 |     if (r1 <= 0) {
    0x00029f74 ble.w 0x2a170                                     |         goto label_37;
                                                                 |     }
    0x00029f78 subs r2, r3, 2                                    |     r2 = r3 - 2;
    0x00029f7a movs r3, 0                                        |     r3 = 0;
                                                                 |     do {
    0x00029f7c strh r3, [r2, 2]!                                 |         *((r2 += 2)) = r3;
    0x00029f80 adds r3, 1                                        |         r3++;
    0x00029f82 cmp r3, r1                                        |         
    0x00029f84 bne 0x29f7c                                       |         
                                                                 |     } while (r3 != r1);
    0x00029f86 add r3, sp, 0x7c                                  |     r3 += var_7ch;
    0x00029f88 movs r2, 0x68                                     |     r2 = 0x68;
    0x00029f8a mov r0, r3                                        |     r0 = r3;
    0x00029f8c movs r1, 0                                        |     r1 = 0;
    0x00029f8e str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00029f90 movs r6, 0                                        |     r6 = 0;
    0x00029f92 blx 0x5fcc                                        |     fcn_00005fcc ();
    0x00029f96 ldr.w sb, [sp, 0x4c]                              |     sb = var_4ch;
    0x00029f9a mov r3, sl                                        |     r3 = sl;
    0x00029f9c add.w r8, sp, 0x68                                |     r8 += var_68h;
    0x00029fa0 mov sl, r7                                        |     sl = r7;
    0x00029fa2 mov r7, fp                                        |     r7 = fp;
    0x00029fa4 mov fp, r3                                        |     
                                                                 | label_4:
    0x00029fa6 movs r3, 1                                        |     r3 = 1;
    0x00029fa8 mov r4, sb                                        |     r4 = sb;
    0x00029faa ands.w r5, r6, r3                                 |     r5 = r6 & r3;
    0x00029fae str r3, [sp, 0x68]                                |     var_68h = r3;
    0x00029fb0 str.w sb, [sp, 0x70]                              |     __asm ("str.w sb, [var_70h]");
                                                                 |     if (r5 == r6) {
    0x00029fb4 beq.w 0x2a13a                                     |         goto label_38;
                                                                 |     }
    0x00029fb8 ldr r4, [sp, 0x1c]                                |     r4 = var_1ch;
    0x00029fba movs r5, 0                                        |     r5 = 0;
                                                                 |     do {
    0x00029fbc strd r8, r7, [sp]                                 |         __asm ("strd r8, r7, [sp]");
    0x00029fc0 adds r5, 1                                        |         r5++;
    0x00029fc2 ldrd r2, r1, [r4]                                 |         __asm ("ldrd r2, r1, [r4]");
    0x00029fc6 mov r3, fp                                        |         r3 = fp;
    0x00029fc8 mov r0, sl                                        |         r0 = sl;
    0x00029fca adds r4, 8                                        |         r4 += 8;
    0x00029fcc bl 0x8894                                         |         fcn_00008894 (r0, r1, r2, r3, r4, r5);
    0x00029fd0 asr.w r2, r6, r5                                  |         r2 = r6 >> r5;
    0x00029fd4 lsls r2, r2, 0x1f                                 |         r2 <<= 0x1f;
    0x00029fd6 bmi 0x29fbc                                       |         
                                                                 |     } while (r2 < r2);
    0x00029fd8 ldr r4, [sp, 0x70]                                |     r4 = var_70h;
    0x00029fda ldr r1, [sp, 0x68]                                |     r1 = var_68h;
                                                                 | label_9:
    0x00029fdc add r3, sp, 0xe8                                  |     r3 += var_e8h;
    0x00029fde adds r6, 1                                        |     r6++;
    0x00029fe0 add.w r2, r3, r5, lsl 3                           |     r2 = r3 + (r5 << 3);
    0x00029fe4 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00029fe6 add.w sb, sb, 2                                   |     sb += 2;
    0x00029fea strd r1, r4, [r2, -0x6c]                          |     __asm ("strd r1, r4, [var_7ch]");
    0x00029fee cmp r6, r3                                        |     
                                                                 |     if (r6 != r3) {
    0x00029ff0 bne 0x29fa6                                       |         goto label_4;
                                                                 |     }
    0x00029ff2 adds r5, 1                                        |     r5++;
    0x00029ff4 mov r3, fp                                        |     r3 = fp;
    0x00029ff6 cmp r5, 0xc                                       |     
    0x00029ff8 mov fp, r7                                        |     
    0x00029ffa mov r7, sl                                        |     r7 = sl;
    0x00029ffc mov sl, r3                                        |     sl = r3;
                                                                 |     if (r5 > 0xc) {
    0x00029ffe bgt 0x2a038                                       |         goto label_39;
                                                                 |     }
                                                                 | label_12:
    0x0002a000 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0002a002 add r6, sp, 0x68                                  |     r6 += var_68h;
    0x0002a004 ldr.w r8, [sp, 0x14]                              |     r8 = var_14h;
    0x0002a008 add.w r4, r3, r5, lsl 3                           |     r4 = r3 + (r5 << 3);
    0x0002a00c b 0x2a016                                         |     
                                                                 |     while (r3 >= r2) {
    0x0002a00e adds r5, 1                                        |         r5++;
    0x0002a010 adds r4, 8                                        |         r4 += 8;
    0x0002a012 cmp r5, 0xd                                       |         
                                                                 |         if (r5 == 0xd) {
    0x0002a014 beq 0x2a036                                       |             goto label_40;
                                                                 |         }
                                                                 | label_5:
    0x0002a016 asr.w r2, r8, r5                                  |         r2 = r8 >> r5;
    0x0002a01a lsls r3, r2, 0x1f                                 |         r3 = r2 << 0x1f;
    0x0002a01c bpl 0x2a00e                                       |         
                                                                 |     }
    0x0002a01e strd r6, fp, [sp]                                 |     __asm ("strd r6, fp, [sp]");
    0x0002a022 mov r3, sl                                        |     r3 = sl;
    0x0002a024 ldrd r2, r1, [r4]                                 |     __asm ("ldrd r2, r1, [r4]");
    0x0002a028 mov r0, r7                                        |     r0 = r7;
    0x0002a02a adds r5, 1                                        |     r5++;
    0x0002a02c adds r4, 8                                        |     r4 += 8;
    0x0002a02e bl 0x8894                                         |     fcn_00008894 (r0, r1, r2, r3, r4, r5);
    0x0002a032 cmp r5, 0xd                                       |     
                                                                 |     if (r5 != 0xd) {
    0x0002a034 bne 0x2a016                                       |         goto label_5;
                                                                 |     }
                                                                 | label_40:
    0x0002a036 ldr r1, [sp, 0x68]                                |     r1 = var_68h;
                                                                 | label_39:
    0x0002a038 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0002a03a ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x0002a03c strd r1, r2, [r3, 0x14]                           |     __asm ("strd r1, r2, [r3, 0x14]");
    0x0002a040 ldr r2, [sp, 0x4c]                                |     r2 = var_4ch;
    0x0002a042 strd r2, r7, [r3, 0xc]                            |     __asm ("strd r2, r7, [r3, 0xc]");
    0x0002a046 adds r3, 0x14                                     |     r3 += 0x14;
    0x0002a048 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0002a04a str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x0002a04c ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x0002a04e adds r2, 1                                        |     r2++;
    0x0002a050 str r2, [sp, 0x10]                                |     var_10h = r2;
    0x0002a052 add.w r3, r3, 0x1000                              |     r3 += 0x1000;
    0x0002a056 ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x0002a058 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x0002a05a ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x0002a05c cmp r3, r2                                        |     
                                                                 |     if (r3 > r2) {
    0x0002a05e bgt.w 0x29f1c                                     |         goto label_6;
                                                                 |     }
    0x0002a062 mov r0, fp                                        |     r0 = fp;
    0x0002a064 ldr.w sb, [sp, 0x44]                              |     sb = var_44h;
    0x0002a068 bl 0xde98                                         |     fcn_0000de98 (r0);
    0x0002a06c ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x0002a06e movs r4, 2                                        |     r4 = 2;
    0x0002a070 ldr.w r8, [sp, 0x5c]                              |     r8 = var_5ch;
    0x0002a074 subs r7, r4, 1                                    |     r7 = r4 - 1;
    0x0002a076 str.w sl, [sp, 0x1c]                              |     __asm ("str.w sl, [var_1ch]");
    0x0002a07a cmp r3, 0                                         |     
    0x0002a07c ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0002a07e it eq                                             |     
                                                                 |     if (r3 != 0) {
    0x0002a080 moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x0002a082 add.w r5, r8, r7, lsl 2                           |     r5 = r8 + (r7 << 2);
    0x0002a086 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x0002a088 ldr r6, [r5, 0x64]                                |     r6 = *((r5 + 0x64));
    0x0002a08a ldrd fp, r3, [sb, 0x44]                           |     __asm ("ldrd fp, r3, [sb, 0x44]");
    0x0002a08e cmp r6, fp                                        |     
    0x0002a090 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x0002a092 mov.w r3, 0                                       |     r3 = 0;
    0x0002a096 str r3, [sp, 0x10]                                |     var_10h = r3;
                                                                 |     if (r6 <= fp) {
    0x0002a098 blo 0x2a0ac                                       |         goto label_41;
                                                                 |     }
                                                                 |     do {
                                                                 | label_7:
    0x0002a09a cmp r4, 5                                         |         
                                                                 |         if (r4 == 5) {
    0x0002a09c beq 0x2a18e                                       |             goto label_42;
                                                                 |         }
                                                                 | label_17:
    0x0002a09e adds r4, 1                                        |         r4++;
    0x0002a0a0 subs r7, r4, 1                                    |         r7 = r4 - 1;
    0x0002a0a2 add.w r5, r8, r7, lsl 2                           |         r5 = r8 + (r7 << 2);
    0x0002a0a6 ldr r6, [r5, 0x64]                                |         r6 = *((r5 + 0x64));
    0x0002a0a8 cmp r6, fp                                        |         
    0x0002a0aa bhs 0x2a09a                                       |         
                                                                 |     } while (r6 >= fp);
                                                                 | label_41:
    0x0002a0ac movs r3, 1                                        |     r3 = 1;
    0x0002a0ae add.w sl, r4, 2                                   |     sl = r4 + 2;
    0x0002a0b2 str r3, [sp]                                      |     *(sp) = r3;
    0x0002a0b4 mov r0, sb                                        |     r0 = sb;
    0x0002a0b6 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x0002a0b8 mov r3, sl                                        |     r3 = sl;
    0x0002a0ba ldr r1, [sp, 0x20]                                |     r1 = var_20h;
    0x0002a0bc bl 0xb114                                         |     fcn_0000b114 (r0, r1, r2, r3, r4);
    0x0002a0c0 str r0, [sp, 0x10]                                |     var_10h = r0;
    0x0002a0c2 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0002a0c4 bne.w 0x2a1d0                                     |         goto label_43;
                                                                 |     }
    0x0002a0c8 cmp r7, 1                                         |     
    0x0002a0ca ldrb.w r2, [sb, 0x2b]                             |     r2 = *((sb + 0x2b));
                                                                 |     if (r7 == 1) {
    0x0002a0ce beq.w 0x2a26c                                     |         goto label_44;
                                                                 |     }
    0x0002a0d2 mov.w r3, -1                                      |     r3 = -1;
    0x0002a0d6 str r3, [r5, 0x64]                                |     *((r5 + 0x64)) = r3;
    0x0002a0d8 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0002a0da bne 0x2a09a                                       |         goto label_7;
                                                                 |     }
                                                                 | label_16:
    0x0002a0dc ldr.w r0, [sb, 4]                                 |     r0 = *((sb + 4));
    0x0002a0e0 mov r1, sl                                        |     r1 = sl;
    0x0002a0e2 movs r3, 9                                        |     r3 = 9;
    0x0002a0e4 movs r2, 1                                        |     r2 = 1;
    0x0002a0e6 ldr r5, [r0]                                      |     r5 = *(r0);
    0x0002a0e8 ldr r5, [r5, 0x38]                                |     r5 = *((r5 + 0x38));
    0x0002a0ea blx r5                                            |     uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0002a0ec b 0x2a09a                                         |     goto label_7;
                                                                 | label_35:
    0x0002a0ee mov r0, fp                                        |     r0 = fp;
    0x0002a0f0 ldr.w sb, [sp, 0x44]                              |     sb = var_44h;
    0x0002a0f4 bl 0xde98                                         |     fcn_0000de98 (r0);
    0x0002a0f8 ldr r0, [sp, 0x3c]                                |     r0 = var_3ch;
    0x0002a0fa bl 0xde98                                         |     fcn_0000de98 (r0);
    0x0002a0fe ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x0002a100 cmp r3, 5                                         |     
    0x0002a102 mov.w r3, 1                                       |     r3 = 1;
    0x0002a106 str r3, [sp, 0x18]                                |     var_18h = r3;
                                                                 |     if (r3 == 5) {
    0x0002a108 bne 0x2a124                                       |         
                                                                 | label_10:
    0x0002a10a ldr r2, [sp, 0x38]                                |         r2 = var_38h;
                                                                 |         if (r2 != 0) {
    0x0002a10c cbz r2, 0x2a114                                   |             
    0x0002a10e ldr.w r3, [sb, 0x44]                              |             r3 = *((sb + 0x44));
    0x0002a112 str r3, [r2]                                      |             *(r2) = r3;
                                                                 |         }
    0x0002a114 ldr r3, [sp, 0x34]                                |         r3 = var_34h;
                                                                 |         if (r3 == 0) {
    0x0002a116 cbz r3, 0x2a124                                   |             goto label_11;
                                                                 |         }
    0x0002a118 ldr.w r3, [sb, 0x20]                              |         r3 = *((sb + 0x20));
    0x0002a11c ldr r2, [sp, 0x34]                                |         r2 = var_34h;
    0x0002a11e ldr r3, [r3]                                      |         r3 = *(r3);
    0x0002a120 ldr r3, [r3, 0x60]                                |         r3 = *((r3 + 0x60));
    0x0002a122 str r3, [r2]                                      |         *(r2) = r3;
                                                                 |     }
                                                                 | label_11:
    0x0002a124 ldr r4, [sp, 0x64]                                |     r4 = var_64h;
    0x0002a126 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0002a128 beq.w 0x29d96                                     |         goto label_1;
                                                                 |     }
    0x0002a12c b 0x29e44                                         |     goto label_3;
                                                                 | label_36:
    0x0002a12e ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x0002a130 mov r7, r3                                        |     r7 = r3;
    0x0002a132 adds r0, r1, 1                                    |     r0 = r1 + 1;
    0x0002a134 lsls r2, r1, 1                                    |     r2 = r1 << 1;
    0x0002a136 str r0, [sp, 0x50]                                |     var_50h = r0;
    0x0002a138 b 0x29f46                                         |     goto label_8;
                                                                 | label_38:
    0x0002a13a movs r1, 1                                        |     r1 = 1;
    0x0002a13c b 0x29fdc                                         |     goto label_9;
                                                                 | label_30:
    0x0002a13e ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x0002a140 str r3, [sp, 8]                                   |     var_8h = r3;
    0x0002a142 ldr.w r3, [sb, 0x20]                              |     r3 = *((sb + 0x20));
    0x0002a146 ldr r3, [r3]                                      |     r3 = *(r3);
    0x0002a148 ldr r3, [r3, 0x60]                                |     r3 = *((r3 + 0x60));
    0x0002a14a b 0x2a10a                                         |     goto label_10;
                                                                 | label_34:
    0x0002a14c bl 0xde98                                         |     fcn_0000de98 (r0);
    0x0002a150 movs r3, 1                                        |     r3 = 1;
    0x0002a152 ldr r0, [sp, 0x3c]                                |     r0 = var_3ch;
    0x0002a154 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x0002a156 movs r3, 7                                        |     r3 = 7;
    0x0002a158 str r3, [sp, 8]                                   |     var_8h = r3;
    0x0002a15a bl 0xde98                                         |     fcn_0000de98 (r0);
    0x0002a15e b 0x2a124                                         |     goto label_11;
                                                                 | label_33:
    0x0002a160 movs r3, 1                                        |     r3 = 1;
    0x0002a162 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x0002a164 movs r3, 7                                        |     r3 = 7;
    0x0002a166 str r3, [sp, 8]                                   |     var_8h = r3;
    0x0002a168 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0002a16a beq.w 0x29d96                                     |         goto label_1;
                                                                 |     }
    0x0002a16e b 0x29e44                                         |     goto label_3;
                                                                 | label_37:
    0x0002a170 movs r3, 0                                        |     r3 = 0;
    0x0002a172 movs r2, 0x68                                     |     r2 = 0x68;
    0x0002a174 str r3, [sp, 0x68]                                |     var_68h = r3;
    0x0002a176 movs r1, 0                                        |     r1 = 0;
    0x0002a178 str r3, [sp, 0x70]                                |     var_70h = r3;
    0x0002a17a add r3, sp, 0x7c                                  |     r3 += var_7ch;
    0x0002a17c mov r0, r3                                        |     r0 = r3;
    0x0002a17e str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x0002a180 movs r5, 1                                        |     r5 = 1;
    0x0002a182 blx 0x5fcc                                        |     fcn_00005fcc ();
    0x0002a186 b 0x2a000                                         |     goto label_12;
                                                                 | label_32:
    0x0002a188 movs r3, 0                                        |     r3 = 0;
    0x0002a18a str r3, [sp, 8]                                   |     var_8h = r3;
    0x0002a18c b 0x2a10a                                         |     goto label_10;
                                                                 | label_42:
    0x0002a18e ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x0002a190 ldr.w sl, [sp, 0x1c]                              |     sl = var_1ch;
    0x0002a194 ldr r3, [r3, 0x60]                                |     r3 = *((r3 + 0x60));
    0x0002a196 cmp r3, fp                                        |     
                                                                 |     if (r3 <= fp) {
    0x0002a198 blo 0x2a204                                       |         goto label_45;
                                                                 |     }
                                                                 | label_14:
    0x0002a19a ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0002a19c cmp r3, 5                                         |     
                                                                 |     if (r3 == 5) {
    0x0002a19e beq 0x2a1fc                                       |         goto label_15;
                                                                 |     }
    0x0002a1a0 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0002a1a2 clz r5, r3                                        |     r5 &= r3;
    0x0002a1a6 lsrs r5, r5, 5                                    |     r5 >>= 5;
                                                                 | label_13:
    0x0002a1a8 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x0002a1aa cmp r3, 0                                         |     
    0x0002a1ac ite eq                                            |     
                                                                 |     if (r3 != 0) {
    0x0002a1ae moveq r4, 0                                       |         r4 = 0;
                                                                 |     }
                                                                 |     if (r3 == 0) {
    0x0002a1b0 andne r4, r5, 1                                   |         r4 = r5 & 1;
                                                                 |     }
                                                                 |     if (r4 != 0) {
    0x0002a1b4 cbz r4, 0x2a1e0                                   |         
    0x0002a1b6 ldr r3, [sp, 0x5c]                                |         r3 = var_5ch;
    0x0002a1b8 ldr r2, [r3, 0x60]                                |         r2 = *((r3 + 0x60));
    0x0002a1ba ldr.w r3, [sb, 0x44]                              |         r3 = *((sb + 0x44));
    0x0002a1be cmp r2, r3                                        |         
                                                                 |         if (r2 >= r3) {
    0x0002a1c0 bhs 0x2a24c                                       |             goto label_46;
                                                                 |         }
    0x0002a1c2 ldr r0, [sp, 0x3c]                                |         r0 = var_3ch;
    0x0002a1c4 str r4, [sp, 0x18]                                |         var_18h = r4;
    0x0002a1c6 bl 0xde98                                         |         fcn_0000de98 (r0);
    0x0002a1ca movs r3, 5                                        |         r3 = 5;
    0x0002a1cc str r3, [sp, 8]                                   |         var_8h = r3;
    0x0002a1ce b 0x2a10a                                         |         goto label_10;
                                                                 | label_43:
    0x0002a1d0 ldr r3, [sp, 0x10]                                |         r3 = var_10h;
    0x0002a1d2 cmp r3, 5                                         |         
                                                                 |         if (r3 != 5) {
    0x0002a1d4 bne.w 0x2a400                                     |             goto label_47;
                                                                 |         }
    0x0002a1d8 movs r3, 0                                        |         r3 = 0;
    0x0002a1da mov fp, r6                                        |         
    0x0002a1dc str r3, [sp, 0x20]                                |         var_20h = r3;
    0x0002a1de b 0x2a09a                                         |         goto label_7;
                                                                 |     }
    0x0002a1e0 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0002a1e2 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0002a1e4 cmp r2, 0                                         |     
    0x0002a1e6 it ne                                             |     
                                                                 |     if (r2 == 0) {
    0x0002a1e8 orrne r3, r3, 1                                   |         r3 |= 1;
                                                                 |     }
    0x0002a1ec str r2, [sp, 8]                                   |     var_8h = r2;
    0x0002a1ee str r3, [sp, 0x18]                                |     var_18h = r3;
                                                                 | label_21:
    0x0002a1f0 ldr r0, [sp, 0x3c]                                |     r0 = var_3ch;
    0x0002a1f2 bl 0xde98                                         |     fcn_0000de98 (r0);
    0x0002a1f6 cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x0002a1f8 bne 0x2a10a                                       |         goto label_10;
                                                                 |     }
    0x0002a1fa b 0x2a124                                         |     goto label_11;
                                                                 | label_15:
    0x0002a1fc movs r3, 0                                        |     r3 = 0;
    0x0002a1fe movs r5, 1                                        |     r5 = 1;
    0x0002a200 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x0002a202 b 0x2a1a8                                         |     goto label_13;
                                                                 | label_45:
    0x0002a204 movs r4, 1                                        |     r4 = 1;
    0x0002a206 movs r3, 3                                        |     r3 = 3;
    0x0002a208 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x0002a20a mov r0, sb                                        |     r0 = sb;
    0x0002a20c ldr r1, [sp, 0x20]                                |     r1 = var_20h;
    0x0002a20e str r4, [sp]                                      |     *(sp) = r4;
    0x0002a210 bl 0xb114                                         |     r0 = fcn_0000b114 (r0, r1, r2, r3, r4);
    0x0002a214 mov r3, r0                                        |     r3 = r0;
                                                                 |     if (r0 != 0) {
    0x0002a216 cbnz r0, 0x2a25c                                  |         goto label_48;
                                                                 |     }
    0x0002a218 ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x0002a21a ldr r3, [r3, 0x60]                                |     r3 = *((r3 + 0x60));
    0x0002a21c str r3, [sp, 0x24]                                |     var_24h = r3;
    0x0002a21e ldr r3, [sp, 0x110]                               |     r3 = *(arg_110h);
                                                                 |     if (r3 == 0) {
    0x0002a220 cbz r3, 0x2a278                                   |         goto label_49;
                                                                 |     }
    0x0002a222 ldr.w r0, [sb, 8]                                 |     r0 = *((sb + 8));
    0x0002a226 ldr r1, [sp, 0x110]                               |     r1 = *(arg_110h);
    0x0002a228 ldr r3, [r0]                                      |     r3 = *(r0);
    0x0002a22a ldr r3, [r3, 0x14]                                |     r3 = *((r3 + 0x14));
    0x0002a22c blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x0002a22e str r0, [sp, 0x10]                                |     var_10h = r0;
                                                                 |     if (r0 == 0) {
    0x0002a230 cbz r0, 0x2a278                                   |         goto label_49;
                                                                 |     }
                                                                 | label_18:
    0x0002a232 ldrb.w r3, [sb, 0x2b]                             |     r3 = *((sb + 0x2b));
    0x0002a236 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0002a238 bne 0x2a19a                                       |         goto label_14;
                                                                 |     }
    0x0002a23a ldr.w r0, [sb, 4]                                 |     r0 = *((sb + 4));
    0x0002a23e movs r3, 9                                        |     r3 = 9;
    0x0002a240 movs r2, 1                                        |     r2 = 1;
    0x0002a242 movs r1, 3                                        |     r1 = 3;
    0x0002a244 ldr r4, [r0]                                      |     r4 = *(r0);
    0x0002a246 ldr r4, [r4, 0x38]                                |     r4 = *((r4 + 0x38));
    0x0002a248 blx r4                                            |     uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0002a24a b 0x2a19a                                         |     goto label_14;
                                                                 | label_46:
    0x0002a24c ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x0002a24e cmp r3, 2                                         |     
                                                                 |     if (r3 == 2) {
    0x0002a250 beq.w 0x2a410                                     |         goto label_50;
                                                                 |     }
                                                                 | label_22:
    0x0002a254 ldr r0, [sp, 0x3c]                                |     r0 = var_3ch;
    0x0002a256 bl 0xde98                                         |     fcn_0000de98 (r0);
    0x0002a25a b 0x2a10a                                         |     goto label_10;
                                                                 | label_48:
    0x0002a25c cmp r0, 5                                         |     
                                                                 |     if (r0 == 5) {
    0x0002a25e beq 0x2a1fc                                       |         goto label_15;
                                                                 |     }
    0x0002a260 ldr r0, [sp, 0x3c]                                |     r0 = var_3ch;
    0x0002a262 str r3, [sp, 8]                                   |     var_8h = r3;
    0x0002a264 str r4, [sp, 0x18]                                |     var_18h = r4;
    0x0002a266 bl 0xde98                                         |     fcn_0000de98 (r0);
    0x0002a26a b 0x2a124                                         |     goto label_11;
                                                                 | label_44:
    0x0002a26c str.w fp, [r5, 0x64]                              |     __asm ("str.w fp, [r5, 0x64]");
    0x0002a270 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0002a272 beq.w 0x2a0dc                                     |         goto label_16;
                                                                 |     }
    0x0002a276 b 0x2a09e                                         |     goto label_17;
                                                                 | label_49:
    0x0002a278 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x0002a27a add r1, sp, 0x68                                  |     r1 += var_68h;
    0x0002a27c ldr r4, [sp, 0x58]                                |     r4 = var_58h;
    0x0002a27e ldr.w r0, [sb, 4]                                 |     r0 = *((sb + 4));
    0x0002a282 umull r4, r2, r2, r4                              |     r4:r2 = r2 * r4;
    0x0002a286 ldr r3, [r0]                                      |     r3 = *(r0);
    0x0002a288 ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x0002a28a strd r4, r2, [sp, 0x70]                           |     __asm ("strd r4, r2, [var_70h]");
    0x0002a28e blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0002a290 str r0, [sp, 0x10]                                |     var_10h = r0;
    0x0002a292 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0002a294 bne 0x2a232                                       |         goto label_18;
                                                                 |     }
    0x0002a296 ldrd r3, r1, [sp, 0x6c]                           |     __asm ("ldrd r3, r1, [var_70h]");
    0x0002a29a ldr r0, [sp, 0x68]                                |     r0 = var_68h;
    0x0002a29c ldr r2, [sp, 0x74]                                |     r2 = var_74h;
    0x0002a29e cmp r0, r1                                        |     
    0x0002a2a0 sbcs r3, r2                                       |     __asm ("sbcs r3, r2");
                                                                 |     if (r0 < r1) {
    0x0002a2a2 bge 0x2a2b2                                       |         
    0x0002a2a4 ldr.w r0, [sb, 4]                                 |         r0 = *((sb + 4));
    0x0002a2a8 mov r2, sl                                        |         r2 = sl;
    0x0002a2aa movs r1, 5                                        |         r1 = 5;
    0x0002a2ac ldr r3, [r0]                                      |         r3 = *(r0);
    0x0002a2ae ldr r3, [r3, 0x28]                                |         r3 = *((r3 + 0x28));
    0x0002a2b0 blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
                                                                 |     }
    0x0002a2b2 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x0002a2b4 mov.w r8, 0                                       |     r8 = 0;
    0x0002a2b8 ldrd r4, sl, [r3]                                 |     __asm ("ldrd r4, sl, [r3]");
    0x0002a2bc ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x0002a2be adds r3, 0x18                                     |     r3 += 0x18;
    0x0002a2c0 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x0002a2c2 add.w r3, sl, -1                                  |     r3 = sl + -1;
    0x0002a2c6 str r3, [sp, 0x1c]                                |     var_1ch = r3;
                                                                 | label_20:
    0x0002a2c8 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0002a2ca cmp r3, 0                                         |     
    0x0002a2cc mov r6, r3                                        |     r6 = r3;
                                                                 |     if (r3 < 0) {
    0x0002a2ce blt 0x2a3ac                                       |         goto label_51;
                                                                 |     }
    0x0002a2d0 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x0002a2d2 add.w r5, sl, sl, lsl 2                           |     r5 = sl + (sl << 2);
    0x0002a2d6 mov.w r7, -1                                      |     r7 = -1;
    0x0002a2da add.w r5, r3, r5, lsl 2                           |     r5 = r3 + (r5 << 2);
                                                                 | label_19:
    0x0002a2de ldr r3, [r5, -0xc]                                |     r3 = *((r5 - 0xc));
    0x0002a2e2 ldr r0, [r5]                                      |     r0 = *(r5);
    0x0002a2e4 cmp r0, r3                                        |     
                                                                 |     if (r0 <= r3) {
    0x0002a2e6 ble 0x2a31e                                       |         goto label_52;
                                                                 |     }
    0x0002a2e8 ldr r2, [r5, -0x8]                                |     r2 = *((r5 - 0x8));
    0x0002a2ec ldr lr, [r5, -0x4]                                |     
    0x0002a2f0 add.w r2, r2, r3, lsl 1                           |     r2 += (r3 << 1);
    0x0002a2f4 adds r3, 1                                        |     r3++;
    0x0002a2f6 b 0x2a306                                         |     
                                                                 |     while (r4 >= r1) {
    0x0002a2f8 cmp r0, r3                                        |         
    0x0002a2fa add.w r1, r3, 1                                   |         r1 = r3 + 1;
    0x0002a2fe str r3, [r5, -0xc]                                |         *((r5 - 0xc)) = r3;
                                                                 |         if (r0 == r3) {
    0x0002a302 beq 0x2a31e                                       |             goto label_52;
                                                                 |         }
    0x0002a304 mov r3, r1                                        |         r3 = r1;
    0x0002a306 ldrh ip, [r2], 2                                  |         ip = *(r2);
                                                                 |         r2 += 2;
    0x0002a30a ldr.w r1, [lr, ip, lsl 2]                         |         offset_0 = ip << 2;
                                                                 |         r1 = *((lr + offset_0));
    0x0002a30e cmp r4, r1                                        |         
    0x0002a310 bhs 0x2a2f8                                       |         
                                                                 |     }
    0x0002a312 cmp r1, r7                                        |     
                                                                 |     if (r1 < r7) {
    0x0002a314 bhs 0x2a31e                                       |         
    0x0002a316 ldr r3, [r5, 4]                                   |         r3 = *((r5 + 4));
    0x0002a318 mov r7, r1                                        |         r7 = r1;
    0x0002a31a add.w r8, ip, r3                                  |         r8 = ip + r3;
                                                                 |     }
                                                                 | label_52:
    0x0002a31e subs r6, 1                                        |     r6--;
    0x0002a320 subs r5, 0x14                                     |     r5 -= 0x14;
    0x0002a322 adds r0, r6, 1                                    |     r0 = r6 + 1;
                                                                 |     if (r0 != r6) {
    0x0002a324 bne 0x2a2de                                       |         goto label_19;
                                                                 |     }
    0x0002a326 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x0002a328 adds r1, r7, 1                                    |     r1 = r7 + 1;
    0x0002a32a mov r4, r7                                        |     r4 = r7;
    0x0002a32c str r7, [r3]                                      |     *(r3) = r7;
                                                                 |     if (r1 == r7) {
    0x0002a32e beq 0x2a3b4                                       |         goto label_53;
                                                                 |     }
    0x0002a330 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x0002a332 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x0002a334 cmp r3, r8                                        |     
    0x0002a336 ite lo                                            |     
                                                                 |     if (r3 >= r8) {
    0x0002a338 movlo r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r3 < r8) {
    0x0002a33a movhs r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x0002a33c cmp fp, r8                                        |     
    0x0002a33e it lo                                             |     
                                                                 |     if (fp >= r8) {
    0x0002a340 orrlo r3, r3, 1                                   |         r3 |= 1;
                                                                 |     }
    0x0002a344 cmp r2, r4                                        |     
    0x0002a346 it lo                                             |     
                                                                 |     if (r2 >= r4) {
    0x0002a348 orrlo r3, r3, 1                                   |         r3 |= 1;
                                                                 |     }
    0x0002a34c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0002a34e bne 0x2a2c8                                       |         goto label_20;
                                                                 |     }
    0x0002a350 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0002a352 add.w r7, r8, -1                                  |     r7 = r8 + -1;
    0x0002a356 ldr.w r0, [sb, 8]                                 |     r0 = *((sb + 8));
    0x0002a35a mov.w ip, 0                                       |     
    0x0002a35e ldr.w sl, [sp, 0x40]                              |     sl = var_40h;
    0x0002a362 ldr r2, [sp, 0x58]                                |     r2 = var_58h;
    0x0002a364 umull r5, r3, r7, r3                              |     r5:r3 = r7 * r3;
    0x0002a368 ldr r6, [r0]                                      |     r6 = *(r0);
    0x0002a36a mov r1, sl                                        |     r1 = sl;
    0x0002a36c mla r3, r7, ip, r3                                |     __asm ("mla r3, r7, ip, r3");
    0x0002a370 adds r5, 0x38                                     |     r5 += 0x38;
    0x0002a372 str r5, [sp]                                      |     *(sp) = r5;
    0x0002a374 adc r3, r3, 0                                     |     __asm ("adc r3, r3, 0");
    0x0002a378 str r3, [sp, 4]                                   |     var_4h = r3;
    0x0002a37a ldr r3, [r6, 8]                                   |     r3 = *((r6 + 8));
    0x0002a37c blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0002a37e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0002a380 bne 0x2a3fc                                       |         goto label_54;
                                                                 |     }
    0x0002a382 ldr r2, [sp, 0x58]                                |     r2 = var_58h;
    0x0002a384 subs r4, 1                                        |     r4--;
    0x0002a386 ldr.w r0, [sb, 4]                                 |     r0 = *((sb + 4));
    0x0002a38a mov r1, sl                                        |     r1 = sl;
    0x0002a38c umull r4, r5, r4, r2                              |     r4:r5 = r4 * r2;
    0x0002a390 ldr r3, [r0]                                      |     r3 = *(r0);
    0x0002a392 strd r4, r5, [sp]                                 |     __asm ("strd r4, r5, [sp]");
    0x0002a396 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x0002a398 blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0002a39a cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0002a39c bne 0x2a3fc                                       |         goto label_54;
                                                                 |     }
    0x0002a39e ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x0002a3a0 ldrd r4, sl, [r3]                                 |     __asm ("ldrd r4, sl, [r3]");
    0x0002a3a4 add.w r3, sl, -1                                  |     r3 = sl + -1;
    0x0002a3a8 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x0002a3aa b 0x2a2c8                                         |     goto label_20;
                                                                 | label_51:
    0x0002a3ac ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x0002a3ae mov.w r3, -1                                      |     r3 = -1;
    0x0002a3b2 str r3, [r2]                                      |     *(r2) = r3;
                                                                 | label_53:
    0x0002a3b4 ldr.w r3, [sb, 0x20]                              |     r3 = *((sb + 0x20));
    0x0002a3b8 ldr r3, [r3]                                      |     r3 = *(r3);
    0x0002a3ba ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x0002a3bc cmp r3, fp                                        |     
    0x0002a3be beq 0x2a3c8                                       |     
                                                                 |     while (r0 == 0) {
    0x0002a3c0 ldr r3, [sp, 0x5c]                                |         r3 = var_5ch;
    0x0002a3c2 str.w fp, [r3, 0x60]                              |         __asm ("str.w fp, [r3, 0x60]");
    0x0002a3c6 b 0x2a232                                         |         goto label_18;
    0x0002a3c8 ldr.w r0, [sb, 4]                                 |         r0 = *((sb + 4));
    0x0002a3cc ldr.w r2, [sb, 0x48]                              |         r2 = *((sb + 0x48));
    0x0002a3d0 ldr r3, [sp, 0x58]                                |         r3 = var_58h;
    0x0002a3d2 ldr r1, [r0]                                      |         r1 = *(r0);
    0x0002a3d4 umull r2, r3, r2, r3                              |         r2:r3 = r2 * r3;
    0x0002a3d8 ldr r1, [r1, 0x10]                                |         r1 = *((r1 + 0x10));
    0x0002a3da blx r1                                            |         uint32_t (*r1)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0002a3dc ldr r3, [sp, 0x110]                               |         r3 = *(arg_110h);
    0x0002a3de clz r2, r0                                        |         r2 &= r0;
    0x0002a3e2 lsrs r2, r2, 5                                    |         r2 >>= 5;
    0x0002a3e4 cmp r3, 0                                         |         
    0x0002a3e6 it eq                                             |         
                                                                 |         if (r3 != 0) {
    0x0002a3e8 moveq r2, 0                                       |             r2 = 0;
                                                                 |         }
                                                                 |         if (r2 != 0) {
    0x0002a3ea cbz r2, 0x2a3f8                                   |             
    0x0002a3ec ldr.w r0, [sb, 4]                                 |             r0 = *((sb + 4));
    0x0002a3f0 mov r1, r3                                        |             r1 = r3;
    0x0002a3f2 ldr r3, [r0]                                      |             r3 = *(r0);
    0x0002a3f4 ldr r3, [r3, 0x14]                                |             r3 = *((r3 + 0x14));
    0x0002a3f6 blx r3                                            |             r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
                                                                 |         }
    0x0002a3f8 cmp r0, 0                                         |         
    0x0002a3fa beq 0x2a3c0                                       |         
                                                                 |     }
                                                                 | label_54:
    0x0002a3fc str r0, [sp, 0x10]                                |     var_10h = r0;
    0x0002a3fe b 0x2a232                                         |     goto label_18;
                                                                 | label_47:
    0x0002a400 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0002a402 ldr r0, [sp, 0x3c]                                |     r0 = var_3ch;
    0x0002a404 str r3, [sp, 8]                                   |     var_8h = r3;
    0x0002a406 movs r3, 1                                        |     r3 = 1;
    0x0002a408 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x0002a40a bl 0xde98                                         |     fcn_0000de98 (r0);
    0x0002a40e b 0x2a124                                         |     goto label_11;
                                                                 | label_50:
    0x0002a410 movs r5, 4                                        |     r5 = 4;
    0x0002a412 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x0002a414 ldr r1, [sp, 0x20]                                |     r1 = var_20h;
    0x0002a416 mov r3, r5                                        |     r3 = r5;
    0x0002a418 mov r0, sb                                        |     r0 = sb;
    0x0002a41a str r5, [sp]                                      |     *(sp) = r5;
    0x0002a41c bl 0xb114                                         |     fcn_0000b114 (r0, r1, r2, r3, r4);
    0x0002a420 str r0, [sp, 8]                                   |     var_8h = r0;
                                                                 |     if (r0 != 0) {
    0x0002a422 cbz r0, 0x2a432                                   |         
    0x0002a424 sub.w r5, r0, 5                                   |         r5 = r0 - 5;
    0x0002a428 str r4, [sp, 0x18]                                |         var_18h = r4;
    0x0002a42a clz r5, r5                                        |         r5 &= r5;
    0x0002a42e lsrs r5, r5, 5                                    |         r5 >>= 5;
    0x0002a430 b 0x2a1f0                                         |         goto label_21;
                                                                 |     }
    0x0002a432 ldrb.w r3, [sb, 0x2b]                             |     r3 = *((sb + 0x2b));
    0x0002a436 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0002a438 bne.w 0x2a254                                     |         goto label_22;
                                                                 |     }
    0x0002a43c ldr.w r0, [sb, 4]                                 |     r0 = *((sb + 4));
    0x0002a440 movs r3, 9                                        |     r3 = 9;
    0x0002a442 mov r2, r5                                        |     r2 = r5;
    0x0002a444 mov r1, r5                                        |     r1 = r5;
    0x0002a446 ldr r4, [r0]                                      |     r4 = *(r0);
    0x0002a448 ldr r4, [r4, 0x38]                                |     r4 = *((r4 + 0x38));
    0x0002a44a blx r4                                            |     uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0002a44c ldr r0, [sp, 0x3c]                                |     r0 = var_3ch;
    0x0002a44e bl 0xde98                                         |     fcn_0000de98 (r0);
    0x0002a452 b 0x2a10a                                         |     goto label_10;
                                                                 | label_27:
    0x0002a454 blx 0x6498                                        |     fcn_00006498 ();
    0x0002a458 svc 0x36                                          |     __asm ("svc 0x36");
    0x0002a45a movs r4, r0                                       |     r4 = r0;
    0x0002a45c lsls r0, r1, 0xe                                  |     r0 = r1 << 0xe;
    0x0002a45e movs r0, r0                                       |     
    0x0002a460 udf 0x6e                                          |     __asm ("udf 0x6e");
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x2ad84 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.0002ad84 ()                                      | void fcn_0002ad84 (int16_t arg_0h, int16_t arg_ch, int16_t arg_10h, int16_t arg_12h, int16_t arg_18h, int16_t arg_40h, int16_t arg_48h, int16_t arg_4ch, int16_t arg_50h, int16_t arg_54h, int16_t arg_58h, int16_t arg_94h, int16_t arg_98h, int16_t arg_ach, int16_t arg_d8h, int16_t arg_dch, int16_t arg1, int16_t arg2) {
                                                                 |     int16_t var_0h_3;
                                                                 |     int16_t var_4h_2;
                                                                 |     int16_t var_8h_2;
                                                                 |     int16_t var_ch_3;
                                                                 |     int16_t var_14h_3;
                                                                 |     int16_t var_18h_3;
                                                                 |     int16_t var_0h_2;
                                                                 |     int16_t var_24h_2;
                                                                 |     int16_t var_28h_2;
                                                                 |     int16_t var_10h_2;
                                                                 |     int16_t var_44h_2;
                                                                 |     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_2;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_44h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x0002ad84 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x0002ad88 movs r3, 1                                        |     r3 = 1;
    0x0002ad8a sub sp, 0x4c                                      |     
    0x0002ad8c mov sl, r1                                        |     sl = r1;
    0x0002ad8e mov fp, r0                                        |     
    0x0002ad90 movs r2, 0                                        |     r2 = 0;
    0x0002ad92 ldr.w r1, [pc, 0x488]                             |     
    0x0002ad96 str r3, [sp, 0x28]                                |     var_28h_2 = r3;
    0x0002ad98 ldr.w r3, [pc, 0x484]                             |     r3 = *(0x2b220);
    0x0002ad9c add r1, pc                                        |     r1 = 0x55fbe;
    0x0002ad9e ldr r0, [r0, 0x40]                                |     r0 = *(arg_0hx40);
    0x0002ada0 ldr.w r4, [fp]                                    |     r4 = *(fp);
    0x0002ada4 ldr r3, [r1, r3]                                  |     
    0x0002ada6 add r1, sp, 0x30                                  |     r1 += var_10h_2;
    0x0002ada8 ldr r3, [r3]                                      |     r3 = *(0x55fbe);
    0x0002adaa str r3, [sp, 0x44]                                |     var_44h_2 = r3;
    0x0002adac mov.w r3, 0                                       |     r3 = 0;
    0x0002adb0 ldr r3, [r0]                                      |     r3 = *(r0);
    0x0002adb2 str r2, [sp, 0x24]                                |     var_24h_2 = r2;
    0x0002adb4 ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x0002adb6 blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0002adb8 mov r5, r0                                        |     r5 = r0;
    0x0002adba cbz r0, 0x2adec                                   |     
                                                                 |     while (r0 != 0) {
    0x0002adbc ldrb.w r3, [fp, 0xc]                              |         r3 = *(arg_ch);
    0x0002adc0 strb.w r3, [fp, 0x12]                             |         *(arg_12h) = r3;
                                                                 | label_5:
    0x0002adc4 mov r0, fp                                        |         r0 = fp;
    0x0002adc6 bl 0xb034                                         |         fcn_0000b034 (r0);
    0x0002adca ldr.w r2, [pc, 0x458]                             |         r2 = *(0x0002b224);
    0x0002adce ldr.w r3, [pc, 0x450]                             |         r3 = *(0x2b222);
    0x0002add2 add r2, pc                                        |         r2 += pc;
    0x0002add4 ldr r3, [r2, r3]                                  |         r3 = *((r2 + r3));
    0x0002add6 ldr r2, [r3]                                      |         r2 = *(0x2b222);
    0x0002add8 ldr r3, [sp, 0x44]                                |         r3 = var_44h_2;
    0x0002adda eors r2, r3                                       |         r2 ^= r3;
    0x0002addc mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0002ade0 bne.w 0x2b216                                     |             goto label_13;
                                                                 |         }
    0x0002ade4 mov r0, r5                                        |         r0 = r5;
    0x0002ade6 add sp, 0x4c                                      |         
    0x0002ade8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
    0x0002adec ldr.w r3, [fp]                                    |         r3 = *(fp);
    0x0002adf0 ldr.w r6, [fp, 0xd8]                              |         r6 = *(arg_d8h);
    0x0002adf4 ldr.w r0, [fp, 0x40]                              |         r0 = *(arg_40h);
    0x0002adf8 ldr r2, [r3, 8]                                   |         r2 = *((r3 + 8));
    0x0002adfa mov r1, r6                                        |         r1 = r6;
    0x0002adfc adds r2, 1                                        |         r2++;
    0x0002adfe bl 0x904c                                         |         r0 = fcn_0000904c (r0, r1, r2);
    0x0002ae02 mov r5, r0                                        |         r5 = r0;
    0x0002ae04 cmp r0, 0                                         |         
    0x0002ae06 bne 0x2adbc                                       |         
                                                                 |     }
    0x0002ae08 ldrb r3, [r6]                                     |     r3 = *(r6);
    0x0002ae0a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0002ae0c bne.w 0x2af50                                     |         goto label_14;
                                                                 |     }
                                                                 | label_4:
    0x0002ae10 ldr r3, [sp, 0x28]                                |     r3 = var_28h_2;
    0x0002ae12 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0002ae14 beq.w 0x2afb2                                     |         goto label_15;
                                                                 |     }
    0x0002ae18 ldrd r2, r3, [sp, 0x30]                           |     __asm ("ldrd r2, r3, [var_10h_2]");
    0x0002ae1c add r1, sp, 0x24                                  |     r1 += var_24h_2;
    0x0002ae1e vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x0002ae22 add.w r8, fp, 0x48                                |     r8 += arg_48h;
    0x0002ae26 mov r4, sl                                        |     r4 = sl;
    0x0002ae28 movs r6, 1                                        |     r6 = 1;
    0x0002ae2a mov sb, sl                                        |     sb = sl;
    0x0002ae2c str r1, [sp, 0x18]                                |     *(arg_18h) = r1;
    0x0002ae2e add r1, sp, 0x20                                  |     r1 += var_0h_2;
    0x0002ae30 vstr d16, [r8]                                    |     __asm ("vstr d16, [r8]");
    0x0002ae34 str r1, [sp, 0x14]                                |     var_14h = r1;
                                                                 | label_0:
    0x0002ae36 mov.w sl, 0                                       |     sl = 0;
                                                                 | label_1:
    0x0002ae3a ldr r1, [sp, 0x18]                                |     r1 = *(arg_18h);
    0x0002ae3c mov r0, fp                                        |     r0 = fp;
    0x0002ae3e str r1, [sp, 4]                                   |     var_4h = r1;
    0x0002ae40 ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x0002ae42 str r1, [sp]                                      |     *(sp) = r1;
    0x0002ae44 mov r1, sb                                        |     r1 = sb;
    0x0002ae46 bl 0x11224                                        |     r0 = fcn_00011224 (r0, r1, r2, r3);
    0x0002ae4a mov r7, r0                                        |     r7 = r0;
    0x0002ae4c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0002ae4e bne.w 0x2af72                                     |         goto label_16;
                                                                 |     }
    0x0002ae52 ldr.w r3, [fp, 0x94]                              |     r3 = *(arg_94h);
    0x0002ae56 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x0002ae58 str r3, [sp, 8]                                   |     var_8h = r3;
    0x0002ae5a adds r3, r0, 1                                    |     r3 = r0 + 1;
                                                                 |     if (r3 == r0) {
    0x0002ae5c bne 0x2ae78                                       |         
    0x0002ae5e ldr r3, [sp, 0x30]                                |         r3 = var_30h;
    0x0002ae60 ldr r2, [sp, 8]                                   |         r2 = var_8h;
    0x0002ae62 ldr r1, [sp, 0x34]                                |         r1 = var_34h;
    0x0002ae64 subs r0, r3, r2                                   |         r0 = r3 - r2;
    0x0002ae66 ldr.w r2, [fp, 0x98]                              |         r2 = *(arg_98h);
    0x0002ae6a sbc r1, r1, 0                                     |         __asm ("sbc r1, r1, 0");
    0x0002ae6e adds r2, 8                                        |         r2 += 8;
    0x0002ae70 asrs r3, r2, 0x1f                                 |         r3 = r2 >> 0x1f;
    0x0002ae72 bl 0x5e500                                        |         fcn_0005e500 (r0, r1, r2, r3);
    0x0002ae76 str r0, [sp, 0x20]                                |         var_20h = r0;
                                                                 |     }
    0x0002ae78 ldr.w r3, [fp, 0x48]                              |     r3 = *(arg_48h);
    0x0002ae7c orrs.w r0, sb, r0                                 |     r0 = sb | r0;
    0x0002ae80 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x0002ae82 ldr.w r3, [fp, 0x4c]                              |     r3 = *(arg_4ch);
    0x0002ae86 str r3, [sp, 0x10]                                |     var_10h = r3;
                                                                 |     if (r0 == sb) {
    0x0002ae88 beq 0x2aef2                                       |         goto label_17;
                                                                 |     }
                                                                 | label_3:
    0x0002ae8a ldrd r3, r2, [sp, 8]                              |     __asm ("ldrd r3, r2, [var_8h]");
    0x0002ae8e ldr r1, [sp, 0x10]                                |     r1 = var_10h;
    0x0002ae90 cmp r7, r1                                        |     
    0x0002ae92 it eq                                             |     
                                                                 |     if (r7 == r1) {
    0x0002ae94 cmpeq r3, r2                                      |         __asm ("cmpeq r3, r2");
                                                                 |     }
                                                                 |     if (r7 == r1) {
    0x0002ae96 beq 0x2af1c                                       |         goto label_18;
                                                                 |     }
                                                                 | label_2:
    0x0002ae98 ldr r7, [sp, 0x20]                                |     r7 = var_20h;
    0x0002ae9a cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x0002ae9c beq 0x2af6e                                       |         goto label_19;
                                                                 |     }
                                                                 |     if (r4 == 0) {
    0x0002ae9e cbz r4, 0x2aeb8                                   |         goto label_20;
                                                                 |     }
    0x0002aea0 ldr.w r3, [fp, 0x58]                              |     r3 = *(arg_58h);
                                                                 |     if (r3 == 0) {
    0x0002aea4 cbz r3, 0x2aeae                                   |         goto label_21;
                                                                 |     }
                                                                 |     do {
    0x0002aea6 str r6, [r3, 0x10]                                |         *((r3 + 0x10)) = r6;
    0x0002aea8 ldr r3, [r3, 0x2c]                                |         r3 = *((r3 + 0x2c));
    0x0002aeaa cmp r3, 0                                         |         
    0x0002aeac bne 0x2aea6                                       |         
                                                                 |     } while (r3 != 0);
                                                                 | label_21:
    0x0002aeae ldr.w r0, [fp, 0xdc]                              |     r0 = *(arg_dch);
    0x0002aeb2 movs r1, 0                                        |     r1 = 0;
    0x0002aeb4 bl 0x8e8c                                         |     fcn_00008e8c (r0, r1);
                                                                 | label_20:
    0x0002aeb8 add r7, r5                                        |     r7 += r5;
    0x0002aeba b 0x2aec2                                         |     
                                                                 |     while (r0 == 0) {
    0x0002aebc adds r5, 1                                        |         r5++;
    0x0002aebe cmp r5, r7                                        |         
                                                                 |         if (r5 == r7) {
    0x0002aec0 beq 0x2aee8                                       |             goto label_22;
                                                                 |         }
    0x0002aec2 movs r3, 1                                        |         r3 = 1;
    0x0002aec4 movs r2, 0                                        |         r2 = 0;
    0x0002aec6 mov r1, r8                                        |         r1 = r8;
    0x0002aec8 mov r0, fp                                        |         r0 = fp;
    0x0002aeca str.w sl, [sp]                                    |         __asm ("str.w sl, [sp]");
    0x0002aece bl 0x2a9e8                                        |         r0 = fcn_0002a9e8 (r0, r1, r2, r3, r4, r5);
    0x0002aed2 cmp r0, 0                                         |         
    0x0002aed4 beq 0x2aebc                                       |         
                                                                 |     }
    0x0002aed6 cmp r0, 0x65                                      |     
                                                                 |     if (r0 != 0x65) {
    0x0002aed8 bne.w 0x2b194                                     |         goto label_23;
                                                                 |     }
    0x0002aedc ldrd r2, r3, [sp, 0x30]                           |     __asm ("ldrd r2, r3, [var_30h]");
    0x0002aee0 movs r4, 0                                        |     r4 = 0;
    0x0002aee2 strd r2, r3, [fp, 0x48]                           |     __asm ("strd r2, r3, [fp, 0x48]");
    0x0002aee6 b 0x2ae36                                         |     goto label_0;
                                                                 | label_22:
    0x0002aee8 mov r4, r0                                        |     r4 = r0;
                                                                 | label_6:
    0x0002aeea ldrd r2, r3, [sp, 0x30]                           |     __asm ("ldrd r2, r3, [var_30h]");
    0x0002aeee mov r5, r7                                        |     r5 = r7;
    0x0002aef0 b 0x2ae3a                                         |     goto label_1;
                                                                 | label_17:
    0x0002aef2 ldr r2, [sp, 8]                                   |     r2 = var_8h;
    0x0002aef4 ldr.w r3, [fp, 0x50]                              |     r3 = *(arg_50h);
    0x0002aef8 ldrd r1, r0, [sp, 0xc]                            |     __asm ("ldrd r1, r0, [var_ch]");
    0x0002aefc adds r3, r2, r3                                   |     r3 = r2 + r3;
    0x0002aefe ldr.w r2, [fp, 0x54]                              |     r2 = *(arg_54h);
    0x0002af02 adc r2, r2, 0                                     |     __asm ("adc r2, r2, 0");
    0x0002af06 cmp r2, r0                                        |     
    0x0002af08 it eq                                             |     
                                                                 |     if (r2 == r0) {
    0x0002af0a cmpeq r3, r1                                      |         __asm ("cmpeq r3, r1");
                                                                 |     }
                                                                 |     if (r2 != r0) {
    0x0002af0c beq 0x2af32                                       |         
    0x0002af0e ldrd r3, r2, [sp, 8]                              |         __asm ("ldrd r3, r2, [var_8h]");
    0x0002af12 ldr r1, [sp, 0x10]                                |         r1 = var_10h;
    0x0002af14 cmp r7, r1                                        |         
    0x0002af16 it eq                                             |         
                                                                 |         if (r7 == r1) {
    0x0002af18 cmpeq r3, r2                                      |             __asm ("cmpeq r3, r2");
                                                                 |         }
                                                                 |         if (r7 != r1) {
    0x0002af1a bne 0x2af6e                                       |             goto label_19;
                                                                 |         }
                                                                 | label_18:
    0x0002af1c ldr r7, [sp, 0x24]                                |         r7 = *(arg_94h);
    0x0002af1e mov r0, fp                                        |         r0 = fp;
    0x0002af20 mov r1, r7                                        |         r1 = r7;
    0x0002af22 bl 0x8edc                                         |         r0 = fcn_00008edc (r0, r1);
    0x0002af26 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x0002af28 bne.w 0x2b1f4                                     |             goto label_24;
                                                                 |         }
    0x0002af2c str.w r7, [fp, 0x18]                              |         __asm ("str.w r7, [arg_18h]");
    0x0002af30 b 0x2ae98                                         |         goto label_2;
                                                                 |     }
    0x0002af32 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x0002af34 ldr.w r2, [fp, 0x98]                              |     r2 = *(arg_98h);
    0x0002af38 subs r0, r3, r1                                   |     r0 = r3 - r1;
    0x0002af3a ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0002af3c ldr r1, [sp, 0x34]                                |     r1 = var_34h;
    0x0002af3e add.w r2, r2, 8                                   |     r2 += 8;
    0x0002af42 sbc.w r1, r1, r3                                  |     __asm ("sbc.w r1, r1, r3");
    0x0002af46 asrs r3, r2, 0x1f                                 |     r3 = r2 >> 0x1f;
    0x0002af48 bl 0x5e500                                        |     fcn_0005e500 (r0, r1, r2, r3);
    0x0002af4c str r0, [sp, 0x20]                                |     var_20h = r0;
    0x0002af4e b 0x2ae8a                                         |     goto label_3;
                                                                 | label_14:
    0x0002af50 mov r1, r6                                        |     r1 = r6;
    0x0002af52 mov r0, r4                                        |     r0 = r4;
    0x0002af54 ldr r6, [r4, 0x20]                                |     r6 = *((r4 + 0x20));
    0x0002af56 add r3, sp, 0x28                                  |     r3 += var_28h_2;
    0x0002af58 mov r2, r5                                        |     r2 = r5;
    0x0002af5a blx r6                                            |     r0 = uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0002af5c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0002af5e beq.w 0x2ae10                                     |         goto label_4;
                                                                 |     }
    0x0002af62 ldrb.w r3, [fp, 0xc]                              |     r3 = *(arg_ch);
    0x0002af66 mov r5, r0                                        |     r5 = r0;
    0x0002af68 strb.w r3, [fp, 0x12]                             |     *(arg_12h) = r3;
    0x0002af6c b 0x2adc4                                         |     goto label_5;
                                                                 | label_19:
    0x0002af6e mov r7, r5                                        |     r7 = r5;
    0x0002af70 b 0x2aeea                                         |     goto label_6;
                                                                 | label_16:
    0x0002af72 cmp r0, 0x65                                      |     
    0x0002af74 mov sl, sb                                        |     sl = sb;
    0x0002af76 ldrb.w r3, [fp, 0xc]                              |     r3 = *(arg_ch);
    0x0002af7a mov sb, r0                                        |     sb = r0;
                                                                 |     if (r0 == 0x65) {
    0x0002af7c beq.w 0x2b1a2                                     |         goto label_25;
                                                                 |     }
    0x0002af80 mov r2, sl                                        |     r2 = sl;
    0x0002af82 cmp r5, 0                                         |     
    0x0002af84 ite eq                                            |     
                                                                 |     if (r5 != 0) {
    0x0002af86 moveq r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (r5 == 0) {
    0x0002af88 andne r2, r2, 1                                   |         r2 &= 1;
                                                                 |     }
    0x0002af8c str r2, [sp, 0xc]                                 |     var_ch = r2;
                                                                 | label_10:
    0x0002af8e str r5, [sp, 8]                                   |     var_8h = r5;
    0x0002af90 mov r5, sb                                        |     r5 = sb;
    0x0002af92 strb.w r3, [fp, 0x12]                             |     *(arg_12h) = r3;
                                                                 | label_7:
    0x0002af96 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x0002af98 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0002af9a beq.w 0x2adc4                                     |         goto label_5;
                                                                 |     }
    0x0002af9e ldr r1, [pc, 0x288]                               |     
    0x0002afa0 movw r0, 0x21b                                    |     r0 = 0x21b;
    0x0002afa4 ldr.w r3, [fp, 0xac]                              |     r3 = *(arg_ach);
    0x0002afa8 ldr r2, [sp, 8]                                   |     r2 = var_8h;
    0x0002afaa add r1, pc                                        |     r1 = 0x561d8;
    0x0002afac blx 0x6820                                        |     fcn_00006820 ();
    0x0002afb0 b 0x2adc4                                         |     goto label_5;
                                                                 | label_15:
    0x0002afb2 ldrb.w r2, [fp, 0xc]                              |     r2 = *(arg_ch);
    0x0002afb6 ldr.w r3, [fp]                                    |     r3 = *(fp);
    0x0002afba ldr.w r4, [fp, 0xd8]                              |     r4 = *(arg_d8h);
    0x0002afbe strb.w r2, [fp, 0x12]                             |     *(arg_12h) = r2;
    0x0002afc2 ldr r2, [r3, 8]                                   |     r2 = *((r3 + 8));
    0x0002afc4 ldr.w r0, [fp, 0x40]                              |     r0 = *(arg_40h);
    0x0002afc8 mov r1, r4                                        |     r1 = r4;
    0x0002afca adds r2, 1                                        |     r2++;
    0x0002afcc bl 0x904c                                         |     r0 = fcn_0000904c (r0, r1, r2);
    0x0002afd0 mov r5, r0                                        |     r5 = r0;
    0x0002afd2 str r0, [sp, 8]                                   |     var_8h_2 = r0;
    0x0002afd4 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0002afd6 bne.w 0x2adc4                                     |         goto label_5;
                                                                 |     }
    0x0002afda ldr r3, [sp, 8]                                   |     r3 = var_8h_2;
    0x0002afdc str r3, [sp, 0xc]                                 |     *(arg_ch) = r3;
                                                                 | label_9:
    0x0002afde ldrb.w r3, [fp, 0x10]                             |     r3 = *(arg_10h);
    0x0002afe2 subs r3, 1                                        |     r3--;
    0x0002afe4 cmp r3, 2                                         |     
                                                                 |     if (r3 < 2) {
    0x0002afe6 bls 0x2aff6                                       |         goto label_26;
                                                                 |     }
    0x0002afe8 movs r1, 0                                        |     r1 = 0;
    0x0002afea mov r0, fp                                        |     r0 = fp;
    0x0002afec bl 0xaad8                                         |     r0 = fcn_0000aad8 (r0, r1);
    0x0002aff0 mov r5, r0                                        |     r5 = r0;
    0x0002aff2 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0002aff4 bne 0x2af96                                       |         goto label_7;
                                                                 |     }
                                                                 | label_26:
    0x0002aff6 ldrb r1, [r4]                                     |     r1 = *(r4);
    0x0002aff8 movs r2, 0                                        |     r2 = 0;
    0x0002affa mov r0, fp                                        |     r0 = fp;
    0x0002affc subs r1, 0                                        |     
    0x0002affe it ne                                             |     
                                                                 |     if (r1 == 0) {
    0x0002b000 movne r1, 1                                       |         r1 = 1;
                                                                 |     }
    0x0002b002 bl 0x10794                                        |     r0 = fcn_00010794 (r0, r1, r2, r3);
    0x0002b006 mov r5, r0                                        |     r5 = r0;
    0x0002b008 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0002b00a bne 0x2af96                                       |         goto label_7;
                                                                 |     }
    0x0002b00c ldrb r3, [r4]                                     |     r3 = *(r4);
    0x0002b00e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0002b010 beq 0x2af96                                       |         goto label_7;
                                                                 |     }
    0x0002b012 ldr r5, [sp, 0x28]                                |     r5 = *(arg_98h);
    0x0002b014 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x0002b016 beq 0x2af96                                       |         goto label_7;
                                                                 |     }
    0x0002b018 ldr.w r7, [fp]                                    |     r7 = *(fp);
    0x0002b01c ldr r5, [r7, 4]                                   |     r5 = *((r7 + 4));
    0x0002b01e lsls r5, r5, 1                                    |     r5 <<= 1;
    0x0002b020 mov r0, r5                                        |     r0 = r5;
    0x0002b022 bl 0xd300                                         |     r0 = fcn_0000d300 (r0, r1, r2, r3, r4);
    0x0002b026 mov r6, r0                                        |     r6 = r0;
    0x0002b028 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0002b02a beq.w 0x2b1ec                                     |         goto label_27;
                                                                 |     }
    0x0002b02e mov r2, r5                                        |     r2 = r5;
    0x0002b030 movs r1, 0                                        |     r1 = 0;
    0x0002b032 mov.w sb, 0                                       |     sb = 0;
    0x0002b036 blx 0x5fcc                                        |     fcn_00005fcc ();
    0x0002b03a ldr.w sl, [r7, 4]                                 |     sl = *((r7 + 4));
    0x0002b03e movw r3, 0x4001                                   |     r3 = 0x4001;
    0x0002b042 str.w sb, [sp]                                    |     __asm ("str.w sb, [sp]");
    0x0002b046 mov r2, r6                                        |     r2 = r6;
    0x0002b048 ldr r5, [r7, 0x18]                                |     r5 = *((r7 + 0x18));
    0x0002b04a mov r1, r4                                        |     r1 = r4;
    0x0002b04c mov r0, r7                                        |     r0 = r7;
    0x0002b04e blx r5                                            |     r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0002b050 mov r5, r0                                        |     r5 = r0;
    0x0002b052 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0002b054 bne.w 0x2b178                                     |         goto label_12;
                                                                 |     }
    0x0002b058 ldr r3, [r6]                                      |     r3 = *(r6);
    0x0002b05a add r1, sp, 0x38                                  |     r1 += var_38h;
    0x0002b05c mov r0, r6                                        |     r0 = r6;
    0x0002b05e ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x0002b060 blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x0002b062 mov r5, r0                                        |     r5 = r0;
    0x0002b064 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0002b066 bne.w 0x2b178                                     |         goto label_12;
                                                                 |     }
    0x0002b06a ldr r3, [r7, 8]                                   |     r3 = *((r7 + 8));
    0x0002b06c adds r3, 1                                        |     r3++;
    0x0002b06e mov r2, r3                                        |     r2 = r3;
    0x0002b070 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x0002b072 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x0002b074 add r3, r2                                        |     r3 += r2;
    0x0002b076 adds r0, r3, 1                                    |     r0 = r3 + 1;
    0x0002b078 bl 0xd300                                         |     r0 = fcn_0000d300 (r0, r1, r2, r3, r4);
    0x0002b07c mov sb, r0                                        |     sb = r0;
    0x0002b07e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0002b080 beq.w 0x2b212                                     |         goto label_28;
                                                                 |     }
    0x0002b084 ldr r3, [r6]                                      |     r3 = *(r6);
    0x0002b086 mov r1, r0                                        |     r1 = r0;
    0x0002b088 ldr.w r8, [sp, 0x38]                              |     r8 = var_38h;
    0x0002b08c mov r0, r6                                        |     r0 = r6;
    0x0002b08e vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x0002b092 mov r2, r8                                        |     r2 = r8;
    0x0002b094 vstr d16, [sp]                                    |     __asm ("vstr d16, [sp]");
    0x0002b098 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0002b09a blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0002b09c mov r5, r0                                        |     r5 = r0;
    0x0002b09e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0002b0a0 bne 0x2b178                                       |         goto label_12;
                                                                 |     }
    0x0002b0a2 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x0002b0a4 strb.w r0, [sb, r3]                               |     *((sb + r3)) = r0;
    0x0002b0a8 ldrd r2, r3, [sp, 0x38]                           |     __asm ("ldrd r2, r3, [var_38h]");
    0x0002b0ac cmp r2, 1                                         |     
    0x0002b0ae sbcs r3, r3, 0                                    |     __asm ("sbcs r3, r3, 0");
                                                                 |     if (r2 < 1) {
    0x0002b0b2 blt 0x2b15e                                       |         goto label_29;
                                                                 |     }
    0x0002b0b4 add.w r8, r8, 1                                   |     r8++;
    0x0002b0b8 add r2, sp, 0x2c                                  |     r2 += var_2ch_2;
    0x0002b0ba add.w r3, sb, r8                                  |     r3 = sb + r8;
    0x0002b0be add sl, r6                                        |     sl += r6;
    0x0002b0c0 strd r6, r2, [sp, 0x10]                           |     __asm ("strd r6, r2, [sp, 0x10]");
    0x0002b0c4 mov r8, sb                                        |     r8 = sb;
    0x0002b0c6 mov r6, r3                                        |     r6 = r3;
    0x0002b0c8 str r0, [sp, 0x1c]                                |     var_1ch = r0;
                                                                 | label_8:
    0x0002b0ca ldr r5, [r7, 0x20]                                |     r5 = *((r7 + 0x20));
    0x0002b0cc movs r2, 0                                        |     r2 = 0;
    0x0002b0ce ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0002b0d0 mov r1, r8                                        |     r1 = r8;
    0x0002b0d2 mov r0, r7                                        |     r0 = r7;
    0x0002b0d4 blx r5                                            |     r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0002b0d6 mov r5, r0                                        |     r5 = r0;
    0x0002b0d8 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0002b0da bne.w 0x2b20e                                     |         goto label_30;
                                                                 |     }
    0x0002b0de ldr r3, [sp, 0x2c]                                |     r3 = var_2ch_2;
                                                                 |     if (r3 != 0) {
    0x0002b0e0 cbz r3, 0x2b12e                                   |         
    0x0002b0e2 str r0, [sp]                                      |         *(sp) = r0;
    0x0002b0e4 movw r3, 0x801                                    |         r3 = 0x801;
    0x0002b0e8 ldr r5, [r7, 0x18]                                |         r5 = *((r7 + 0x18));
    0x0002b0ea mov r2, sl                                        |         r2 = sl;
    0x0002b0ec mov r1, r8                                        |         r1 = r8;
    0x0002b0ee mov r0, r7                                        |         r0 = r7;
    0x0002b0f0 blx r5                                            |         r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0002b0f2 mov r5, r0                                        |         r5 = r0;
    0x0002b0f4 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x0002b0f6 bne.w 0x2b20e                                     |             goto label_30;
                                                                 |         }
    0x0002b0fa ldr r2, [sp, 0x18]                                |         r2 = var_18h;
    0x0002b0fc mov r1, r6                                        |         r1 = r6;
    0x0002b0fe mov r0, sl                                        |         r0 = sl;
    0x0002b100 bl 0x904c                                         |         fcn_0000904c (r0, r1, r2);
    0x0002b104 ldr.w r3, [sl]                                    |         r3 = *(sl);
    0x0002b108 mov r5, r0                                        |         r5 = r0;
                                                                 |         if (r3 != 0) {
    0x0002b10a cbz r3, 0x2b118                                   |             
    0x0002b10c ldr r3, [r3, 4]                                   |             r3 = *((r3 + 4));
    0x0002b10e mov r0, sl                                        |             r0 = sl;
    0x0002b110 blx r3                                            |             uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0002b112 ldr r3, [sp, 0x1c]                                |             r3 = var_1ch;
    0x0002b114 str.w r3, [sl]                                    |             __asm ("str.w r3, [sl]");
                                                                 |         }
    0x0002b118 cmp r5, 0                                         |         
                                                                 |         if (r5 != 0) {
    0x0002b11a bne 0x2b20e                                       |             goto label_30;
                                                                 |         }
    0x0002b11c ldrb r3, [r6]                                     |         r3 = *(r6);
                                                                 |         if (r3 == 0) {
    0x0002b11e cbz r3, 0x2b12e                                   |             goto label_31;
                                                                 |         }
    0x0002b120 mov r1, r4                                        |         r1 = r4;
    0x0002b122 mov r0, r6                                        |         r0 = r6;
    0x0002b124 blx 0x67b8                                        |         r0 = fcn_000067b8 ();
    0x0002b128 mov r5, r0                                        |         r5 = r0;
    0x0002b12a cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x0002b12c beq 0x2b20e                                       |             goto label_30;
                                                                 |         }
                                                                 |     }
                                                                 | label_31:
    0x0002b12e ldrb.w r3, [r8]                                   |     r3 = *(r8);
    0x0002b132 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0002b134 beq 0x2b20a                                       |         goto label_32;
                                                                 |     }
    0x0002b136 mov r3, r8                                        |     r3 = r8;
                                                                 |     do {
    0x0002b138 ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x0002b13c cmp r2, 0                                         |         
    0x0002b13e bne 0x2b138                                       |         
                                                                 |     } while (r2 != 0);
    0x0002b140 sub.w r3, r3, r8                                  |     r3 -= r8;
    0x0002b144 bic r3, r3, 0xc0000000                            |     r3 = BIT_MASK (r3, 0xc0000000);
    0x0002b148 adds r3, 1                                        |     r3++;
                                                                 | label_11:
    0x0002b14a ldrd r0, r1, [sp, 0x38]                           |     __asm ("ldrd r0, r1, [var_38h]");
    0x0002b14e add r8, r3                                        |     r8 += r3;
    0x0002b150 sub.w r2, r8, sb                                  |     r2 = r8 - sb;
    0x0002b154 asrs r3, r2, 0x1f                                 |     r3 = r2 >> 0x1f;
    0x0002b156 cmp r2, r0                                        |     
    0x0002b158 sbcs r3, r1                                       |     __asm ("sbcs r3, r1");
                                                                 |     if (r2 < r0) {
    0x0002b15a blt 0x2b0ca                                       |         goto label_8;
                                                                 |     }
    0x0002b15c ldr r6, [sp, 0x10]                                |     r6 = var_10h;
                                                                 | label_29:
    0x0002b15e ldr r3, [r6]                                      |     r3 = *(r6);
                                                                 |     if (r3 != 0) {
    0x0002b160 cbz r3, 0x2b16c                                   |         
    0x0002b162 ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x0002b164 mov r0, r6                                        |         r0 = r6;
    0x0002b166 blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0002b168 movs r3, 0                                        |         r3 = 0;
    0x0002b16a str r3, [r6]                                      |         *(r6) = r3;
                                                                 |     }
    0x0002b16c ldr r3, [r7, 0x1c]                                |     r3 = *((r7 + 0x1c));
    0x0002b16e mov r1, r4                                        |     r1 = r4;
    0x0002b170 mov r0, r7                                        |     r0 = r7;
    0x0002b172 movs r2, 0                                        |     r2 = 0;
    0x0002b174 blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0002b176 mov r5, r0                                        |     r5 = r0;
                                                                 | label_12:
    0x0002b178 mov r0, sb                                        |     r0 = sb;
    0x0002b17a blx 0x6050                                        |     fcn_00006050 ();
    0x0002b17e ldr r3, [r6]                                      |     r3 = *(r6);
                                                                 |     if (r3 != 0) {
    0x0002b180 cbz r3, 0x2b18c                                   |         
    0x0002b182 ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x0002b184 mov r0, r6                                        |         r0 = r6;
    0x0002b186 blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0002b188 movs r3, 0                                        |         r3 = 0;
    0x0002b18a str r3, [r6]                                      |         *(r6) = r3;
                                                                 |     }
    0x0002b18c mov r0, r6                                        |     r0 = r6;
    0x0002b18e blx 0x6050                                        |     fcn_00006050 ();
    0x0002b192 b 0x2af96                                         |     goto label_7;
                                                                 | label_23:
    0x0002b194 movw r2, 0x20a                                    |     r2 = 0x20a;
    0x0002b198 ldrb.w r3, [fp, 0xc]                              |     r3 = *(arg_ch);
    0x0002b19c cmp r0, r2                                        |     
    0x0002b19e mov sl, sb                                        |     sl = sb;
                                                                 |     if (r0 != r2) {
    0x0002b1a0 bne 0x2b1da                                       |         goto label_33;
                                                                 |     }
                                                                 | label_25:
    0x0002b1a2 ldr.w r2, [fp]                                    |     r2 = *(fp);
    0x0002b1a6 str r5, [sp, 8]                                   |     var_8h = r5;
    0x0002b1a8 strb.w r3, [fp, 0x12]                             |     *(arg_12h) = r3;
    0x0002b1ac ldr.w r4, [fp, 0xd8]                              |     r4 = *(arg_d8h);
    0x0002b1b0 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x0002b1b2 ldr r2, [r2, 8]                                   |     r2 = *((r2 + 8));
    0x0002b1b4 ldr.w r0, [fp, 0x40]                              |     r0 = *(arg_40h);
    0x0002b1b8 mov r1, r4                                        |     r1 = r4;
    0x0002b1ba cmp r3, 0                                         |     
    0x0002b1bc ite eq                                            |     
                                                                 |     if (r3 != 0) {
    0x0002b1be moveq sl, 0                                       |         sl = 0;
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x0002b1c2 and sl, sl, 1                                     |         sl &= 1;
                                                                 |     }
    0x0002b1c6 adds r2, 1                                        |     r2++;
    0x0002b1c8 str.w sl, [sp, 0xc]                               |     __asm ("str.w sl, [var_ch]");
    0x0002b1cc bl 0x904c                                         |     r0 = fcn_0000904c (r0, r1, r2);
    0x0002b1d0 mov r5, r0                                        |     r5 = r0;
    0x0002b1d2 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0002b1d4 beq.w 0x2afde                                     |         goto label_9;
                                                                 |     }
    0x0002b1d8 b 0x2af96                                         |     goto label_7;
                                                                 | label_33:
    0x0002b1da mov r2, sb                                        |     r2 = sb;
    0x0002b1dc mov sb, r0                                        |     sb = r0;
    0x0002b1de cmp r5, 0                                         |     
    0x0002b1e0 ite eq                                            |     
                                                                 |     if (r5 != 0) {
    0x0002b1e2 moveq r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (r5 == 0) {
    0x0002b1e4 andne r2, r2, 1                                   |         r2 &= 1;
                                                                 |     }
    0x0002b1e8 str r2, [sp, 0xc]                                 |     var_ch = r2;
    0x0002b1ea b 0x2af8e                                         |     goto label_10;
                                                                 | label_27:
    0x0002b1ec movs r5, 7                                        |     r5 = 7;
    0x0002b1ee blx 0x6050                                        |     fcn_00006050 ();
    0x0002b1f2 b 0x2af96                                         |     goto label_7;
                                                                 | label_24:
    0x0002b1f4 mov r2, sb                                        |     r2 = sb;
    0x0002b1f6 ldrb.w r3, [fp, 0xc]                              |     r3 = *(arg_ch);
    0x0002b1fa cmp r5, 0                                         |     
    0x0002b1fc ite eq                                            |     
                                                                 |     if (r5 != 0) {
    0x0002b1fe moveq r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (r5 == 0) {
    0x0002b200 andne r2, r2, 1                                   |         r2 &= 1;
                                                                 |     }
    0x0002b204 mov sb, r0                                        |     sb = r0;
    0x0002b206 str r2, [sp, 0xc]                                 |     var_ch = r2;
    0x0002b208 b 0x2af8e                                         |     goto label_10;
                                                                 | label_32:
    0x0002b20a movs r3, 1                                        |     r3 = 1;
    0x0002b20c b 0x2b14a                                         |     goto label_11;
                                                                 | label_30:
    0x0002b20e ldr r6, [sp, 0x10]                                |     r6 = var_10h;
    0x0002b210 b 0x2b178                                         |     goto label_12;
                                                                 | label_28:
    0x0002b212 movs r5, 7                                        |     r5 = 7;
    0x0002b214 b 0x2b178                                         |     goto label_12;
                                                                 | label_13:
    0x0002b216 blx 0x6498                                        |     fcn_00006498 ();
    0x0002b21a nop                                               |     
    0x0002b21c ldm r6!, {r2, r3, r4, r5, r7}                     |     r2 = *(r6!);
                                                                 |     r3 = *((r6! + 4));
                                                                 |     r4 = *((r6! + 8));
                                                                 |     r5 = *((r6! + 12));
                                                                 |     r7 = *((r6! + 16));
    0x0002b21e movs r4, r0                                       |     r4 = r0;
    0x0002b220 lsls r0, r1, 0xe                                  |     r0 = r1 << 0xe;
    0x0002b222 movs r0, r0                                       |     
    0x0002b224 ldm r6!, {r1, r2, r7}                             |     r1 = *(r6!);
                                                                 |     r2 = *((r6! + 4));
                                                                 |     r7 = *((r6! + 8));
    0x0002b226 movs r4, r0                                       |     r4 = r0;
    0x0002b228 ldr r2, [pc, 0xd8]                                |     r2 = *(0x2b304);
    0x0002b22a movs r3, r0                                       |     r3 = r0;
                                                                 | }
    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x2bd94 */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) fcn.0002bd94 ()                      | void fcn_0002bd94 (int16_t arg1) {
                                                 |     int16_t var_0h;
                                                 |     r0 = arg1;
                                                 |     if (? >= ?) {
    0x0002bd94 ldrlt r8, [r0, -0xb03]!           |         r8 = *((r0 -= 0xb03));
                                                 |     }
    0x0002bd98 sub sp, 0xc                       |     
    0x0002bd9a ldr r4, [r0, 0x10]                |     r4 = *((r0 + 0x10));
    0x0002bd9c lsls r3, r3, 0x19                 |     r3 <<= 0x19;
                                                 |     if (r3 >= r3) {
    0x0002bd9e bpl 0x2bde4                       |         goto label_0;
                                                 |     }
    0x0002bda0 ldr r3, [r4, 0x78]                |     r3 = *((r4 + 0x78));
    0x0002bda2 mov r1, r0                        |     r1 = r0;
    0x0002bda4 ldr r5, [r1, 0x14]                |     r5 = *((r1 + 0x14));
    0x0002bda6 ldr r0, [r4, 0x3c]                |     r0 = *((r4 + 0x3c));
    0x0002bda8 subs r3, 1                        |     r3--;
    0x0002bdaa ldr.w r2, [r4, 0x98]              |     r2 = *((r4 + 0x98));
    0x0002bdae str r3, [r4, 0x78]                |     *((r4 + 0x78)) = r3;
    0x0002bdb0 add.w ip, r5, -1                  |     
    0x0002bdb4 ldr.w r3, [r4, 0x88]              |     r3 = *((r4 + 0x88));
    0x0002bdb8 asr.w lr, r2, 0x1f                |     lr = r2 >> 0x1f;
    0x0002bdbc str r3, [r1, 0xc]                 |     *((r1 + 0xc)) = r3;
    0x0002bdbe ldr r3, [r0]                      |     r3 = *(r0);
    0x0002bdc0 str.w r1, [r4, 0x88]              |     __asm ("str.w r1, [r4, 0x88]");
    0x0002bdc4 ldr r1, [r1, 4]                   |     r1 = *((r1 + 4));
    0x0002bdc6 str r1, [sp]                      |     *(sp) = r1;
    0x0002bdc8 ldr r1, [r3, 0x48]                |     r1 = *((r3 + 0x48));
    0x0002bdca umull r2, r3, ip, r2              |     r2:r3 = ip * r2;
    0x0002bdce mla r3, ip, lr, r3                |     __asm ("mla r3, ip, lr, r3");
    0x0002bdd2 blx r1                            |     uint32_t (*r1)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
                                                 |     do {
    0x0002bdd4 ldr r3, [r4, 0x78]                |         r3 = *((r4 + 0x78));
                                                 |         if (r3 == 0) {
    0x0002bdd6 cbnz r3, 0x2bde0                  |             
    0x0002bdd8 ldr.w r3, [r4, 0xdc]              |             r3 = *((r4 + 0xdc));
    0x0002bddc ldr r3, [r3, 0xc]                 |             r3 = *((r3 + 0xc));
                                                 |             if (r3 == 0) {
    0x0002bdde cbz r3, 0x2bdea                   |                 goto label_1;
                                                 |             }
                                                 |         }
    0x0002bde0 add sp, 0xc                       |         
    0x0002bde2 pop {r4, r5, pc}                  |         
                                                 | label_0:
    0x0002bde4 bl 0xb51c                         |         fcn_0000b51c (r0);
    0x0002bde8 b 0x2bdd4                         |         
                                                 |     } while (1);
                                                 | label_1:
    0x0002bdea mov r0, r4                        |     r0 = r4;
    0x0002bdec add sp, 0xc                       |     
    0x0002bdee pop.w {r4, r5, lr}                |     
    0x0002bdf2 b 0x2bc58                         |     return void (*0x2bc58)() ();
                                                 | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x2bdf4 */
                                                                     | #include <stdint.h>
                                                                     |  
                                                                     | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                     |  
    ; (fcn) fcn.0002bdf4 ()                                          | void fcn_0002bdf4 (int16_t arg_14h, int16_t arg1, uint32_t arg2) {
                                                                     |     int16_t var_0h;
                                                                     |     int16_t var_4h;
                                                                     |     int16_t var_8h;
                                                                     |     int16_t var_ch;
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
    0x0002bdf4 ldr r2, [pc, 0x1a8]                                   |     
    0x0002bdf6 ldr r3, [pc, 0x1ac]                                   |     r3 = *(0x2bfa6);
    0x0002bdf8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0002bdfc sub sp, 0x14                                          |     
    0x0002bdfe add r2, pc                                            |     r2 = 0x57da2;
    0x0002be00 ldr r5, [r0, 0x10]                                    |     r5 = *((r0 + 0x10));
    0x0002be02 ldr r3, [r2, r3]                                      |     
    0x0002be04 ldr r3, [r3]                                          |     r3 = *(0x57da2);
    0x0002be06 str r3, [sp, 0xc]                                     |     var_ch = r3;
    0x0002be08 mov.w r3, 0                                           |     r3 = 0;
    0x0002be0c ldrd r3, r1, [r5, 0x94]                               |     __asm ("ldrd r3, r1, [r5, 0x94]");
    0x0002be10 cmp r3, r1                                            |     
                                                                     |     if (r3 < r1) {
    0x0002be12 bls.w 0x2bf34                                         |         goto label_5;
                                                                     |     }
    0x0002be16 mov fp, r0                                            |     
    0x0002be18 mov r0, r3                                            |     r0 = r3;
    0x0002be1a bl 0x5dc60                                            |     fcn_0005dc60 (r0, r1, r2);
    0x0002be1e ldrb r2, [r5, 0x14]                                   |     r2 = *((r5 + 0x14));
    0x0002be20 rsbs r4, r0, 0                                        |     r4 = r0 - ;
    0x0002be22 ldr r1, [r5, 0x18]                                    |     r1 = *((r5 + 0x18));
    0x0002be24 orr r2, r2, 4                                         |     r2 |= 4;
    0x0002be28 strb r2, [r5, 0x14]                                   |     *((r5 + 0x14)) = r2;
    0x0002be2a ldr.w r3, [fp, 0x14]                                  |     r3 = *(arg_14h);
    0x0002be2e subs r7, r3, 1                                        |     r7 = r3 - 1;
    0x0002be30 cmp r3, r1                                            |     
    0x0002be32 and.w r7, r7, r4                                      |     r7 &= r4;
    0x0002be36 it hi                                                 |     
                                                                     |     if (r3 <= r1) {
    0x0002be38 subhi sb, r3, r7                                      |         sb = r3 - r7;
                                                                     |     }
                                                                     |     if (r3 < r1) {
    0x0002be3c bls 0x2bf26                                           |         goto label_6;
                                                                     |     }
                                                                     | label_2:
    0x0002be3e cmp.w sb, 0                                           |     
                                                                     |     if (sb <= 0) {
    0x0002be42 ble.w 0x2bf58                                         |         goto label_7;
                                                                     |     }
    0x0002be46 ldr r2, [pc, 0x160]                                   |     
    0x0002be48 adds r7, 1                                            |     r7++;
    0x0002be4a movs r1, 0                                            |     r1 = 0;
    0x0002be4c mov r4, r7                                            |     r4 = r7;
    0x0002be4e str r7, [sp, 4]                                       |     var_4h = r7;
    0x0002be50 mov r8, r1                                            |     r8 = r1;
    0x0002be52 add r2, pc                                            |     r2 = 0x57e00;
    0x0002be54 mov r7, r1                                            |     r7 = r1;
    0x0002be56 mov sl, r2                                            |     sl = r2;
                                                                     |     do {
    0x0002be58 cmp r3, r4                                            |         
                                                                     |         if (r3 != r4) {
    0x0002be5a beq 0x2be68                                           |             
    0x0002be5c ldr r0, [r5, 0x38]                                    |             r0 = *((r5 + 0x38));
                                                                     |             if (r0 == 0) {
    0x0002be5e cbz r0, 0x2be68                                       |                 goto label_0;
                                                                     |             }
    0x0002be60 ldr r2, [r0]                                          |             r2 = *(r0);
    0x0002be62 subs r3, r4, 1                                        |             r3 = r4 - 1;
    0x0002be64 cmp r2, r3                                            |             
                                                                     |             if (r2 > r3) {
    0x0002be66 bhi 0x2bef2                                           |                 goto label_8;
                                                                     |             }
                                                                     |         }
                                                                     | label_0:
    0x0002be68 ldr.w r1, [r5, 0x98]                                  |         r1 = *((r5 + 0x98));
    0x0002be6c ldr.w r0, [sl, 0x110]                                 |         r0 = *((sl + 0x110));
    0x0002be70 bl 0x5ded8                                            |         fcn_0005ded8 (r0, r1);
    0x0002be74 adds r0, 1                                            |         r0++;
    0x0002be76 cmp r0, r4                                            |         
    0x0002be78 itt eq                                                |         
                                                                     |         if (r0 != r4) {
    0x0002be7a moveq r3, 1                                           |             r3 = 1;
                                                                     |         }
                                                                     |         if (r0 != r4) {
    0x0002be7c moveq r6, 0                                           |             r6 = 0;
                                                                     |         }
                                                                     |         if (r0 != r4) {
    0x0002be7e beq 0x2bed8                                           |             
    0x0002be80 movs r3, 0                                            |             r3 = 0;
    0x0002be82 add r2, sp, 8                                         |             r2 += var_8h;
    0x0002be84 mov r1, r4                                            |             r1 = r4;
    0x0002be86 mov r0, r5                                            |             r0 = r5;
    0x0002be88 bl 0x2a698                                            |             r0 = fcn_0002a698 (r0, r1, r2, r3);
    0x0002be8c mov r6, r0                                            |             r6 = r0;
                                                                     |             if (r0 != 0) {
    0x0002be8e cbz r0, 0x2beb4                                       |                 
                                                                     | label_4:
    0x0002be90 ldrb r2, [r5, 0x14]                                   |                 r2 = *((r5 + 0x14));
                                                                     | label_3:
    0x0002be92 bic r2, r2, 4                                         |                 r2 = BIT_MASK (r2, 4);
    0x0002be96 ldr r3, [pc, 0x10c]                                   |                 r3 = *(0x2bfa6);
    0x0002be98 strb r2, [r5, 0x14]                                   |                 *((r5 + 0x14)) = r2;
    0x0002be9a ldr r2, [pc, 0x110]                                   |                 
    0x0002be9c add r2, pc                                            |                 r2 = 0x57e4e;
    0x0002be9e ldr r3, [r2, r3]                                      |                 r3 = *(0x57e4e);
    0x0002bea0 ldr r2, [r3]                                          |                 r2 = *(0x57e4e);
    0x0002bea2 ldr r3, [sp, 0xc]                                     |                 r3 = var_ch;
    0x0002bea4 eors r2, r3                                           |                 r2 ^= r3;
    0x0002bea6 mov.w r3, 0                                           |                 r3 = 0;
                                                                     |                 if (r2 != r3) {
    0x0002beaa bne 0x2bf5c                                           |                     goto label_9;
                                                                     |                 }
    0x0002beac mov r0, r6                                            |                 r0 = r6;
    0x0002beae add sp, 0x14                                          |                 
    0x0002beb0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |                 
                                                                     |             }
    0x0002beb4 ldr r3, [sp, 8]                                       |             r3 = var_8h;
    0x0002beb6 mov r0, r3                                            |             r0 = r3;
    0x0002beb8 str r3, [sp]                                          |             *(sp) = r3;
    0x0002beba bl 0x168c0                                            |             fcn_000168c0 (r0);
    0x0002bebe ldr r3, [sp]                                          |             r3 = *(sp);
    0x0002bec0 mov r6, r0                                            |             r6 = r0;
    0x0002bec2 ldrh r1, [r3, 0x18]                                   |             r1 = *((r3 + 0x18));
    0x0002bec4 mov r0, r3                                            |             r0 = r3;
    0x0002bec6 tst.w r1, 4                                           |             
    0x0002beca it ne                                                 |             
                                                                     |             if ((r1 & 4) == 0) {
    0x0002becc movne r7, 1                                           |                 r7 = 1;
                                                                     |             }
    0x0002bece bl 0x2bd94                                            |             fcn_0002bd94 (r0);
    0x0002bed2 clz r3, r6                                            |             r3 &= r6;
    0x0002bed6 lsrs r3, r3, 5                                        |             r3 >>= 5;
                                                                     |         }
                                                                     | label_1:
    0x0002bed8 add.w r8, r8, 1                                       |         r8++;
    0x0002bedc cmp sb, r8                                            |         
    0x0002bede ite le                                                |         
                                                                     |         if (sb > r8) {
    0x0002bee0 movle r1, 0                                           |             r1 = 0;
                                                                     |         }
                                                                     |         if (sb <= r8) {
    0x0002bee2 andgt r1, r3, 1                                       |             r1 = r3 & 1;
                                                                     |         }
    0x0002bee6 adds r4, 1                                            |         r4++;
    0x0002bee8 cmp r1, 0                                             |         
                                                                     |         if (r1 == 0) {
    0x0002beea beq 0x2bf60                                           |             goto label_10;
                                                                     |         }
    0x0002beec ldr.w r3, [fp, 0x14]                                  |         r3 = *(arg_14h);
    0x0002bef0 b 0x2be58                                             |         
                                                                     |     } while (1);
                                                                     | label_8:
    0x0002bef2 mov r1, r4                                            |     r1 = r4;
    0x0002bef4 bl 0xa0d4                                             |     r0 = fcn_0000a0d4 (r0, r1, r2);
    0x0002bef8 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0002befa beq 0x2be68                                           |         goto label_0;
                                                                     |     }
    0x0002befc movs r3, 0                                            |     r3 = 0;
    0x0002befe ldr.w r0, [r5, 0xdc]                                  |     r0 = *((r5 + 0xdc));
    0x0002bf02 movs r2, 0                                            |     r2 = 0;
    0x0002bf04 str r3, [sp, 8]                                       |     var_8h = r3;
    0x0002bf06 mov r1, r4                                            |     r1 = r4;
    0x0002bf08 add r3, sp, 8                                         |     r3 += var_8h;
    0x0002bf0a bl 0x8cf4                                             |     fcn_00008cf4 (r0, r1, r2, r3);
    0x0002bf0e ldr r0, [sp, 8]                                       |     r0 = var_8h;
                                                                     |     if (r0 != 0) {
    0x0002bf10 cbz r0, 0x2bf52                                       |         
    0x0002bf12 ldrh r3, [r0, 0x18]                                   |         r3 = *((r0 + 0x18));
    0x0002bf14 movs r6, 0                                            |         r6 = 0;
    0x0002bf16 tst.w r3, 4                                           |         
    0x0002bf1a it ne                                                 |         
                                                                     |         if ((r3 & 4) == 0) {
    0x0002bf1c movne r7, 1                                           |             r7 = 1;
                                                                     |         }
    0x0002bf1e bl 0x2bd94                                            |         fcn_0002bd94 (r0);
    0x0002bf22 movs r3, 1                                            |         r3 = 1;
    0x0002bf24 b 0x2bed8                                             |         goto label_1;
                                                                     | label_6:
    0x0002bf26 adds r4, r7, r0                                       |         r4 = r7 + r0;
    0x0002bf28 cmp r4, r1                                            |         
    0x0002bf2a ite hi                                                |         
                                                                     |         if (r4 <= r1) {
    0x0002bf2c subhi sb, r1, r7                                      |             sb = r1 - r7;
                                                                     |         }
                                                                     |         if (r4 <= r1) {
    0x0002bf30 mov sb, r0                                            |             sb = r0;
                                                                     |         }
    0x0002bf32 b 0x2be3e                                             |         goto label_2;
                                                                     | label_5:
    0x0002bf34 ldr r2, [pc, 0x78]                                    |         
    0x0002bf36 ldr r3, [pc, 0x6c]                                    |         r3 = *(0x2bfa6);
    0x0002bf38 add r2, pc                                            |         r2 = 0x57eec;
    0x0002bf3a ldr r3, [r2, r3]                                      |         r3 = *(0x57eec);
    0x0002bf3c ldr r2, [r3]                                          |         r2 = *(0x57eec);
    0x0002bf3e ldr r3, [sp, 0xc]                                     |         r3 = var_ch;
    0x0002bf40 eors r2, r3                                           |         r2 ^= r3;
    0x0002bf42 mov.w r3, 0                                           |         r3 = 0;
                                                                     |         if (r2 != r3) {
    0x0002bf46 bne 0x2bf5c                                           |             goto label_9;
                                                                     |         }
    0x0002bf48 add sp, 0x14                                          |         
    0x0002bf4a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}            |         
    0x0002bf4e b.w 0x168c0                                           |         void (*0x168c0)() ();
                                                                     |     }
    0x0002bf52 mov r6, r0                                            |     r6 = r0;
    0x0002bf54 movs r3, 1                                            |     r3 = 1;
    0x0002bf56 b 0x2bed8                                             |     goto label_1;
                                                                     | label_7:
    0x0002bf58 movs r6, 0                                            |     r6 = 0;
    0x0002bf5a b 0x2be92                                             |     goto label_3;
                                                                     | label_9:
    0x0002bf5c blx 0x6498                                            |     fcn_00006498 ();
                                                                     | label_10:
    0x0002bf60 mov r2, r7                                            |     r2 = r7;
    0x0002bf62 mov sl, r1                                            |     sl = r1;
    0x0002bf64 lsls r2, r2, 0x1f                                     |     r2 <<= 0x1f;
    0x0002bf66 ldr r7, [sp, 4]                                       |     r7 = var_4h;
                                                                     |     if (r2 >= r2) {
    0x0002bf68 bpl 0x2be90                                           |         goto label_4;
                                                                     |     }
    0x0002bf6a cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0002bf6c beq 0x2be90                                           |         goto label_4;
                                                                     |     }
    0x0002bf6e add r4, sp, 8                                         |     r4 += var_8h;
    0x0002bf70 add sb, r7                                            |     sb += r7;
    0x0002bf72 mov r8, r4                                            |     r8 = r4;
    0x0002bf74 mov r4, sl                                            |     r4 = sl;
                                                                     |     do {
    0x0002bf76 ldr.w r0, [r5, 0xdc]                                  |         r0 = *((r5 + 0xdc));
    0x0002bf7a mov r3, r8                                            |         r3 = r8;
    0x0002bf7c movs r2, 0                                            |         r2 = 0;
    0x0002bf7e mov r1, r7                                            |         r1 = r7;
    0x0002bf80 str r4, [sp, 8]                                       |         var_8h = r4;
    0x0002bf82 bl 0x8cf4                                             |         fcn_00008cf4 (r0, r1, r2, r3);
    0x0002bf84 cdp2 p8, 0xb, c9, c7, c2, 0                           |         __asm ("cdp2 p8, 0xb, c9, c7, c2, 0");
                                                                     |         if (r0 != 0) {
    0x0002bf88 cbz r0, 0x2bf96                                       |             
    0x0002bf8a ldrh r3, [r0, 0x18]                                   |             r3 = *((r0 + 0x18));
    0x0002bf8c orr r3, r3, 4                                         |             r3 |= 4;
    0x0002bf90 strh r3, [r0, 0x18]                                   |             *((r0 + 0x18)) = r3;
    0x0002bf92 bl 0x2bd94                                            |             fcn_0002bd94 (r0);
                                                                     |         }
    0x0002bf96 adds r7, 1                                            |         r7++;
    0x0002bf98 cmp sb, r7                                            |         
    0x0002bf9a bne 0x2bf76                                           |         
                                                                     |     } while (sb != r7);
    0x0002bf9c b 0x2be90                                             |     goto label_4;
                                                                     | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x2c1fc */
                                                                     | #include <stdint.h>
                                                                     |  
    ; (fcn) fcn.0002c1fc ()                                          | void fcn_0002c1fc (int16_t arg_4h, int16_t arg_18h, int16_t arg1, 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;
                                                                     |     r2 = arg3;
                                                                     |     r3 = arg4;
    0x0002c1fc push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0002c200 sub sp, 0x3c                                          |     
    0x0002c202 str r2, [sp, 0x28]                                    |     var_28h = r2;
    0x0002c204 mov r5, r3                                            |     r5 = r3;
    0x0002c206 mov fp, r0                                            |     
    0x0002c208 ldr r2, [pc, 0x1e8]                                   |     
    0x0002c20a ldr r3, [pc, 0x1ec]                                   |     r3 = *(0x2c3fa);
    0x0002c20c ldr r4, [r0, 4]                                       |     r4 = *((r0 + 4));
    0x0002c20e add r2, pc                                            |     r2 = 0x58606;
    0x0002c210 ldr r3, [r2, r3]                                      |     
    0x0002c212 ldr r3, [r3]                                          |     r3 = *(0x58606);
    0x0002c214 str r3, [sp, 0x34]                                    |     var_34h = r3;
    0x0002c216 mov.w r3, 0                                           |     r3 = 0;
    0x0002c21a ldr r3, [r0, 0x18]                                    |     r3 = *((r0 + 0x18));
    0x0002c21c mov r0, r4                                            |     r0 = r4;
    0x0002c21e ldr r2, [r3, 4]                                       |     r2 = *((r3 + 4));
    0x0002c220 ldr r3, [r4, 4]                                       |     r3 = *((r4 + 4));
    0x0002c222 ldr r6, [r2, 0x20]                                    |     r6 = *(0x58626);
    0x0002c224 ldr.w r8, [r3, 0x20]                                  |     r8 = *((r3 + 0x20));
    0x0002c228 ldr r3, [r3]                                          |     r3 = *(r3);
    0x0002c22a ldr r7, [r2, 0x24]                                    |     r7 = *(0x5862a);
    0x0002c22c mov r2, r6                                            |     r2 = r6;
    0x0002c22e cmp r2, r8                                            |     
    0x0002c230 str r6, [sp, 0x14]                                    |     var_14h = r6;
    0x0002c232 str r3, [sp, 0x10]                                    |     var_10h = r3;
    0x0002c234 mov r3, r2                                            |     r3 = r2;
    0x0002c236 it ge                                                 |     
                                                                     |     if (r2 < r8) {
    0x0002c238 movge r3, r8                                          |         r3 = r8;
                                                                     |     }
    0x0002c23a subs r7, r6, r7                                       |     r7 = r6 - r7;
    0x0002c23c str r3, [sp, 0x24]                                    |     var_24h = r3;
    0x0002c23e umull r2, r3, r1, r2                                  |     r2:r3 = r1 * r2;
    0x0002c242 asrs r6, r6, 0x1f                                     |     r6 >>= 0x1f;
    0x0002c244 str r6, [sp, 0x1c]                                    |     var_1ch = r6;
    0x0002c246 mla r3, r1, r6, r3                                    |     __asm ("mla r3, r1, r6, r3");
    0x0002c24a str r2, [sp, 4]                                       |     var_4h = r2;
    0x0002c24c str r3, [sp, 8]                                       |     var_8h = r3;
    0x0002c24e bl 0xd140                                             |     fcn_0000d140 (r0);
    0x0002c252 ldr r1, [r4, 4]                                       |     r1 = *((r4 + 4));
    0x0002c254 ldrb r0, [r4, 9]                                      |     r0 = *((r4 + 9));
    0x0002c256 ldrd r2, r3, [r1, 0x20]                               |     __asm ("ldrd r2, r3, [r1, 0x20]");
    0x0002c25a sub.w sb, r2, r3                                      |     sb = r2 - r3;
                                                                     |     if (r0 != 0) {
    0x0002c25e cbz r0, 0x2c26c                                       |         
    0x0002c260 ldr r2, [r4, 0xc]                                     |         r2 = *((r4 + 0xc));
    0x0002c262 subs r6, r2, 1                                        |         r6 = r2 - 1;
    0x0002c264 str r6, [r4, 0xc]                                     |         *((r4 + 0xc)) = r6;
    0x0002c266 cmp r6, 0                                             |         
                                                                     |         if (r6 == 0) {
    0x0002c268 beq.w 0x2c3e6                                         |             goto label_6;
                                                                     |         }
                                                                     |     }
                                                                     | label_5:
    0x0002c26c ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0002c26e cmp r8, r3                                            |     
                                                                     |     if (r8 == r3) {
    0x0002c270 beq.w 0x2c3ca                                         |         goto label_7;
                                                                     |     }
    0x0002c274 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x0002c276 ldr.w r3, [r3, 0xd4]                                  |     r3 = *((r3 + 0xd4));
    0x0002c27a cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0002c27c beq.w 0x2c3d8                                         |         goto label_8;
                                                                     |     }
    0x0002c280 cmp r7, sb                                            |     
                                                                     |     if (r7 == sb) {
    0x0002c282 beq.w 0x2c3ac                                         |         goto label_9;
                                                                     |     }
                                                                     | label_3:
    0x0002c286 ldr r4, [sp, 0x14]                                    |     r4 = var_14h;
    0x0002c288 mov r2, r7                                            |     r2 = r7;
    0x0002c28a ldr r0, [sp, 0x10]                                    |     r0 = var_10h;
    0x0002c28c add r1, sp, 0x30                                      |     r1 += var_30h;
    0x0002c28e str r4, [sp, 0x30]                                    |     var_30h = r4;
    0x0002c290 bl 0x110ec                                            |     r0 = fcn_000110ec (r0, r1, r2);
    0x0002c294 mov r6, r0                                            |     r6 = r0;
                                                                     |     if (r0 == 0) {
    0x0002c296 cbnz r0, 0x2c2a2                                      |         
    0x0002c298 ldr r6, [sp, 0x30]                                    |         r6 = var_30h;
    0x0002c29a subs r6, r6, r4                                       |         r6 -= r4;
    0x0002c29c it ne                                                 |         
                                                                     |         if (r6 == r6) {
    0x0002c29e movne r6, 1                                           |             r6 = 1;
                                                                     |         }
    0x0002c2a0 lsls r6, r6, 3                                        |         r6 <<= 3;
                                                                     |     }
                                                                     | label_2:
    0x0002c2a2 ldr r3, [sp, 4]                                       |     r3 = var_4h;
    0x0002c2a4 ldr r2, [sp, 0x14]                                    |     r2 = var_14h;
    0x0002c2a6 ldr r1, [sp, 0x1c]                                    |     r1 = var_1ch;
    0x0002c2a8 subs r4, r3, r2                                       |     r4 = r3 - r2;
    0x0002c2aa ldr r2, [sp, 8]                                       |     r2 = var_8h;
    0x0002c2ac sbc.w r7, r2, r1                                      |     __asm ("sbc.w r7, r2, r1");
    0x0002c2b0 cmp r4, r3                                            |     
    0x0002c2b2 sbcs.w r3, r7, r2                                     |     __asm ("sbcs.w r3, r7, r2");
    0x0002c2b6 ite lt                                                |     
                                                                     |     if (r4 >= r3) {
    0x0002c2b8 movlt r3, 1                                           |         r3 = 1;
                                                                     |     }
                                                                     |     if (r4 < r3) {
    0x0002c2ba movge r3, 0                                           |         r3 = 0;
                                                                     |     }
    0x0002c2bc cmp r6, 0                                             |     
    0x0002c2be ite ne                                                |     
                                                                     |     if (r6 == 0) {
    0x0002c2c0 movne r3, 0                                           |         r3 = 0;
                                                                     |     }
                                                                     |     if (r6 != 0) {
    0x0002c2c2 andeq r3, r3, 1                                       |         r3 &= 1;
                                                                     |     }
    0x0002c2c6 str r3, [sp, 0x18]                                    |     var_18h = r3;
    0x0002c2c8 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0002c2ca beq 0x2c3ae                                           |         goto label_10;
                                                                     |     }
    0x0002c2cc eor r5, r5, 1                                         |     r5 ^= 1;
    0x0002c2d0 asr.w sl, r8, 0x1f                                    |     sl = r8 >> 0x1f;
    0x0002c2d4 and r3, r5, 1                                         |     r3 = r5 & 1;
    0x0002c2d8 str r3, [sp, 0x2c]                                    |     var_2ch = r3;
    0x0002c2da ldr r3, [pc, 0x120]                                   |     
    0x0002c2dc add r3, pc                                            |     r3 = 0x586de;
    0x0002c2de str r3, [sp, 0xc]                                     |     var_ch = r3;
    0x0002c2e0 b 0x2c318                                             |     
                                                                     |     while (r6 != r0) {
    0x0002c2e2 adds r1, r6, 1                                        |         r1 = r6 + 1;
    0x0002c2e4 ldr r0, [sp, 0x10]                                    |         r0 = var_10h;
    0x0002c2e6 mov r3, r5                                            |         r3 = r5;
    0x0002c2e8 add r2, sp, 0x30                                      |         r2 += var_30h;
    0x0002c2ea bl 0x2a698                                            |         r0 = fcn_0002a698 (r0, r1, r2, r3);
    0x0002c2ee mov r6, r0                                            |         r6 = r0;
                                                                     |         if (r0 == 0) {
    0x0002c2f0 cbz r0, 0x2c348                                       |             goto label_11;
                                                                     |         }
                                                                     | label_1:
    0x0002c2f2 ldr r0, [sp, 0x30]                                    |         r0 = var_30h;
                                                                     |         if (r0 != 0) {
    0x0002c2f4 cbz r0, 0x2c2fa                                       |             
    0x0002c2f6 bl 0x2bd94                                            |             fcn_0002bd94 (r0);
                                                                     |         }
                                                                     | label_0:
    0x0002c2fa ldr r3, [sp, 4]                                       |         r3 = var_4h;
    0x0002c2fc adds.w r4, r4, r8                                     |         r4 += r8;
    0x0002c300 adc.w r7, sl, r7                                      |         __asm ("adc.w r7, sl, r7");
    0x0002c304 and r5, r5, 1                                         |         r5 &= 1;
    0x0002c308 cmp r4, r3                                            |         
    0x0002c30a ldr r3, [sp, 8]                                       |         r3 = var_8h;
    0x0002c30c sbcs.w r3, r7, r3                                     |         __asm ("sbcs.w r3, r7, r3");
    0x0002c310 it ge                                                 |         
                                                                     |         if (r4 < r3) {
    0x0002c312 movge r5, 0                                           |             r5 = 0;
                                                                     |         }
    0x0002c314 cmp r5, 0                                             |         
                                                                     |         if (r5 == 0) {
    0x0002c316 beq 0x2c3ae                                           |             goto label_10;
                                                                     |         }
    0x0002c318 movs r5, 0                                            |         r5 = 0;
    0x0002c31a mov r2, r8                                            |         r2 = r8;
    0x0002c31c mov r3, sl                                            |         r3 = sl;
    0x0002c31e mov r0, r4                                            |         r0 = r4;
    0x0002c320 mov r1, r7                                            |         r1 = r7;
    0x0002c322 str r5, [sp, 0x30]                                    |         var_30h = r5;
    0x0002c324 bl 0x5e500                                            |         fcn_0005e500 (r0, r1, r2, r3);
    0x0002c328 ldr.w r3, [fp, 4]                                     |         r3 = *(arg_4h);
    0x0002c32c mov r6, r0                                            |         r6 = r0;
    0x0002c32e mov sb, r2                                            |         sb = r2;
    0x0002c330 ldr r3, [r3, 4]                                       |         r3 = *((r3 + 4));
    0x0002c332 ldr r1, [r3, 0x20]                                    |         r1 = *((r3 + 0x20));
    0x0002c334 ldr r3, [sp, 0xc]                                     |         r3 = var_ch;
    0x0002c336 ldr.w r0, [r3, 0x110]                                 |         r0 = *((r3 + 0x110));
    0x0002c33a bl 0x5dc60                                            |         r0 = fcn_0005dc60 (r0, r1, r2);
    0x0002c33e cmp r6, r0                                            |         
    0x0002c340 bne 0x2c2e2                                           |         
                                                                     |     }
    0x0002c342 mov r6, r5                                            |     r6 = r5;
    0x0002c344 ldr r5, [sp, 0x18]                                    |     r5 = var_18h;
    0x0002c346 b 0x2c2fa                                             |     goto label_0;
                                                                     | label_11:
    0x0002c348 ldr r3, [sp, 0x30]                                    |     r3 = var_30h;
    0x0002c34a mov r0, r3                                            |     r0 = r3;
    0x0002c34c str r3, [sp, 0x20]                                    |     var_20h = r3;
    0x0002c34e bl 0x2bdf4                                            |     r0 = fcn_0002bdf4 (r0, r1, r2);
    0x0002c352 mov r6, r0                                            |     r6 = r0;
    0x0002c354 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0002c356 bne 0x2c2f2                                           |         goto label_1;
                                                                     |     }
    0x0002c358 ldr r5, [sp, 0x20]                                    |     r5 = var_20h;
    0x0002c35a mov r0, r4                                            |     r0 = r4;
    0x0002c35c ldr r2, [sp, 0x14]                                    |     r2 = var_14h;
    0x0002c35e mov r1, r7                                            |     r1 = r7;
    0x0002c360 ldr r3, [r5, 4]                                       |     r3 = *((r5 + 4));
    0x0002c362 add sb, r3                                            |     sb += r3;
    0x0002c364 ldr r3, [sp, 0x1c]                                    |     r3 = var_1ch;
    0x0002c366 bl 0x5e500                                            |     fcn_0005e500 (r0, r1, r2, r3);
    0x0002c36a mov r1, r2                                            |     r1 = r2;
    0x0002c36c ldrd r2, r3, [sp, 0x24]                               |     __asm ("ldrd r2, r3, [var_28h]");
    0x0002c370 mov r0, sb                                            |     r0 = sb;
    0x0002c372 add r1, r3                                            |     r1 += r3;
    0x0002c374 blx 0x6214                                            |     fcn_00006214 ();
    0x0002c378 ldr r3, [r5, 8]                                       |     r3 = *((r5 + 8));
    0x0002c37a strb r6, [r3]                                         |     *(r3) = r6;
    0x0002c37c orrs.w r3, r4, r7                                     |     r3 = r4 | r7;
    0x0002c380 ldr r3, [sp, 0x2c]                                    |     r3 = var_2ch;
    0x0002c382 and r5, r3, 1                                         |     r5 = r3 & 1;
    0x0002c386 it ne                                                 |     
                                                                     |     if (r3 == r4) {
    0x0002c388 movne r5, 0                                           |         r5 = 0;
                                                                     |     }
                                                                     |     if (r5 == 0) {
    0x0002c38a cbz r5, 0x2c3d4                                       |         goto label_12;
                                                                     |     }
    0x0002c38c ldr.w r3, [fp, 0x18]                                  |     r3 = *(arg_18h);
    0x0002c390 ldr r3, [r3, 4]                                       |     r3 = *((r3 + 4));
    0x0002c392 ldr r3, [r3, 0x2c]                                    |     r3 = *((r3 + 0x2c));
    0x0002c394 strb.w r3, [sb, 0x1f]                                 |     *((sb + 0x1f)) = r3;
    0x0002c398 lsrs r2, r3, 0x18                                     |     r2 = r3 >> 0x18;
    0x0002c39a strb.w r2, [sb, 0x1c]                                 |     *((sb + 0x1c)) = r2;
    0x0002c39e lsrs r2, r3, 0x10                                     |     r2 = r3 >> 0x10;
    0x0002c3a0 lsrs r3, r3, 8                                        |     r3 >>= 8;
    0x0002c3a2 strb.w r2, [sb, 0x1d]                                 |     *((sb + 0x1d)) = r2;
    0x0002c3a6 strb.w r3, [sb, 0x1e]                                 |     *((sb + 0x1e)) = r3;
    0x0002c3aa b 0x2c2f2                                             |     goto label_1;
                                                                     | label_9:
    0x0002c3ac movs r6, 8                                            |     r6 = 8;
                                                                     | label_10:
    0x0002c3ae ldr r2, [pc, 0x50]                                    |     
    0x0002c3b0 ldr r3, [pc, 0x44]                                    |     r3 = *(0x2c3f8);
    0x0002c3b2 add r2, pc                                            |     r2 = 0x587b8;
    0x0002c3b4 ldr r3, [r2, r3]                                      |     r3 = *(0x587b8);
    0x0002c3b6 ldr r2, [r3]                                          |     r2 = *(0x587b8);
    0x0002c3b8 ldr r3, [sp, 0x34]                                    |     r3 = var_34h;
    0x0002c3ba eors r2, r3                                           |     r2 ^= r3;
    0x0002c3bc mov.w r3, 0                                           |     r3 = 0;
                                                                     |     if (r2 != r3) {
    0x0002c3c0 bne 0x2c3f0                                           |         goto label_13;
                                                                     |     }
    0x0002c3c2 mov r0, r6                                            |     r0 = r6;
    0x0002c3c4 add sp, 0x3c                                          |     
    0x0002c3c6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |     
                                                                     | label_7:
    0x0002c3ca movs r6, 0                                            |     r6 = 0;
                                                                     | label_4:
    0x0002c3cc cmp r7, sb                                            |     
                                                                     |     if (r7 == sb) {
    0x0002c3ce beq.w 0x2c2a2                                         |         goto label_2;
                                                                     |     }
    0x0002c3d2 b 0x2c286                                             |     goto label_3;
                                                                     | label_12:
    0x0002c3d4 ldr r5, [sp, 0x18]                                    |     r5 = var_18h;
    0x0002c3d6 b 0x2c2f2                                             |     goto label_1;
                                                                     | label_8:
    0x0002c3d8 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x0002c3da ldrb r6, [r3, 0xf]                                    |     r6 = *((r3 + 0xf));
    0x0002c3dc subs r6, 0                                            |     
    0x0002c3de it ne                                                 |     
                                                                     |     if (r6 == 0) {
    0x0002c3e0 movne r6, 1                                           |         r6 = 1;
                                                                     |     }
    0x0002c3e2 lsls r6, r6, 3                                        |     r6 <<= 3;
    0x0002c3e4 b 0x2c3cc                                             |     goto label_4;
                                                                     | label_6:
    0x0002c3e6 ldr r0, [r1, 0x38]                                    |     r0 = *((r1 + 0x38));
    0x0002c3e8 blx 0x63dc                                            |     fcn_000063dc ();
    0x0002c3ec strb r6, [r4, 0xa]                                    |     *((r4 + 0xa)) = r6;
    0x0002c3ee b 0x2c26c                                             |     goto label_5;
                                                                     | label_13:
    0x0002c3f0 blx 0x6498                                            |     fcn_00006498 ();
    0x0002c3f4 rev16 r2, r1                                          |     __asm ("rev16 r2, r1");
    0x0002c3f6 movs r4, r0                                           |     r4 = r0;
    0x0002c3f8 lsls r0, r1, 0xe                                      |     r0 = r1 << 0xe;
    0x0002c3fa movs r0, r0                                           |     
    0x0002c3fc pop {r3, r5, pc}                                      |     
                                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x2c5f8 */
                                                                 | #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.0002c5f8 ()                                      | void fcn_0002c5f8 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int32_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;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     int16_t var_40h;
                                                                 |     int32_t var_40h_2;
                                                                 |     int32_t var_48h;
                                                                 |     int32_t var_48h_2;
                                                                 |     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;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x0002c5f8 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x0002c5fc sub sp, 0x7c                                      |     
    0x0002c5fe str r1, [sp, 0x34]                                |     var_34h = r1;
    0x0002c600 mov r5, r1                                        |     r5 = r1;
    0x0002c602 ldr.w r1, [pc, 0x50c]                             |     
    0x0002c606 str r0, [sp, 0xc]                                 |     var_ch = r0;
    0x0002c608 mov r0, r2                                        |     r0 = r2;
    0x0002c60a str r2, [sp, 0x10]                                |     var_10h = r2;
    0x0002c60c ldr.w r2, [pc, 0x504]                             |     r2 = *(0x2cb14);
    0x0002c610 add r1, pc                                        |     r1 = 0x59126;
    0x0002c612 ldr r2, [r1, r2]                                  |     
    0x0002c614 movs r1, 1                                        |     r1 = 1;
    0x0002c616 ldr r2, [r2]                                      |     r2 = *(0x59126);
    0x0002c618 str r2, [sp, 0x74]                                |     var_74h = r2;
    0x0002c61a mov.w r2, 0                                       |     r2 = 0;
    0x0002c61e str r3, [sp, 0x14]                                |     var_14h = r3;
                                                                 |     if (r3 == 0) {
    0x0002c620 cbz r3, 0x2c644                                   |         goto label_4;
                                                                 |     }
    0x0002c622 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x0002c624 beq.w 0x2c9ae                                     |         goto label_11;
                                                                 |     }
    0x0002c628 add r2, sp, 0x34                                  |     r2 += var_34h;
    0x0002c62a movs r1, 0                                        |     r1 = 0;
                                                                 |     do {
    0x0002c62c ldr r3, [r5, 0x14]                                |         r3 = *((r5 + 0x14));
    0x0002c62e cmp r3, r0                                        |         
    0x0002c630 it ls                                             |         
                                                                 |         if (r3 > r0) {
    0x0002c632 addls r2, r5, 0xc                                 |             r2 = r5 + 0xc;
                                                                 |         }
    0x0002c636 ldr r5, [r5, 0xc]                                 |         r5 = *((r5 + 0xc));
    0x0002c638 it ls                                             |         
                                                                 |         if (r3 > r0) {
    0x0002c63a addls r1, 1                                       |             r1++;
                                                                 |         }
    0x0002c63c str r5, [r2]                                      |         *(r2) = r5;
    0x0002c63e cmp r5, 0                                         |         
    0x0002c640 bne 0x2c62c                                       |         
                                                                 |     } while (r5 != 0);
    0x0002c642 ldr r5, [sp, 0x34]                                |     r5 = var_34h;
                                                                 | label_4:
    0x0002c644 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x0002c646 ldr.w r3, [r2, 0xc0]                              |     r3 = *((r2 + 0xc0));
    0x0002c64a add r3, r1                                        |     r3 += r1;
    0x0002c64c str.w r3, [r2, 0xc0]                              |     __asm ("str.w r3, [r2, 0xc0]");
    0x0002c650 ldr r3, [r5, 0x14]                                |     r3 = *((r5 + 0x14));
    0x0002c652 cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x0002c654 beq.w 0x2c8ba                                     |         goto label_12;
                                                                 |     }
                                                                 | label_2:
    0x0002c658 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x0002c65a ldr.w r2, [r3, 0x98]                              |     r2 = *((r3 + 0x98));
    0x0002c65e ldr.w r7, [r3, 0xe0]                              |     r7 = *((r3 + 0xe0));
    0x0002c662 ldrb r3, [r3, 0xa]                                |     r3 = *((r3 + 0xa));
    0x0002c664 rev r6, r2                                        |     r2 = SWAP32 (r6);
    0x0002c666 str r2, [sp, 0x1c]                                |     var_1ch = r2;
    0x0002c668 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x0002c66a ldrsh.w r3, [r7, 0x28]                            |     r3 = *((r7 + 0x28));
    0x0002c66e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0002c670 bne 0x2c6de                                       |         goto label_13;
                                                                 |     }
    0x0002c672 ldr r3, [r7, 0x20]                                |     r3 = *((r7 + 0x20));
    0x0002c674 ldr.w r8, [r3]                                    |     r8 = *(r3);
    0x0002c678 ldr.w r3, [r8, 0x60]                              |     r3 = *((r8 + 0x60));
    0x0002c67c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0002c67e bne.w 0x2c8c2                                     |         goto label_14;
                                                                 |     }
    0x0002c682 ldrb.w r3, [r7, 0x2b]                             |     r3 = *((r7 + 0x2b));
    0x0002c686 add.w sl, sp, 0x38                                |     sl += var_38h;
                                                                 |     if (r3 == 0) {
                                                                 | label_3:
    0x0002c68a cbnz r3, 0x2c69a                                  |         
    0x0002c68c ldr r0, [r7, 4]                                   |         r0 = *((r7 + 4));
    0x0002c68e movs r3, 5                                        |         r3 = 5;
    0x0002c690 movs r2, 1                                        |         r2 = 1;
    0x0002c692 movs r1, 3                                        |         r1 = 3;
    0x0002c694 ldr r4, [r0]                                      |         r4 = *(r0);
    0x0002c696 ldr r4, [r4, 0x38]                                |         r4 = *((r4 + 0x38));
    0x0002c698 blx r4                                            |         uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
                                                                 |     }
                                                                 | label_6:
    0x0002c69a mov.w r8, 0                                       |     r8 = 0;
    0x0002c69e movw r3, 0xffff                                   |     r3 = 0xffff;
    0x0002c6a2 strh r3, [r7, 0x28]                               |     *((r7 + 0x28)) = r3;
                                                                 |     do {
    0x0002c6a4 add.w r8, r8, 1                                   |         r8++;
    0x0002c6a8 movs r2, 1                                        |         r2 = 1;
    0x0002c6aa mov r3, r8                                        |         r3 = r8;
    0x0002c6ac mov r1, sl                                        |         r1 = sl;
    0x0002c6ae mov r0, r7                                        |         r0 = r7;
    0x0002c6b0 bl 0x296ec                                        |         r0 = fcn_000296ec (r0, r1, r2, r3);
    0x0002c6b4 adds r2, r0, 1                                    |         r2 = r0 + 1;
    0x0002c6b6 beq 0x2c6a4                                       |         
                                                                 |     } while (r2 == r0);
    0x0002c6b8 mov r4, r0                                        |     r4 = r0;
                                                                 |     if (r0 != 0) {
    0x0002c6ba cbz r0, 0x2c6de                                   |         
                                                                 | label_0:
    0x0002c6bc ldr.w r2, [pc, 0x458]                             |         
    0x0002c6c0 ldr.w r3, [pc, 0x450]                             |         r3 = *(0x2cb14);
    0x0002c6c4 add r2, pc                                        |         r2 = 0x591e0;
    0x0002c6c6 ldr r3, [r2, r3]                                  |         r3 = *(0x591e0);
    0x0002c6c8 ldr r2, [r3]                                      |         r2 = *(0x591e0);
    0x0002c6ca ldr r3, [sp, 0x74]                                |         r3 = var_74h;
    0x0002c6cc eors r2, r3                                       |         r2 ^= r3;
    0x0002c6ce mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0002c6d2 bne.w 0x2cb0c                                     |             goto label_15;
                                                                 |         }
    0x0002c6d6 mov r0, r4                                        |         r0 = r4;
    0x0002c6d8 add sp, 0x7c                                      |         
    0x0002c6da pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 |     }
                                                                 | label_13:
    0x0002c6de ldr r3, [r7, 0x44]                                |     r3 = *((r7 + 0x44));
    0x0002c6e0 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x0002c6e2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0002c6e4 beq 0x2c7b2                                       |         goto label_16;
                                                                 |     }
                                                                 | label_1:
    0x0002c6e6 ldr r3, [r7, 8]                                   |     r3 = *((r7 + 8));
    0x0002c6e8 mov r8, r5                                        |     r8 = r5;
    0x0002c6ea ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x0002c6ec add.w sl, sp, 0x38                                |     sl += var_38h;
    0x0002c6f0 ldr r4, [sp, 0x20]                                |     r4 = var_20h;
    0x0002c6f2 str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x0002c6f4 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0002c6f6 add.w r2, r1, 0x18                                |     r2 = r1 + 0x18;
    0x0002c6fa str r2, [sp, 0x28]                                |     var_28h = r2;
    0x0002c6fc vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x0002c700 strd r3, r1, [sp, 0x48]                           |     __asm ("strd r3, r1, [var_48h]");
    0x0002c704 mov r3, r2                                        |     r3 = r2;
    0x0002c706 umull r6, sb, r4, r3                              |     r6:sb = r4 * r3;
    0x0002c70a asrs r2, r2, 0x1f                                 |     r2 >>= 0x1f;
    0x0002c70c strd r7, r5, [sp, 0x20]                           |     __asm ("strd r7, r5, [var_20h]");
    0x0002c710 mov fp, r3                                        |     
    0x0002c712 str r7, [sp, 0x38]                                |     var_38h = r7;
    0x0002c714 mov r7, r2                                        |     r7 = r2;
    0x0002c716 ldr r5, [sp, 0x14]                                |     r5 = var_14h;
    0x0002c718 vstr d16, [sp, 0x40]                              |     __asm ("vstr d16, [sp, 0x40]");
    0x0002c71c mla sb, r4, r2, sb                                |     __asm ("mla sb, r4, r2, sb");
    0x0002c720 str r2, [sp, 0x2c]                                |     var_2ch = r2;
    0x0002c722 adds r6, 0x20                                     |     r6 += 0x20;
    0x0002c724 adc sb, sb, 0                                     |     __asm ("adc sb, sb, 0");
    0x0002c728 b 0x2c72c                                         |     
                                                                 |     while (r2 != 0) {
    0x0002c72a mov r8, r2                                        |         r8 = r2;
    0x0002c72c adds r4, 1                                        |         r4++;
    0x0002c72e mov r2, r5                                        |         r2 = r5;
                                                                 |         if (r5 != 0) {
    0x0002c730 cbz r5, 0x2c740                                   |             
    0x0002c732 ldr.w r2, [r8, 0xc]                               |             r2 = *((r8 + 0xc));
    0x0002c736 ldr r3, [sp, 0x10]                                |             r3 = var_10h;
    0x0002c738 cmp r2, 0                                         |             
    0x0002c73a ite eq                                            |             
                                                                 |             if (r2 != 0) {
    0x0002c73c moveq r2, r3                                      |                 r2 = r3;
                                                                 |             }
                                                                 |             if (r2 != 0) {
    0x0002c73e movne r2, 0                                       |                 r2 = 0;
                                                                 |                 goto label_17;
                                                                 |             }
                                                                 |         }
                                                                 | label_17:
    0x0002c740 mov r1, r8                                        |         r1 = r8;
    0x0002c742 mov r0, sl                                        |         r0 = sl;
    0x0002c744 strd r6, sb, [sp]                                 |         __asm ("strd r6, sb, [sp]");
    0x0002c748 bl 0x87b0                                         |         r0 = fcn_000087b0 (r0, r1, r2, r3);
    0x0002c74c cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x0002c74e bne.w 0x2c8b6                                     |             goto label_18;
                                                                 |         }
    0x0002c752 ldr.w r2, [r8, 0xc]                               |         r2 = *((r8 + 0xc));
    0x0002c756 adds.w ip, fp, r6                                 |         
    0x0002c75a adc.w lr, r7, sb                                  |         __asm ("adc.w lr, r7, sb");
    0x0002c75e mov r6, ip                                        |         r6 = ip;
    0x0002c760 mov sb, lr                                        |         sb = lr;
    0x0002c762 cmp r2, 0                                         |         
    0x0002c764 bne 0x2c72a                                       |         
                                                                 |     }
    0x0002c766 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0002c768 mov fp, ip                                        |     
    0x0002c76a ldrd r7, r5, [sp, 0x20]                           |     __asm ("ldrd r7, r5, [var_20h]");
    0x0002c76e str r4, [sp, 0x20]                                |     var_20h = r4;
    0x0002c770 mov r4, r0                                        |     r4 = r0;
    0x0002c772 str.w lr, [sp, 0x24]                              |     __asm ("str.w lr, [var_24h]");
    0x0002c776 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0002c778 beq.w 0x2c8f6                                     |         goto label_19;
                                                                 |     }
    0x0002c77c ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0002c77e lsls r3, r3, 0x1a                                 |     r3 <<= 0x1a;
                                                                 |     if (r3 >= r3) {
    0x0002c780 bpl 0x2c85c                                       |         goto label_8;
                                                                 |     }
    0x0002c782 ldrb.w r3, [r7, 0x31]                             |     r3 = *((r7 + 0x31));
    0x0002c786 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0002c788 bne.w 0x2ca52                                     |         goto label_20;
                                                                 |     }
    0x0002c78c ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0002c78e ldr r0, [sp, 0x3c]                                |     r0 = var_3ch;
    0x0002c790 and r1, r3, 0x13                                  |     r1 = r3 & 0x13;
    0x0002c794 ldr r3, [r0]                                      |     r3 = *(r0);
    0x0002c796 ldr r3, [r3, 0x14]                                |     r3 = *((r3 + 0x14));
    0x0002c798 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x0002c79a ldrb.w r3, [r7, 0x2f]                             |     r3 = *((r7 + 0x2f));
    0x0002c79e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0002c7a0 beq.w 0x2c8ac                                     |         goto label_21;
                                                                 |     }
    0x0002c7a4 ldrd r2, r3, [r7, 0x10]                           |     __asm ("ldrd r2, r3, [r7, 0x10]");
    0x0002c7a8 cmp r3, 0                                         |     
                                                                 |     if (r3 < 0) {
    0x0002c7aa blt 0x2c8ac                                       |         goto label_21;
                                                                 |     }
    0x0002c7ac str r4, [sp, 0x18]                                |     var_18h = r4;
    0x0002c7ae mov r4, r0                                        |     r4 = r0;
    0x0002c7b0 b 0x2c874                                         |     goto label_22;
                                                                 | label_16:
    0x0002c7b2 ldr r3, [r7, 0x68]                                |     r3 = *((r7 + 0x68));
    0x0002c7b4 mov.w r1, 0x2d00                                  |     
    0x0002c7b8 movt r1, 0x18e2                                   |     r1 = 0x18e22d00;
    0x0002c7bc movw r2, 0x7f37                                   |     
    0x0002c7c0 movt r2, 0x8206                                   |     r2 = 0x82067f37;
    0x0002c7c4 str r1, [sp, 0x58]                                |     var_58h = r1;
    0x0002c7c6 rev r1, r3                                        |     r3 = SWAP32 (r1);
    0x0002c7c8 add.w r4, r7, 0x54                                |     r4 = r7 + 0x54;
    0x0002c7cc str r6, [sp, 0x5c]                                |     var_5ch = r6;
    0x0002c7ce str r2, [sp, 0x54]                                |     var_54h = r2;
    0x0002c7d0 str r1, [sp, 0x60]                                |     var_60h = r1;
    0x0002c7d2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0002c7d4 beq.w 0x2ca2e                                     |         goto label_23;
                                                                 |     }
    0x0002c7d8 movw r3, 0xac37                                   |     
    0x0002c7dc movt r3, 0x9ae8                                   |     r3 = 0x9ae8ac37;
                                                                 | label_7:
    0x0002c7e0 ldr r1, [r4, 4]                                   |     r1 = *((r4 + 4));
    0x0002c7e2 add r2, r3                                        |     r2 += r3;
    0x0002c7e4 ldr r4, [sp, 0x5c]                                |     r4 = var_5ch;
    0x0002c7e6 ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x0002c7e8 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x0002c7ec add r2, r4                                        |     r2 += r4;
    0x0002c7ee ldr r4, [sp, 0x60]                                |     r4 = var_60h;
    0x0002c7f0 str r0, [r7, 0x24]                                |     *((r7 + 0x24)) = r0;
    0x0002c7f2 ldr r0, [r7, 0x54]                                |     r0 = *((r7 + 0x54));
    0x0002c7f4 add r3, r4                                        |     r3 += r4;
    0x0002c7f6 add r4, sp, 0x64                                  |     r4 += var_64h;
    0x0002c7f8 add r3, r2                                        |     r3 += r2;
    0x0002c7fa stm r4!, {r0, r1}                                 |     *(r4!) = r0;
                                                                 |     *((r4! + 4)) = r1;
    0x0002c7fc add r2, r0                                        |     r2 += r0;
    0x0002c7fe ldr r1, [sp, 0x68]                                |     r1 = var_68h;
    0x0002c800 add r2, r3                                        |     r2 += r3;
    0x0002c802 str r2, [r7, 0x4c]                                |     *((r7 + 0x4c)) = r2;
    0x0002c804 add r3, r1                                        |     r3 += r1;
    0x0002c806 add r1, sp, 0x54                                  |     r1 += var_54h;
    0x0002c808 add r3, r2                                        |     r3 += r2;
    0x0002c80a rev r2, r2                                        |     r2 = SWAP32 (r2);
    0x0002c80c str r3, [r7, 0x50]                                |     *((r7 + 0x50)) = r3;
    0x0002c80e rev r3, r3                                        |     r3 = SWAP32 (r3);
    0x0002c810 str r2, [sp, 0x6c]                                |     var_6ch = r2;
    0x0002c812 movs r2, 0x20                                     |     r2 = 0x20;
    0x0002c814 str r3, [sp, 0x70]                                |     var_70h = r3;
    0x0002c816 movs r3, 0                                        |     r3 = 0;
    0x0002c818 ldr r0, [r7, 8]                                   |     r0 = *((r7 + 8));
    0x0002c81a strb.w r3, [r7, 0x41]                             |     *((r7 + 0x41)) = r3;
    0x0002c81e movs r3, 1                                        |     r3 = 1;
    0x0002c820 strb.w r3, [r7, 0x2f]                             |     *((r7 + 0x2f)) = r3;
    0x0002c824 ldr r3, [r0]                                      |     r3 = *(r0);
    0x0002c826 vstr d16, [sp]                                    |     __asm ("vstr d16, [sp]");
    0x0002c82a ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x0002c82c blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0002c82e mov r4, r0                                        |     r4 = r0;
    0x0002c830 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0002c832 bne.w 0x2c6bc                                     |         goto label_0;
                                                                 |     }
    0x0002c836 ldrb.w r3, [r7, 0x30]                             |     r3 = *((r7 + 0x30));
    0x0002c83a ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x0002c83c cmp r3, 0                                         |     
    0x0002c83e it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x0002c840 cmpne r2, 0                                       |         __asm ("cmpne r2, 0");
                                                                 |         goto label_24;
                                                                 |     }
                                                                 |     if (r3 == 0) {
                                                                 | label_24:
    0x0002c842 beq.w 0x2c6e6                                     |         goto label_1;
                                                                 |     }
    0x0002c846 ldr r0, [r7, 8]                                   |     r0 = *((r7 + 8));
    0x0002c848 and r1, r2, 0x13                                  |     r1 = r2 & 0x13;
    0x0002c84c ldr r3, [r0]                                      |     r3 = *(r0);
    0x0002c84e ldr r3, [r3, 0x14]                                |     r3 = *((r3 + 0x14));
    0x0002c850 blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x0002c852 mov r4, r0                                        |     r4 = r0;
    0x0002c854 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0002c856 beq.w 0x2c6e6                                     |         goto label_1;
                                                                 |     }
    0x0002c85a b 0x2c6bc                                         |     goto label_0;
                                                                 | label_8:
    0x0002c85c movs r3, 0                                        |     r3 = 0;
    0x0002c85e str r3, [sp, 0x18]                                |     var_18h = r3;
                                                                 | label_9:
    0x0002c860 ldrb.w r3, [r7, 0x2f]                             |     r3 = *((r7 + 0x2f));
    0x0002c864 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0002c866 beq.w 0x2ca3e                                     |         goto label_25;
                                                                 |     }
    0x0002c86a ldrd r2, r3, [r7, 0x10]                           |     __asm ("ldrd r2, r3, [r7, 0x10]");
    0x0002c86e cmp r3, 0                                         |     
                                                                 |     if (r3 < 0) {
    0x0002c870 blt.w 0x2c9b2                                     |         goto label_26;
                                                                 |     }
                                                                 | label_22:
    0x0002c874 ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x0002c876 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x0002c878 add r0, r1                                        |     r0 += r1;
    0x0002c87a ldr r1, [sp, 0x28]                                |     r1 = var_28h;
    0x0002c87c umull lr, r6, r0, r1                              |     lr:r6 = r0 * r1;
    0x0002c880 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x0002c882 mla r0, r0, r1, r6                                |     __asm ("mla r0, r0, r1, r6");
    0x0002c886 adds.w ip, lr, 0x1f                               |     
    0x0002c88a adc r6, r0, 0                                     |     __asm ("adc r6, r0, 0");
    0x0002c88e cmp ip, r2                                        |     
    0x0002c890 sbcs r6, r3                                       |     __asm ("sbcs r6, r3");
                                                                 |     if (ip >= r2) {
    0x0002c892 blt 0x2c89c                                       |         
    0x0002c894 adds.w r2, lr, 0x20                               |         r2 = lr + 0x20;
    0x0002c898 adc r3, r0, 0                                     |         __asm ("adc r3, r0, 0");
                                                                 |     }
    0x0002c89c mov r0, r7                                        |     r0 = r7;
    0x0002c89e bl 0x27348                                        |     fcn_00027348 (r0, r1, r2);
    0x0002c8a2 mov r0, r4                                        |     r0 = r4;
    0x0002c8a4 ldr r4, [sp, 0x18]                                |     r4 = var_18h;
    0x0002c8a6 movs r3, 0                                        |     r3 = 0;
    0x0002c8a8 strb.w r3, [r7, 0x2f]                             |     *((r7 + 0x2f)) = r3;
                                                                 | label_21:
    0x0002c8ac ldr.w fp, [r7, 0x44]                              |     fp = *((r7 + 0x44));
    0x0002c8b0 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0002c8b2 beq.w 0x2c9b8                                     |         goto label_27;
                                                                 |     }
                                                                 | label_18:
    0x0002c8b6 mov r4, r0                                        |     r4 = r0;
    0x0002c8b8 b 0x2c6bc                                         |     goto label_0;
                                                                 | label_12:
    0x0002c8ba mov r0, r5                                        |     r0 = r5;
    0x0002c8bc bl 0x7918                                         |     fcn_00007918 (r0);
    0x0002c8c0 b 0x2c658                                         |     goto label_2;
                                                                 | label_14:
    0x0002c8c2 add.w sl, sp, 0x38                                |     sl += var_38h;
    0x0002c8c6 movs r0, 4                                        |     r0 = 4;
    0x0002c8c8 mov r1, sl                                        |     r1 = sl;
    0x0002c8ca blx 0x67ac                                        |     fcn_000067ac ();
    0x0002c8ce ldrb.w r3, [r7, 0x2b]                             |     r3 = *((r7 + 0x2b));
    0x0002c8d2 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0002c8d4 bne 0x2c9c8                                       |         goto label_28;
                                                                 |     }
    0x0002c8d6 ldr r0, [r7, 4]                                   |     r0 = *((r7 + 4));
    0x0002c8d8 movs r2, 4                                        |     r2 = 4;
    0x0002c8da movs r3, 0xa                                      |     r3 = 0xa;
    0x0002c8dc mov r1, r2                                        |     r1 = r2;
    0x0002c8de ldr r4, [r0]                                      |     r4 = *(r0);
    0x0002c8e0 ldr r4, [r4, 0x38]                                |     r4 = *((r4 + 0x38));
    0x0002c8e2 blx r4                                            |     r0 = uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0002c8e4 mov r4, r0                                        |     r4 = r0;
    0x0002c8e6 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0002c8e8 beq 0x2c9c8                                       |         goto label_28;
                                                                 |     }
    0x0002c8ea cmp r0, 5                                         |     
                                                                 |     if (r0 != 5) {
    0x0002c8ec bne.w 0x2c6bc                                     |         goto label_0;
                                                                 |     }
    0x0002c8f0 ldrb.w r3, [r7, 0x2b]                             |     r3 = *((r7 + 0x2b));
    0x0002c8f4 b 0x2c68a                                         |     goto label_3;
                                                                 | label_19:
    0x0002c8f6 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0002c8f8 ldr.w fp, [r7, 0x44]                              |     fp = *((r7 + 0x44));
    0x0002c8fc mov sb, r3                                        |     sb = r3;
    0x0002c8fe str r3, [sp, 0x18]                                |     var_18h = r3;
                                                                 | label_5:
    0x0002c900 mov r6, r5                                        |     r6 = r5;
                                                                 |     do {
    0x0002c902 mov sl, fp                                        |         sl = fp;
    0x0002c904 add.w fp, fp, 1                                   |         
    0x0002c908 ldr r2, [r6, 0x14]                                |         r2 = *((r6 + 0x14));
    0x0002c90a mov r1, fp                                        |         r1 = fp;
    0x0002c90c mov r0, r7                                        |         r0 = r7;
    0x0002c90e bl 0x29208                                        |         fcn_00029208 (r0, r1, r2);
    0x0002c912 ldr r6, [r6, 0xc]                                 |         r6 = *((r6 + 0xc));
    0x0002c914 clz r3, r0                                        |         r3 &= r0;
    0x0002c918 lsrs r3, r3, 5                                    |         r3 >>= 5;
    0x0002c91a cmp r6, 0                                         |         
    0x0002c91c ite eq                                            |         
                                                                 |         if (r6 != 0) {
    0x0002c91e moveq r2, 0                                       |             r2 = 0;
                                                                 |         }
                                                                 |         if (r6 == 0) {
    0x0002c920 andne r2, r3, 1                                   |             r2 = r3 & 1;
                                                                 |         }
    0x0002c924 cmp r2, 0                                         |         
    0x0002c926 bne 0x2c902                                       |         
                                                                 |     } while (r2 != 0);
    0x0002c928 tst.w r3, sb                                      |     
    0x0002c92c mov r6, sl                                        |     r6 = sl;
    0x0002c92e mov r4, r0                                        |     r4 = r0;
                                                                 |     if ((r3 & sb) == 0) {
    0x0002c930 beq 0x2c962                                       |         goto label_29;
                                                                 |     }
    0x0002c932 ldr.w sl, [sp, 0x18]                              |     sl = var_18h;
                                                                 |     do {
    0x0002c936 mov sb, fp                                        |         sb = fp;
    0x0002c938 add.w fp, fp, 1                                   |         
    0x0002c93c ldr.w r2, [r8, 0x14]                              |         r2 = *((r8 + 0x14));
    0x0002c940 mov r1, fp                                        |         r1 = fp;
    0x0002c942 mov r0, r7                                        |         r0 = r7;
    0x0002c944 sub.w sb, r6, sb                                  |         sb = r6 - sb;
    0x0002c948 bl 0x29208                                        |         fcn_00029208 (r0, r1, r2);
    0x0002c94c add sb, sl                                        |         sb += sl;
    0x0002c94e clz r3, r0                                        |         r3 &= r0;
    0x0002c952 lsrs r3, r3, 5                                    |         r3 >>= 5;
    0x0002c954 cmp.w sb, 0                                       |         
    0x0002c958 it le                                             |         
                                                                 |         if (sb > 0) {
    0x0002c95a movle r3, 0                                       |             r3 = 0;
                                                                 |         }
    0x0002c95c cmp r3, 0                                         |         
    0x0002c95e bne 0x2c936                                       |         
                                                                 |     } while (r3 != 0);
    0x0002c960 mov r4, r0                                        |     r4 = r0;
                                                                 | label_29:
    0x0002c962 cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x0002c964 bne.w 0x2c6bc                                     |         goto label_0;
                                                                 |     }
    0x0002c968 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x0002c96a str.w fp, [r7, 0x44]                              |     __asm ("str.w fp, [r7, 0x44]");
    0x0002c96e bic r3, r2, 0xff                                  |     r3 = BIT_MASK (r2, 0xff);
    0x0002c972 orr.w r3, r3, r2, asr 16                          |     r3 |= (r2 >> 16);
    0x0002c976 strh.w r3, [r7, 0x42]                             |     *((r7 + 0x42)) = r3;
    0x0002c97a ldr r3, [sp, 0x14]                                |     r3 = var_14h;
                                                                 |     if (r3 != 0) {
    0x0002c97c cbz r3, 0x2c992                                   |         
    0x0002c97e ldr r3, [sp, 0x10]                                |         r3 = var_10h;
    0x0002c980 mov r0, r7                                        |         r0 = r7;
    0x0002c982 str r3, [r7, 0x48]                                |         *((r7 + 0x48)) = r3;
    0x0002c984 ldr r3, [r7, 0x3c]                                |         r3 = *((r7 + 0x3c));
    0x0002c986 adds r3, 1                                        |         r3++;
    0x0002c988 str r3, [r7, 0x3c]                                |         *((r7 + 0x3c)) = r3;
    0x0002c98a bl 0xb16c                                         |         fcn_0000b16c (r0);
    0x0002c98e str.w fp, [r7, 0xc]                               |         __asm ("str.w fp, [r7, 0xc]");
                                                                 |     }
    0x0002c992 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x0002c994 ldr r6, [sp, 0xc]                                 |     r6 = var_ch;
    0x0002c996 ldr r0, [r3, 0x58]                                |     r0 = *((r3 + 0x58));
                                                                 |     if (r0 != 0) {
    0x0002c998 cbnz r0, 0x2c99e                                  |         goto label_30;
                                                                 |     }
    0x0002c99a b 0x2c6bc                                         |     goto label_0;
                                                                 |     do {
    0x0002c99c ldr r0, [r6, 0x58]                                |         r0 = *((r6 + 0x58));
                                                                 | label_30:
    0x0002c99e ldr r2, [r5, 4]                                   |         r2 = *((r5 + 4));
    0x0002c9a0 ldr r1, [r5, 0x14]                                |         r1 = *((r5 + 0x14));
    0x0002c9a2 bl 0x2c404                                        |         fcn_0002c404 (r0, r1, r2);
    0x0002c9a6 ldr r5, [r5, 0xc]                                 |         r5 = *((r5 + 0xc));
    0x0002c9a8 cmp r5, 0                                         |         
    0x0002c9aa bne 0x2c99c                                       |         
                                                                 |     } while (r5 != 0);
    0x0002c9ac b 0x2c6bc                                         |     goto label_0;
                                                                 | label_11:
    0x0002c9ae mov r1, r5                                        |     r1 = r5;
    0x0002c9b0 b 0x2c644                                         |     goto label_4;
                                                                 | label_26:
    0x0002c9b2 ldr r4, [sp, 0x18]                                |     r4 = var_18h;
    0x0002c9b4 ldr.w fp, [r7, 0x44]                              |     fp = *((r7 + 0x44));
                                                                 | label_27:
    0x0002c9b8 cmp r4, 0                                         |     
    0x0002c9ba str r4, [sp, 0x18]                                |     var_18h = r4;
    0x0002c9bc ite le                                            |     
                                                                 |     if (r4 > 0) {
    0x0002c9be movle sb, 0                                       |         sb = 0;
                                                                 |     }
                                                                 |     if (r4 > 0) {
    0x0002c9c2 mov.w sb, 1                                       |         sb = 1;
                                                                 |     }
    0x0002c9c6 b 0x2c900                                         |     goto label_5;
                                                                 | label_28:
    0x0002c9c8 ldr r3, [r7, 0x54]                                |     r3 = *((r7 + 0x54));
    0x0002c9ca movs r4, 0                                        |     r4 = 0;
    0x0002c9cc ldr r2, [r7, 0x68]                                |     r2 = *((r7 + 0x68));
    0x0002c9ce mov r0, r7                                        |     r0 = r7;
    0x0002c9d0 str r4, [r7, 0x44]                                |     *((r7 + 0x44)) = r4;
    0x0002c9d2 rev r3, r3                                        |     r3 = SWAP32 (r3);
    0x0002c9d4 adds r3, 1                                        |     r3++;
    0x0002c9d6 adds r2, 1                                        |     r2++;
    0x0002c9d8 str r2, [r7, 0x68]                                |     *((r7 + 0x68)) = r2;
    0x0002c9da lsrs r2, r3, 0x18                                 |     r2 = r3 >> 0x18;
    0x0002c9dc strb.w r3, [r7, 0x57]                             |     *((r7 + 0x57)) = r3;
    0x0002c9e0 strb.w r2, [r7, 0x54]                             |     *((r7 + 0x54)) = r2;
    0x0002c9e4 lsrs r2, r3, 0x10                                 |     r2 = r3 >> 0x10;
    0x0002c9e6 lsrs r3, r3, 8                                    |     r3 >>= 8;
    0x0002c9e8 strb.w r2, [r7, 0x55]                             |     *((r7 + 0x55)) = r2;
    0x0002c9ec strb.w r3, [r7, 0x56]                             |     *((r7 + 0x56)) = r3;
    0x0002c9f0 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x0002c9f2 str r3, [r7, 0x58]                                |     *((r7 + 0x58)) = r3;
    0x0002c9f4 bl 0xb16c                                         |     fcn_0000b16c (r0);
    0x0002c9f8 mov.w r3, -1                                      |     r3 = -1;
    0x0002c9fc str.w r4, [r8, 0x60]                              |     __asm ("str.w r4, [r8, 0x60]");
    0x0002ca00 str.w r4, [r8, 0x68]                              |     __asm ("str.w r4, [r8, 0x68]");
    0x0002ca04 str.w r3, [r8, 0x6c]                              |     __asm ("str.w r3, [r8, 0x6c]");
    0x0002ca08 str.w r3, [r8, 0x70]                              |     __asm ("str.w r3, [r8, 0x70]");
    0x0002ca0c str.w r3, [r8, 0x74]                              |     __asm ("str.w r3, [r8, 0x74]");
    0x0002ca10 ldrb.w r3, [r7, 0x2b]                             |     r3 = *((r7 + 0x2b));
    0x0002ca14 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0002ca16 bne.w 0x2c69a                                     |         goto label_6;
                                                                 |     }
    0x0002ca1a ldr r0, [r7, 4]                                   |     r0 = *((r7 + 4));
    0x0002ca1c movs r2, 4                                        |     r2 = 4;
    0x0002ca1e movs r3, 9                                        |     r3 = 9;
    0x0002ca20 mov r1, r2                                        |     r1 = r2;
    0x0002ca22 ldr r4, [r0]                                      |     r4 = *(r0);
    0x0002ca24 ldr r4, [r4, 0x38]                                |     r4 = *((r4 + 0x38));
    0x0002ca26 blx r4                                            |     uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0002ca28 ldrb.w r3, [r7, 0x2b]                             |     r3 = *((r7 + 0x2b));
    0x0002ca2c b 0x2c68a                                         |     goto label_3;
                                                                 | label_23:
    0x0002ca2e mov r1, r4                                        |     r1 = r4;
    0x0002ca30 movs r0, 8                                        |     r0 = 8;
    0x0002ca32 blx 0x67ac                                        |     fcn_000067ac ();
    0x0002ca36 ldrd r2, r3, [sp, 0x54]                           |     __asm ("ldrd r2, r3, [var_58h]");
    0x0002ca3a add r3, r2                                        |     r3 += r2;
    0x0002ca3c b 0x2c7e0                                         |     goto label_7;
                                                                 | label_25:
    0x0002ca3e ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0002ca40 ldr.w fp, [r7, 0x44]                              |     fp = *((r7 + 0x44));
    0x0002ca44 cmp r3, 0                                         |     
    0x0002ca46 ite le                                            |     
                                                                 |     if (r3 > 0) {
    0x0002ca48 movle sb, 0                                       |         sb = 0;
                                                                 |     }
                                                                 |     if (r3 > 0) {
    0x0002ca4c mov.w sb, 1                                       |         sb = 1;
                                                                 |     }
    0x0002ca50 b 0x2c900                                         |     goto label_5;
                                                                 | label_20:
    0x0002ca52 ldr r0, [r7, 8]                                   |     r0 = *((r7 + 8));
    0x0002ca54 ldr r3, [r0]                                      |     r3 = *(r0);
    0x0002ca56 ldr r3, [r3, 0x2c]                                |     r3 = *((r3 + 0x2c));
    0x0002ca58 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0002ca5a beq 0x2cb04                                       |         goto label_31;
                                                                 |     }
    0x0002ca5c blx r3                                            |     r0 = uint32_t (*r3)(uint32_t) (r0);
    0x0002ca5e cmp r0, 0x1f                                      |     
                                                                 |     if (r0 <= 0x1f) {
    0x0002ca60 ble 0x2cafc                                       |         goto label_32;
                                                                 |     }
    0x0002ca62 cmp.w r0, 0x10000                                 |     
    0x0002ca66 mov r2, r0                                        |     r2 = r0;
    0x0002ca68 it ge                                             |     
                                                                 |     if (r0 < 0x10000) {
    0x0002ca6a movge r2, 0x10000                                 |         r2 = 0x10000;
                                                                 |     }
    0x0002ca6e asrs r3, r2, 0x1f                                 |     r3 = r2 >> 0x1f;
                                                                 | label_10:
    0x0002ca70 ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x0002ca72 adds.w r0, fp, r2                                 |     r0 = fp + r2;
    0x0002ca76 str r2, [sp, 0x30]                                |     var_30h = r2;
    0x0002ca78 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x0002ca7a adc.w r1, r3, r1                                  |     __asm ("adc.w r1, r3, r1");
    0x0002ca7e subs r0, 1                                        |     r0--;
    0x0002ca80 sbc r1, r1, 0                                     |     __asm ("sbc r1, r1, 0");
    0x0002ca84 bl 0x5e500                                        |     fcn_0005e500 (r0, r1, r2, r3);
    0x0002ca88 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0002ca8a ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x0002ca8c mul r3, r0, r3                                    |     r3 = r0 * r3;
    0x0002ca90 mla r3, r2, r1, r3                                |     __asm ("mla r3, r2, r1, r3");
    0x0002ca94 ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x0002ca96 umull r0, r2, r0, r2                              |     r0:r2 = r0 * r2;
    0x0002ca9a add r3, r2                                        |     r3 += r2;
    0x0002ca9c cmp fp, r0                                        |     
    0x0002ca9e strd r0, r3, [sp, 0x40]                           |     __asm ("strd r0, r3, [var_40h]");
    0x0002caa2 sbcs.w r3, r1, r3                                 |     __asm ("sbcs.w r3, r1, r3");
                                                                 |     if (fp >= r0) {
    0x0002caa6 bge.w 0x2c85c                                     |         goto label_8;
                                                                 |     }
    0x0002caaa movs r3, 0                                        |     r3 = 0;
    0x0002caac str r7, [sp, 0x18]                                |     var_18h = r7;
    0x0002caae str r5, [sp, 0x24]                                |     var_24h = r5;
    0x0002cab0 mov fp, r3                                        |     
    0x0002cab2 mov r5, r8                                        |     r5 = r8;
    0x0002cab4 str r4, [sp, 0x30]                                |     var_30h = r4;
    0x0002cab6 mov r8, sb                                        |     r8 = sb;
    0x0002cab8 ldrd r7, r4, [sp, 0x28]                           |     __asm ("ldrd r7, r4, [var_28h]");
    0x0002cabc ldr.w sb, [sp, 0x10]                              |     sb = var_10h;
    0x0002cac0 b 0x2cad8                                         |     
                                                                 |     while (r0 == 0) {
    0x0002cac2 ldrd r0, r2, [sp, 0x40]                           |         __asm ("ldrd r0, r2, [var_40h]");
    0x0002cac6 adds r6, r7, r6                                   |         r6 = r7 + r6;
    0x0002cac8 adc.w r8, r4, r8                                  |         __asm ("adc.w r8, r4, r8");
    0x0002cacc add.w fp, fp, 1                                   |         
    0x0002cad0 cmp r6, r0                                        |         
    0x0002cad2 sbcs.w r2, r8, r2                                 |         __asm ("sbcs.w r2, r8, r2");
                                                                 |         if (r6 >= r0) {
    0x0002cad6 bge 0x2caee                                       |             goto label_33;
                                                                 |         }
    0x0002cad8 mov r2, sb                                        |         r2 = sb;
    0x0002cada mov r1, r5                                        |         r1 = r5;
    0x0002cadc mov r0, sl                                        |         r0 = sl;
    0x0002cade strd r6, r8, [sp]                                 |         __asm ("strd r6, r8, [sp]");
    0x0002cae2 bl 0x87b0                                         |         r0 = fcn_000087b0 (r0, r1, r2, r3);
    0x0002cae6 cmp r0, 0                                         |         
    0x0002cae8 beq 0x2cac2                                       |         
                                                                 |     }
    0x0002caea mov r4, r0                                        |     r4 = r0;
    0x0002caec b 0x2c6bc                                         |     goto label_0;
                                                                 | label_33:
    0x0002caee ldr r7, [sp, 0x18]                                |     r7 = var_18h;
    0x0002caf0 mov r8, r5                                        |     r8 = r5;
    0x0002caf2 ldr r4, [sp, 0x30]                                |     r4 = var_30h;
    0x0002caf4 ldr r5, [sp, 0x24]                                |     r5 = var_24h;
    0x0002caf6 str.w fp, [sp, 0x18]                              |     __asm ("str.w fp, [var_18h]");
    0x0002cafa b 0x2c860                                         |     goto label_9;
                                                                 | label_32:
    0x0002cafc mov.w r2, 0x200                                   |     r2 = 0x200;
    0x0002cb00 mov r3, r4                                        |     r3 = r4;
    0x0002cb02 b 0x2ca70                                         |     goto label_10;
                                                                 | label_31:
    0x0002cb04 mov.w r2, 0x1000                                  |     r2 = 0x1000;
    0x0002cb08 mov r3, r4                                        |     r3 = r4;
    0x0002cb0a b 0x2ca70                                         |     goto label_10;
                                                                 | label_15:
    0x0002cb0c blx 0x6498                                        |     fcn_00006498 ();
    0x0002cb10 invalid                                           |     
                                                                 | }
    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x2cf68 */
                                                         | #include <stdint.h>
                                                         |  
                                                         | #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
                                                         |                                ((n & 0x0000ff00) <<  8) | \
                                                         |                                ((n & 0x00ff0000) >>  8) | \
                                                         |                                ((n & 0xff000000) >> 24)))
                                                         |  
    ; (fcn) fcn.0002cf68 ()                              | void fcn_0002cf68 (int16_t arg_128h, int16_t arg_378h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                         |     int16_t var_4h_2;
                                                         |     int16_t var_28h;
                                                         |     int16_t var_4h;
                                                         |     r0 = arg1;
                                                         |     r1 = arg2;
                                                         |     r2 = arg3;
                                                         |     r3 = arg4;
    0x0002cf68 mvnsmi lr, 0xb4000                        |     __asm ("mvnsmi lr, aav.0x000000ff");
    0x0002cf6c mov r4, r1                                |     r4 = r1;
    0x0002cf6e ldr r5, [pc, 0xf4]                        |     
    0x0002cf70 cmp r4, 1                                 |     
    0x0002cf72 sub sp, 0xc                               |     
    0x0002cf74 mov r8, r0                                |     r8 = r0;
    0x0002cf76 ldr r1, [pc, 0xf0]                        |     r1 = *(0x2d06a);
    0x0002cf78 mov r6, r2                                |     r6 = r2;
    0x0002cf7a add r5, pc                                |     r5 = 0x59fe4;
    0x0002cf7c mov r7, r3                                |     r7 = r3;
    0x0002cf7e it ls                                     |     
                                                         |     if (r4 > 1) {
    0x0002cf80 movls sb, 0                               |         sb = 0;
                                                         |     }
    0x0002cf84 ldr r1, [r5, r1]                          |     
    0x0002cf86 ldr r1, [r1]                              |     r1 = *(0x59fe4);
    0x0002cf88 str r1, [sp, 4]                           |     var_4h = r1;
    0x0002cf8a mov.w r1, 0                               |     r1 = 0;
                                                         |     if (r4 >= 1) {
    0x0002cf8e bls 0x2cfcc                               |         
    0x0002cf90 ldr r5, [r0, 0x24]                        |         r5 = *((r0 + 0x24));
    0x0002cf92 movw r3, 0xcccd                           |         
    0x0002cf96 movt r3, 0xcccc                           |         r3 = 0xcccccccd;
    0x0002cf9a subs r0, r4, 2                            |         r0 = r4 - 2;
    0x0002cf9c umull r3, r5, r3, r5                      |         r3:r5 = r3 * r5;
    0x0002cfa0 lsrs r5, r5, 2                            |         r5 >>= 2;
    0x0002cfa2 adds r5, 1                                |         r5++;
    0x0002cfa4 mov r1, r5                                |         r1 = r5;
    0x0002cfa6 bl 0x5dc60                                |         fcn_0005dc60 (r0, r1, r2);
    0x0002cfaa ldr r3, [pc, 0xc0]                        |         
    0x0002cfac mul r5, r0, r5                            |         r5 = r0 * r5;
    0x0002cfb0 ldr.w r1, [r8, 0x20]                      |         r1 = *((r8 + 0x20));
    0x0002cfb4 add r3, pc                                |         r3 = 0x5a026;
    0x0002cfb6 ldr.w r0, [r3, 0x110]                     |         r0 = *(0x5a136);
    0x0002cfba add.w sb, r5, 2                           |         sb = r5 + 2;
    0x0002cfbe bl 0x5dc60                                |         fcn_0005dc60 (r0, r1, r2);
    0x0002cfc2 adds r0, 1                                |         r0++;
    0x0002cfc4 cmp sb, r0                                |         
    0x0002cfc6 it eq                                     |         
                                                         |         if (sb == r0) {
    0x0002cfc8 addeq sb, r5, 3                           |             sb = r5 + 3;
                                                         |             goto label_1;
                                                         |         }
                                                         |     }
                                                         | label_1:
    0x0002cfcc ldr.w r0, [r8]                            |     r0 = *(r8);
    0x0002cfd0 movs r3, 0                                |     r3 = 0;
    0x0002cfd2 mov r2, sp                                |     r2 = sp;
    0x0002cfd4 mov r1, sb                                |     r1 = sb;
    0x0002cfd6 bl 0x2a698                                |     r0 = fcn_0002a698 (r0, r1, r2, r3);
    0x0002cfda mov r5, r0                                |     r5 = r0;
                                                         |     if (r0 != 0) {
    0x0002cfdc cbnz r0, 0x2d00a                          |         goto label_0;
                                                         |     }
    0x0002cfde sub.w r4, r4, sb                          |     r4 -= sb;
    0x0002cfe2 ldr r0, [sp]                              |     r0 = *(sp);
    0x0002cfe4 add.w r4, r4, r4, lsl 2                   |     r4 += (r4 << 2);
    0x0002cfe8 subs r2, r4, 5                            |     r2 = r4 - 5;
    0x0002cfea ldr r3, [r0, 4]                           |     r3 = *((r0 + 4));
                                                         |     if (r2 < r4) {
    0x0002cfec bmi 0x2d040                               |         goto label_2;
                                                         |     }
    0x0002cfee ldrb r2, [r3, r2]                         |     r2 = *((r3 + r2));
    0x0002cff0 strb r2, [r6]                             |     *(r6) = r2;
                                                         |     if (r7 != 0) {
    0x0002cff2 cbz r7, 0x2cffe                           |         
    0x0002cff4 add r3, r4                                |         r3 += r4;
    0x0002cff6 ldr r3, [r3, -0x4]                        |         r3 = *((r3 - 0x4));
    0x0002cffa rev r3, r3                                |         r3 = SWAP32 (r3);
    0x0002cffc str r3, [r7]                              |         *(r7) = r3;
                                                         |     }
    0x0002cffe bl 0x2bd94                                |     fcn_0002bd94 (r0);
    0x0002d002 ldrb r3, [r6]                             |     r3 = *(r6);
    0x0002d004 subs r3, 1                                |     r3--;
    0x0002d006 cmp r3, 4                                 |     
    0x0002d008 bhi 0x2d026                               |     
                                                         |     while (1) {
                                                         | label_0:
    0x0002d00a ldr r2, [pc, 0x64]                        |         
    0x0002d00c ldr r3, [pc, 0x58]                        |         r3 = *(0x2d068);
    0x0002d00e add r2, pc                                |         r2 = 0x5a084;
    0x0002d010 ldr r3, [r2, r3]                          |         r3 = *(0x5a084);
    0x0002d012 ldr r2, [r3]                              |         r2 = *(0x5a084);
    0x0002d014 ldr r3, [sp, 4]                           |         r3 = var_4h;
    0x0002d016 eors r2, r3                               |         r2 ^= r3;
    0x0002d018 mov.w r3, 0                               |         r3 = 0;
                                                         |         if (r2 != r3) {
    0x0002d01c bne 0x2d05e                               |             goto label_3;
                                                         |         }
    0x0002d01e mov r0, r5                                |         r0 = r5;
    0x0002d020 add sp, 0xc                               |         
    0x0002d022 pop.w {r4, r5, r6, r7, r8, sb, pc}        |         
    0x0002d026 blx 0x5fe8                                |         fcn_00005fe8 ();
    0x0002d02a ldr r1, [pc, 0x48]                        |         
    0x0002d02c movs r5, 0xb                              |         r5 = 0xb;
    0x0002d02e add.w r3, r0, 0x14                        |         r3 = r0 + 0x14;
    0x0002d032 movw r2, 0xd83d                           |         r2 = 0xd83d;
    0x0002d036 mov r0, r5                                |         r0 = r5;
    0x0002d038 add r1, pc                                |         r1 = 0x5a0b2;
    0x0002d03a blx 0x6820                                |         fcn_00006820 ();
    0x0002d03e b 0x2d00a                                 |         
                                                         |     }
                                                         | label_2:
    0x0002d040 bl 0x2bd94                                |     r0 = fcn_0002bd94 (r0);
    0x0002d044 blx 0x5fe8                                |     fcn_00005fe8 ();
    0x0002d048 ldr r1, [pc, 0x2c]                        |     
    0x0002d04a movs r5, 0xb                              |     r5 = 0xb;
    0x0002d04c add.w r3, r0, 0x14                        |     r3 = r0 + 0x14;
    0x0002d050 movw r2, 0xd835                           |     r2 = 0xd835;
    0x0002d054 mov r0, r5                                |     r0 = r5;
    0x0002d056 add r1, pc                                |     r1 = 0x5a0d2;
    0x0002d058 blx 0x6820                                |     fcn_00006820 ();
    0x0002d05c b 0x2d00a                                 |     goto label_0;
                                                         | label_3:
    0x0002d05e blx 0x6498                                |     fcn_00006498 ();
    0x0002d062 nop                                       |     
    0x0002d064 add r4, sp, 0x378                         |     r4 += arg_378h;
    0x0002d066 movs r4, r0                               |     r4 = r0;
    0x0002d068 lsls r0, r1, 0xe                          |     r0 = r1 << 0xe;
    0x0002d06a movs r0, r0                               |     
    0x0002d06c add sp, 0x140                             |     
    0x0002d06e movs r4, r0                               |     r4 = r0;
    0x0002d070 add r4, sp, 0x128                         |     r4 += arg_128h;
    0x0002d072 movs r4, r0                               |     r4 = r0;
    0x0002d074 cmp r1, 0x14                              |     
    0x0002d076 movs r3, r0                               |     r3 = r0;
    0x0002d078 cmp r0, 0xf6                              |     
    0x0002d07a movs r3, r0                               |     r3 = r0;
                                                         | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x2e4c8 */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) fcn.0002e4c8 ()                                  | void fcn_0002e4c8 (int16_t arg1) {
                                                             |     r0 = arg1;
                                                             |     if (? >= ?) {
    0x0002e4c8 ldrbmi lr, [r0, sp, lsr 18]!                  |         
                                                             |     }
    0x0002e4cc mov r5, r0                                    |     r5 = r0;
    0x0002e4ce ldrb r6, [r0, 5]                              |     r6 = *((r0 + 5));
    0x0002e4d0 ldrd r7, r4, [r0, 0x34]                       |     __asm ("ldrd r7, r4, [r0, 0x34]");
    0x0002e4d4 ldrb r1, [r4, r6]                             |     r1 = *((r4 + r6));
    0x0002e4d6 bl 0x28cac                                    |     r0 = fcn_00028cac (r0, r1);
    0x0002e4da cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x0002e4dc bne 0x2e5dc                                   |         goto label_0;
                                                             |     }
    0x0002e4de ldrb r3, [r5, 3]                              |     r3 = *((r5 + 3));
    0x0002e4e0 add.w ip, r6, 0xc                             |     
    0x0002e4e4 adds r2, r4, r6                               |     r2 = r4 + r6;
    0x0002e4e6 ldr r6, [r7, 0x20]                            |     r6 = *((r7 + 0x20));
    0x0002e4e8 strb r0, [r5, 1]                              |     *((r5 + 1)) = r0;
    0x0002e4ea ldr r7, [r7, 0x24]                            |     r7 = *((r7 + 0x24));
    0x0002e4ec sub.w ip, ip, r3, lsl 2                       |     
    0x0002e4f0 uxth.w ip, ip                                 |     ip = (int16_t) ip;
    0x0002e4f4 add.w r3, r4, ip                              |     r3 = r4 + ip;
    0x0002e4f8 strh.w ip, [r5, 0xc]                          |     *((r5 + 0xc)) = ip;
    0x0002e4fc str r3, [r5, 0x40]                            |     *((r5 + 0x40)) = r3;
    0x0002e4fe subs r3, r6, 1                                |     r3 = r6 - 1;
    0x0002e500 strh r3, [r5, 0x12]                           |     *((r5 + 0x12)) = r3;
    0x0002e502 adds r3, r4, r7                               |     r3 = r4 + r7;
    0x0002e504 str r3, [r5, 0x3c]                            |     *((r5 + 0x3c)) = r3;
    0x0002e506 subs r6, 8                                    |     r6 -= 8;
    0x0002e508 ldrb r1, [r2, 5]                              |     r1 = *((r2 + 5));
    0x0002e50a ldrb r3, [r2, 6]                              |     r3 = *((r2 + 6));
    0x0002e50c ldrb.w lr, [r2, 3]                            |     
    0x0002e510 orr.w r3, r3, r1, lsl 8                       |     r3 |= (r1 << 8);
    0x0002e514 movw r1, 0xaaab                               |     
                                                             |     /* if there is a right shift of 1, then it's a division by 1/3 */
    0x0002e518 movt r1, 0xaaaa                               |     r1 = 0xaaaaaaab;
    0x0002e51c umull r1, r6, r1, r6                          |     r1:r6 = r1 * r6;
    0x0002e520 ldrb r1, [r2, 4]                              |     r1 = *((r2 + 4));
    0x0002e522 subs r3, 1                                    |     r3--;
    0x0002e524 uxth r3, r3                                   |     r3 = (int16_t) r3;
    0x0002e526 orr.w r1, r1, lr, lsl 8                       |     r1 |= (lr << 8);
    0x0002e52a adds r3, 1                                    |     r3++;
    0x0002e52c cmp.w r1, r6, lsr 2                           |     
    0x0002e530 strh r1, [r5, 0x10]                           |     *((r5 + 0x10)) = r1;
                                                             |     if (r1 > r6) {
    0x0002e532 bhi 0x2e5f8                                   |         goto label_1;
                                                             |     }
    0x0002e534 ldrb.w lr, [r2, 1]                            |     
    0x0002e538 add.w ip, ip, r1, lsl 1                       |     
    0x0002e53c ldrb r1, [r2, 2]                              |     r1 = *((r2 + 2));
    0x0002e53e sub.w r8, r7, 4                               |     r8 = r7 - 4;
    0x0002e542 ldrb r6, [r2, 7]                              |     r6 = *((r2 + 7));
    0x0002e544 add r6, r3                                    |     r6 += r3;
    0x0002e546 orrs.w r3, r1, lr, lsl 8                      |     r3 = r1 | (lr << 8);
                                                             |     if (r3 == r1) {
    0x0002e54a beq 0x2e616                                   |         goto label_2;
                                                             |     }
    0x0002e54c cmp r8, r3                                    |     
    0x0002e54e mov lr, r3                                    |     lr = r3;
    0x0002e550 ite ge                                        |     
                                                             |     if (r8 < r3) {
    0x0002e552 movge r2, 0                                   |         r2 = 0;
                                                             |     }
                                                             |     if (r8 >= r3) {
    0x0002e554 movlt r2, 1                                   |         r2 = 1;
                                                             |     }
    0x0002e556 cmp ip, r3                                    |     
    0x0002e558 it gt                                         |     
                                                             |     if (ip <= r3) {
    0x0002e55a orrgt r2, r2, 1                               |         r2 |= 1;
                                                             |     }
                                                             |     if (r2 == 0) {
    0x0002e55e cbz r2, 0x2e57e                               |         goto label_3;
                                                             |     }
    0x0002e560 b 0x2e5c0                                     |     goto label_4;
                                                             |     do {
    0x0002e562 cmp r3, sb                                    |         
    0x0002e564 add r6, r2                                    |         r6 += r2;
                                                             |         if (r3 <= sb) {
    0x0002e566 ble 0x2e5a4                                   |             goto label_5;
                                                             |         }
    0x0002e568 cmp r7, r1                                    |         
                                                             |         if (r7 < r1) {
    0x0002e56a blt 0x2e5a4                                   |             goto label_5;
                                                             |         }
    0x0002e56c cmp r8, r3                                    |         
    0x0002e56e ite ge                                        |         
                                                             |         if (r8 < r3) {
    0x0002e570 movge r2, 0                                   |             r2 = 0;
                                                             |         }
                                                             |         if (r8 >= r3) {
    0x0002e572 movlt r2, 1                                   |             r2 = 1;
                                                             |         }
    0x0002e574 cmp ip, r3                                    |         
    0x0002e576 it gt                                         |         
                                                             |         if (ip <= r3) {
    0x0002e578 orrgt r2, r2, 1                               |             r2 |= 1;
                                                             |         }
                                                             |         if (r2 != 0) {
    0x0002e57c cbnz r2, 0x2e5c0                              |             goto label_4;
                                                             |         }
                                                             | label_3:
    0x0002e57e adds r1, r4, r3                               |         r1 = r4 + r3;
    0x0002e580 ldrb.w sb, [r4, r3]                           |         sb = *((r4 + r3));
    0x0002e584 ldrb.w sl, [r1, 2]                            |         sl = *((r1 + 2));
    0x0002e588 ldrb r2, [r1, 3]                              |         r2 = *((r1 + 3));
    0x0002e58a ldrb r3, [r1, 1]                              |         r3 = *((r1 + 1));
    0x0002e58c orr.w r2, r2, sl, lsl 8                       |         r2 |= (sl << 8);
    0x0002e590 orrs.w r3, r3, sb, lsl 8                      |         r3 |= (sb << 8);
    0x0002e594 add.w r1, lr, r2                              |         r1 = lr + r2;
    0x0002e598 add.w sb, r1, 3                               |         sb = r1 + 3;
    0x0002e59c mov lr, r3                                    |         lr = r3;
    0x0002e59e bne 0x2e562                                   |         
                                                             |     } while (r3 != r3);
    0x0002e5a0 cmp r7, r1                                    |     
                                                             |     if (r7 >= r1) {
    0x0002e5a2 bge 0x2e614                                   |         goto label_6;
                                                             |     }
                                                             | label_5:
    0x0002e5a4 blx 0x5fe8                                    |     fcn_00005fe8 ();
    0x0002e5a8 ldr r1, [pc, 0x98]                            |     
    0x0002e5aa add.w r3, r0, 0x14                            |     r3 = r0 + 0x14;
    0x0002e5ae movw r2, 0xdaad                               |     r2 = 0xdaad;
    0x0002e5b2 movs r0, 0xb                                  |     r0 = 0xb;
    0x0002e5b4 add r1, pc                                    |     r1 = 0x5cbfc;
    0x0002e5b6 blx 0x6820                                    |     fcn_00006820 ();
    0x0002e5ba movs r0, 0xb                                  |     r0 = 0xb;
                                                             |     do {
    0x0002e5bc pop.w {r4, r5, r6, r7, r8, sb, sl, pc}        |         
                                                             | label_4:
    0x0002e5c0 blx 0x5fe8                                    |         fcn_00005fe8 ();
    0x0002e5c4 ldr r1, [pc, 0x80]                            |         
    0x0002e5c6 add.w r3, r0, 0x14                            |         r3 = r0 + 0x14;
    0x0002e5ca movw r2, 0xdaa6                               |         r2 = 0xdaa6;
    0x0002e5ce movs r0, 0xb                                  |         r0 = 0xb;
    0x0002e5d0 add r1, pc                                    |         r1 = 0x5cc1c;
    0x0002e5d2 blx 0x6820                                    |         fcn_00006820 ();
    0x0002e5d6 movs r0, 0xb                                  |         r0 = 0xb;
    0x0002e5d8 pop.w {r4, r5, r6, r7, r8, sb, sl, pc}        |         
                                                             | label_0:
    0x0002e5dc blx 0x5fe8                                    |         fcn_00005fe8 ();
    0x0002e5e0 ldr r1, [pc, 0x68]                            |         
    0x0002e5e2 add.w r3, r0, 0x14                            |         r3 = r0 + 0x14;
    0x0002e5e6 movw r2, 0xda6f                               |         r2 = 0xda6f;
    0x0002e5ea movs r0, 0xb                                  |         r0 = 0xb;
    0x0002e5ec add r1, pc                                    |         r1 = 0x5cc3c;
    0x0002e5ee blx 0x6820                                    |         fcn_00006820 ();
    0x0002e5f2 movs r0, 0xb                                  |         r0 = 0xb;
    0x0002e5f4 pop.w {r4, r5, r6, r7, r8, sb, sl, pc}        |         
                                                             | label_1:
    0x0002e5f8 blx 0x5fe8                                    |         fcn_00005fe8 ();
    0x0002e5fc ldr r1, [pc, 0x50]                            |         
    0x0002e5fe add.w r3, r0, 0x14                            |         r3 = r0 + 0x14;
    0x0002e602 movw r2, 0xda7b                               |         r2 = 0xda7b;
    0x0002e606 movs r0, 0xb                                  |         r0 = 0xb;
    0x0002e608 add r1, pc                                    |         r1 = 0x5cc5c;
    0x0002e60a blx 0x6820                                    |         fcn_00006820 ();
    0x0002e60e movs r0, 0xb                                  |         r0 = 0xb;
    0x0002e610 pop.w {r4, r5, r6, r7, r8, sb, sl, pc}        |         
                                                             | label_6:
    0x0002e614 add r6, r2                                    |         r6 += r2;
                                                             | label_2:
    0x0002e616 cmp r7, r6                                    |         
                                                             |         if (r7 >= r6) {
    0x0002e618 blt 0x2e62a                                   |             
    0x0002e61a sub.w ip, r6, ip                              |             
    0x0002e61e movs r3, 1                                    |             r3 = 1;
    0x0002e620 strh.w ip, [r5, 0xe]                          |             *((r5 + 0xe)) = ip;
    0x0002e624 strb r3, [r5]                                 |             *(r5) = r3;
    0x0002e626 pop.w {r4, r5, r6, r7, r8, sb, sl, pc}        |             
                                                             |         }
    0x0002e62a blx 0x5fe8                                    |         fcn_00005fe8 ();
    0x0002e62e ldr r1, [pc, 0x24]                            |         
    0x0002e630 add.w r3, r0, 0x14                            |         r3 = r0 + 0x14;
    0x0002e634 movw r2, 0xdabb                               |         r2 = 0xdabb;
    0x0002e638 movs r0, 0xb                                  |         r0 = 0xb;
    0x0002e63a add r1, pc                                    |         r1 = 0x5cc94;
    0x0002e63c blx 0x6820                                    |         fcn_00006820 ();
    0x0002e640 movs r0, 0xb                                  |         r0 = 0xb;
    0x0002e642 b 0x2e5bc                                     |         
                                                             |     } while (1);
                                                             | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x2e9e8 */
                                                                     | #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.0002e9e8 ()                                          | void fcn_0002e9e8 (int16_t arg_1h_2, int16_t arg_1h, int16_t arg_80h, int16_t arg_84h, 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_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_54h;
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
                                                                     |     r2 = arg3;
                                                                     |     r3 = arg4;
    0x0002e9e8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0002e9ec mov sl, r0                                            |     sl = r0;
    0x0002e9ee ldr r4, [pc, 0x3bc]                                   |     
    0x0002e9f0 sub sp, 0x5c                                          |     
    0x0002e9f2 ldr r0, [pc, 0x3bc]                                   |     r0 = *(0x2edb2);
    0x0002e9f4 add r4, pc                                            |     r4 = 0x5d7a6;
    0x0002e9f6 ldr r0, [r4, r0]                                      |     
    0x0002e9f8 ldr r0, [r0]                                          |     r0 = *(0x5d7a6);
    0x0002e9fa str r0, [sp, 0x54]                                    |     var_54h = r0;
    0x0002e9fc mov.w r0, 0                                           |     r0 = 0;
    0x0002ea00 strd r2, r3, [sp, 0x1c]                               |     __asm ("strd r2, r3, [var_1ch]");
    0x0002ea04 ldrb.w r3, [sl, 0x51]                                 |     r3 = *((sl + 0x51));
    0x0002ea08 ldr r0, [sp, 0x84]                                    |     r0 = *(arg_84h);
    0x0002ea0a str r1, [sp, 0x10]                                    |     var_10h = r1;
    0x0002ea0c cmp r3, 1                                             |     
    0x0002ea0e str r0, [sp, 0x24]                                    |     var_24h = r0;
                                                                     |     if (r3 == 1) {
    0x0002ea10 beq.w 0x2ebec                                         |         goto label_15;
                                                                     |     }
                                                                     | label_5:
    0x0002ea14 ldr r0, [sp, 0x10]                                    |     r0 = var_10h;
    0x0002ea16 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0002ea18 beq.w 0x2ebe6                                         |         goto label_16;
                                                                     |     }
    0x0002ea1c ldr r2, [r0]                                          |     r2 = *(r0);
    0x0002ea1e ldrh r3, [r2, 6]                                      |     r3 = *((r2 + 6));
    0x0002ea20 ldrh r1, [r2, 8]                                      |     r1 = *((r2 + 8));
    0x0002ea22 add r3, r1                                            |     r3 += r1;
    0x0002ea24 cmp r3, 0xd                                           |     
                                                                     |     if (r3 <= 0xd) {
    0x0002ea26 ble.w 0x2eb5e                                         |         goto label_17;
                                                                     |     }
                                                                     | label_2:
    0x0002ea2a ldr r3, [pc, 0x388]                                   |     
    0x0002ea2c add r3, pc                                            |     r3 = 0x5d7e6;
    0x0002ea2e str r3, [sp, 0xc]                                     |     var_ch = r3;
                                                                     | label_3:
    0x0002ea30 ldr r2, [sp, 0x10]                                    |     r2 = var_10h;
    0x0002ea32 movs r3, 0                                            |     r3 = 0;
    0x0002ea34 strb r3, [r2, 7]                                      |     *((r2 + 7)) = r3;
                                                                     | label_4:
    0x0002ea36 mov r0, sl                                            |     r0 = sl;
    0x0002ea38 bl 0x2e878                                            |     fcn_0002e878 (r0);
    0x0002ea3c str r0, [sp, 0x18]                                    |     var_18h = r0;
    0x0002ea3e cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0002ea40 bne.w 0x2ebc8                                         |         goto label_6;
                                                                     |     }
    0x0002ea44 ldrb.w r3, [sl, 0x51]                                 |     r3 = *((sl + 0x51));
    0x0002ea48 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0002ea4a beq.w 0x2ec2a                                         |         goto label_18;
                                                                     |     }
    0x0002ea4e ldr r3, [sp, 0x80]                                    |     r3 = *(arg_80h);
    0x0002ea50 ldr.w sb, [sp, 0x10]                                  |     sb = var_10h;
    0x0002ea54 rsb.w r3, r3, 1                                       |     r3 = 1 - r3;
    0x0002ea58 str r3, [sp, 0x2c]                                    |     var_2ch = r3;
    0x0002ea5a add.w r3, sl, 0x18                                    |     r3 = sl + 0x18;
    0x0002ea5e str r3, [sp, 0x14]                                    |     var_14h = r3;
                                                                     | label_7:
    0x0002ea60 ldrsh.w r2, [sl, 0x54]                                |     r2 = *((sl + 0x54));
    0x0002ea64 add.w r3, r2, 0x20                                    |     r3 = r2 + 0x20;
    0x0002ea68 str r2, [sp, 0x30]                                    |     var_30h = r2;
    0x0002ea6a ldr.w r6, [sl, r3, lsl 2]                             |     offset_0 = r3 << 2;
                                                                     |     r6 = *((sl + offset_0));
    0x0002ea6e add.w r1, sl, r2, lsl 1                               |     r1 = sl + (r2 << 1);
    0x0002ea72 str r1, [sp, 0x3c]                                    |     var_3ch = r1;
    0x0002ea74 ldrh r3, [r6, 0x10]                                   |     r3 = *((r6 + 0x10));
    0x0002ea76 ldrh r4, [r6, 0x12]                                   |     r4 = *((r6 + 0x12));
    0x0002ea78 ldr r2, [r6, 0x40]                                    |     r2 = *((r6 + 0x40));
    0x0002ea7a mov r0, r3                                            |     r0 = r3;
    0x0002ea7c str r3, [sp, 0x28]                                    |     var_28h = r3;
    0x0002ea7e subs r7, r0, 1                                        |     r7 = r0 - 1;
    0x0002ea80 ldr r0, [sp, 0x2c]                                    |     r0 = var_2ch;
    0x0002ea82 ldr r3, [r6, 0x38]                                    |     r3 = *((r6 + 0x38));
    0x0002ea84 asr.w fp, r7, r0                                      |     
    0x0002ea88 str r3, [sp, 0x34]                                    |     var_34h = r3;
    0x0002ea8a strh.w fp, [r1, 0x56]                                 |     *((r1 + 0x56)) = fp;
    0x0002ea8e ldr r1, [sp, 0xc]                                     |     r1 = var_ch;
    0x0002ea90 ldrb r5, [r6, 6]                                      |     r5 = *((r6 + 6));
    0x0002ea92 cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x0002ea94 beq.w 0x2ec84                                         |         goto label_19;
                                                                     |     }
    0x0002ea98 mov.w r8, 0                                           |     r8 = 0;
    0x0002ea9c mov r1, r5                                            |     r1 = r5;
    0x0002ea9e mov r0, r4                                            |     r0 = r4;
    0x0002eaa0 b 0x2ead4                                             |     goto label_20;
                                                                     | label_0:
    0x0002eaa2 adds r1, 2                                            |     r1 += 2;
                                                                     |     do {
    0x0002eaa4 ldr r4, [sp, 0xc]                                     |         r4 = var_ch;
    0x0002eaa6 movs r3, 0                                            |         r3 = 0;
    0x0002eaa8 mov r2, sb                                            |         r2 = sb;
    0x0002eaaa blx r4                                                |         r0 = uint32_t (*r4)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
    0x0002eaac mov r4, r0                                            |         r4 = r0;
                                                                     | label_1:
    0x0002eaae cmp r4, 0                                             |         
    0x0002eab0 it lt                                                 |         
                                                                     |         if (r4 >= 0) {
    0x0002eab2 addlt r8, fp, 1                                       |             r8 += arg_1h_2;
                                                                     |         }
                                                                     |         if (r4 >= 0) {
    0x0002eab6 blt 0x2eabe                                           |             
                                                                     |             if (r4 == 0) {
    0x0002eab8 beq 0x2eb98                                           |                 goto label_21;
                                                                     |             }
    0x0002eaba add.w r7, fp, -1                                      |             r7 = fp + -1;
                                                                     |         }
    0x0002eabe cmp r8, r7                                            |         
                                                                     |         if (r8 > r7) {
    0x0002eac0 bgt.w 0x2ec40                                         |             goto label_22;
                                                                     |         }
    0x0002eac4 add.w fp, r8, r7                                      |         
    0x0002eac8 ldr r3, [r6, 0x38]                                    |         r3 = *((r6 + 0x38));
    0x0002eaca ldrh r0, [r6, 0x12]                                   |         r0 = *((r6 + 0x12));
    0x0002eacc asr.w fp, fp, 1                                       |         
    0x0002ead0 ldr r2, [r6, 0x40]                                    |         r2 = *((r6 + 0x40));
    0x0002ead2 ldrb r1, [r6, 6]                                      |         r1 = *((r6 + 6));
                                                                     | label_20:
    0x0002ead4 add.w r4, r2, fp, lsl 1                               |         r4 = r2 + (fp << 1);
    0x0002ead8 ldrb.w r2, [r2, fp, lsl 1]                            |         offset_1 = fp << 1;
                                                                     |         r2 = *((r2 + offset_1));
    0x0002eadc ldrb r4, [r4, 1]                                      |         r4 = *((r4 + 1));
    0x0002eade orr.w r4, r4, r2, lsl 8                               |         r4 |= (r2 << 8);
    0x0002eae2 ldrb r2, [r6, 7]                                      |         r2 = *((r6 + 7));
    0x0002eae4 ands r4, r0                                           |         r4 &= r0;
    0x0002eae6 add r1, r4                                            |         r1 += r4;
    0x0002eae8 ldrb r0, [r3, r1]                                     |         r0 = *((r3 + r1));
    0x0002eaea add r1, r3                                            |         r1 += r3;
    0x0002eaec cmp r2, r0                                            |         
    0x0002eaee it hs                                                 |         
                                                                     |         if (r2 < r0) {
    0x0002eaf0 addhs r1, 1                                           |             r1++;
                                                                     |         }
    0x0002eaf2 bhs 0x2eaa4                                           |         
                                                                     |     } while (r2 >= r0);
    0x0002eaf4 ldrb r2, [r1, 1]                                      |     r2 = *((r1 + 1));
    0x0002eaf6 lsls r5, r2, 0x18                                     |     r5 = r2 << 0x18;
                                                                     |     if (r5 < r2) {
    0x0002eaf8 bmi 0x2eb08                                           |         goto label_23;
                                                                     |     }
    0x0002eafa lsls r0, r0, 7                                        |     r0 <<= 7;
    0x0002eafc and r0, r0, 0x3f80                                    |     r0 &= 0x3f80;
    0x0002eb00 add r0, r2                                            |     r0 += r2;
    0x0002eb02 ldrh r2, [r6, 8]                                      |     r2 = *((r6 + 8));
    0x0002eb04 cmp r2, r0                                            |     
                                                                     |     if (r2 >= r0) {
    0x0002eb06 bge 0x2eaa2                                           |         goto label_0;
                                                                     |     }
                                                                     | label_23:
    0x0002eb08 adds r1, r3, r4                                       |     r1 = r3 + r4;
    0x0002eb0a ldr r2, [sp, 0x14]                                    |     r2 = var_14h;
    0x0002eb0c mov r0, r6                                            |     r0 = r6;
    0x0002eb0e bl 0x9e14                                             |     fcn_00009e14 (r0, r1, r2);
    0x0002eb12 ldr.w r5, [sl, 0x18]                                  |     r5 = *((sl + 0x18));
    0x0002eb16 mov r0, r5                                            |     r0 = r5;
    0x0002eb18 bl 0xd300                                             |     r0 = fcn_0000d300 (r0, r1, r2, r3, r4);
    0x0002eb1c mov r4, r0                                            |     r4 = r0;
    0x0002eb1e cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0002eb20 beq.w 0x2ed44                                         |         goto label_24;
                                                                     |     }
    0x0002eb24 movs r3, 2                                            |     r3 = 2;
    0x0002eb26 mov r2, r5                                            |     r2 = r5;
    0x0002eb28 str r3, [sp]                                          |     *(sp) = r3;
    0x0002eb2a movs r1, 0                                            |     r1 = 0;
    0x0002eb2c ldrsh.w r3, [sl, 0x54]                                |     r3 = *((sl + 0x54));
    0x0002eb30 add.w r3, sl, r3, lsl 1                               |     r3 = sl + (r3 << 1);
    0x0002eb34 strh.w fp, [r3, 0x56]                                 |     *((r3 + 0x56)) = fp;
    0x0002eb38 mov r3, r0                                            |     r3 = r0;
    0x0002eb3a mov r0, sl                                            |     r0 = sl;
    0x0002eb3c bl 0x2d6d4                                            |     r0 = fcn_0002d6d4 (r0, r1, r2, r3, r4);
    0x0002eb40 mov r3, r0                                            |     r3 = r0;
    0x0002eb42 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0002eb44 bne.w 0x2ed4a                                         |         goto label_25;
                                                                     |     }
    0x0002eb48 mov r1, r4                                            |     r1 = r4;
    0x0002eb4a mov r0, r5                                            |     r0 = r5;
    0x0002eb4c mov r2, sb                                            |     r2 = sb;
    0x0002eb4e ldr r5, [sp, 0xc]                                     |     r5 = var_ch;
    0x0002eb50 blx r5                                                |     r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
    0x0002eb52 mov r3, r0                                            |     r3 = r0;
    0x0002eb54 mov r0, r4                                            |     r0 = r4;
    0x0002eb56 mov r4, r3                                            |     r4 = r3;
    0x0002eb58 blx 0x6050                                            |     fcn_00006050 ();
    0x0002eb5c b 0x2eaae                                             |     goto label_1;
                                                                     | label_17:
    0x0002eb5e ldr r3, [r2, 0x10]                                    |     r3 = *((r2 + 0x10));
    0x0002eb60 ldrb r3, [r3]                                         |     r3 = *(r3);
    0x0002eb62 cmp r3, 0                                             |     
    0x0002eb64 ldr r3, [r0, 8]                                       |     r3 = *((r0 + 8));
    0x0002eb66 ite eq                                                |     
                                                                     |     if (r3 != 0) {
    0x0002eb68 moveq r1, -1                                          |         r1 = -1;
                                                                     |     }
                                                                     |     if (r3 != 0) {
    0x0002eb6c movs r1, 1                                            |         r1 = 1;
                                                                     |     }
    0x0002eb6e ldrh r3, [r3, 0x1c]                                   |     r3 = *((r3 + 0x1c));
    0x0002eb70 str r1, [r0, 0xc]                                     |     *((r0 + 0xc)) = r1;
    0x0002eb72 ite eq                                                |     
                                                                     |     if (r1 != 1) {
    0x0002eb74 moveq r1, 1                                           |         r1 = 1;
                                                                     |     }
                                                                     |     if (r1 == 1) {
    0x0002eb76 movne r1, -1                                          |         r1 = -1;
                                                                     |     }
    0x0002eb7a lsls r6, r3, 0x1d                                     |     r6 = r3 << 0x1d;
    0x0002eb7c str r1, [r0, 0x10]                                    |     *((r0 + 0x10)) = r1;
                                                                     |     if (r6 < r3) {
    0x0002eb7e bmi 0x2ec38                                           |         goto label_26;
                                                                     |     }
    0x0002eb80 tst.w r3, 0x19                                        |     
                                                                     |     if ((r3 & 0x19) != 0) {
    0x0002eb84 bne.w 0x2ea2a                                         |         goto label_2;
                                                                     |     }
    0x0002eb88 ldr r3, [r2, 0x14]                                    |     r3 = *((r2 + 0x14));
    0x0002eb8a cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0002eb8c bne.w 0x2ea2a                                         |         goto label_2;
                                                                     |     }
    0x0002eb90 ldr r3, [pc, 0x224]                                   |     
    0x0002eb92 add r3, pc                                            |     r3 = 0x5d94e;
    0x0002eb94 str r3, [sp, 0xc]                                     |     var_ch = r3;
    0x0002eb96 b 0x2ea30                                             |     goto label_3;
                                                                     | label_21:
    0x0002eb98 ldr r3, [sp, 0x24]                                    |     r3 = var_24h;
    0x0002eb9a str r4, [r3]                                          |     *(r3) = r4;
    0x0002eb9c ldrsh.w r3, [sl, 0x54]                                |     r3 = *((sl + 0x54));
    0x0002eba0 add.w r3, sl, r3, lsl 1                               |     r3 = sl + (r3 << 1);
    0x0002eba4 strh.w fp, [r3, 0x56]                                 |     *((r3 + 0x56)) = fp;
    0x0002eba8 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x0002ebaa ldrb r3, [r3, 7]                                      |     r3 = *((r3 + 7));
    0x0002ebac cmp r3, 0                                             |     
    0x0002ebae ite eq                                                |     
                                                                     |     if (r3 != 0) {
    0x0002ebb0 moveq r3, r4                                          |         r3 = r4;
                                                                     |     }
                                                                     |     if (r3 == 0) {
    0x0002ebb2 movne r3, 0xb                                         |         r3 = 0xb;
                                                                     |     }
    0x0002ebb4 str r3, [sp, 0x18]                                    |     var_18h = r3;
                                                                     | label_8:
    0x0002ebb6 ldrb.w r3, [sl, 0x50]                                 |     r3 = *((sl + 0x50));
    0x0002ebba movs r2, 0                                            |     r2 = 0;
    0x0002ebbc strh.w r2, [sl, 0x32]                                 |     *((sl + 0x32)) = r2;
    0x0002ebc0 bic r3, r3, 6                                         |     r3 = BIT_MASK (r3, 6);
    0x0002ebc4 strb.w r3, [sl, 0x50]                                 |     *((sl + 0x50)) = r3;
                                                                     | label_6:
    0x0002ebc8 ldr r2, [pc, 0x1f0]                                   |     
    0x0002ebca ldr r3, [pc, 0x1e4]                                   |     r3 = *(0x2edb2);
    0x0002ebcc add r2, pc                                            |     r2 = 0x5d98c;
    0x0002ebce ldr r3, [r2, r3]                                      |     r3 = *(0x5d98c);
    0x0002ebd0 ldr r2, [r3]                                          |     r2 = *(0x5d98c);
    0x0002ebd2 ldr r3, [sp, 0x54]                                    |     r3 = var_54h;
    0x0002ebd4 eors r2, r3                                           |     r2 ^= r3;
    0x0002ebd6 mov.w r3, 0                                           |     r3 = 0;
                                                                     |     if (r2 != r3) {
    0x0002ebda bne.w 0x2eda0                                         |         goto label_27;
                                                                     |     }
    0x0002ebde ldr r0, [sp, 0x18]                                    |     r0 = var_18h;
    0x0002ebe0 add sp, 0x5c                                          |     
    0x0002ebe2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |     
                                                                     | label_16:
    0x0002ebe6 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x0002ebe8 str r3, [sp, 0xc]                                     |     var_ch = r3;
    0x0002ebea b 0x2ea36                                             |     goto label_4;
                                                                     | label_15:
    0x0002ebec ldrb.w r3, [sl, 0x50]                                 |     r3 = *((sl + 0x50));
    0x0002ebf0 lsls r7, r3, 0x1e                                     |     r7 = r3 << 0x1e;
                                                                     |     if (r7 >= r3) {
    0x0002ebf2 bpl.w 0x2ea14                                         |         goto label_5;
                                                                     |     }
    0x0002ebf6 ldr.w r2, [sl, 0x80]                                  |     r2 = *((sl + 0x80));
    0x0002ebfa ldrb r2, [r2, 2]                                      |     r2 = *((r2 + 2));
    0x0002ebfc cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0002ebfe beq.w 0x2ea14                                         |         goto label_5;
                                                                     |     }
    0x0002ec02 ldrd r1, r2, [sl, 0x18]                               |     __asm ("ldrd r1, r2, [sl, 0x18]");
    0x0002ec06 ldrd r0, r4, [sp, 0x1c]                               |     __asm ("ldrd r0, r4, [var_1ch]");
    0x0002ec0a cmp r2, r4                                            |     
    0x0002ec0c it eq                                                 |     
                                                                     |     if (r2 == r4) {
    0x0002ec0e cmpeq r1, r0                                          |         __asm ("cmpeq r1, r0");
                                                                     |     }
                                                                     |     if (r2 == r4) {
    0x0002ec10 beq.w 0x2ed54                                         |         goto label_28;
                                                                     |     }
    0x0002ec14 ldr r0, [sp, 0x1c]                                    |     r0 = var_1ch;
    0x0002ec16 cmp r1, r0                                            |     
    0x0002ec18 ldr r1, [sp, 0x20]                                    |     r1 = var_20h;
    0x0002ec1a sbcs r2, r1                                           |     __asm ("sbcs r2, r1");
    0x0002ec1c ite lt                                                |     
                                                                     |     if (r1 >= r0) {
    0x0002ec1e movlt r2, 1                                           |         r2 = 1;
                                                                     |     }
                                                                     |     if (r1 < r0) {
    0x0002ec20 movge r2, 0                                           |         r2 = 0;
                                                                     |     }
    0x0002ec22 ands.w r2, r2, r3, lsr 3                              |     r2 &= (r3 >> 3);
                                                                     |     if (r2 == r2) {
    0x0002ec26 beq.w 0x2ea14                                         |         goto label_5;
                                                                     |     }
                                                                     | label_18:
    0x0002ec2a movs r2, 0                                            |     r2 = 0;
    0x0002ec2c mov.w r3, -1                                          |     r3 = -1;
    0x0002ec30 str r2, [sp, 0x18]                                    |     var_18h = r2;
    0x0002ec32 ldr r2, [sp, 0x24]                                    |     r2 = var_24h;
    0x0002ec34 str r3, [r2]                                          |     *(r2) = r3;
    0x0002ec36 b 0x2ebc8                                             |     goto label_6;
                                                                     | label_26:
    0x0002ec38 ldr r3, [pc, 0x184]                                   |     
    0x0002ec3a add r3, pc                                            |     r3 = 0x5d9fe;
    0x0002ec3c str r3, [sp, 0xc]                                     |     var_ch = r3;
    0x0002ec3e b 0x2ea30                                             |     goto label_3;
                                                                     | label_22:
    0x0002ec40 ldrsh.w r3, [sl, 0x54]                                |     r3 = *((sl + 0x54));
    0x0002ec44 str r3, [sp, 0x30]                                    |     var_30h = r3;
                                                                     | label_12:
    0x0002ec46 ldrb r3, [r6, 3]                                      |     r3 = *((r6 + 3));
    0x0002ec48 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0002ec4a bne.w 0x2ed90                                         |         goto label_29;
                                                                     |     }
    0x0002ec4e ldrh r3, [r6, 0x10]                                   |     r3 = *((r6 + 0x10));
    0x0002ec50 str r3, [sp, 0x28]                                    |     var_28h = r3;
    0x0002ec52 ldr r3, [r6, 0x38]                                    |     r3 = *((r6 + 0x38));
    0x0002ec54 str r3, [sp, 0x34]                                    |     var_34h = r3;
    0x0002ec56 uxth.w r3, r8                                         |     r3 = (int16_t) r8;
                                                                     | label_14:
    0x0002ec5a ldr r2, [sp, 0x28]                                    |     r2 = var_28h;
    0x0002ec5c cmp r8, r2                                            |     
                                                                     |     if (r8 < r2) {
    0x0002ec5e blt 0x2ed28                                           |         goto label_30;
                                                                     |     }
    0x0002ec60 ldrb r2, [r6, 5]                                      |     r2 = *((r6 + 5));
    0x0002ec62 ldr r1, [sp, 0x34]                                    |     r1 = var_34h;
    0x0002ec64 add r1, r2                                            |     r1 += r2;
    0x0002ec66 ldr r1, [r1, 8]                                       |     r1 = *((r1 + 8));
    0x0002ec68 rev r1, r1                                            |     r1 = SWAP32 (r1);
                                                                     | label_13:
    0x0002ec6a ldr r2, [sp, 0x30]                                    |     r2 = var_30h;
    0x0002ec6c mov r0, sl                                            |     r0 = sl;
    0x0002ec6e add.w r2, sl, r2, lsl 1                               |     r2 = sl + (r2 << 1);
    0x0002ec72 strh.w r3, [r2, 0x56]                                 |     *((r2 + 0x56)) = r3;
    0x0002ec76 bl 0x2e704                                            |     r0 = fcn_0002e704 (r0, r1, r2, r3);
    0x0002ec7a cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0002ec7c beq.w 0x2ea60                                         |         goto label_7;
                                                                     |     }
    0x0002ec80 str r0, [sp, 0x18]                                    |     var_18h = r0;
    0x0002ec82 b 0x2ebb6                                             |     goto label_8;
                                                                     | label_19:
    0x0002ec84 ldrb r1, [r6, 4]                                      |     r1 = *((r6 + 4));
    0x0002ec86 ldr.w r8, [sp, 0xc]                                   |     r8 = var_ch;
    0x0002ec8a str.w sl, [sp, 0x40]                                  |     __asm ("str.w sl, [var_40h]");
    0x0002ec8e mov sl, r7                                            |     sl = r7;
    0x0002ec90 mov r7, r5                                            |     r7 = r5;
    0x0002ec92 mov r5, r3                                            |     r5 = r3;
    0x0002ec94 mov r3, r4                                            |     r3 = r4;
    0x0002ec96 str r1, [sp, 0x38]                                    |     var_38h = r1;
    0x0002ec98 mov r4, r8                                            |     r4 = r8;
    0x0002ec9a str.w sb, [sp, 0x44]                                  |     __asm ("str.w sb, [var_44h]");
    0x0002ec9e add r1, sp, 0x48                                      |     r1 += var_48h;
    0x0002eca0 mov sb, r2                                            |     sb = r2;
    0x0002eca2 mov r8, r3                                            |     r8 = r3;
                                                                     |     do {
    0x0002eca4 add.w r0, sb, fp, lsl 1                               |         r0 = sb + (fp << 1);
    0x0002eca8 ldrb.w ip, [sb, fp, lsl 1]                            |         offset_2 = fp << 1;
                                                                     |         ip = *((sb + offset_2));
    0x0002ecac ldr r3, [sp, 0x38]                                    |         r3 = var_38h;
    0x0002ecae ldrb r0, [r0, 1]                                      |         r0 = *((r0 + 1));
    0x0002ecb0 orr.w r0, r0, ip, lsl 8                               |         r0 |= (ip << 8);
    0x0002ecb4 and.w r0, r0, r8                                      |         r0 &= r8;
    0x0002ecb8 add r0, r7                                            |         r0 += r7;
    0x0002ecba add r0, r5                                            |         r0 += r5;
                                                                     |         if (r3 != 0) {
    0x0002ecbc cbnz r3, 0x2ece4                                      |             goto label_10;
                                                                     |         }
                                                                     | label_9:
    0x0002ecbe bl 0x72a4                                             |         fcn_000072a4 (r0, r1);
    0x0002ecc2 ldrd r0, r3, [sp, 0x48]                               |         __asm ("ldrd r0, r3, [var_48h]");
    0x0002ecc6 ldr r2, [sp, 0x1c]                                    |         r2 = var_1ch;
    0x0002ecc8 cmp r0, r2                                            |         
    0x0002ecca ldr r2, [sp, 0x20]                                    |         r2 = var_20h;
    0x0002eccc sbcs.w lr, r3, r2                                     |         __asm ("sbcs.w lr, r3, r2");
                                                                     |         if (r0 >= r2) {
    0x0002ecd0 bge 0x2ed0c                                           |             goto label_31;
                                                                     |         }
    0x0002ecd2 add.w r4, fp, 1                                       |         r4 += arg_1h_2;
    0x0002ecd6 cmp sl, r4                                            |         
                                                                     |         if (sl < r4) {
    0x0002ecd8 blt 0x2ed5e                                           |             goto label_32;
                                                                     |         }
                                                                     | label_11:
    0x0002ecda add.w fp, r4, sl                                      |         
    0x0002ecde asr.w fp, fp, 1                                       |         
    0x0002ece2 b 0x2eca4                                             |         
                                                                     |     } while (1);
                                                                     | label_10:
    0x0002ece4 ldrsb r3, [r0], 1                                     |     r3 = *(r0);
                                                                     |     r0++;
    0x0002ece8 cmp r3, 0                                             |     
                                                                     |     if (r3 >= 0) {
    0x0002ecea bge 0x2ecbe                                           |         goto label_9;
                                                                     |     }
    0x0002ecec ldr r3, [r6, 0x3c]                                    |     r3 = *((r6 + 0x3c));
    0x0002ecee cmp r3, r0                                            |     
                                                                     |     if (r3 > r0) {
    0x0002ecf0 bhi 0x2ece4                                           |         goto label_10;
                                                                     |     }
    0x0002ecf2 blx 0x5fe8                                            |     fcn_00005fe8 ();
    0x0002ecf6 ldr r1, [pc, 0xcc]                                    |     
    0x0002ecf8 add.w r3, r0, 0x14                                    |     r3 = r0 + 0x14;
    0x0002ecfc movw r2, 0xe6f4                                       |     r2 = 0xe6f4;
    0x0002ed00 movs r0, 0xb                                          |     r0 = 0xb;
    0x0002ed02 str r0, [sp, 0x18]                                    |     var_18h = r0;
    0x0002ed04 add r1, pc                                            |     r1 = 0x5dace;
    0x0002ed06 blx 0x6820                                            |     fcn_00006820 ();
    0x0002ed0a b 0x2ebc8                                             |     goto label_6;
                                                                     | label_31:
    0x0002ed0c ldr r2, [sp, 0x1c]                                    |     r2 = var_1ch;
    0x0002ed0e cmp r2, r0                                            |     
    0x0002ed10 ldr r2, [sp, 0x20]                                    |     r2 = var_20h;
    0x0002ed12 sbcs r2, r3                                           |     __asm ("sbcs r2, r3");
                                                                     |     if (r2 >= r0) {
    0x0002ed14 bge 0x2ed6a                                           |         goto label_33;
                                                                     |     }
    0x0002ed16 add.w sl, fp, -1                                      |     sl = fp + -1;
    0x0002ed1a cmp r4, sl                                            |     
                                                                     |     if (r4 <= sl) {
    0x0002ed1c ble 0x2ecda                                           |         goto label_11;
                                                                     |     }
    0x0002ed1e mov r8, r4                                            |     r8 = r4;
    0x0002ed20 ldrd sl, sb, [sp, 0x40]                               |     __asm ("ldrd sl, sb, [var_40h]");
    0x0002ed24 movs r4, 1                                            |     r4 = 1;
    0x0002ed26 b 0x2ec46                                             |     goto label_12;
                                                                     | label_30:
    0x0002ed28 ldr r2, [r6, 0x40]                                    |     r2 = *((r6 + 0x40));
    0x0002ed2a ldrh r1, [r6, 0x12]                                   |     r1 = *((r6 + 0x12));
    0x0002ed2c ldrb.w r0, [r2, r8, lsl 1]                            |     offset_3 = r8 << 1;
                                                                     |     r0 = *((r2 + offset_3));
    0x0002ed30 add.w r2, r2, r8, lsl 1                               |     r2 += (r8 << 1);
    0x0002ed34 ldrb r2, [r2, 1]                                      |     r2 = *((r2 + 1));
    0x0002ed36 orr.w r2, r2, r0, lsl 8                               |     r2 |= (r0 << 8);
    0x0002ed3a ands r2, r1                                           |     r2 &= r1;
    0x0002ed3c ldr r1, [sp, 0x34]                                    |     r1 = var_34h;
    0x0002ed3e ldr r1, [r1, r2]                                      |     r1 = *((r1 + r2));
    0x0002ed40 rev r1, r1                                            |     r1 = SWAP32 (r1);
    0x0002ed42 b 0x2ec6a                                             |     goto label_13;
                                                                     | label_24:
    0x0002ed44 movs r3, 7                                            |     r3 = 7;
    0x0002ed46 str r3, [sp, 0x18]                                    |     var_18h = r3;
    0x0002ed48 b 0x2ebb6                                             |     goto label_8;
                                                                     | label_25:
    0x0002ed4a mov r0, r4                                            |     r0 = r4;
    0x0002ed4c str r3, [sp, 0x18]                                    |     var_18h = r3;
    0x0002ed4e blx 0x6050                                            |     fcn_00006050 ();
    0x0002ed52 b 0x2ebb6                                             |     goto label_8;
                                                                     | label_28:
    0x0002ed54 ldr r2, [sp, 0x24]                                    |     r2 = var_24h;
    0x0002ed56 movs r3, 0                                            |     r3 = 0;
    0x0002ed58 str r3, [sp, 0x18]                                    |     var_18h = r3;
    0x0002ed5a str r3, [r2]                                          |     *(r2) = r3;
    0x0002ed5c b 0x2ebc8                                             |     goto label_6;
                                                                     | label_32:
    0x0002ed5e mov r8, r4                                            |     r8 = r4;
    0x0002ed60 ldrd sl, sb, [sp, 0x40]                               |     __asm ("ldrd sl, sb, [var_40h]");
    0x0002ed64 mov.w r4, -1                                          |     r4 = -1;
    0x0002ed68 b 0x2ec46                                             |     goto label_12;
                                                                     | label_33:
    0x0002ed6a ldrd sl, sb, [sp, 0x40]                               |     __asm ("ldrd sl, sb, [var_40h]");
    0x0002ed6e ldr r2, [sp, 0x3c]                                    |     r2 = var_3ch;
    0x0002ed70 strd r0, r3, [sl, 0x18]                               |     __asm ("strd r0, r3, [sl, 0x18]");
    0x0002ed74 ldrb.w r3, [sl, 0x50]                                 |     r3 = *((sl + 0x50));
    0x0002ed78 orr r3, r3, 2                                         |     r3 |= 2;
    0x0002ed7c strb.w r3, [sl, 0x50]                                 |     *((sl + 0x50)) = r3;
    0x0002ed80 uxth.w r3, fp                                         |     r3 = (int16_t) fp;
    0x0002ed84 strh.w r3, [r2, 0x56]                                 |     *((r2 + 0x56)) = r3;
    0x0002ed88 ldrb r2, [r6, 3]                                      |     r2 = *((r6 + 3));
                                                                     |     if (r2 == 0) {
    0x0002ed8a cbnz r2, 0x2eda4                                      |         
    0x0002ed8c mov r8, fp                                            |         r8 = fp;
    0x0002ed8e b 0x2ec5a                                             |         goto label_14;
                                                                     | label_29:
    0x0002ed90 ldr r3, [sp, 0x30]                                    |         r3 = var_30h;
    0x0002ed92 add.w r3, sl, r3, lsl 1                               |         r3 = sl + (r3 << 1);
    0x0002ed96 strh.w fp, [r3, 0x56]                                 |         *((r3 + 0x56)) = fp;
    0x0002ed9a ldr r3, [sp, 0x24]                                    |         r3 = var_24h;
    0x0002ed9c str r4, [r3]                                          |         *(r3) = r4;
    0x0002ed9e b 0x2ebb6                                             |         goto label_8;
                                                                     | label_27:
    0x0002eda0 blx 0x6498                                            |         fcn_00006498 ();
                                                                     |     }
    0x0002eda4 ldr r2, [sp, 0x24]                                    |     r2 = var_24h;
    0x0002eda6 movs r3, 0                                            |     r3 = 0;
    0x0002eda8 str r3, [r2]                                          |     *(r2) = r3;
    0x0002edaa b 0x2ebb6                                             |     goto label_8;
                                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x2f4f0 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.0002f4f0 ()                                      | void fcn_0002f4f0 (int16_t arg1, int16_t arg2, int16_t arg3) {
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
    0x0002f4f0 push.w {r3, r4, r5, r6, r7, r8, sb, lr}           |     
    0x0002f4f4 mov r4, r0                                        |     r4 = r0;
    0x0002f4f6 mov r5, r1                                        |     r5 = r1;
    0x0002f4f8 ldrb r6, [r4, 5]                                  |     r6 = *((r4 + 5));
    0x0002f4fa mov r7, r2                                        |     r7 = r2;
    0x0002f4fc ldrd r8, r1, [r0, 0x34]                           |     __asm ("ldrd r8, r1, [r0, 0x34]");
    0x0002f500 ldr r3, [r5, 0x48]                                |     r3 = *((r5 + 0x48));
    0x0002f502 ldr r0, [r5, 0x38]                                |     r0 = *((r5 + 0x38));
    0x0002f504 add r6, r1                                        |     r6 += r1;
    0x0002f506 ldr.w r2, [r8, 0x24]                              |     r2 = *((r8 + 0x24));
    0x0002f50a cmp r3, 1                                         |     
    0x0002f50c ldrb.w ip, [r6, 5]                                |     ip = *((r6 + 5));
    0x0002f510 ldrb r3, [r6, 6]                                  |     r3 = *((r6 + 6));
    0x0002f512 ite eq                                            |     
                                                                 |     if (r3 != 1) {
    0x0002f514 addeq sb, r0, 0x64                                |         sb = r0 + 0x64;
                                                                 |     }
                                                                 |     if (r3 != 1) {
    0x0002f518 mov sb, r0                                        |         sb = r0;
                                                                 |     }
    0x0002f51a orr.w r3, r3, ip, lsl 8                           |     r3 |= (ip << 8);
    0x0002f51e subs r2, r2, r3                                   |     r2 -= r3;
    0x0002f520 add r1, r3                                        |     r1 += r3;
    0x0002f522 add r0, r3                                        |     r0 += r3;
    0x0002f524 blx 0x6214                                        |     fcn_00006214 ();
    0x0002f528 ldrh r3, [r4, 0xc]                                |     r3 = *((r4 + 0xc));
    0x0002f52a mov r1, r6                                        |     r1 = r6;
    0x0002f52c ldrh r2, [r4, 0x10]                               |     r2 = *((r4 + 0x10));
    0x0002f52e mov r0, sb                                        |     r0 = sb;
    0x0002f530 add.w r2, r3, r2, lsl 1                           |     r2 = r3 + (r2 << 1);
    0x0002f534 blx 0x6214                                        |     fcn_00006214 ();
    0x0002f538 movs r3, 0                                        |     r3 = 0;
    0x0002f53a mov r0, r5                                        |     r0 = r5;
    0x0002f53c strb r3, [r5]                                     |     *(r5) = r3;
    0x0002f53e bl 0x2e4c8                                        |     r0 = fcn_0002e4c8 (r0);
                                                                 |     if (r0 == 0) {
    0x0002f542 cbnz r0, 0x2f554                                  |         
    0x0002f544 ldrb.w r3, [r8, 0x11]                             |         r3 = *((r8 + 0x11));
                                                                 |         if (r3 == 0) {
    0x0002f548 cbnz r3, 0x2f54e                                  |             
    0x0002f54a pop.w {r3, r4, r5, r6, r7, r8, sb, pc}            |             
                                                                 |         }
    0x0002f54e mov r0, r5                                        |         r0 = r5;
    0x0002f550 bl 0x2f410                                        |         fcn_0002f410 (r0);
                                                                 |     }
    0x0002f554 str r0, [r7]                                      |     *(r7) = r0;
    0x0002f556 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-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x2f55c */
                                                                     | #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)))
                                                                     | #define SWAP64(val) ((uint64_t) (((val & 0x00000000000000ffull) << 56) | \
                                                                     |                                  ((val & 0x000000000000ff00ull) << 40) | \
                                                                     |                                  ((val & 0x0000000000ff0000ull) << 24) | \
                                                                     |                                  ((val & 0x00000000ff000000ull) <<  8) | \
                                                                     |                                  ((val & 0x000000ff00000000ull) >>  8) | \
                                                                     |                                  ((val & 0x0000ff0000000000ull) >> 24) | \
                                                                     |                                  ((val & 0x00ff000000000000ull) >> 40) | \
                                                                     |                                  ((val & 0xff00000000000000ull) >> 56)))
                                                                     |  
    ; (fcn) fcn.0002f55c ()                                          | void fcn_0002f55c (int16_t arg_80h, int16_t arg_84h, 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_2ch;
                                                                     |     int16_t var_30h;
                                                                     |     int16_t var_48h;
                                                                     |     int16_t var_54h;
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
                                                                     |     r2 = arg3;
                                                                     |     r3 = arg4;
    0x0002f55c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0002f560 mov fp, r2                                            |     
    0x0002f562 sub sp, 0x5c                                          |     
    0x0002f564 ldr r2, [pc, 0x3c8]                                   |     
    0x0002f566 mov r8, r0                                            |     r8 = r0;
    0x0002f568 mov r6, r1                                            |     r6 = r1;
    0x0002f56a str r3, [sp, 0x10]                                    |     var_10h = r3;
    0x0002f56c ldr r3, [pc, 0x3c4]                                   |     r3 = *(0x2f934);
    0x0002f56e add r2, pc                                            |     r2 = 0x5eea2;
    0x0002f570 ldr r7, [r0]                                          |     r7 = *(r0);
    0x0002f572 ldr.w sb, [sp, 0x80]                                  |     sb = *(arg_80h);
    0x0002f576 ldr r3, [r2, r3]                                      |     
    0x0002f578 ldr r5, [r1, 0x44]                                    |     r5 = *((r1 + 0x44));
    0x0002f57a ldr r3, [r3]                                          |     r3 = *(0x5eea2);
    0x0002f57c str r3, [sp, 0x54]                                    |     var_54h = r3;
    0x0002f57e mov.w r3, 0                                           |     r3 = 0;
    0x0002f582 ldr r3, [r1, 0x48]                                    |     r3 = *((r1 + 0x48));
    0x0002f584 str r3, [sp, 0x18]                                    |     var_18h = r3;
    0x0002f586 ldrb r3, [r7, 0xf]                                    |     r3 = *((r7 + 0xf));
    0x0002f588 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0002f58a bne.w 0x2f6f4                                         |         goto label_11;
                                                                     |     }
    0x0002f58e ldrh.w sl, [r5, 0x18]                                 |     sl = *((r5 + 0x18));
    0x0002f592 tst.w sl, 2                                           |     
                                                                     |     if ((sl & 2) != 0) {
    0x0002f596 bne.w 0x2f70c                                         |         goto label_12;
                                                                     |     }
                                                                     | label_1:
    0x0002f59a ldr r3, [sp, 0x84]                                    |     r3 = *(arg_84h);
    0x0002f59c movs r2, 0                                            |     r2 = 0;
    0x0002f59e ldr.w r0, [r7, 0xdc]                                  |     r0 = *((r7 + 0xdc));
    0x0002f5a2 mov r1, sb                                            |     r1 = sb;
    0x0002f5a4 eor r4, r3, 1                                         |     r4 = r3 ^ 1;
    0x0002f5a8 and r4, r4, 1                                         |     r4 &= 1;
    0x0002f5ac ands.w r4, r4, sl, lsr 2                              |     r4 &= (sl >> 2);
    0x0002f5b0 bic sl, sl, 4                                         |     sl = BIT_MASK (sl, 4);
    0x0002f5b4 strh.w sl, [r5, 0x18]                                 |     *((r5 + 0x18)) = sl;
    0x0002f5b8 add.w sl, sp, 0x30                                    |     sl += var_30h;
    0x0002f5bc ite ne                                                |     
                                                                     |     if (r4 == r4) {
    0x0002f5be ldrne r3, [r5, 0x14]                                  |         r3 = *((r5 + 0x14));
                                                                     |     }
                                                                     |     if (r4 != r4) {
    0x0002f5c0 streq r4, [sp, 0xc]                                   |         var_ch = r4;
                                                                     |     }
    0x0002f5c2 str r2, [sp, 0x30]                                    |     var_30h = r2;
    0x0002f5c4 it ne                                                 |     
                                                                     |     if (r4 == r4) {
    0x0002f5c6 strne r3, [sp, 0xc]                                   |         var_ch = r3;
                                                                     |     }
    0x0002f5c8 mov r3, sl                                            |     r3 = sl;
    0x0002f5ca bl 0x8cf4                                             |     fcn_00008cf4 (r0, r1, r2, r3);
    0x0002f5ce ldr r4, [sp, 0x30]                                    |     r4 = var_30h;
                                                                     |     if (r4 == 0) {
    0x0002f5d0 cbz r4, 0x2f5ee                                       |         goto label_13;
                                                                     |     }
    0x0002f5d2 ldrh r3, [r4, 0x18]                                   |     r3 = *((r4 + 0x18));
    0x0002f5d4 ldrh r1, [r5, 0x18]                                   |     r1 = *((r5 + 0x18));
    0x0002f5d6 and r3, r3, 4                                         |     r3 &= 4;
    0x0002f5da orrs r3, r1                                           |     r3 |= r1;
    0x0002f5dc strh r3, [r5, 0x18]                                   |     *((r5 + 0x18)) = r3;
    0x0002f5de ldrb r3, [r7, 0xf]                                    |     r3 = *((r7 + 0xf));
    0x0002f5e0 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0002f5e2 beq 0x2f6bc                                           |         goto label_14;
                                                                     |     }
    0x0002f5e4 ldr r1, [r7, 0x18]                                    |     r1 = *((r7 + 0x18));
    0x0002f5e6 mov r0, r4                                            |     r0 = r4;
    0x0002f5e8 adds r1, 1                                            |     r1++;
    0x0002f5ea bl 0xa158                                             |     fcn_0000a158 (r0, r1);
                                                                     |     do {
                                                                     | label_13:
    0x0002f5ee ldr r3, [r5, 0x14]                                    |         r3 = *((r5 + 0x14));
    0x0002f5f0 mov r1, sb                                            |         r1 = sb;
    0x0002f5f2 mov r0, r5                                            |         r0 = r5;
    0x0002f5f4 str r3, [sp, 0x14]                                    |         var_14h = r3;
    0x0002f5f6 bl 0xa158                                             |         fcn_0000a158 (r0, r1);
    0x0002f5fa ldrh r1, [r5, 0x18]                                   |         r1 = *((r5 + 0x18));
    0x0002f5fc movw r3, 0xffdf                                       |         r3 = 0xffdf;
    0x0002f600 ands r3, r1                                           |         r3 &= r1;
    0x0002f602 lsls r1, r1, 0x1e                                     |         r1 <<= 0x1e;
    0x0002f604 it mi                                                 |         
                                                                     |         if (r1 < r1) {
    0x0002f606 strhmi r3, [r5, 0x18]                                 |             __asm ("strhmi r3, [r5, 0x18]");
                                                                     |         }
                                                                     |         if (r1 >= r1) {
    0x0002f608 bpl.w 0x2f766                                         |             goto label_15;
                                                                     |         }
                                                                     | label_4:
    0x0002f60c ldrb r3, [r7, 0xf]                                    |         r3 = *((r7 + 0xf));
    0x0002f60e cmp r3, 0                                             |         
                                                                     |         if (r3 != 0) {
    0x0002f610 bne.w 0x2f756                                         |             goto label_16;
                                                                     |         }
                                                                     | label_3:
    0x0002f614 ldr r3, [sp, 0xc]                                     |         r3 = var_ch;
    0x0002f616 cmp r3, 0                                             |         
                                                                     |         if (r3 != 0) {
    0x0002f618 bne.w 0x2f72c                                         |             goto label_17;
                                                                     |         }
                                                                     | label_5:
    0x0002f61c movs r3, 0                                            |         r3 = 0;
    0x0002f61e str.w sb, [r6, 0x48]                                  |         __asm ("str.w sb, [r6, 0x48]");
    0x0002f622 str r3, [sp, 0x2c]                                    |         var_2ch = r3;
    0x0002f624 and r3, fp, 0xfb                                      |         r3 = fp & 0xfb;
    0x0002f628 cmp r3, 1                                             |         
                                                                     |         if (r3 == 1) {
    0x0002f62a beq 0x2f6c4                                           |             goto label_18;
                                                                     |         }
    0x0002f62c ldr r3, [r6, 0x38]                                    |         r3 = *((r6 + 0x38));
    0x0002f62e ldr r3, [r3]                                          |         r3 = *(r3);
    0x0002f630 rev r1, r3                                            |         r3 = SWAP32 (r1);
    0x0002f632 cmp r3, 0                                             |         
                                                                     |         if (r3 != 0) {
    0x0002f634 bne.w 0x2f78e                                         |             goto label_19;
                                                                     |         }
                                                                     | label_0:
    0x0002f638 movs r3, 0                                            |         r3 = 0;
    0x0002f63a ldr.w r0, [r8]                                        |         r0 = *(r8);
    0x0002f63e ldr r1, [sp, 0x10]                                    |         r1 = var_10h;
    0x0002f640 mov r2, sl                                            |         r2 = sl;
    0x0002f642 bl 0x2a698                                            |         r0 = fcn_0002a698 (r0, r1, r2, r3);
    0x0002f646 mov r3, r0                                            |         r3 = r0;
    0x0002f648 cmp r0, 0                                             |         
                                                                     |         if (r0 != 0) {
    0x0002f64a bne 0x2f6d6                                           |             goto label_2;
                                                                     |         }
    0x0002f64c ldr r0, [sp, 0x30]                                    |         r0 = var_30h;
    0x0002f64e ldr r1, [sp, 0x10]                                    |         r1 = var_10h;
    0x0002f650 ldrd r3, r4, [r0, 4]                                  |         __asm ("ldrd r3, r4, [r0, 4]");
    0x0002f654 cmp r1, 1                                             |         
    0x0002f656 ite eq                                                |         
                                                                     |         if (r1 != 1) {
    0x0002f658 moveq r2, 0x64                                        |             r2 = 0x64;
                                                                     |         }
                                                                     |         if (r1 == 1) {
    0x0002f65a movne r2, 0                                           |             r2 = 0;
                                                                     |         }
    0x0002f65c str r3, [r4, 0x38]                                    |         *((r4 + 0x38)) = r3;
    0x0002f65e strb r2, [r4, 5]                                      |         *((r4 + 5)) = r2;
    0x0002f660 str r0, [r4, 0x44]                                    |         *((r4 + 0x44)) = r0;
    0x0002f662 str.w r8, [r4, 0x34]                                  |         __asm ("str.w r8, [r4, 0x34]");
    0x0002f666 str r1, [r4, 0x48]                                    |         *((r4 + 0x48)) = r1;
    0x0002f668 bl 0x2bdf4                                            |         r0 = fcn_0002bdf4 (r0, r1, r2);
    0x0002f66c mov r3, r0                                            |         r3 = r0;
    0x0002f66e str r0, [sp, 0x2c]                                    |         var_2ch = r0;
    0x0002f670 cmp r0, 0                                             |         
                                                                     |         if (r0 != 0) {
    0x0002f672 bne.w 0x2f878                                         |             goto label_20;
                                                                     |         }
    0x0002f676 cmp.w fp, 4                                           |         
                                                                     |         if (fp != 4) {
    0x0002f67a bne.w 0x2f7a6                                         |             goto label_21;
                                                                     |         }
    0x0002f67e ldr r3, [r4, 0x38]                                    |         r3 = *((r4 + 0x38));
    0x0002f680 ldr r1, [sp, 0x18]                                    |         r1 = var_18h;
    0x0002f682 ldr r2, [r3]                                          |         r2 = *(r3);
    0x0002f684 rev r2, r2                                            |         r2 = SWAP32 (r2);
    0x0002f686 cmp r1, r2                                            |         
                                                                     |         if (r1 != r2) {
    0x0002f688 bne.w 0x2f8e8                                         |             goto label_22;
                                                                     |         }
    0x0002f68c lsr.w r2, sb, 0x18                                    |         r2 = sb >> 0x18;
    0x0002f690 strb.w sb, [r3, 3]                                    |         *((r3 + 3)) = sb;
    0x0002f694 strb r2, [r3]                                         |         *(r3) = r2;
    0x0002f696 lsr.w r2, sb, 0x10                                    |         r2 = sb >> 0x10;
    0x0002f69a strb r2, [r3, 1]                                      |         *((r3 + 1)) = r2;
    0x0002f69c lsr.w r2, sb, 8                                       |         r2 = sb >> 8;
    0x0002f6a0 strb r2, [r3, 2]                                      |         *((r3 + 2)) = r2;
    0x0002f6a2 ldr r0, [r4, 0x44]                                    |         r0 = *((r4 + 0x44));
    0x0002f6a4 bl 0x2bd94                                            |         fcn_0002bd94 (r0);
                                                                     | label_7:
    0x0002f6a8 add r4, sp, 0x2c                                      |         r4 += var_2ch;
    0x0002f6aa ldr r3, [sp, 0x10]                                    |         r3 = var_10h;
    0x0002f6ac mov r2, fp                                            |         r2 = fp;
    0x0002f6ae mov r1, sb                                            |         r1 = sb;
    0x0002f6b0 mov r0, r8                                            |         r0 = r8;
    0x0002f6b2 str r4, [sp]                                          |         *(sp) = r4;
    0x0002f6b4 bl 0x2d07c                                            |         fcn_0002d07c (r0, r1, r2, r3, r4, r5, r6);
    0x0002f6b8 ldr r3, [sp, 0x2c]                                    |         r3 = var_2ch;
    0x0002f6ba b 0x2f6d6                                             |         goto label_2;
                                                                     | label_14:
    0x0002f6bc mov r0, r4                                            |         r0 = r4;
    0x0002f6be bl 0x76e8                                             |         fcn_000076e8 (r0);
    0x0002f6c2 b 0x2f5ee                                             |         
                                                                     |     } while (1);
                                                                     | label_18:
    0x0002f6c4 mov r0, r6                                            |     r0 = r6;
    0x0002f6c6 bl 0x2f410                                            |     r0 = fcn_0002f410 (r0);
    0x0002f6ca mov r3, r0                                            |     r3 = r0;
    0x0002f6cc str r0, [sp, 0x2c]                                    |     var_2ch = r0;
                                                                     |     if (r0 != 0) {
    0x0002f6ce cbnz r0, 0x2f6d6                                      |         goto label_2;
                                                                     |     }
    0x0002f6d0 cmp.w fp, 1                                           |     
                                                                     |     if (fp != 1) {
    0x0002f6d4 bne 0x2f638                                           |         goto label_0;
                                                                     |     }
                                                                     |     do {
                                                                     | label_2:
    0x0002f6d6 ldr r1, [pc, 0x260]                                   |         
    0x0002f6d8 ldr r2, [pc, 0x258]                                   |         r2 = *(0x2f934);
    0x0002f6da add r1, pc                                            |         r1 = 0x5f018;
    0x0002f6dc ldr r2, [r1, r2]                                      |         r2 = *(0x5f018);
    0x0002f6de ldr r1, [r2]                                          |         r1 = *(0x5f018);
    0x0002f6e0 ldr r2, [sp, 0x54]                                    |         r2 = var_54h;
    0x0002f6e2 eors r1, r2                                           |         r1 ^= r2;
    0x0002f6e4 mov.w r2, 0                                           |         r2 = 0;
                                                                     |         if (r1 != r2) {
    0x0002f6e8 bne.w 0x2f92a                                         |             goto label_23;
                                                                     |         }
    0x0002f6ec mov r0, r3                                            |         r0 = r3;
    0x0002f6ee add sp, 0x5c                                          |         
    0x0002f6f0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |         
                                                                     | label_11:
    0x0002f6f4 mov r0, r5                                            |         r0 = r5;
    0x0002f6f6 bl 0x2bdf4                                            |         r0 = fcn_0002bdf4 (r0, r1, r2);
    0x0002f6fa mov r3, r0                                            |         r3 = r0;
    0x0002f6fc cmp r0, 0                                             |         
    0x0002f6fe bne 0x2f6d6                                           |         
                                                                     |     } while (r0 != 0);
    0x0002f700 ldrh.w sl, [r5, 0x18]                                 |     sl = *((r5 + 0x18));
    0x0002f704 tst.w sl, 2                                           |     
                                                                     |     if ((sl & 2) == 0) {
    0x0002f708 beq.w 0x2f59a                                         |         goto label_1;
                                                                     |     }
                                                                     | label_12:
    0x0002f70c ldrd r0, r1, [r5, 0x10]                               |     __asm ("ldrd r0, r1, [r5, 0x10]");
    0x0002f710 bl 0xb398                                             |     r0 = fcn_0000b398 (r0, r1, r2);
    0x0002f714 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0002f716 beq.w 0x2f59a                                         |         goto label_1;
                                                                     |     }
    0x0002f71a mov r0, r5                                            |     r0 = r5;
    0x0002f71c bl 0xf138                                             |     r0 = fcn_0000f138 (r0);
    0x0002f720 mov r3, r0                                            |     r3 = r0;
    0x0002f722 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0002f724 bne 0x2f6d6                                           |         goto label_2;
                                                                     |     }
    0x0002f726 ldrh.w sl, [r5, 0x18]                                 |     sl = *((r5 + 0x18));
    0x0002f72a b 0x2f59a                                             |     goto label_1;
                                                                     | label_17:
    0x0002f72c ldr r4, [sp, 0xc]                                     |     r4 = var_ch;
    0x0002f72e movs r3, 0                                            |     r3 = 0;
    0x0002f730 mov r2, sl                                            |     r2 = sl;
    0x0002f732 mov r0, r7                                            |     r0 = r7;
    0x0002f734 mov r1, r4                                            |     r1 = r4;
    0x0002f736 bl 0x2a698                                            |     r0 = fcn_0002a698 (r0, r1, r2, r3);
    0x0002f73a mov r3, r0                                            |     r3 = r0;
                                                                     |     if (r0 == 0) {
    0x0002f73c cbz r0, 0x2f774                                       |         goto label_24;
                                                                     |     }
    0x0002f73e ldr r2, [r7, 0x1c]                                    |     r2 = *((r7 + 0x1c));
    0x0002f740 cmp r4, r2                                            |     
                                                                     |     if (r4 > r2) {
    0x0002f742 bhi 0x2f6d6                                           |         goto label_2;
                                                                     |     }
    0x0002f744 str r0, [sp, 0x10]                                    |     var_10h = r0;
    0x0002f746 ldr.w r2, [r7, 0xd8]                                  |     r2 = *((r7 + 0xd8));
    0x0002f74a ldr r0, [r7, 0x38]                                    |     r0 = *((r7 + 0x38));
    0x0002f74c ldr r1, [sp, 0xc]                                     |     r1 = var_ch;
    0x0002f74e bl 0x8c2c                                             |     fcn_00008c2c (r0, r1, r2);
    0x0002f752 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x0002f754 b 0x2f6d6                                             |     goto label_2;
                                                                     | label_16:
    0x0002f756 mov r0, r4                                            |     r0 = r4;
    0x0002f758 ldr r1, [sp, 0x14]                                    |     r1 = var_14h;
    0x0002f75a bl 0xa158                                             |     fcn_0000a158 (r0, r1);
    0x0002f75e mov r0, r4                                            |     r0 = r4;
    0x0002f760 bl 0x2bd94                                            |     fcn_0002bd94 (r0);
    0x0002f764 b 0x2f614                                             |     goto label_3;
                                                                     | label_15:
    0x0002f766 orr r3, r3, 2                                         |     r3 |= 2;
    0x0002f76a mov r0, r5                                            |     r0 = r5;
    0x0002f76c strh r3, [r5, 0x18]                                   |     *((r5 + 0x18)) = r3;
    0x0002f76e bl 0x76ac                                             |     fcn_000076ac (r0);
    0x0002f772 b 0x2f60c                                             |     goto label_4;
                                                                     | label_24:
    0x0002f774 ldr r0, [sp, 0x30]                                    |     r0 = var_30h;
    0x0002f776 movw r3, 0xffdf                                       |     r3 = 0xffdf;
    0x0002f77a ldrh r2, [r0, 0x18]                                   |     r2 = *((r0 + 0x18));
    0x0002f77c ands r3, r2                                           |     r3 &= r2;
    0x0002f77e lsls r2, r2, 0x1e                                     |     r2 <<= 0x1e;
                                                                     |     if (r2 >= r2) {
    0x0002f780 bpl 0x2f86c                                           |         goto label_25;
                                                                     |     }
    0x0002f782 orr r3, r3, 4                                         |     r3 |= 4;
    0x0002f786 strh r3, [r0, 0x18]                                   |     *((r0 + 0x18)) = r3;
                                                                     | label_8:
    0x0002f788 bl 0x2bd94                                            |     fcn_0002bd94 (r0);
    0x0002f78c b 0x2f61c                                             |     goto label_5;
                                                                     | label_19:
    0x0002f78e add r3, sp, 0x2c                                      |     r3 += var_2ch;
    0x0002f790 movs r2, 4                                            |     r2 = 4;
    0x0002f792 str r3, [sp]                                          |     *(sp) = r3;
    0x0002f794 mov r0, r8                                            |     r0 = r8;
    0x0002f796 mov r3, sb                                            |     r3 = sb;
    0x0002f798 bl 0x2d07c                                            |     fcn_0002d07c (r0, r1, r2, r3, r4, r5, r6);
    0x0002f79c ldr r3, [sp, 0x2c]                                    |     r3 = var_2ch;
    0x0002f79e cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0002f7a0 beq.w 0x2f638                                         |         goto label_0;
                                                                     |     }
    0x0002f7a4 b 0x2f6d6                                             |     goto label_2;
                                                                     | label_21:
    0x0002f7a6 ldrb r2, [r4]                                         |     r2 = *(r4);
    0x0002f7a8 str r2, [sp, 0x24]                                    |     var_24h = r2;
    0x0002f7aa cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0002f7ac beq.w 0x2f90c                                         |         goto label_26;
                                                                     |     }
                                                                     | label_10:
    0x0002f7b0 ldrh r7, [r4, 0x10]                                   |     r7 = *((r4 + 0x10));
    0x0002f7b2 cmp r7, 0                                             |     
                                                                     |     if (r7 == 0) {
    0x0002f7b4 beq 0x2f8ac                                           |         goto label_27;
                                                                     |     }
    0x0002f7b6 ldrh r1, [r4, 0x12]                                   |     r1 = *((r4 + 0x12));
    0x0002f7b8 mov r0, r4                                            |     r0 = r4;
    0x0002f7ba ldr r6, [r4, 0x38]                                    |     r6 = *((r4 + 0x38));
    0x0002f7bc ldr r5, [r4, 0x40]                                    |     r5 = *((r4 + 0x40));
    0x0002f7be str.w r8, [sp, 0x20]                                  |     __asm ("str.w r8, [var_20h]");
    0x0002f7c2 mov r8, r3                                            |     r8 = r3;
    0x0002f7c4 adds r2, r6, r1                                       |     r2 = r6 + r1;
    0x0002f7c6 ldr r4, [sp, 0x18]                                    |     r4 = var_18h;
    0x0002f7c8 str r2, [sp, 0x1c]                                    |     var_1ch = r2;
    0x0002f7ca adds r5, 1                                            |     r5++;
    0x0002f7cc mov r2, sl                                            |     r2 = sl;
    0x0002f7ce str.w sb, [sp, 0x80]                                  |     __asm ("str.w sb, [arg_80h]");
    0x0002f7d2 mov sl, r1                                            |     sl = r1;
    0x0002f7d4 b 0x2f7e8                                             |     
                                                                     |     while (fp != 3) {
    0x0002f7d6 ldr r3, [r6, r3]                                      |         r3 = *((r6 + r3));
    0x0002f7d8 rev r3, r3                                            |         r3 = SWAP32 (r3);
    0x0002f7da cmp r4, r3                                            |         
                                                                     |         if (r4 == r3) {
    0x0002f7dc beq 0x2f884                                           |             goto label_28;
                                                                     |         }
                                                                     | label_6:
    0x0002f7de add.w r8, r8, 1                                       |         r8++;
    0x0002f7e2 adds r5, 2                                            |         r5 += 2;
    0x0002f7e4 cmp r7, r8                                            |         
                                                                     |         if (r7 == r8) {
    0x0002f7e6 beq 0x2f8dc                                           |             goto label_29;
                                                                     |         }
    0x0002f7e8 ldrb r1, [r5, -0x1]                                   |         r1 = *((r5 - 0x1));
    0x0002f7ec cmp.w fp, 3                                           |         
    0x0002f7f0 ldrb r3, [r5]                                         |         r3 = *(r5);
    0x0002f7f2 orr.w r3, r3, r1, lsl 8                               |         r3 |= (r1 << 8);
    0x0002f7f6 and.w r3, r3, sl                                      |         r3 &= sl;
    0x0002f7fa add.w sb, r6, r3                                      |         sb = r6 + r3;
    0x0002f7fe bne 0x2f7d6                                           |         
                                                                     |     }
    0x0002f800 mov r1, sb                                            |     r1 = sb;
    0x0002f802 str r2, [sp, 0x14]                                    |     var_14h = r2;
    0x0002f804 str r0, [sp, 0xc]                                     |     var_ch = r0;
    0x0002f806 bl 0x9e14                                             |     fcn_00009e14 (r0, r1, r2);
    0x0002f80a ldrh.w lr, [sp, 0x48]                                 |     lr = var_48h;
    0x0002f80e ldr r0, [sp, 0xc]                                     |     r0 = var_ch;
    0x0002f810 ldr r2, [sp, 0x14]                                    |     r2 = var_14h;
    0x0002f812 cmp.w lr, 0                                           |     
                                                                     |     if (lr == 0) {
    0x0002f816 beq 0x2f7de                                           |         goto label_6;
                                                                     |     }
    0x0002f818 ldr r3, [sp, 0x1c]                                    |     r3 = var_1ch;
    0x0002f81a add.w r1, lr, 3                                       |     r1 = lr + 3;
    0x0002f81e add r1, sb                                            |     r1 += sb;
    0x0002f820 cmp r1, r3                                            |     
                                                                     |     if (r1 > r3) {
    0x0002f822 bhi 0x2f7de                                           |         goto label_6;
                                                                     |     }
    0x0002f824 ldr.w ip, [sb, lr]                                    |     ip = *((sb + lr));
    0x0002f828 add.w r3, lr, sb                                      |     r3 = lr + sb;
    0x0002f82c rev.w ip, ip                                          |     ip = SWAPundefined (ip);
    0x0002f830 cmp r4, ip                                            |     
                                                                     |     if (r4 != ip) {
    0x0002f832 bne 0x2f7de                                           |         goto label_6;
                                                                     |     }
    0x0002f834 ldr.w sb, [sp, 0x80]                                  |     sb = *(arg_80h);
    0x0002f838 mov r1, r3                                            |     r1 = r3;
    0x0002f83a mov r3, r8                                            |     r3 = r8;
    0x0002f83c mov r4, r0                                            |     r4 = r0;
    0x0002f83e cmp r3, r7                                            |     
    0x0002f840 ldr.w r8, [sp, 0x20]                                  |     r8 = var_20h;
    0x0002f844 strb.w sb, [r1, 3]                                    |     *((r1 + 3)) = sb;
    0x0002f848 lsr.w r2, sb, 0x18                                    |     r2 = sb >> 0x18;
    0x0002f84c strb r2, [r1]                                         |     *(r1) = r2;
    0x0002f84e lsr.w r2, sb, 0x10                                    |     r2 = sb >> 0x10;
    0x0002f852 strb r2, [r1, 1]                                      |     *((r1 + 1)) = r2;
    0x0002f854 lsr.w r2, sb, 8                                       |     r2 = sb >> 8;
    0x0002f858 strb r2, [r1, 2]                                      |     *((r1 + 2)) = r2;
                                                                     |     if (r3 == r7) {
    0x0002f85a beq 0x2f918                                           |         goto label_30;
                                                                     |     }
                                                                     |     do {
                                                                     | label_9:
    0x0002f85c ldr r3, [sp, 0x24]                                    |         r3 = var_24h;
    0x0002f85e ldr r0, [r4, 0x44]                                    |         r0 = *((r4 + 0x44));
    0x0002f860 strb r3, [r4]                                         |         *(r4) = r3;
    0x0002f862 movs r3, 0                                            |         r3 = 0;
    0x0002f864 str r3, [sp, 0x2c]                                    |         var_2ch = r3;
    0x0002f866 bl 0x2bd94                                            |         fcn_0002bd94 (r0);
    0x0002f86a b 0x2f6a8                                             |         goto label_7;
                                                                     | label_25:
    0x0002f86c orr r3, r3, 6                                         |         r3 |= 6;
    0x0002f870 strh r3, [r0, 0x18]                                   |         *((r0 + 0x18)) = r3;
    0x0002f872 bl 0x76ac                                             |         fcn_000076ac (r0);
    0x0002f876 b 0x2f788                                             |         goto label_8;
                                                                     | label_20:
    0x0002f878 str r0, [sp, 0xc]                                     |         var_ch = r0;
    0x0002f87a ldr r0, [r4, 0x44]                                    |         r0 = *((r4 + 0x44));
    0x0002f87c bl 0x2bd94                                            |         fcn_0002bd94 (r0);
    0x0002f880 ldr r3, [sp, 0xc]                                     |         r3 = var_ch;
    0x0002f882 b 0x2f6d6                                             |         goto label_2;
                                                                     | label_28:
    0x0002f884 mov r1, sb                                            |         r1 = sb;
    0x0002f886 ldr.w sb, [sp, 0x80]                                  |         sb = *(arg_80h);
    0x0002f88a mov r3, r8                                            |         r3 = r8;
    0x0002f88c mov r4, r0                                            |         r4 = r0;
    0x0002f88e cmp r3, r7                                            |         
    0x0002f890 ldr.w r8, [sp, 0x20]                                  |         r8 = var_20h;
    0x0002f894 strb.w sb, [r1, 3]                                    |         *((r1 + 3)) = sb;
    0x0002f898 lsr.w r2, sb, 0x18                                    |         r2 = sb >> 0x18;
    0x0002f89c strb r2, [r1]                                         |         *(r1) = r2;
    0x0002f89e lsr.w r2, sb, 0x10                                    |         r2 = sb >> 0x10;
    0x0002f8a2 strb r2, [r1, 1]                                      |         *((r1 + 1)) = r2;
    0x0002f8a4 lsr.w r2, sb, 8                                       |         r2 = sb >> 8;
    0x0002f8a8 strb r2, [r1, 2]                                      |         *((r1 + 2)) = r2;
    0x0002f8aa bne 0x2f85c                                           |         
                                                                     |     } while (r3 != r7);
                                                                     |     do {
                                                                     | label_27:
    0x0002f8ac cmp.w fp, 5                                           |         
                                                                     |         if (fp != 5) {
    0x0002f8b0 bne 0x2f918                                           |             goto label_30;
                                                                     |         }
    0x0002f8b2 ldrb r3, [r4, 5]                                      |         r3 = *((r4 + 5));
    0x0002f8b4 ldr r1, [r4, 0x38]                                    |         r1 = *((r4 + 0x38));
    0x0002f8b6 ldr r5, [sp, 0x18]                                    |         r5 = var_18h;
    0x0002f8b8 adds r3, 8                                            |         r3 += 8;
    0x0002f8ba ldr r2, [r1, r3]                                      |         r2 = *((r1 + r3));
    0x0002f8bc adds r0, r1, r3                                       |         r0 = r1 + r3;
    0x0002f8be rev r2, r2                                            |         r2 = SWAP32 (r2);
    0x0002f8c0 cmp r5, r2                                            |         
                                                                     |         if (r5 != r2) {
    0x0002f8c2 bne 0x2f918                                           |             goto label_30;
                                                                     |         }
    0x0002f8c4 lsr.w r2, sb, 0x18                                    |         r2 = sb >> 0x18;
    0x0002f8c8 strb r2, [r1, r3]                                     |         *((r1 + r3)) = r2;
    0x0002f8ca lsr.w r3, sb, 0x10                                    |         r3 = sb >> 0x10;
    0x0002f8ce strb.w sb, [r0, 3]                                    |         *((r0 + 3)) = sb;
    0x0002f8d2 strb r3, [r0, 1]                                      |         *((r0 + 1)) = r3;
    0x0002f8d4 lsr.w r3, sb, 8                                       |         r3 = sb >> 8;
    0x0002f8d8 strb r3, [r0, 2]                                      |         *((r0 + 2)) = r3;
    0x0002f8da b 0x2f85c                                             |         goto label_9;
                                                                     | label_29:
    0x0002f8dc ldr.w r8, [sp, 0x20]                                  |         r8 = var_20h;
    0x0002f8e0 mov r4, r0                                            |         r4 = r0;
    0x0002f8e2 ldr.w sb, [sp, 0x80]                                  |         sb = *(arg_80h);
    0x0002f8e6 b 0x2f8ac                                             |         
                                                                     |     } while (1);
                                                                     | label_22:
    0x0002f8e8 blx 0x5fe8                                            |     fcn_00005fe8 ();
    0x0002f8ec ldr r1, [pc, 0x4c]                                    |     
    0x0002f8ee add.w r3, r0, 0x14                                    |     r3 = r0 + 0x14;
    0x0002f8f2 movw r2, 0xe008                                       |     r2 = 0xe008;
    0x0002f8f6 add r1, pc                                            |     r1 = 0x5f236;
                                                                     |     do {
    0x0002f8f8 movs r0, 0xb                                          |         r0 = 0xb;
    0x0002f8fa blx 0x6820                                            |         fcn_00006820 ();
    0x0002f8fe movs r3, 0xb                                          |         r3 = 0xb;
    0x0002f900 ldr r0, [r4, 0x44]                                    |         r0 = *((r4 + 0x44));
    0x0002f902 str r3, [sp, 0xc]                                     |         var_ch = r3;
    0x0002f904 bl 0x2bd94                                            |         fcn_0002bd94 (r0);
    0x0002f908 ldr r3, [sp, 0xc]                                     |         r3 = var_ch;
    0x0002f90a b 0x2f6d6                                             |         goto label_2;
                                                                     | label_26:
    0x0002f90c str r0, [sp, 0xc]                                     |         var_ch = r0;
    0x0002f90e mov r0, r4                                            |         r0 = r4;
    0x0002f910 bl 0x2e4c8                                            |         fcn_0002e4c8 (r0);
    0x0002f914 ldr r3, [sp, 0xc]                                     |         r3 = var_ch;
    0x0002f916 b 0x2f7b0                                             |         goto label_10;
                                                                     | label_30:
    0x0002f918 blx 0x5fe8                                            |         fcn_00005fe8 ();
    0x0002f91c ldr r1, [pc, 0x20]                                    |         
    0x0002f91e add.w r3, r0, 0x14                                    |         r3 = r0 + 0x14;
    0x0002f922 movw r2, 0xe02a                                       |         r2 = 0xe02a;
    0x0002f926 add r1, pc                                            |         r1 = 0x5f26a;
    0x0002f928 b 0x2f8f8                                             |         
                                                                     |     } while (1);
                                                                     | label_23:
    0x0002f92a blx 0x6498                                            |     fcn_00006498 ();
    0x0002f92e nop                                                   |     
    0x0002f930 strh r2, [r5, 0x36]                                   |     *((r5 + 0x36)) = r2;
    0x0002f932 movs r4, r0                                           |     r4 = r0;
    0x0002f934 lsls r0, r1, 0xe                                      |     r0 = r1 << 0xe;
    0x0002f936 movs r0, r0                                           |     
    0x0002f938 strh r6, [r7, 0x2a]                                   |     *((r7 + 0x2a)) = r6;
    0x0002f93a movs r4, r0                                           |     r4 = r0;
    0x0002f93c lsls r6, r2, 1                                        |     r6 = r2 << 1;
    0x0002f93e movs r3, r0                                           |     r3 = r0;
    0x0002f940 movs r6, r4                                           |     r6 = r4;
    0x0002f942 movs r3, r0                                           |     r3 = r0;
    0x0002f944 ldr r3, [r0, 8]                                       |     r3 = *((r0 + 8));
    0x0002f946 ldrb r2, [r3]                                         |     r2 = *(r3);
                                                                     |     if (r2 != 0) {
    0x0002f948 cbz r2, 0x2f956                                       |         
    0x0002f94a movs r2, 0                                            |         r2 = 0;
    0x0002f94c strb r2, [r3]                                         |         *(r3) = r2;
    0x0002f94e ldrsh.w r2, [r0, 0x1a]                                |         r2 = *((r0 + 0x1a));
    0x0002f952 cmp r2, 1                                             |         
                                                                     |         if (r2 > 1) {
    0x0002f954 bgt 0x2f958                                           |             goto label_31;
                                                                     |         }
                                                                     |     }
    0x0002f956 bx lr                                                 |     return;
                                                                     | label_31:
    0x0002f958 mov r0, r3                                            |     r0 = r3;
    0x0002f95a b.w 0x2e4c8                                           |     return void (*0x2e4c8)() ();
                                                                     | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x2f960 */
                                                                     | #include <stdint.h>
                                                                     |  
    ; (fcn) fcn.0002f960 ()                                          | void fcn_0002f960 (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_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;
    0x0002f960 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0002f964 sub sp, 0x2c                                          |     
    0x0002f966 ldrd r6, sb, [sp, 0x54]                               |     __asm ("ldrd r6, sb, [arg_54h]");
    0x0002f96a mov r5, r2                                            |     r5 = r2;
    0x0002f96c mov r2, r3                                            |     r2 = r3;
    0x0002f96e ldr.w sl, [sp, 0x50]                                  |     sl = *(arg_50h);
    0x0002f970 adr r0, 0x140                                         |     r0 = 0x140;
    0x0002f972 ldr.w r3, [sb]                                        |     r3 = *(sb);
                                                                     |     if (r3 != 0) {
    0x0002f976 cbnz r3, 0x2f9be                                      |         goto label_0;
                                                                     |     }
    0x0002f978 ldrb r3, [r0, 1]                                      |     r3 = *((r0 + 1));
    0x0002f97a subs.w r8, r6, 0                                      |     r8 = r6 - 0;
    0x0002f97e it ne                                                 |     
                                                                     |     if (r8 == r6) {
    0x0002f980 movne r8, 1                                           |         r8 = 1;
                                                                     |     }
    0x0002f984 mov r4, r0                                            |     r4 = r0;
    0x0002f986 lsl.w r8, r8, 2                                       |     r8 <<= 2;
    0x0002f98a mov r7, r1                                            |     r7 = r1;
    0x0002f98c cbz r3, 0x2f9c4                                       |     
                                                                     |     while (r1 >= r3) {
    0x0002f98e cmp.w sl, 0                                           |         
                                                                     |         if (sl != 0) {
    0x0002f992 beq 0x2f9a6                                           |             
    0x0002f994 add.w r1, r5, r8                                      |             r1 = r5 + r8;
    0x0002f998 mov r5, sl                                            |             r5 = sl;
    0x0002f99a sub.w r2, r2, r8                                      |             r2 -= r8;
    0x0002f99e add.w r0, sl, r8                                      |             r0 = sl + r8;
    0x0002f9a2 blx 0x6214                                            |             fcn_00006214 ();
                                                                     |         }
    0x0002f9a6 cmp r6, 0                                             |         
                                                                     |         if (r6 != 0) {
    0x0002f9a8 bne.w 0x2fb4c                                         |             goto label_6;
                                                                     |         }
                                                                     | label_1:
    0x0002f9ac ldrb r3, [r4, 1]                                      |         r3 = *((r4 + 1));
    0x0002f9ae adds r2, r3, 1                                        |         r2 = r3 + 1;
    0x0002f9b0 adds r3, 8                                            |         r3 += 8;
    0x0002f9b2 strb r2, [r4, 1]                                      |         *((r4 + 1)) = r2;
    0x0002f9b4 add.w r2, r4, r3, lsl 1                               |         r2 = r4 + (r3 << 1);
    0x0002f9b8 str.w r5, [r4, r3, lsl 2]                             |         __asm ("str.w r5, [r4, r3, lsl 2]");
    0x0002f9bc strh r7, [r2, 4]                                      |         *((r2 + 4)) = r7;
                                                                     | label_0:
    0x0002f9be add sp, 0x2c                                          |         
    0x0002f9c0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |         
    0x0002f9c4 ldrh r3, [r0, 0xe]                                    |         r3 = *((r0 + 0xe));
    0x0002f9c6 adds r1, r2, 1                                        |         r1 = r2 + 1;
    0x0002f9c8 cmp r1, r3                                            |         
    0x0002f9ca bge 0x2f98e                                           |         
                                                                     |     }
    0x0002f9cc ldr r0, [r0, 0x44]                                    |     r0 = *((r0 + 0x44));
    0x0002f9ce str r2, [sp]                                          |     *(sp) = r2;
    0x0002f9d0 bl 0x2bdf4                                            |     fcn_0002bdf4 (r0, r1, r2);
    0x0002f9d4 ldr r2, [sp]                                          |     r2 = *(sp);
    0x0002f9d6 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0002f9d8 bne.w 0x2fb74                                         |         goto label_3;
                                                                     |     }
    0x0002f9dc ldrh r1, [r4, 0x10]                                   |     r1 = *((r4 + 0x10));
    0x0002f9de ldrb.w ip, [r4, 5]                                    |     ip = *((r4 + 5));
    0x0002f9e2 ldr.w fp, [r4, 0x38]                                  |     fp = *((r4 + 0x38));
    0x0002f9e6 str r1, [sp, 4]                                       |     var_4h = r1;
    0x0002f9e8 ldr r1, [r4, 0x34]                                    |     r1 = *((r4 + 0x34));
    0x0002f9ea ldrh r0, [r4, 0xc]                                    |     r0 = *((r4 + 0xc));
    0x0002f9ec ldr r3, [r1, 0x24]                                    |     r3 = *((r1 + 0x24));
    0x0002f9ee add.w r1, ip, 6                                       |     r1 = ip + 6;
    0x0002f9f2 str r0, [sp, 8]                                       |     var_8h = r0;
    0x0002f9f4 str r1, [sp, 0x18]                                    |     var_18h = r1;
    0x0002f9f6 str r3, [sp, 0x1c]                                    |     var_1ch = r3;
    0x0002f9f8 add.w r3, ip, 5                                       |     r3 = ip + 5;
    0x0002f9fc ldrb.w r0, [fp, r3]                                   |     r0 = *((fp + r3));
    0x0002fa00 ldrb.w r1, [fp, r1]                                   |     r1 = *((fp + r1));
    0x0002fa04 str r3, [sp, 0x14]                                    |     var_14h = r3;
    0x0002fa06 orr.w r1, r1, r0, lsl 8                               |     r1 |= (r0 << 8);
    0x0002fa0a ldrd r3, r0, [sp, 4]                                  |     __asm ("ldrd r3, r0, [var_4h]");
    0x0002fa0e subs r1, 1                                            |     r1--;
    0x0002fa10 uxth r1, r1                                           |     r1 = (int16_t) r1;
    0x0002fa12 add.w r3, r0, r3, lsl 1                               |     r3 = r0 + (r3 << 1);
    0x0002fa16 add.w r0, ip, 7                                       |     r0 = ip + 7;
    0x0002fa1a str r0, [sp, 0x20]                                    |     var_20h = r0;
    0x0002fa1c str r3, [sp]                                          |     *(sp) = r3;
    0x0002fa1e adds r3, r1, 1                                        |     r3 = r1 + 1;
    0x0002fa20 str r3, [sp, 0xc]                                     |     var_ch = r3;
    0x0002fa22 ldrb.w r3, [fp, r0]                                   |     r3 = *((fp + r0));
    0x0002fa26 adds r0, r1, 1                                        |     r0 = r1 + 1;
    0x0002fa28 str r3, [sp, 0x10]                                    |     var_10h = r3;
    0x0002fa2a ldr r3, [sp]                                          |     r3 = *(sp);
    0x0002fa2c cmp r3, r0                                            |     
                                                                     |     if (r3 > r0) {
    0x0002fa2e bgt.w 0x2fb5c                                         |         goto label_7;
                                                                     |     }
    0x0002fa32 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x0002fa34 cmp r3, 0x3b                                          |     
                                                                     |     if (r3 > 0x3b) {
    0x0002fa36 bhi.w 0x2fb7a                                         |         goto label_8;
                                                                     |     }
    0x0002fa3a ldr r3, [sp]                                          |     r3 = *(sp);
    0x0002fa3c cmp r3, r1                                            |     
                                                                     |     if (r3 >= r1) {
    0x0002fa3e bge 0x2fa92                                           |         goto label_2;
                                                                     |     }
    0x0002fa40 ldr r1, [sp, 0x1c]                                    |     r1 = var_1ch;
    0x0002fa42 add.w r3, ip, 1                                       |     r3 = ip + 1;
    0x0002fa46 str.w r8, [sp, 0x24]                                  |     __asm ("str.w r8, [var_24h]");
    0x0002fa4a subs r1, 3                                            |     r1 -= 3;
    0x0002fa4c mov sl, r1                                            |     sl = r1;
    0x0002fa4e b 0x2fa74                                             |     
                                                                     |     while (r3 != r0) {
    0x0002fa50 cmp sl, r3                                            |         
                                                                     |         if (sl <= r3) {
    0x0002fa52 ble.w 0x2fbca                                         |             goto label_9;
                                                                     |         }
    0x0002fa56 cmp r3, r1                                            |         
                                                                     |         if (r3 <= r1) {
    0x0002fa58 ble.w 0x2fbca                                         |             goto label_9;
                                                                     |         }
    0x0002fa5c adds r1, r3, 3                                        |         r1 = r3 + 3;
    0x0002fa5e ldrb.w r8, [fp, r0]                                   |         r8 = *((fp + r0));
    0x0002fa62 ldrb.w ip, [fp, r1]                                   |         ip = *((fp + r1));
    0x0002fa66 add r0, fp                                            |         r0 += fp;
    0x0002fa68 add r1, fp                                            |         r1 += fp;
    0x0002fa6a orr.w ip, ip, r8, lsl 8                               |         
    0x0002fa6e cmp r2, ip                                            |         
                                                                     |         if (r2 <= ip) {
    0x0002fa70 ble.w 0x2fbe4                                         |             goto label_10;
                                                                     |         }
    0x0002fa74 add.w lr, fp, r3                                      |         lr = fp + r3;
    0x0002fa78 ldrb.w ip, [fp, r3]                                   |         ip = *((fp + r3));
    0x0002fa7c ldrb.w r0, [lr, 1]                                    |         r0 = *((lr + 1));
    0x0002fa80 mov r1, r3                                            |         r1 = r3;
    0x0002fa82 adds r1, 3                                            |         r1 += 3;
    0x0002fa84 orrs.w r3, r0, ip, lsl 8                              |         r3 = r0 | (ip << 8);
    0x0002fa88 add.w r0, r3, 2                                       |         r0 = r3 + 2;
    0x0002fa8c bne 0x2fa50                                           |         
                                                                     |     }
    0x0002fa8e ldr.w r8, [sp, 0x24]                                  |     r8 = var_24h;
                                                                     | label_2:
    0x0002fa92 ldr r3, [sp]                                          |     r3 = *(sp);
    0x0002fa94 ldr r1, [sp, 0xc]                                     |     r1 = var_ch;
    0x0002fa96 adds r3, 2                                            |     r3 += 2;
    0x0002fa98 add r3, r2                                            |     r3 += r2;
    0x0002fa9a cmp r3, r1                                            |     
                                                                     |     if (r3 > r1) {
    0x0002fa9c bgt.w 0x2fba2                                         |         goto label_11;
                                                                     |     }
                                                                     | label_4:
    0x0002faa0 ldr r3, [sp, 0xc]                                     |     r3 = var_ch;
    0x0002faa2 ldr r0, [sp, 0x14]                                    |     r0 = var_14h;
    0x0002faa4 subs r3, r3, r2                                       |     r3 -= r2;
    0x0002faa6 ubfx r1, r3, 8, 8                                     |     r1 = (r3 >> 8) & ((1 << 8) - 1);
    0x0002faaa uxtb.w sl, r3                                         |     sl = (int8_t) r3;
    0x0002faae strb.w r1, [fp, r0]                                   |     *((fp + r0)) = r1;
    0x0002fab2 str r1, [sp]                                          |     *(sp) = r1;
    0x0002fab4 ldr r1, [sp, 0x18]                                    |     r1 = var_18h;
    0x0002fab6 strb.w sl, [fp, r1]                                   |     *((fp + r1)) = sl;
                                                                     | label_5:
    0x0002faba ldrh r1, [r4, 0xe]                                    |     r1 = *((r4 + 0xe));
    0x0002fabc add.w r0, r8, r3                                      |     r0 = r8 + r3;
    0x0002fac0 add r0, fp                                            |     r0 += fp;
    0x0002fac2 str r3, [sp, 0xc]                                     |     var_ch = r3;
    0x0002fac4 subs r1, r1, r2                                       |     r1 -= r2;
    0x0002fac6 sub.w r2, r2, r8                                      |     r2 -= r8;
    0x0002faca subs r1, 2                                            |     r1 -= 2;
    0x0002facc strh r1, [r4, 0xe]                                    |     *((r4 + 0xe)) = r1;
    0x0002face ldrh r1, [r4, 0x10]                                   |     r1 = *((r4 + 0x10));
    0x0002fad0 adds r1, 1                                            |     r1++;
    0x0002fad2 strh r1, [r4, 0x10]                                   |     *((r4 + 0x10)) = r1;
    0x0002fad4 add.w r1, r5, r8                                      |     r1 = r5 + r8;
    0x0002fad8 blx 0x6214                                            |     fcn_00006214 ();
                                                                     |     if (r6 != 0) {
    0x0002fadc cbz r6, 0x2faf2                                       |         
    0x0002fade ldr r3, [sp, 0xc]                                     |         r3 = var_ch;
    0x0002fae0 lsrs r2, r6, 0x18                                     |         r2 = r6 >> 0x18;
    0x0002fae2 strb.w r2, [fp, r3]                                   |         *((fp + r3)) = r2;
    0x0002fae6 add r3, fp                                            |         r3 += fp;
    0x0002fae8 lsrs r2, r6, 0x10                                     |         r2 = r6 >> 0x10;
    0x0002faea strb r6, [r3, 3]                                      |         *((r3 + 3)) = r6;
    0x0002faec lsrs r6, r6, 8                                        |         r6 >>= 8;
    0x0002faee strb r2, [r3, 1]                                      |         *((r3 + 1)) = r2;
    0x0002faf0 strb r6, [r3, 2]                                      |         *((r3 + 2)) = r6;
                                                                     |     }
    0x0002faf2 ldr r3, [sp, 8]                                       |     r3 = var_8h;
    0x0002faf4 add.w r6, r3, r7, lsl 1                               |     r6 = r3 + (r7 << 1);
    0x0002faf8 ldr r3, [sp, 4]                                       |     r3 = var_4h;
    0x0002fafa adds r0, r6, 2                                        |     r0 = r6 + 2;
    0x0002fafc subs r2, r3, r7                                       |     r2 = r3 - r7;
    0x0002fafe add.w r7, fp, r6                                      |     r7 = fp + r6;
    0x0002fb02 lsls r2, r2, 1                                        |     r2 <<= 1;
    0x0002fb04 add r0, fp                                            |     r0 += fp;
    0x0002fb06 mov r1, r7                                            |     r1 = r7;
    0x0002fb08 blx 0x6578                                            |     fcn_00006578 ();
    0x0002fb0c ldr r3, [sp]                                          |     r3 = *(sp);
    0x0002fb0e strb.w r3, [fp, r6]                                   |     *((fp + r6)) = r3;
    0x0002fb12 strb.w sl, [r7, 1]                                    |     *((r7 + 1)) = sl;
    0x0002fb16 ldrh r2, [r4, 0x10]                                   |     r2 = *((r4 + 0x10));
    0x0002fb18 ldrb r3, [r4, 5]                                      |     r3 = *((r4 + 5));
    0x0002fb1a lsrs r2, r2, 8                                        |     r2 >>= 8;
    0x0002fb1c add r3, fp                                            |     r3 += fp;
    0x0002fb1e strb r2, [r3, 3]                                      |     *((r3 + 3)) = r2;
    0x0002fb20 ldrb r3, [r4, 5]                                      |     r3 = *((r4 + 5));
    0x0002fb22 ldrh r2, [r4, 0x10]                                   |     r2 = *((r4 + 0x10));
    0x0002fb24 add r3, fp                                            |     r3 += fp;
    0x0002fb26 strb r2, [r3, 4]                                      |     *((r3 + 4)) = r2;
    0x0002fb28 ldr r3, [r4, 0x34]                                    |     r3 = *((r4 + 0x34));
    0x0002fb2a ldrb r3, [r3, 0x11]                                   |     r3 = *((r3 + 0x11));
    0x0002fb2c cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0002fb2e beq.w 0x2f9be                                         |         goto label_0;
                                                                     |     }
    0x0002fb32 ldr.w r3, [sb]                                        |     r3 = *(sb);
    0x0002fb36 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0002fb38 bne.w 0x2f9be                                         |         goto label_0;
                                                                     |     }
    0x0002fb3c mov r2, sb                                            |     r2 = sb;
    0x0002fb3e mov r1, r5                                            |     r1 = r5;
    0x0002fb40 mov r0, r4                                            |     r0 = r4;
    0x0002fb42 add sp, 0x2c                                          |     
    0x0002fb44 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}            |     
    0x0002fb48 b.w 0x2d1e4                                           |     void (*0x2d1e4)() ();
                                                                     | label_6:
    0x0002fb4c lsrs r3, r6, 0x18                                     |     r3 = r6 >> 0x18;
    0x0002fb4e strb r6, [r5, 3]                                      |     *((r5 + 3)) = r6;
    0x0002fb50 strb r3, [r5]                                         |     *(r5) = r3;
    0x0002fb52 lsrs r3, r6, 0x10                                     |     r3 = r6 >> 0x10;
    0x0002fb54 lsrs r6, r6, 8                                        |     r6 >>= 8;
    0x0002fb56 strb r3, [r5, 1]                                      |     *((r5 + 1)) = r3;
    0x0002fb58 strb r6, [r5, 2]                                      |     *((r5 + 2)) = r6;
    0x0002fb5a b 0x2f9ac                                             |     goto label_1;
                                                                     | label_7:
    0x0002fb5c blx 0x5fe8                                            |     fcn_00005fe8 ();
    0x0002fb60 ldr r1, [pc, 0xe4]                                    |     
    0x0002fb62 add.w r3, r0, 0x14                                    |     r3 = r0 + 0x14;
    0x0002fb66 movw r2, 0xd98a                                       |     r2 = 0xd98a;
    0x0002fb6a movs r0, 0xb                                          |     r0 = 0xb;
    0x0002fb6c add r1, pc                                            |     r1 = 0x5f7b8;
    0x0002fb6e blx 0x6820                                            |     fcn_00006820 ();
    0x0002fb72 movs r0, 0xb                                          |     r0 = 0xb;
                                                                     |     do {
                                                                     | label_3:
    0x0002fb74 str.w r0, [sb]                                        |         __asm ("str.w r0, [sb]");
    0x0002fb78 b 0x2f9be                                             |         goto label_0;
                                                                     | label_8:
    0x0002fb7a mov r0, r4                                            |         r0 = r4;
    0x0002fb7c str r2, [sp, 0x10]                                    |         var_10h = r2;
    0x0002fb7e bl 0x29958                                            |         r0 = fcn_00029958 (r0);
    0x0002fb82 cmp r0, 0                                             |         
    0x0002fb84 bne 0x2fb74                                           |         
                                                                     |     } while (r0 != 0);
    0x0002fb86 ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0002fb88 ldr r2, [sp, 0x10]                                    |     r2 = var_10h;
    0x0002fb8a ldrb.w r1, [fp, r3]                                   |     r1 = *((fp + r3));
    0x0002fb8e ldr r3, [sp, 0x18]                                    |     r3 = var_18h;
    0x0002fb90 ldrb.w r3, [fp, r3]                                   |     r3 = *((fp + r3));
    0x0002fb94 orr.w r3, r3, r1, lsl 8                               |     r3 |= (r1 << 8);
    0x0002fb98 subs r3, 1                                            |     r3--;
    0x0002fb9a uxth r3, r3                                           |     r3 = (int16_t) r3;
    0x0002fb9c adds r3, 1                                            |     r3++;
    0x0002fb9e str r3, [sp, 0xc]                                     |     var_ch = r3;
    0x0002fba0 b 0x2fa92                                             |     goto label_2;
                                                                     | label_11:
    0x0002fba2 mov r0, r4                                            |     r0 = r4;
    0x0002fba4 str r2, [sp]                                          |     *(sp) = r2;
    0x0002fba6 bl 0x29958                                            |     r0 = fcn_00029958 (r0);
    0x0002fbaa cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0002fbac bne 0x2fb74                                           |         goto label_3;
                                                                     |     }
    0x0002fbae ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0002fbb0 ldr r2, [sp]                                          |     r2 = *(sp);
    0x0002fbb2 ldrb.w r1, [fp, r3]                                   |     r1 = *((fp + r3));
    0x0002fbb6 ldr r3, [sp, 0x18]                                    |     r3 = var_18h;
    0x0002fbb8 ldrb.w r3, [fp, r3]                                   |     r3 = *((fp + r3));
    0x0002fbbc orr.w r3, r3, r1, lsl 8                               |     r3 |= (r1 << 8);
    0x0002fbc0 subs r3, 1                                            |     r3--;
    0x0002fbc2 uxth r3, r3                                           |     r3 = (int16_t) r3;
    0x0002fbc4 adds r3, 1                                            |     r3++;
    0x0002fbc6 str r3, [sp, 0xc]                                     |     var_ch = r3;
    0x0002fbc8 b 0x2faa0                                             |     goto label_4;
                                                                     | label_9:
    0x0002fbca blx 0x5fe8                                            |     fcn_00005fe8 ();
    0x0002fbce ldr r1, [pc, 0x7c]                                    |     
    0x0002fbd0 add.w r3, r0, 0x14                                    |     r3 = r0 + 0x14;
    0x0002fbd4 movw r2, 0xd99d                                       |     r2 = 0xd99d;
    0x0002fbd8 movs r0, 0xb                                          |     r0 = 0xb;
    0x0002fbda add r1, pc                                            |     r1 = 0x5f82c;
    0x0002fbdc blx 0x6820                                            |     fcn_00006820 ();
    0x0002fbe0 movs r0, 0xb                                          |     r0 = 0xb;
    0x0002fbe2 b 0x2fb74                                             |     goto label_3;
                                                                     | label_10:
    0x0002fbe4 sub.w sl, ip, r2                                      |     sl = ip - r2;
    0x0002fbe8 ldr.w r8, [sp, 0x24]                                  |     r8 = var_24h;
    0x0002fbec cmp.w sl, 3                                           |     
    0x0002fbf0 str r1, [sp]                                          |     *(sp) = r1;
                                                                     |     if (sl <= 3) {
    0x0002fbf2 ble 0x2fc32                                           |         goto label_12;
                                                                     |     }
    0x0002fbf4 ldr r1, [sp, 0x1c]                                    |     r1 = var_1ch;
    0x0002fbf6 add ip, r3                                            |     
    0x0002fbf8 cmp r1, ip                                            |     
                                                                     |     if (r1 < ip) {
    0x0002fbfa blt 0x2fc18                                           |         goto label_13;
                                                                     |     }
    0x0002fbfc ldr r1, [sp]                                          |     r1 = *(sp);
    0x0002fbfe asr.w ip, sl, 8                                       |     
    0x0002fc02 strb.w ip, [r0]                                       |     *(r0) = ip;
    0x0002fc06 strb.w sl, [r1]                                       |     *(r1) = sl;
                                                                     |     do {
    0x0002fc0a add r3, sl                                            |         r3 += sl;
    0x0002fc0c ubfx r1, r3, 8, 8                                     |         r1 = (r3 >> 8) & ((1 << 8) - 1);
    0x0002fc10 uxtb.w sl, r3                                         |         sl = (int8_t) r3;
    0x0002fc14 str r1, [sp]                                          |         *(sp) = r1;
    0x0002fc16 b 0x2faba                                             |         goto label_5;
                                                                     | label_13:
    0x0002fc18 blx 0x5fe8                                            |         fcn_00005fe8 ();
    0x0002fc1c ldr r1, [pc, 0x30]                                    |         
    0x0002fc1e add.w r3, r0, 0x14                                    |         r3 = r0 + 0x14;
    0x0002fc22 movw r2, 0xd9aa                                       |         r2 = 0xd9aa;
    0x0002fc26 movs r0, 0xb                                          |         r0 = 0xb;
    0x0002fc28 add r1, pc                                            |         r1 = 0x5f87c;
    0x0002fc2a blx 0x6820                                            |         fcn_00006820 ();
    0x0002fc2e movs r0, 0xb                                          |         r0 = 0xb;
    0x0002fc30 b 0x2fb74                                             |         goto label_3;
                                                                     | label_12:
    0x0002fc32 ldrh.w r0, [fp, r3]                                   |         r0 = *((fp + r3));
    0x0002fc36 ldr r1, [sp, 0x10]                                    |         r1 = var_10h;
    0x0002fc38 strh.w r0, [lr]                                       |         *(lr) = r0;
    0x0002fc3c ldr r0, [sp, 0x20]                                    |         r0 = var_20h;
    0x0002fc3e add r1, sl                                            |         r1 += sl;
    0x0002fc40 strb.w r1, [fp, r0]                                   |         *((fp + r0)) = r1;
    0x0002fc44 b 0x2fc0a                                             |         
                                                                     |     } while (1);
                                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x30258 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
                                                                 |                                ((n & 0x0000ff00) <<  8) | \
                                                                 |                                ((n & 0x00ff0000) >>  8) | \
                                                                 |                                ((n & 0xff000000) >> 24)))
                                                                 | #define SWAP64(val) ((uint64_t) (((val & 0x00000000000000ffull) << 56) | \
                                                                 |                                  ((val & 0x000000000000ff00ull) << 40) | \
                                                                 |                                  ((val & 0x0000000000ff0000ull) << 24) | \
                                                                 |                                  ((val & 0x00000000ff000000ull) <<  8) | \
                                                                 |                                  ((val & 0x000000ff00000000ull) >>  8) | \
                                                                 |                                  ((val & 0x0000ff0000000000ull) >> 24) | \
                                                                 |                                  ((val & 0x00ff000000000000ull) >> 40) | \
                                                                 |                                  ((val & 0xff00000000000000ull) >> 56)))
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00030258 ()                                      | void fcn_00030258 (int16_t arg_0h, int16_t arg_1h, int16_t arg_4h, int16_t arg_20h, int16_t arg_2bh, int16_t arg_2ch, int16_t arg_2eh, int16_t arg_34h, int16_t arg1, int16_t arg2, int16_t arg3, uint32_t arg4) {
                                                                 |     int16_t var_23h;
                                                                 |     int16_t var_bp_ch;
                                                                 |     int16_t var_1h;
                                                                 |     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;
                                                                 |     int32_t var_28h_2;
                                                                 |     int16_t var_38h;
                                                                 |     int32_t var_38h_2;
                                                                 |     int16_t var_40h;
                                                                 |     int16_t var_44h;
                                                                 |     int16_t var_46h;
                                                                 |     int16_t var_54h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00030258 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x0003025c mov fp, r1                                        |     
    0x0003025e ldr r1, [pc, 0x3a0]                               |     
    0x00030260 mov sl, r2                                        |     sl = r2;
    0x00030262 ldr r6, [r2, 8]                                   |     r6 = *((r2 + 8));
    0x00030264 ldr r2, [pc, 0x39c]                               |     r2 = *(0x30604);
    0x00030266 add r1, pc                                        |     r1 = 0x6086c;
    0x00030268 vpush {d8}                                        |     __asm ("vpush {d8}");
    0x0003026c sub sp, 0x5c                                      |     
    0x0003026e str r0, [sp, 4]                                   |     var_4h = r0;
    0x00030270 ldr r2, [r1, r2]                                  |     
    0x00030272 ldrb.w r4, [fp]                                   |     r4 = *(fp);
    0x00030276 ldr r2, [r2]                                      |     r2 = *(0x6086c);
    0x00030278 str r2, [sp, 0x54]                                |     var_54h = r2;
    0x0003027a mov.w r2, 0                                       |     r2 = 0;
    0x0003027e ldr.w r2, [sl]                                    |     r2 = *(sl);
    0x00030282 str r2, [sp, 0x10]                                |     var_10h = r2;
    0x00030284 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00030286 beq.w 0x304ba                                     |         goto label_38;
                                                                 |     }
    0x0003028a ldrb.w r2, [fp, 1]                                |     r2 = *(arg_1h);
    0x0003028e lsls r5, r2, 0x18                                 |     r5 = r2 << 0x18;
    0x00030290 it pl                                             |     
                                                                 |     if (r5 < r2) {
    0x00030292 movpl r7, 2                                       |         r7 = 2;
                                                                 |     }
                                                                 |     if (r5 < r2) {
    0x00030294 bmi.w 0x305aa                                     |         goto label_39;
                                                                 |     }
                                                                 | label_14:
    0x00030298 cmp r2, 0xb                                       |     
    0x0003029a str r4, [sp, 0x20]                                |     var_20h = r4;
    0x0003029c itt hi                                            |     
                                                                 |     if (r2 <= 0xb) {
    0x0003029e subhi r2, 0xc                                     |         r2 -= 0xc;
                                                                 |     }
                                                                 |     if (r2 <= 0xb) {
    0x000302a0 lsrhi r2, r2, 1                                   |         r2 >>= 1;
                                                                 |     }
                                                                 |     if (r2 < 0xb) {
    0x000302a2 bls.w 0x30594                                     |         goto label_40;
                                                                 |     }
                                                                 | label_12:
    0x000302a6 add.w sb, r4, r2                                  |     sb = r4 + r2;
    0x000302aa adds r6, 0x28                                     |     r6 += 0x28;
    0x000302ac mov.w r8, 1                                       |     r8 = 1;
                                                                 | label_5:
    0x000302b0 ldr r3, [pc, 0x354]                               |     
    0x000302b2 add.w r8, r8, 1                                   |     r8++;
    0x000302b6 adds r6, 0x28                                     |     r6 += 0x28;
    0x000302b8 add r3, pc                                        |     r3 = 0x608c4;
    0x000302ba str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x000302bc add r3, sp, 0x24                                  |     r3 += var_24h;
    0x000302be str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x000302c0 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x000302c2 adds r3, 0x10                                     |     r3 += 0x10;
    0x000302c4 str r3, [sp, 0x14]                                |     var_14h = r3;
                                                                 | label_0:
    0x000302c6 ldrh r2, [r6, -0xc]                               |     r2 = *((r6 - 0xc));
    0x000302ca add.w r3, r8, -1                                  |     r3 = r8 + -1;
    0x000302ce ldrb.w r5, [fp, r7]                               |     r5 = *((fp + r7));
    0x000302d2 sub.w r4, r6, 0x28                                |     r4 = r6 - 0x28;
    0x000302d6 add.w r0, fp, r7                                  |     r0 = fp + r7;
    0x000302da str r3, [sp, 8]                                   |     var_8h = r3;
    0x000302dc lsls r1, r2, 0x1d                                 |     r1 = r2 << 0x1d;
                                                                 |     if (r1 < r2) {
    0x000302de bpl 0x3031a                                       |         
    0x000302e0 cmp r5, 0xb                                       |         
    0x000302e2 mov r4, r5                                        |         r4 = r5;
    0x000302e4 str r5, [sp, 0x24]                                |         var_24h = r5;
                                                                 |         if (r5 > 0xb) {
    0x000302e6 bhi.w 0x30516                                     |             goto label_10;
                                                                 |         }
    0x000302ea cmp r5, 0                                         |         
                                                                 |         if (r5 == 0) {
    0x000302ec beq.w 0x304ae                                     |             goto label_7;
                                                                 |         }
    0x000302f0 cmp r5, 7                                         |         
    0x000302f2 ldrd r0, r1, [r6, -0x18]                          |         __asm ("ldrd r0, r1, [r6, -0x18]");
    0x000302f6 add.w r2, fp, sb                                  |         r2 = fp + sb;
                                                                 |         if (r5 == 7) {
    0x000302fa beq.w 0x30488                                     |             goto label_41;
                                                                 |         }
    0x000302fe add.w ip, r5, -1                                  |         
    0x00030302 cmp.w ip, 5                                       |         
                                                                 |         if (ip > 5) {
    0x00030306 bhi.w 0x305f4                                     |             goto label_42;
                                                                 |         }
                                                                 |         /* switch table (7 cases) at 0x3030e */
    0x0003030a tbh [pc, ip, lsl 1]                               |         __asm ("tbh [pc, ip, lsl 1]");
                                                                 |     }
    0x0003031a lsls r3, r2, 0x1c                                 |     r3 = r2 << 0x1c;
                                                                 |     if (r3 >= r2) {
    0x0003031c bpl 0x303b2                                       |         goto label_43;
                                                                 |     }
    0x0003031e cmp r5, 0xb                                       |     
    0x00030320 mov r4, r5                                        |     r4 = r5;
    0x00030322 str r5, [sp, 0x24]                                |     var_24h = r5;
                                                                 |     if (r5 > 0xb) {
    0x00030324 bhi.w 0x30516                                     |         goto label_10;
                                                                 |     }
    0x00030328 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x0003032a beq.w 0x304ae                                     |         goto label_7;
                                                                 |     }
    0x0003032e add r2, sp, 0x28                                  |     r2 += var_28h;
    0x00030330 mov r1, r5                                        |     r1 = r5;
    0x00030332 add.w r0, fp, sb                                  |     r0 = fp + sb;
    0x00030336 vldr d8, [r6, -0x20]                              |     __asm ("vldr d8, [r6, -0x20]");
    0x0003033a bl 0xbe30                                         |     fcn_0000be30 (r0, r1, r2);
    0x0003033e cmp r5, 7                                         |     
                                                                 |     if (r5 == 7) {
    0x00030340 beq.w 0x304b4                                     |         goto label_44;
                                                                 |     }
    0x00030344 ldrd r0, r1, [sp, 0x38]                           |     __asm ("ldrd r0, r1, [var_38h]");
    0x00030348 bl 0x5e4a4                                        |     r0 = fcn_0005e4a4 (r0, r1, r2);
    0x0003034c vmov d16, r0, r1                                  |     __asm ("vmov d16, r0, r1");
                                                                 | label_4:
    0x00030350 vcmpe.f64 d16, d8                                 |     __asm ("vcmpe.f64 d16, d8");
    0x00030354 vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
                                                                 |     if (r5 < 7) {
    0x00030358 bmi.w 0x304ae                                     |         goto label_7;
                                                                 |     }
                                                                 |     if (r5 > 7) {
                                                                 | label_2:
    0x0003035c bgt.w 0x30516                                     |         goto label_10;
                                                                 |     }
                                                                 | label_8:
    0x00030360 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00030362 add r5, r3                                        |     r5 += r3;
    0x00030364 ldrb.w r2, [r5, 0xa6c]                            |     r2 = *((r5 + 0xa6c));
                                                                 | label_1:
    0x00030368 add sb, r2                                        |     sb += r2;
    0x0003036a movs r2, 0                                        |     r2 = 0;
    0x0003036c mov r1, r2                                        |     r1 = r2;
                                                                 |     do {
    0x0003036e lsrs r4, r4, 7                                    |         r4 >>= 7;
    0x00030370 adds r1, 1                                        |         r1++;
    0x00030372 cmp r1, 8                                         |         
    0x00030374 orr.w r4, r4, r2, lsl 25                          |         r4 |= (r2 << 25);
    0x00030378 lsr.w r2, r2, 7                                   |         r2 >>= 7;
    0x0003037c orr.w r0, r4, r2                                  |         r0 = r4 | r2;
    0x00030380 ite gt                                            |         
                                                                 |         if (r1 <= 8) {
    0x00030382 movgt r3, 0                                       |             r3 = 0;
                                                                 |         }
                                                                 |         if (r1 > 8) {
    0x00030384 movle r3, 1                                       |             r3 = 1;
                                                                 |         }
    0x00030386 cmp r0, 0                                         |         
    0x00030388 it eq                                             |         
                                                                 |         if (r0 != 0) {
    0x0003038a moveq r3, 0                                       |             r3 = 0;
                                                                 |         }
    0x0003038c cmp r3, 0                                         |         
    0x0003038e bne 0x3036e                                       |         
                                                                 |     } while (r3 != 0);
    0x00030390 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00030392 add r7, r1                                        |     r7 += r1;
    0x00030394 cmp r2, r7                                        |     
                                                                 |     if (r2 < r7) {
    0x00030396 bls 0x303ac                                       |         goto label_45;
                                                                 |     }
    0x00030398 ldrh.w r2, [sl, 4]                                |     r2 = *((sl + 4));
    0x0003039c cmp r2, r8                                        |     
                                                                 |     if (r2 <= r8) {
    0x0003039e ble 0x303ac                                       |         goto label_45;
                                                                 |     }
    0x000303a0 ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x000303a2 add.w r8, r8, 1                                   |     r8++;
    0x000303a6 adds r6, 0x28                                     |     r6 += 0x28;
    0x000303a8 cmp r3, sb                                        |     
                                                                 |     if (r3 >= sb) {
    0x000303aa bhs 0x302c6                                       |         goto label_0;
                                                                 |     }
                                                                 | label_45:
    0x000303ac ldrsb.w r0, [sl, 6]                               |     r0 = *((sl + 6));
    0x000303b0 b 0x30468                                         |     goto label_6;
                                                                 | label_43:
    0x000303b2 lsls r1, r2, 0x1e                                 |     r1 = r2 << 0x1e;
                                                                 |     if (r1 < r2) {
    0x000303b4 bpl 0x30414                                       |         
    0x000303b6 lsls r3, r5, 0x18                                 |         r3 = r5 << 0x18;
    0x000303b8 it pl                                             |         
                                                                 |         if (r3 < r5) {
    0x000303ba strpl r5, [sp, 0x24]                              |             var_24h = r5;
                                                                 |         }
                                                                 |         if (r3 < r5) {
    0x000303bc bmi.w 0x305a0                                     |             goto label_46;
                                                                 |         }
                                                                 | label_13:
    0x000303c0 cmp r5, 0xb                                       |         
                                                                 |         if (r5 < 0xb) {
    0x000303c2 bls 0x304ae                                       |             goto label_7;
                                                                 |         }
    0x000303c4 lsls r1, r5, 0x1f                                 |         r1 = r5 << 0x1f;
                                                                 |         if (r1 >= r5) {
    0x000303c6 bpl.w 0x30516                                     |             goto label_10;
                                                                 |         }
    0x000303ca subs r5, 0xc                                      |         r5 -= 0xc;
    0x000303cc ldr r3, [sp, 4]                                   |         r3 = var_4h;
    0x000303ce lsrs r5, r5, 1                                    |         r5 >>= 1;
    0x000303d0 add.w r2, r5, sb                                  |         r2 = r5 + sb;
    0x000303d4 str r5, [sp, 0x40]                                |         var_40h = r5;
    0x000303d6 cmp r2, r3                                        |         
                                                                 |         if (r2 > r3) {
    0x000303d8 bhi.w 0x305d4                                     |             goto label_47;
                                                                 |         }
    0x000303dc ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x000303de add.w r0, fp, sb                                  |         r0 = fp + sb;
    0x000303e2 ldr.w r2, [r3, r8, lsl 2]                         |         offset_0 = r8 << 2;
                                                                 |         r2 = *((r3 + offset_0));
    0x000303e6 cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x000303e8 beq.w 0x30576                                     |             goto label_48;
                                                                 |         }
    0x000303ec ldr r3, [sp, 0x10]                                |         r3 = var_10h;
    0x000303ee mov r1, r4                                        |         r1 = r4;
    0x000303f0 ldrb r4, [r3, 4]                                  |         r4 = *((r3 + 4));
    0x000303f2 strb.w r4, [sp, 0x46]                             |         var_46h = r4;
    0x000303f6 ldr r4, [r3, 0xc]                                 |         r4 = *((r3 + 0xc));
    0x000303f8 strd r4, r0, [sp, 0x28]                           |         __asm ("strd r4, r0, [var_28h]");
    0x000303fc movs r0, 2                                        |         r0 = 2;
    0x000303fe strh.w r0, [sp, 0x44]                             |         var_44h = r0;
    0x00030402 add r0, sp, 0x28                                  |         r0 += var_28h;
    0x00030404 bl 0x21a80                                        |         r0 = fcn_00021a80 (r0, r1, r2);
                                                                 |         if (r0 != 0) {
                                                                 | label_11:
    0x00030408 cbnz r0, 0x3045c                                  |             goto label_3;
                                                                 |         }
    0x0003040a ldr r4, [sp, 0x24]                                |         r4 = var_24h;
    0x0003040c sub.w r2, r4, 0xc                                 |         r2 = r4 - 0xc;
    0x00030410 lsrs r2, r2, 1                                    |         r2 >>= 1;
    0x00030412 b 0x30368                                         |         goto label_1;
                                                                 |     }
    0x00030414 lsls r2, r2, 0x1b                                 |     r2 <<= 0x1b;
                                                                 |     if (r2 >= r2) {
    0x00030416 bpl.w 0x3056a                                     |         goto label_49;
                                                                 |     }
    0x0003041a lsls r3, r5, 0x18                                 |     r3 = r5 << 0x18;
    0x0003041c it pl                                             |     
                                                                 |     if (r3 < r5) {
    0x0003041e strpl r5, [sp, 0x24]                              |         var_24h = r5;
                                                                 |     }
                                                                 |     if (r3 < r5) {
    0x00030420 bmi.w 0x305ca                                     |         goto label_50;
                                                                 |     }
                                                                 | label_16:
    0x00030424 cmp r5, 0xb                                       |     
                                                                 |     if (r5 < 0xb) {
    0x00030426 bls 0x304ae                                       |         goto label_7;
                                                                 |     }
    0x00030428 ands r4, r5, 1                                    |     r4 = r5 & 1;
                                                                 |     if (r4 != r5) {
    0x0003042c bne 0x304ae                                       |         goto label_7;
                                                                 |     }
    0x0003042e subs r5, 0xc                                      |     r5 -= 0xc;
    0x00030430 ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x00030432 lsrs r5, r5, 1                                    |     r5 >>= 1;
    0x00030434 add.w r2, r5, sb                                  |     r2 = r5 + sb;
    0x00030438 cmp r2, r3                                        |     
                                                                 |     if (r2 > r3) {
    0x0003043a bhi.w 0x305e2                                     |         goto label_51;
                                                                 |     }
    0x0003043e ldr r4, [r6, -0x10]                               |     r4 = *((r6 - 0x10));
    0x00030442 add.w r0, fp, sb                                  |     r0 = fp + sb;
    0x00030446 ldr r1, [r6, -0x24]                               |     r1 = *((r6 - 0x24));
    0x0003044a cmp r4, r5                                        |     
    0x0003044c mov r2, r4                                        |     r2 = r4;
    0x0003044e it ge                                             |     
                                                                 |     if (r4 < r5) {
    0x00030450 movge r2, r5                                      |         r2 = r5;
                                                                 |     }
    0x00030452 blx 0x5e6c                                        |     r0 = fcn_00005e6c ();
    0x00030456 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00030458 beq.w 0x30590                                     |         goto label_52;
                                                                 |     }
                                                                 | label_3:
    0x0003045c ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0003045e ldr r2, [sp, 8]                                   |     r2 = var_8h;
    0x00030460 ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x00030462 ldrb r3, [r3, r2]                                 |     r3 = *((r3 + r2));
                                                                 |     if (r3 != 0) {
    0x00030464 cbz r3, 0x30468                                   |         
    0x00030466 rsbs r0, r0, 0                                    |         r0 -= ;
                                                                 |     }
                                                                 | label_6:
    0x00030468 ldr r2, [pc, 0x1a0]                               |     
    0x0003046a ldr r3, [pc, 0x198]                               |     r3 = *(0x30606);
    0x0003046c add r2, pc                                        |     r2 = 0x60a7c;
    0x0003046e ldr r3, [r2, r3]                                  |     r3 = *(0x60a7c);
    0x00030470 ldr r2, [r3]                                      |     r2 = *(0x60a7c);
    0x00030472 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x00030474 eors r2, r3                                       |     r2 ^= r3;
    0x00030476 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x0003047a bne.w 0x305f0                                     |         goto label_53;
                                                                 |     }
    0x0003047e add sp, 0x5c                                      |     
    0x00030480 vpop {d8}                                         |     __asm ("vpop {d8}");
    0x00030484 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_41:
    0x00030488 str r2, [sp, 0x18]                                |     var_18h = r2;
    0x0003048a bl 0x5e4a4                                        |     fcn_0005e4a4 (r0, r1, r2);
    0x0003048e ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00030490 vmov d8, r0, r1                                   |     __asm ("vmov d8, r0, r1");
    0x00030494 mov r1, r5                                        |     r1 = r5;
    0x00030496 mov r0, r2                                        |     r0 = r2;
    0x00030498 add r2, sp, 0x28                                  |     r2 += var_28h;
    0x0003049a bl 0xbe30                                         |     fcn_0000be30 (r0, r1, r2);
    0x0003049e vldr d16, [sp, 0x30]                              |     __asm ("vldr d16, [sp, 0x30]");
    0x000304a2 vcmpe.f64 d16, d8                                 |     __asm ("vcmpe.f64 d16, d8");
    0x000304a6 vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
                                                                 |     if (r2 >= r3) {
    0x000304aa bpl.w 0x3035c                                     |         goto label_2;
                                                                 |     }
                                                                 | label_7:
    0x000304ae mov.w r0, -1                                      |     r0 = -1;
    0x000304b2 b 0x3045c                                         |     goto label_3;
                                                                 | label_44:
    0x000304b4 vldr d16, [sp, 0x30]                              |     __asm ("vldr d16, [sp, 0x30]");
    0x000304b8 b 0x30350                                         |     goto label_4;
                                                                 | label_38:
    0x000304ba lsls r0, r4, 0x18                                 |     r0 = r4 << 0x18;
    0x000304bc mov r8, r3                                        |     r8 = r3;
                                                                 |     if (r0 < r4) {
    0x000304be bmi 0x305ba                                       |         goto label_54;
                                                                 |     }
    0x000304c0 mov sb, r4                                        |     sb = r4;
    0x000304c2 movs r7, 1                                        |     r7 = 1;
    0x000304c4 str r4, [sp, 0x20]                                |     var_20h = r4;
                                                                 | label_15:
    0x000304c6 ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x000304c8 cmp r3, sb                                        |     
                                                                 |     if (r3 >= sb) {
    0x000304ca bhs.w 0x302b0                                     |         goto label_5;
                                                                 |     }
    0x000304ce blx 0x5fe8                                        |     fcn_00005fe8 ();
    0x000304d2 ldr r1, [pc, 0x13c]                               |     
    0x000304d4 movw r2, 0xbf9                                    |     r2 = 0xbf9;
    0x000304d8 add r1, pc                                        |     r1 = 0x60aee;
                                                                 | label_17:
    0x000304da add.w r3, r0, 0x14                                |     r3 = r0 + 0x14;
    0x000304de movt r2, 1                                        |     r2 = (r2 & 0xFFFF) | 0x10000;
    0x000304e2 movs r0, 0xb                                      |     r0 = 0xb;
    0x000304e4 blx 0x6820                                        |     fcn_00006820 ();
    0x000304e8 movs r3, 0xb                                      |     r3 = 0xb;
    0x000304ea movs r0, 0                                        |     r0 = 0;
    0x000304ec strb.w r3, [sl, 7]                                |     *((sl + 7)) = r3;
    0x000304f0 b 0x30468                                         |     goto label_6;
    0x000304f2 vld1.64 {d7}, [r2]                                |     __asm ("vld1.64 {d7}, [r2]");
    0x000304f6 vmov r3, s15                                      |     __asm ("vmov r3, s15");
    0x000304fa rev r2, r3                                        |     r3 = SWAP32 (r2);
    0x000304fc vmov r3, s14                                      |     __asm ("vmov r3, s14");
    0x00030500 rev.w ip, r3                                      |     r3 = SWAPundefined (ip);
                                                                 | label_9:
    0x00030504 cmp r2, r0                                        |     
    0x00030506 sbcs.w lr, ip, r1                                 |     __asm ("sbcs.w lr, ip, r1");
                                                                 |     if (r2 < r0) {
    0x0003050a blt 0x304ae                                       |         goto label_7;
                                                                 |     }
    0x0003050c cmp r0, r2                                        |     
    0x0003050e sbcs.w ip, r1, ip                                 |     __asm ("sbcs.w ip, r1, ip");
                                                                 |     if (r0 >= r2) {
    0x00030512 bge.w 0x30360                                     |         goto label_8;
                                                                 |     }
                                                                 | label_10:
    0x00030516 movs r0, 1                                        |     r0 = 1;
    0x00030518 b 0x3045c                                         |     goto label_3;
    0x0003051a ldrsb.w lr, [r2]                                  |     
    0x0003051e ldrb.w ip, [r2, 1]                                |     ip = *((r2 + 1));
    0x00030522 ldr.w r2, [r2, 2]                                 |     r2 = *((r2 + 2));
    0x00030526 orr.w ip, ip, lr, lsl 8                           |     
    0x0003052a rev r2, r2                                        |     r2 = SWAP32 (r2);
    0x0003052c b 0x30504                                         |     goto label_9;
    0x0003052e ldr r2, [r2]                                      |     r2 = *(r2);
    0x00030530 rev r2, r2                                        |     r2 = SWAP32 (r2);
    0x00030532 asr.w ip, r2, 0x1f                                |     
    0x00030536 b 0x30504                                         |     goto label_9;
    0x00030538 ldrh.w lr, [r2, 1]                                |     
    0x0003053c ldrsb.w ip, [r2]                                  |     ip = *(r2);
    0x00030540 rev16.w r2, lr                                    |     __asm ("rev16.w r2, lr");
    0x00030544 uxth r2, r2                                       |     r2 = (int16_t) r2;
    0x00030546 orr.w r2, r2, ip, lsl 16                          |     r2 |= (ip << 16);
    0x0003054a asr.w ip, r2, 0x1f                                |     
    0x0003054e b 0x30504                                         |     goto label_9;
    0x00030550 ldrsb.w ip, [r2]                                  |     ip = *(r2);
    0x00030554 ldrb r2, [r2, 1]                                  |     r2 = *((r2 + 1));
    0x00030556 orr.w r2, r2, ip, lsl 8                           |     r2 |= (ip << 8);
    0x0003055a asr.w ip, r2, 0x1f                                |     
    0x0003055e b 0x30504                                         |     goto label_9;
    0x00030560 ldrsb.w r2, [r2]                                  |     r2 = *(r2);
    0x00030564 asr.w ip, r2, 0x1f                                |     
    0x00030568 b 0x30504                                         |     goto label_9;
                                                                 | label_49:
    0x0003056a mov r4, r5                                        |     r4 = r5;
    0x0003056c str r5, [sp, 0x24]                                |     var_24h = r5;
    0x0003056e cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00030570 beq.w 0x30360                                     |         goto label_8;
                                                                 |     }
    0x00030574 b 0x30516                                         |     goto label_10;
                                                                 | label_48:
    0x00030576 ldr r4, [r6, -0x10]                               |     r4 = *((r6 - 0x10));
    0x0003057a mov r2, r5                                        |     r2 = r5;
    0x0003057c ldr r1, [r6, -0x24]                               |     r1 = *((r6 - 0x24));
    0x00030580 cmp r5, r4                                        |     
    0x00030582 it ge                                             |     
                                                                 |     if (r5 < r4) {
    0x00030584 movge r2, r4                                      |         r2 = r4;
                                                                 |     }
    0x00030586 blx 0x5e6c                                        |     r0 = fcn_00005e6c ();
    0x0003058a cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0003058c bne.w 0x3045c                                     |         goto label_3;
                                                                 |     }
                                                                 | label_52:
    0x00030590 subs r0, r5, r4                                   |     r0 = r5 - r4;
    0x00030592 b 0x30408                                         |     goto label_11;
                                                                 | label_40:
    0x00030594 ldr r1, [pc, 0x7c]                                |     
    0x00030596 add r1, pc                                        |     r1 = 0x60bae;
    0x00030598 add r2, r1                                        |     r2 += r1;
    0x0003059a ldrb.w r2, [r2, 0xa6c]                            |     r2 = *((r2 + 0xa6c));
    0x0003059e b 0x302a6                                         |     goto label_12;
                                                                 | label_46:
    0x000305a0 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x000305a2 bl 0x9d84                                         |     fcn_00009d84 (r0, r1);
    0x000305a6 ldr r5, [sp, 0x24]                                |     r5 = var_24h;
    0x000305a8 b 0x303c0                                         |     goto label_13;
                                                                 | label_39:
    0x000305aa add r1, sp, 0x28                                  |     r1 += var_28h;
    0x000305ac add.w r0, fp, 1                                   |     r0 += arg_1h;
    0x000305b0 bl 0x9d84                                         |     fcn_00009d84 (r0, r1);
    0x000305b4 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x000305b6 adds r7, r0, 1                                    |     r7 = r0 + 1;
    0x000305b8 b 0x30298                                         |     goto label_14;
                                                                 | label_54:
    0x000305ba add r1, sp, 0x20                                  |     r1 += var_20h;
    0x000305bc mov r0, fp                                        |     r0 = fp;
    0x000305be bl 0x9d84                                         |     fcn_00009d84 (r0, r1);
    0x000305c2 ldr.w sb, [sp, 0x20]                              |     sb = var_20h;
    0x000305c6 mov r7, r0                                        |     r7 = r0;
    0x000305c8 b 0x304c6                                         |     goto label_15;
                                                                 | label_50:
    0x000305ca ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x000305cc bl 0x9d84                                         |     fcn_00009d84 (r0, r1);
    0x000305d0 ldr r5, [sp, 0x24]                                |     r5 = var_24h;
    0x000305d2 b 0x30424                                         |     goto label_16;
                                                                 | label_47:
    0x000305d4 blx 0x5fe8                                        |     fcn_00005fe8 ();
    0x000305d8 ldr r1, [pc, 0x3c]                                |     
    0x000305da movw r2, 0xc48                                    |     r2 = 0xc48;
    0x000305de add r1, pc                                        |     r1 = 0x60bfa;
    0x000305e0 b 0x304da                                         |     goto label_17;
                                                                 | label_51:
    0x000305e2 blx 0x5fe8                                        |     fcn_00005fe8 ();
    0x000305e6 ldr r1, [pc, 0x34]                                |     
    0x000305e8 movw r2, 0xc63                                    |     r2 = 0xc63;
    0x000305ec add r1, pc                                        |     r1 = 0x60c0e;
    0x000305ee b 0x304da                                         |     goto label_17;
                                                                 | label_53:
    0x000305f0 blx 0x6498                                        |     fcn_00006498 ();
                                                                 | label_42:
    0x000305f4 sub.w r2, r5, 8                                   |     r2 = r5 - 8;
    0x000305f8 mov.w ip, 0                                       |     
    0x000305fc b 0x30504                                         |     goto label_9;
                                                                 |     do {
                                                                 | label_18:
    0x00030c1c ldrb r3, [r6, 9]                                  |         r3 = *((r6 + 9));
                                                                 |         if (r3 != 0) {
    0x00030c1e cbz r3, 0x30c2c                                   |             
    0x00030c20 ldr r4, [r6, 0xc]                                 |             r4 = *((r6 + 0xc));
    0x00030c22 subs r4, 1                                        |             r4--;
    0x00030c24 str r4, [r6, 0xc]                                 |             *((r6 + 0xc)) = r4;
    0x00030c26 cmp r4, 0                                         |             
                                                                 |             if (r4 == 0) {
    0x00030c28 beq.w 0x30f64                                     |                 goto label_55;
                                                                 |             }
                                                                 |         }
                                                                 | label_25:
    0x00030c2c ldr.w r2, [pc, 0x610]                             |         
    0x00030c30 ldr.w r3, [pc, 0x608]                             |         r3 = *(0x3123c);
    0x00030c34 add r2, pc                                        |         r2 = 0x61e78;
    0x00030c36 ldr r3, [r2, r3]                                  |         r3 = *(0x61e78);
    0x00030c38 ldr r2, [r3]                                      |         r2 = *(0x61e78);
    0x00030c3a ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x00030c3c eors r2, r3                                       |         r2 ^= r3;
    0x00030c3e mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00030c42 bne.w 0x31232                                     |             goto label_56;
                                                                 |         }
    0x00030c46 mov r0, r5                                        |         r0 = r5;
    0x00030c48 add sp, 0x1c                                      |         
    0x00030c4a vpop {d8}                                         |         __asm ("vpop {d8}");
    0x00030c4e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_21:
    0x00030cae ldr r3, [r4, 0xc]                                 |         r3 = *((r4 + 0xc));
    0x00030cb0 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00030cb2 beq.w 0x30dd6                                     |             goto label_57;
                                                                 |         }
    0x00030cb6 subs.w r8, r7, 0                                  |         r8 = r7 - 0;
    0x00030cba it ne                                             |         
                                                                 |         if (r8 == r7) {
    0x00030cbc movne r8, 1                                       |             r8 = 1;
                                                                 |         }
    0x00030cc0 cmp r5, 0                                         |         
    0x00030cc2 ite ne                                            |         
                                                                 |         if (r5 == 0) {
    0x00030cc4 movne sb, 0                                       |             sb = 0;
                                                                 |         }
                                                                 |         if (r5 == 0) {
    0x00030cc8 and sb, r8, 1                                     |             sb = r8 & 1;
                                                                 |         }
    0x00030ccc cmp.w sb, 0                                       |         
                                                                 |         if (sb == 0) {
    0x00030cd0 beq 0x30d5a                                       |             goto label_58;
                                                                 |         }
    0x00030cd2 ldrh r2, [r4, 0x16]                               |         r2 = *((r4 + 0x16));
    0x00030cd4 lsls r1, r2, 0x1f                                 |         r1 = r2 << 0x1f;
                                                                 |         if (r1 >= r2) {
    0x00030cd6 bpl 0x30d22                                       |             goto label_59;
                                                                 |         }
    0x00030cd8 ldrb r2, [r4, 0x14]                               |         r2 = *((r4 + 0x14));
    0x00030cda cmp r2, 0                                         |         
                                                                 |         if (r2 != 0) {
    0x00030cdc bne.w 0x30e20                                     |             goto label_32;
                                                                 |         }
    0x00030ce0 movs r5, 8                                        |         r5 = 8;
    0x00030ce2 mov r8, r5                                        |         r8 = r5;
                                                                 | label_20:
    0x00030ce4 ldr r0, [r3, 0x44]                                |         r0 = *((r3 + 0x44));
    0x00030ce6 bl 0x2bd94                                        |         fcn_0002bd94 (r0);
    0x00030cea movs r3, 0                                        |         r3 = 0;
    0x00030cec str r3, [r4, 0xc]                                 |         *((r4 + 0xc)) = r3;
                                                                 | label_19:
    0x00030cee cmp.w r8, 5                                       |         
    0x00030cf2 bne 0x30c1c                                       |         
                                                                 |     } while (r8 != 5);
                                                                 | label_24:
    0x00030cf4 ldrb r2, [r4, 0x14]                               |     r2 = *((r4 + 0x14));
    0x00030cf6 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00030cf8 bne 0x30c1c                                       |         goto label_18;
                                                                 |     }
                                                                 | label_23:
    0x00030cfa ldr.w r8, [r4, 4]                                 |     r8 = *((r4 + 4));
    0x00030cfe ldr.w r3, [r8, 0x1b4]                             |     r3 = *((r8 + 0x1b4));
    0x00030d02 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00030d04 beq 0x30c1c                                       |         goto label_18;
                                                                 |     }
    0x00030d06 ldr.w r1, [r8, 0x1bc]                             |     r1 = *((r8 + 0x1bc));
    0x00030d0a cmp r1, 0                                         |     
                                                                 |     if (r1 < 0) {
    0x00030d0c blt 0x30c1c                                       |         goto label_18;
                                                                 |     }
    0x00030d0e ldr.w r0, [r8, 0x1b8]                             |     r0 = *((r8 + 0x1b8));
    0x00030d12 blx r3                                            |     r0 = uint32_t (*r3)(uint32_t) (r0);
    0x00030d14 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00030d16 bne 0x30df4                                       |         goto label_60;
                                                                 |     }
    0x00030d18 mov.w r3, -1                                      |     r3 = -1;
    0x00030d1c str.w r3, [r8, 0x1bc]                             |     __asm ("str.w r3, aav.0x000000ff");
    0x00030d20 b 0x30c1c                                         |     goto label_18;
                                                                 | label_59:
    0x00030d22 ldr.w sl, [r4]                                    |     sl = *(r4);
    0x00030d26 ldr.w r5, [sl, 0x28]                              |     r5 = *((sl + 0x28));
    0x00030d2a cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x00030d2c bne.w 0x30f70                                     |         goto label_61;
                                                                 |     }
    0x00030d30 ldr r3, [r6]                                      |     r3 = *(r6);
    0x00030d32 ldrb.w r3, [r3, 0x3f]                             |     r3 = *((r3 + 0x3f));
    0x00030d36 subs r3, 1                                        |     r3--;
    0x00030d38 it ne                                             |     
                                                                 |     if (r3 == 1) {
    0x00030d3a movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x00030d3c strb.w r3, [sl, 0x15]                             |     *((sl + 0x15)) = r3;
    0x00030d40 ldrb.w r3, [sl, 0x10]                             |     r3 = *((sl + 0x10));
    0x00030d44 cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x00030d46 beq.w 0x30ee0                                     |         goto label_62;
                                                                 |     }
                                                                 | label_31:
    0x00030d4a ldr r3, [r4, 0x2c]                                |     r3 = *((r4 + 0x2c));
    0x00030d4c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00030d4e bne.w 0x30f7e                                     |         goto label_63;
                                                                 |     }
    0x00030d52 mov r0, r4                                        |     r0 = r4;
    0x00030d54 bl 0x2bfb4                                        |     r0 = fcn_0002bfb4 (r0, r1);
    0x00030d58 mov r5, r0                                        |     r5 = r0;
                                                                 | label_58:
    0x00030d5a cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x00030d5c bne 0x30de0                                       |         goto label_22;
                                                                 |     }
                                                                 | label_26:
    0x00030d5e ldrb r3, [r6, 8]                                  |     r3 = *((r6 + 8));
                                                                 |     if (r3 == 0) {
    0x00030d60 cbnz r3, 0x30d70                                  |         
    0x00030d62 ldr r3, [r4, 0x28]                                |         r3 = *((r4 + 0x28));
    0x00030d64 adds r3, 1                                        |         r3++;
    0x00030d66 str r3, [r4, 0x28]                                |         *((r4 + 0x28)) = r3;
    0x00030d68 ldrb r3, [r6, 9]                                  |         r3 = *((r6 + 9));
    0x00030d6a cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x00030d6c bne.w 0x30f88                                     |             goto label_64;
                                                                 |         }
                                                                 |     }
                                                                 | label_27:
    0x00030d70 ldrb r3, [r4, 0x14]                               |     r3 = *((r4 + 0x14));
    0x00030d72 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x00030d76 beq.w 0x30ed4                                     |         goto label_65;
                                                                 |     }
    0x00030d7a movs r2, 2                                        |     r2 = 2;
    0x00030d7c cmp r3, 1                                         |     
    0x00030d7e strb r2, [r6, 8]                                  |     *((r6 + 8)) = r2;
    0x00030d80 ldrh r3, [r4, 0x16]                               |     r3 = *((r4 + 0x16));
    0x00030d82 ldr.w r8, [r4, 0xc]                               |     r8 = *((r4 + 0xc));
    0x00030d86 it ls                                             |     
                                                                 |     if (r3 > 1) {
    0x00030d88 strbls r2, [r4, 0x14]                             |         *((r4 + 0x14)) = r2;
                                                                 |     }
    0x00030d8a cmp r7, 1                                         |     
    0x00030d8c bic r3, r3, 0x20                                  |     r3 = BIT_MASK (r3, 0x20);
    0x00030d90 str r6, [r4, 0x4c]                                |     *((r4 + 0x4c)) = r6;
    0x00030d92 lsl.w r3, r3, 0x10                                |     r3 <<= 0x10;
    0x00030d96 ldr r2, [r4, 0x2c]                                |     r2 = *((r4 + 0x2c));
    0x00030d98 lsr.w r3, r3, 0x10                                |     r3 >>= 0x10;
    0x00030d9c it gt                                             |     
                                                                 |     if (r7 <= 1) {
    0x00030d9e orrgt r3, r3, 0x20                                |         r3 |= 0x20;
                                                                 |     }
    0x00030da2 strh r3, [r4, 0x16]                               |     *((r4 + 0x16)) = r3;
    0x00030da4 ldr.w r3, [r8, 0x38]                              |     r3 = *((r8 + 0x38));
    0x00030da8 ldr r3, [r3, 0x1c]                                |     r3 = *((r3 + 0x1c));
    0x00030daa rev r3, r3                                        |     r3 = SWAP32 (r3);
    0x00030dac cmp r2, r3                                        |     
                                                                 |     if (r2 == r3) {
    0x00030dae beq 0x30e04                                       |         goto label_66;
                                                                 |     }
    0x00030db0 ldr.w r0, [r8, 0x44]                              |     r0 = *((r8 + 0x44));
    0x00030db4 bl 0x2bdf4                                        |     r0 = fcn_0002bdf4 (r0, r1, r2);
    0x00030db8 mov r5, r0                                        |     r5 = r0;
    0x00030dba cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00030dbc bne.w 0x30c1c                                     |         goto label_18;
                                                                 |     }
    0x00030dc0 ldr r3, [r4, 0x2c]                                |     r3 = *((r4 + 0x2c));
    0x00030dc2 ldr.w r2, [r8, 0x38]                              |     r2 = *((r8 + 0x38));
    0x00030dc6 lsrs r1, r3, 0x18                                 |     r1 = r3 >> 0x18;
    0x00030dc8 strb r3, [r2, 0x1f]                               |     *((r2 + 0x1f)) = r3;
    0x00030dca strb r1, [r2, 0x1c]                               |     *((r2 + 0x1c)) = r1;
    0x00030dcc lsrs r1, r3, 0x10                                 |     r1 = r3 >> 0x10;
    0x00030dce lsrs r3, r3, 8                                    |     r3 >>= 8;
    0x00030dd0 strb r1, [r2, 0x1d]                               |     *((r2 + 0x1d)) = r1;
    0x00030dd2 strb r3, [r2, 0x1e]                               |     *((r2 + 0x1e)) = r3;
    0x00030dd4 b 0x30e04                                         |     goto label_66;
                                                                 | label_57:
    0x00030dd6 ldr r0, [r4]                                      |     r0 = *(r4);
    0x00030dd8 bl 0x2b22c                                        |     r0 = fcn_0002b22c (r0);
    0x00030ddc mov r5, r0                                        |     r5 = r0;
                                                                 |     if (r0 == 0) {
    0x00030dde cbz r0, 0x30e24                                   |         goto label_67;
                                                                 |     }
                                                                 | label_22:
    0x00030de0 ldrb r2, [r4, 0x14]                               |     r2 = *((r4 + 0x14));
    0x00030de2 uxtb.w r8, r5                                     |     r8 = (int8_t) r5;
    0x00030de6 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00030de8 bne 0x30cee                                       |         goto label_19;
                                                                 |     }
    0x00030dea ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
    0x00030dec cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00030dee beq.w 0x30cee                                     |         goto label_19;
                                                                 |     }
    0x00030df2 b 0x30ce4                                         |     goto label_20;
                                                                 | label_60:
    0x00030df4 ldr.w r3, [r8, 0x1bc]                             |     r3 = *((r8 + 0x1bc));
    0x00030df8 adds r3, 1                                        |     r3++;
    0x00030dfa str.w r3, [r8, 0x1bc]                             |     __asm ("str.w r3, aav.0x000000ff");
    0x00030dfe b 0x30cae                                         |     goto label_21;
                                                                 | label_66:
    0x00030e04 ldr r3, [r6]                                      |     r3 = *(r6);
    0x00030e06 ldr r0, [r4]                                      |     r0 = *(r4);
    0x00030e08 ldr.w r1, [r3, 0x1e8]                             |     r1 = *((r3 + 0x1e8));
    0x00030e0c bl 0x10c5c                                        |     r0 = fcn_00010c5c (r0, r1);
    0x00030e10 mov r5, r0                                        |     r5 = r0;
    0x00030e12 b 0x30c1c                                         |     goto label_18;
                                                                 | label_32:
    0x00030e20 movs r5, 8                                        |     r5 = 8;
    0x00030e22 b 0x30c1c                                         |     goto label_18;
                                                                 | label_67:
    0x00030e24 add.w sl, sp, 0x10                                |     sl += var_10h;
    0x00030e28 mov r3, r0                                        |     r3 = r0;
    0x00030e2a mov r2, sl                                        |     r2 = sl;
    0x00030e2c ldr r0, [r4]                                      |     r0 = *(r4);
    0x00030e2e movs r1, 1                                        |     r1 = 1;
    0x00030e30 bl 0x2a698                                        |     r0 = fcn_0002a698 (r0, r1, r2, r3);
    0x00030e34 mov r5, r0                                        |     r5 = r0;
    0x00030e36 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00030e38 bne 0x30de0                                       |         goto label_22;
                                                                 |     }
    0x00030e3a ldr.w fp, [sp, 0x10]                              |     fp = var_10h;
    0x00030e3e movs r3, 1                                        |     r3 = 1;
    0x00030e40 movs r2, 0x64                                     |     r2 = 0x64;
    0x00030e42 ldrd r8, sb, [fp, 4]                              |     __asm ("ldrd r8, sb, [arg_4h]");
    0x00030e46 strb.w r2, [sb, 5]                                |     *((sb + 5)) = r2;
    0x00030e4a str.w r3, [sb, 0x48]                              |     __asm ("str.w r3, [sb, 0x48]");
    0x00030e4e ldr r3, [r4]                                      |     r3 = *(r4);
    0x00030e50 str.w r8, [sb, 0x38]                              |     __asm ("str.w r8, [sb, 0x38]");
    0x00030e54 str.w fp, [sb, 0x44]                              |     __asm ("str.w fp, [sb, 0x44]");
    0x00030e58 mov r1, r3                                        |     r1 = r3;
    0x00030e5a str.w r4, [sb, 0x34]                              |     __asm ("str.w r4, [sb, 0x34]");
    0x00030e5e ldr.w r2, [r8, 0x1c]                              |     r2 = *((r8 + 0x1c));
    0x00030e62 ldr r1, [r1, 0x18]                                |     r1 = *((r1 + 0x18));
    0x00030e64 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00030e66 rev r3, r2                                        |     r2 = SWAP32 (r3);
    0x00030e68 str r1, [sp, 4]                                   |     var_4h = r1;
                                                                 |     if (r2 != 0) {
    0x00030e6a cbz r2, 0x30e7a                                   |         
    0x00030e6c ldrb.w r1, [r8, 0x18]                             |         r1 = *((r8 + 0x18));
    0x00030e70 ldrb.w r2, [r8, 0x5c]                             |         r2 = *((r8 + 0x5c));
    0x00030e74 cmp r1, r2                                        |         
                                                                 |         if (r1 == r2) {
    0x00030e76 beq.w 0x30fa8                                     |             goto label_68;
                                                                 |         }
                                                                 |     }
                                                                 | label_28:
    0x00030e7a ldr r3, [sp, 4]                                   |     r3 = var_4h;
                                                                 | label_29:
    0x00030e7c cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x00030e7e ble.w 0x31038                                     |         goto label_69;
                                                                 |     }
    0x00030e82 ldr r1, [sp]                                      |     r1 = *(sp);
    0x00030e84 movs r2, 0x10                                     |     r2 = 0x10;
    0x00030e86 mov r0, r8                                        |     r0 = r8;
    0x00030e88 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00030e8a blx 0x5e6c                                        |     r0 = fcn_00005e6c ();
    0x00030e8e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00030e90 bne.w 0x30f9a                                     |         goto label_70;
                                                                 |     }
    0x00030e94 ldrb.w r2, [r8, 0x12]                             |     r2 = *((r8 + 0x12));
    0x00030e98 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00030e9a cmp r2, 2                                         |     
    0x00030e9c ittt hi                                           |     
                                                                 |     if (r2 > 2) {
    0x00030e9e ldrhhi r2, [r4, 0x16]                             |         __asm ("ldrhhi r2, [r4, 0x16]");
                                                                 |     }
                                                                 |     if (r2 <= 2) {
    0x00030ea0 orrhi r2, r2, 1                                   |         r2 |= 1;
                                                                 |     }
                                                                 |     if (r2 > 2) {
    0x00030ea4 strh r2, [r4, 0x16]                               |         *((r4 + 0x16)) = r2;
                                                                 |     }
    0x00030ea6 ldrb.w r2, [r8, 0x13]                             |     r2 = *((r8 + 0x13));
    0x00030eaa cmp r2, 2                                         |     
                                                                 |     if (r2 > 2) {
    0x00030eac bhi 0x30f9a                                       |         goto label_70;
                                                                 |     }
                                                                 |     if (r2 == 2) {
    0x00030eae beq.w 0x310e0                                     |         goto label_71;
                                                                 |     }
                                                                 | label_34:
    0x00030eb2 ldrb.w r2, [r8, 0x15]                             |     r2 = *((r8 + 0x15));
    0x00030eb6 cmp r2, 0x40                                      |     
                                                                 |     if (r2 == 0x40) {
    0x00030eb8 beq.w 0x31118                                     |         goto label_72;
                                                                 |     }
                                                                 | label_35:
    0x00030ebc ldr.w r0, [sb, 0x44]                              |     r0 = *((sb + 0x44));
    0x00030ec0 movs r5, 0x1a                                     |     r5 = 0x1a;
    0x00030ec2 bl 0x2bd94                                        |     fcn_0002bd94 (r0);
    0x00030ec6 movs r3, 0                                        |     r3 = 0;
    0x00030ec8 str r3, [r4, 0xc]                                 |     *((r4 + 0xc)) = r3;
    0x00030eca b 0x30c1c                                         |     goto label_18;
                                                                 | label_65:
    0x00030ed4 movs r2, 1                                        |     r2 = 1;
    0x00030ed6 strb r2, [r6, 8]                                  |     *((r6 + 8)) = r2;
    0x00030ed8 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00030eda beq 0x30f82                                       |         goto label_73;
                                                                 |     }
    0x00030edc movs r5, 0                                        |     r5 = 0;
    0x00030ede b 0x30c1c                                         |     goto label_18;
                                                                 | label_62:
    0x00030ee0 ldr.w fp, [sl, 0xe0]                              |     fp = *((sl + 0xe0));
    0x00030ee4 cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x00030ee8 beq.w 0x3107c                                     |         goto label_74;
                                                                 |     }
    0x00030eec ldrb.w r3, [sl, 4]                                |     r3 = *((sl + 4));
    0x00030ef0 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00030ef2 beq.w 0x3100e                                     |         goto label_75;
                                                                 |     }
    0x00030ef6 ldrb.w r3, [fp, 0x2b]                             |     r3 = *(arg_2bh);
    0x00030efa cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00030efc beq 0x30fd4                                       |         goto label_76;
                                                                 |     }
    0x00030efe ldrb.w r3, [fp, 0x2e]                             |     r3 = *(arg_2eh);
    0x00030f02 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00030f04 bne.w 0x310b4                                     |         goto label_77;
                                                                 |     }
                                                                 | label_30:
    0x00030f08 ldr.w r3, [fp, 0x20]                              |     r3 = *(arg_20h);
    0x00030f0c movs r5, 1                                        |     r5 = 1;
    0x00030f0e strb.w r5, [fp, 0x2c]                             |     *(arg_2ch) = r5;
    0x00030f12 movs r2, 0x30                                     |     r2 = 0x30;
    0x00030f14 add.w r0, fp, 0x34                                |     r0 += arg_34h;
    0x00030f18 ldr r1, [r3]                                      |     r1 = *(r3);
    0x00030f1a blx 0x5e6c                                        |     r0 = fcn_00005e6c ();
    0x00030f1e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00030f20 beq.w 0x3109c                                     |         goto label_33;
                                                                 |     }
    0x00030f24 ldrb.w r1, [fp, 0x2b]                             |     r1 = *(arg_2bh);
                                                                 |     if (r1 == 0) {
    0x00030f28 cbnz r1, 0x30f38                                  |         
    0x00030f2a ldr.w r0, [fp, 4]                                 |         r0 = *(arg_4h);
    0x00030f2e mov r2, r5                                        |         r2 = r5;
    0x00030f30 movs r3, 9                                        |         r3 = 9;
    0x00030f32 ldr r5, [r0]                                      |         r5 = *(r0);
    0x00030f34 ldr r5, [r5, 0x38]                                |         r5 = *((r5 + 0x38));
    0x00030f36 blx r5                                            |         uint32_t (*r5)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
                                                                 |     }
    0x00030f38 movs r3, 0                                        |     r3 = 0;
    0x00030f3a strb.w r3, [fp, 0x2c]                             |     *(arg_2ch) = r3;
    0x00030f3e ldrb r2, [r4, 0x14]                               |     r2 = *((r4 + 0x14));
    0x00030f40 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00030f42 bne.w 0x311d4                                     |         goto label_78;
                                                                 |     }
    0x00030f46 ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
    0x00030f48 movw r5, 0x205                                    |     r5 = 0x205;
    0x00030f4c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00030f4e beq.w 0x30cfa                                     |         goto label_23;
                                                                 |     }
    0x00030f52 ldr r0, [r3, 0x44]                                |     r0 = *((r3 + 0x44));
    0x00030f54 movw r5, 0x205                                    |     r5 = 0x205;
    0x00030f58 str r2, [sp, 4]                                   |     var_4h = r2;
    0x00030f5a bl 0x2bd94                                        |     fcn_0002bd94 (r0);
    0x00030f5e ldr r2, [sp, 4]                                   |     r2 = var_4h;
    0x00030f60 str r2, [r4, 0xc]                                 |     *((r4 + 0xc)) = r2;
    0x00030f62 b 0x30cf4                                         |     goto label_24;
                                                                 | label_55:
    0x00030f64 ldr r3, [r6, 4]                                   |     r3 = *((r6 + 4));
    0x00030f66 ldr r0, [r3, 0x38]                                |     r0 = *((r3 + 0x38));
    0x00030f68 blx 0x63dc                                        |     fcn_000063dc ();
    0x00030f6c strb r4, [r6, 0xa]                                |     *((r6 + 0xa)) = r4;
    0x00030f6e b 0x30c2c                                         |     goto label_25;
                                                                 | label_61:
    0x00030f70 ldrb r2, [r4, 0x14]                               |     r2 = *((r4 + 0x14));
    0x00030f72 uxtb.w r8, r5                                     |     r8 = (int8_t) r5;
    0x00030f76 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00030f78 bne.w 0x30cee                                     |         goto label_19;
                                                                 |     }
    0x00030f7c b 0x30ce4                                         |     goto label_20;
                                                                 | label_63:
    0x00030f7e mov r8, sb                                        |     r8 = sb;
    0x00030f80 b 0x30d5e                                         |     goto label_26;
                                                                 | label_73:
    0x00030f82 mov r5, r8                                        |     r5 = r8;
    0x00030f84 strb r2, [r4, 0x14]                               |     *((r4 + 0x14)) = r2;
    0x00030f86 b 0x30c1c                                         |     goto label_18;
                                                                 | label_64:
    0x00030f88 movs r3, 1                                        |     r3 = 1;
    0x00030f8a strb.w r3, [r6, 0x24]                             |     *((r6 + 0x24)) = r3;
    0x00030f8e ldr r3, [r4, 0x48]                                |     r3 = *((r4 + 0x48));
    0x00030f90 str r3, [r6, 0x28]                                |     *((r6 + 0x28)) = r3;
    0x00030f92 add.w r3, r6, 0x1c                                |     r3 = r6 + 0x1c;
    0x00030f96 str r3, [r4, 0x48]                                |     *((r4 + 0x48)) = r3;
    0x00030f98 b 0x30d70                                         |     goto label_27;
                                                                 | label_70:
    0x00030f9a mov r0, fp                                        |     r0 = fp;
    0x00030f9c movs r5, 0x1a                                     |     r5 = 0x1a;
    0x00030f9e bl 0x2bd94                                        |     fcn_0002bd94 (r0);
    0x00030fa2 movs r3, 0                                        |     r3 = 0;
    0x00030fa4 str r3, [r4, 0xc]                                 |     *((r4 + 0xc)) = r3;
    0x00030fa6 b 0x30c1c                                         |     goto label_18;
                                                                 | label_68:
    0x00030fa8 ldrb.w r1, [r8, 0x19]                             |     r1 = *((r8 + 0x19));
    0x00030fac ldrb.w r2, [r8, 0x5d]                             |     r2 = *((r8 + 0x5d));
    0x00030fb0 cmp r1, r2                                        |     
                                                                 |     if (r1 != r2) {
    0x00030fb2 bne.w 0x30e7a                                     |         goto label_28;
                                                                 |     }
    0x00030fb6 ldrb.w r1, [r8, 0x1a]                             |     r1 = *((r8 + 0x1a));
    0x00030fba ldrb.w r2, [r8, 0x5e]                             |     r2 = *((r8 + 0x5e));
    0x00030fbe cmp r1, r2                                        |     
                                                                 |     if (r1 != r2) {
    0x00030fc0 bne.w 0x30e7a                                     |         goto label_28;
                                                                 |     }
    0x00030fc4 ldrb.w r1, [r8, 0x1b]                             |     r1 = *((r8 + 0x1b));
    0x00030fc8 ldrb.w r2, [r8, 0x5f]                             |     r2 = *((r8 + 0x5f));
    0x00030fcc cmp r1, r2                                        |     
                                                                 |     if (r1 != r2) {
    0x00030fce bne.w 0x30e7a                                     |         goto label_28;
                                                                 |     }
    0x00030fd2 b 0x30e7c                                         |     goto label_29;
                                                                 | label_76:
    0x00030fd4 movs r1, 4                                        |     r1 = 4;
    0x00030fd6 mov r0, sl                                        |     r0 = sl;
    0x00030fd8 bl 0xa194                                         |     r0 = fcn_0000a194 (r0, r1);
    0x00030fdc mov r5, r0                                        |     r5 = r0;
    0x00030fde cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00030fe0 bne.w 0x30de0                                     |         goto label_22;
                                                                 |     }
    0x00030fe4 ldr.w r5, [sl, 0xe0]                              |     r5 = *((sl + 0xe0));
    0x00030fe8 ldrb.w r3, [r5, 0x2b]                             |     r3 = *((r5 + 0x2b));
    0x00030fec mov fp, r5                                        |     
                                                                 |     if (r3 == 0) {
    0x00030fee cbnz r3, 0x31008                                  |         
    0x00030ff0 ldr r0, [r5, 4]                                   |         r0 = *((r5 + 4));
    0x00030ff2 movs r2, 1                                        |         r2 = 1;
    0x00030ff4 ldrsh.w r1, [r5, 0x28]                            |         r1 = *((r5 + 0x28));
    0x00030ff8 ldr r3, [r0]                                      |         r3 = *(r0);
    0x00030ffa adds r1, 3                                        |         r1 += 3;
    0x00030ffc ldr.w fp, [r3, 0x38]                              |         fp = *((r3 + 0x38));
    0x00031000 movs r3, 5                                        |         r3 = 5;
    0x00031002 blx fp                                            |         fp (r0, r1, r2, r3);
    0x00031004 ldr.w fp, [sl, 0xe0]                              |         fp = *((sl + 0xe0));
                                                                 |     }
    0x00031008 movs r3, 1                                        |     r3 = 1;
    0x0003100a strb.w r3, [r5, 0x2b]                             |     *((r5 + 0x2b)) = r3;
                                                                 | label_75:
    0x0003100e ldrb.w r3, [fp, 0x2e]                             |     r3 = *(arg_2eh);
    0x00031012 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00031014 bne 0x310b4                                       |         goto label_77;
                                                                 |     }
    0x00031016 ldrb.w r1, [fp, 0x2b]                             |     r1 = *(arg_2bh);
    0x0003101a cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x0003101c bne.w 0x30f08                                     |         goto label_30;
                                                                 |     }
    0x00031020 ldr.w r0, [fp, 4]                                 |     r0 = *(arg_4h);
    0x00031024 movs r3, 0xa                                      |     r3 = 0xa;
    0x00031026 movs r2, 1                                        |     r2 = 1;
    0x00031028 ldr r5, [r0]                                      |     r5 = *(r0);
    0x0003102a ldr r5, [r5, 0x38]                                |     r5 = *((r5 + 0x38));
    0x0003102c blx r5                                            |     r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
    0x0003102e mov r5, r0                                        |     r5 = r0;
    0x00031030 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00031032 beq.w 0x30f08                                     |         goto label_30;
                                                                 |     }
    0x00031036 b 0x30de0                                         |     goto label_22;
                                                                 | label_69:
    0x00031038 ldr.w fp, [r4, 0x24]                              |     fp = *((r4 + 0x24));
                                                                 | label_36:
    0x0003103c sub.w r1, fp, 0x23                                |     r1 = fp - 0x23;
    0x00031040 str r3, [r4, 0x2c]                                |     *((r4 + 0x2c)) = r3;
    0x00031042 sub.w r3, fp, 0xc                                 |     r3 = fp - 0xc;
    0x00031046 strh r1, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r1;
    0x00031048 lsls r2, r3, 6                                    |     r2 = r3 << 6;
    0x0003104a movw r1, 0x8081                                   |     
    0x0003104e movt r1, 0x8080                                   |     r1 = 0x80808081;
    0x00031052 lsls r3, r3, 5                                    |     r3 <<= 5;
    0x00031054 umull r0, r2, r1, r2                              |     r0:r2 = r1 * r2;
    0x00031058 str.w sb, [r4, 0xc]                               |     __asm ("str.w sb, [r4, 0xc]");
    0x0003105c umull r1, r3, r1, r3                              |     r1:r3 = r1 * r3;
    0x00031060 lsrs r2, r2, 7                                    |     r2 >>= 7;
    0x00031062 subs r2, 0x17                                     |     r2 -= 0x17;
    0x00031064 lsrs r3, r3, 7                                    |     r3 >>= 7;
    0x00031066 uxth r2, r2                                       |     r2 = (int16_t) r2;
    0x00031068 subs r3, 0x17                                     |     r3 -= 0x17;
    0x0003106a cmp r2, 0x7f                                      |     
    0x0003106c uxth r3, r3                                       |     r3 = (int16_t) r3;
    0x0003106e strh r2, [r4, 0x18]                               |     *((r4 + 0x18)) = r2;
    0x00031070 it hs                                             |     
                                                                 |     if (r2 < 0x7f) {
    0x00031072 movhs r2, 0x7f                                    |         r2 = 0x7f;
                                                                 |     }
    0x00031074 strb r2, [r4, 0x15]                               |     *((r4 + 0x15)) = r2;
    0x00031076 strh r3, [r4, 0x1a]                               |     *((r4 + 0x1a)) = r3;
    0x00031078 strh r3, [r4, 0x1e]                               |     *((r4 + 0x1e)) = r3;
    0x0003107a b 0x30cae                                         |     goto label_21;
                                                                 | label_74:
    0x0003107c movs r1, 2                                        |     r1 = 2;
    0x0003107e mov r0, sl                                        |     r0 = sl;
    0x00031080 bl 0xa194                                         |     fcn_0000a194 (r0, r1);
    0x00031084 cmp r7, 1                                         |     
    0x00031086 mov r5, r0                                        |     r5 = r0;
    0x00031088 ite le                                            |     
                                                                 |     if (r7 > 1) {
    0x0003108a movle r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r7 <= 1) {
    0x0003108c movgt r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x0003108e cmp r0, 0                                         |     
    0x00031090 it ne                                             |     
                                                                 |     if (r0 == 0) {
    0x00031092 movne r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x00031094 cbnz r3, 0x310d0                                  |         goto label_79;
                                                                 |     }
    0x00031096 cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x00031098 bne.w 0x30de0                                     |         goto label_22;
                                                                 |     }
                                                                 | label_33:
    0x0003109c ldr.w r3, [sl, 0x18]                              |     r3 = *((sl + 0x18));
    0x000310a0 vstr d8, [sl, 0x48]                               |     __asm ("vstr d8, [sl, 0x48]");
    0x000310a4 strd r3, r3, [sl, 0x20]                           |     __asm ("strd r3, r3, [sl, 0x20]");
                                                                 | label_37:
    0x000310a8 str.w r3, [sl, 0x1c]                              |     __asm ("str.w r3, [sl, 0x1c]");
    0x000310ac movs r3, 2                                        |     r3 = 2;
    0x000310ae strb.w r3, [sl, 0x10]                             |     *((sl + 0x10)) = r3;
    0x000310b2 b 0x30d4a                                         |     goto label_31;
                                                                 | label_77:
    0x000310b4 ldrb r7, [r4, 0x14]                               |     r7 = *((r4 + 0x14));
    0x000310b6 cmp r7, 0                                         |     
                                                                 |     if (r7 != 0) {
    0x000310b8 bne.w 0x30e20                                     |         goto label_32;
                                                                 |     }
    0x000310bc ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
    0x000310be cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000310c0 beq.w 0x30e20                                     |         goto label_32;
                                                                 |     }
    0x000310c4 ldr r0, [r3, 0x44]                                |     r0 = *((r3 + 0x44));
    0x000310c6 movs r5, 8                                        |     r5 = 8;
    0x000310c8 bl 0x2bd94                                        |     fcn_0002bd94 (r0);
    0x000310cc str r7, [r4, 0xc]                                 |     *((r4 + 0xc)) = r7;
    0x000310ce b 0x30c1c                                         |     goto label_18;
                                                                 | label_79:
    0x000310d0 movs r1, 4                                        |     r1 = 4;
    0x000310d2 mov r0, sl                                        |     r0 = sl;
    0x000310d4 bl 0xb7dc                                         |     r0 = fcn_0000b7dc (r0, r1);
    0x000310d8 mov r5, r0                                        |     r5 = r0;
    0x000310da cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x000310dc beq 0x3109c                                       |         goto label_33;
                                                                 |     }
    0x000310de b 0x30de0                                         |     goto label_22;
                                                                 | label_71:
    0x000310e0 ldrh r2, [r4, 0x16]                               |     r2 = *((r4 + 0x16));
    0x000310e2 ands fp, r2, 0x10                                 |     
                                                                 |     if (fp != r2) {
    0x000310e6 bne.w 0x30eb2                                     |         goto label_34;
                                                                 |     }
    0x000310ea mov r1, sl                                        |     r1 = sl;
    0x000310ec ldr r0, [sp, 8]                                   |     r0 = var_8h;
    0x000310ee str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x000310f0 str.w fp, [sp, 0x10]                              |     __asm ("str.w fp, [var_10h]");
    0x000310f4 bl 0xf420                                         |     fcn_0000f420 (r0, r1);
    0x000310f8 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x000310fa mov sl, r0                                        |     sl = r0;
    0x000310fc cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000310fe bne 0x311fc                                       |         goto label_80;
                                                                 |     }
    0x00031100 ldr.w sl, [sp, 0x10]                              |     sl = var_10h;
    0x00031104 cmp.w sl, 0                                       |     
                                                                 |     if (sl != 0) {
    0x00031108 bne.w 0x30eb2                                     |         goto label_34;
                                                                 |     }
    0x0003110c ldr.w r0, [sb, 0x44]                              |     r0 = *((sb + 0x44));
    0x00031110 mov r5, sl                                        |     r5 = sl;
    0x00031112 bl 0x2bd94                                        |     fcn_0002bd94 (r0);
    0x00031116 b 0x30cae                                         |     goto label_21;
                                                                 | label_72:
    0x00031118 ldrb.w r2, [r8, 0x16]                             |     r2 = *((r8 + 0x16));
    0x0003111c cmp r2, 0x20                                      |     
                                                                 |     if (r2 != 0x20) {
    0x0003111e bne.w 0x30ebc                                     |         goto label_35;
                                                                 |     }
    0x00031122 ldrb.w r2, [r8, 0x17]                             |     r2 = *((r8 + 0x17));
    0x00031126 cmp r2, 0x20                                      |     
                                                                 |     if (r2 != 0x20) {
    0x00031128 bne.w 0x30ebc                                     |         goto label_35;
                                                                 |     }
    0x0003112c ldrb.w sl, [r8, 0x11]                             |     sl = *((r8 + 0x11));
    0x00031130 ldrb.w r2, [r8, 0x10]                             |     r2 = *((r8 + 0x10));
    0x00031134 lsl.w sl, sl, 0x10                                |     sl <<= 0x10;
    0x00031138 orr.w r2, sl, r2, lsl 8                           |     r2 = sl | (r2 << 8);
    0x0003113c add.w fp, r2, -1                                  |     
    0x00031140 str r2, [sp, 8]                                   |     var_8h = r2;
    0x00031142 ands.w r2, fp, r2                                 |     r2 = fp & r2;
    0x00031146 str r2, [sp, 0xc]                                 |     var_ch = r2;
                                                                 |     if (r2 != fp) {
    0x00031148 bne.w 0x30ebc                                     |         goto label_35;
                                                                 |     }
    0x0003114c ldr r1, [sp, 8]                                   |     r1 = var_8h;
    0x0003114e mvn r0, 0x100                                     |     r0 = ~0x100;
    0x00031152 adds r2, r1, r0                                   |     r2 = r1 + r0;
    0x00031154 cmp.w r2, 0xff00                                  |     
                                                                 |     if (r2 >= fcn.0000ff00) {
    0x00031158 bhs 0x311da                                       |         goto label_81;
                                                                 |     }
    0x0003115a ldr r0, [r4, 0x20]                                |     r0 = *((r4 + 0x20));
    0x0003115c ldrb.w sl, [r8, 0x14]                             |     sl = *((r8 + 0x14));
    0x00031160 cmp r1, r0                                        |     
    0x00031162 sub.w fp, r1, sl                                  |     
                                                                 |     if (r1 == r0) {
    0x00031166 bne 0x311a4                                       |         
    0x00031168 ldr r2, [r4, 4]                                   |         r2 = *((r4 + 4));
    0x0003116a ldr r1, [sp, 4]                                   |         r1 = var_4h;
    0x0003116c ldrh r2, [r2, 0x1a]                               |         r2 = *((r2 + 0x1a));
    0x0003116e eor r2, r2, 1                                     |         r2 ^= 1;
    0x00031172 cmp r1, r3                                        |         
    0x00031174 ite ge                                            |         
                                                                 |         if (r1 < r3) {
    0x00031176 movge r2, 0                                       |             r2 = 0;
                                                                 |         }
                                                                 |         if (r1 >= r3) {
    0x00031178 andlt r2, r2, 1                                   |             r2 &= 1;
                                                                 |         }
    0x0003117c cmp r2, 0                                         |         
                                                                 |         if (r2 != 0) {
    0x0003117e bne 0x3120c                                       |             goto label_82;
                                                                 |         }
    0x00031180 cmp.w fp, 0x1e0                                   |         
                                                                 |         if (fp <= 0x1e0) {
    0x00031184 blo 0x311ea                                       |             goto label_83;
                                                                 |         }
    0x00031186 str.w fp, [r4, 0x24]                              |         __asm ("str.w fp, [r4, 0x24]");
    0x0003118a ldr.w r2, [r8, 0x34]                              |         r2 = *((r8 + 0x34));
    0x0003118e subs r2, 0                                        |         
    0x00031190 it ne                                             |         
                                                                 |         if (r2 == 0) {
    0x00031192 movne r2, 1                                       |             r2 = 1;
                                                                 |         }
    0x00031194 strb r2, [r4, 0x11]                               |         *((r4 + 0x11)) = r2;
    0x00031196 ldr.w r2, [r8, 0x40]                              |         r2 = *((r8 + 0x40));
    0x0003119a subs r2, 0                                        |         
    0x0003119c it ne                                             |         
                                                                 |         if (r2 == 0) {
    0x0003119e movne r2, 1                                       |             r2 = 1;
                                                                 |         }
    0x000311a0 strb r2, [r4, 0x12]                               |         *((r4 + 0x12)) = r2;
    0x000311a2 b 0x3103c                                         |         goto label_36;
                                                                 |     }
    0x000311a4 ldr.w r0, [sb, 0x44]                              |     r0 = *((sb + 0x44));
    0x000311a8 bl 0x2bd94                                        |     fcn_0002bd94 (r0);
    0x000311ac ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x000311ae ldr r0, [r4, 0x50]                                |     r0 = *((r4 + 0x50));
    0x000311b0 str.w fp, [r4, 0x24]                              |     __asm ("str.w fp, [r4, 0x24]");
    0x000311b4 str r3, [r4, 0x20]                                |     *((r4 + 0x20)) = r3;
    0x000311b6 bl 0x11040                                        |     fcn_00011040 (r0);
    0x000311ba ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x000311bc mov r1, r4                                        |     r1 = r4;
    0x000311be ldr r0, [r1], 0x20                                |     r0 = *(r1);
                                                                 |     r1 += 0x20;
    0x000311c2 mov r2, sl                                        |     r2 = sl;
    0x000311c4 str r3, [r4, 0x50]                                |     *((r4 + 0x50)) = r3;
    0x000311c6 bl 0x110ec                                        |     r0 = fcn_000110ec (r0, r1, r2);
    0x000311ca mov r5, r0                                        |     r5 = r0;
    0x000311cc cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000311ce beq.w 0x30cae                                     |         goto label_21;
                                                                 |     }
    0x000311d2 b 0x30de0                                         |     goto label_22;
                                                                 | label_78:
    0x000311d4 movw r5, 0x205                                    |     r5 = 0x205;
    0x000311d8 b 0x30c1c                                         |     goto label_18;
                                                                 | label_81:
    0x000311da ldr.w r0, [sb, 0x44]                              |     r0 = *((sb + 0x44));
    0x000311de movs r5, 0x1a                                     |     r5 = 0x1a;
    0x000311e0 bl 0x2bd94                                        |     fcn_0002bd94 (r0);
    0x000311e4 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x000311e6 str r3, [r4, 0xc]                                 |     *((r4 + 0xc)) = r3;
    0x000311e8 b 0x30c1c                                         |     goto label_18;
                                                                 | label_83:
    0x000311ea mov sl, r2                                        |     sl = r2;
    0x000311ec ldr.w r0, [sb, 0x44]                              |     r0 = *((sb + 0x44));
    0x000311f0 bl 0x2bd94                                        |     fcn_0002bd94 (r0);
    0x000311f4 movs r5, 0x1a                                     |     r5 = 0x1a;
    0x000311f6 str.w sl, [r4, 0xc]                               |     __asm ("str.w sl, [r4, 0xc]");
    0x000311fa b 0x30c1c                                         |     goto label_18;
                                                                 | label_80:
    0x000311fc ldr.w r0, [sb, 0x44]                              |     r0 = *((sb + 0x44));
    0x00031200 mov r5, sl                                        |     r5 = sl;
    0x00031202 bl 0x2bd94                                        |     fcn_0002bd94 (r0);
    0x00031206 str.w fp, [r4, 0xc]                               |     __asm ("str.w fp, [r4, 0xc]");
    0x0003120a b 0x30de0                                         |     goto label_22;
                                                                 | label_82:
    0x0003120c blx 0x5fe8                                        |     fcn_00005fe8 ();
    0x00031210 ldr r1, [pc, 0x34]                                |     
    0x00031212 add.w r3, r0, 0x14                                |     r3 = r0 + 0x14;
    0x00031216 movw r2, 0xde87                                   |     r2 = 0xde87;
    0x0003121a movs r0, 0xb                                      |     r0 = 0xb;
    0x0003121c movs r5, 0xb                                      |     r5 = 0xb;
    0x0003121e add r1, pc                                        |     r1 = 0x6246a;
    0x00031220 blx 0x6820                                        |     fcn_00006820 ();
    0x00031224 ldr.w r0, [sb, 0x44]                              |     r0 = *((sb + 0x44));
    0x00031228 bl 0x2bd94                                        |     fcn_0002bd94 (r0);
    0x0003122c ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x0003122e str r3, [r4, 0xc]                                 |     *((r4 + 0xc)) = r3;
    0x00031230 b 0x30c1c                                         |     goto label_18;
                                                                 | label_56:
    0x00031232 blx 0x6498                                        |     fcn_00006498 ();
    0x00031236 nop                                               |     
    0x00031238 strb r6, [r7, 1]                                  |     *((r7 + 1)) = r6;
    0x0003123a movs r4, r0                                       |     r4 = r0;
    0x0003123c lsls r0, r1, 0xe                                  |     r0 = r1 << 0xe;
    0x0003123e movs r0, r0                                       |     
    0x00031240 strb r4, [r4]                                     |     *(r4) = r4;
    0x00031242 movs r4, r0                                       |     r4 = r0;
    0x00031244 cmp r4, 0x56                                      |     
    0x00031246 movs r3, r0                                       |     r3 = r0;
    0x00031248 b 0x310a8                                         |     goto label_37;
                                                                 | }
    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x30960 */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) fcn.00030960 ()                              | void fcn_00030960 (int16_t arg1, int16_t arg2) {
                                                         |     int16_t var_0h_3;
                                                         |     int16_t var_ch_2;
                                                         |     int16_t var_10h;
                                                         |     int16_t var_38h;
                                                         |     int16_t var_44h;
                                                         |     r0 = arg1;
                                                         |     r1 = arg2;
    0x00030960 push.w {r4, r5, r6, r7, r8, sb, lr}       |     
    0x00030964 mov r5, r1                                |     r5 = r1;
    0x00030966 ldr.w r8, [r1, 0x40]                      |     r8 = *((r1 + 0x40));
    0x0003096a sub sp, 0x4c                              |     
    0x0003096c add r6, sp, 0x10                          |     r6 += var_10h;
    0x0003096e movs r2, 0x28                             |     r2 = 0x28;
    0x00030970 ldr r1, [pc, 0x108]                       |     
    0x00030972 mov r7, r0                                |     r7 = r0;
    0x00030974 ldr r3, [pc, 0x108]                       |     r3 = *(0x30a80);
    0x00030976 mov r0, r6                                |     r0 = r6;
    0x00030978 add r1, pc                                |     r1 = 0x613f8;
    0x0003097a ldr r3, [r1, r3]                          |     
    0x0003097c movs r1, 0                                |     r1 = 0;
    0x0003097e ldr r3, [r3]                              |     r3 = *(0x613f8);
    0x00030980 str r3, [sp, 0x44]                        |     var_44h = r3;
    0x00030982 mov.w r3, 0                               |     r3 = 0;
    0x00030986 blx 0x5fcc                                |     fcn_00005fcc ();
    0x0003098a ldr.w r4, [r8, 0x10]                      |     r4 = *((r8 + 0x10));
    0x0003098e cbnz r4, 0x309ac                          |     
                                                         |     while (r0 != 0) {
                                                         | label_0:
    0x00030990 ldr r2, [pc, 0xf0]                        |         
    0x00030992 ldr r3, [pc, 0xec]                        |         r3 = *(0x30a82);
    0x00030994 add r2, pc                                |         r2 = 0x6141c;
    0x00030996 ldr r3, [r2, r3]                          |         r3 = *(0x6141c);
    0x00030998 ldr r2, [r3]                              |         r2 = *(0x6141c);
    0x0003099a ldr r3, [sp, 0x44]                        |         r3 = var_44h;
    0x0003099c eors r2, r3                               |         r2 ^= r3;
    0x0003099e mov.w r3, 0                               |         r3 = 0;
                                                         |         if (r2 != r3) {
    0x000309a2 bne 0x30a78                               |             goto label_2;
                                                         |         }
    0x000309a4 mov r0, r4                                |         r0 = r4;
    0x000309a6 add sp, 0x4c                              |         
    0x000309a8 pop.w {r4, r5, r6, r7, r8, sb, pc}        |         
    0x000309ac mov r0, r5                                |         r0 = r5;
    0x000309ae bl 0x30890                                |         r0 = fcn_00030890 (r0);
    0x000309b2 mov r4, r0                                |         r4 = r0;
    0x000309b4 cmp r0, 0                                 |         
    0x000309b6 bne 0x30990                               |         
                                                         |     }
    0x000309b8 ldr.w r5, [r8, 0x2c]                      |     r5 = *((r8 + 0x2c));
    0x000309bc cmp r5, 0                                 |     
                                                         |     if (r5 == 0) {
    0x000309be beq 0x30a3e                               |         goto label_3;
                                                         |     }
                                                         | label_1:
    0x000309c0 ldrd r2, r3, [r8]                         |     __asm ("ldrd r2, r3, [r8]");
    0x000309c4 mov r1, r5                                |     r1 = r5;
    0x000309c6 mov r0, r7                                |     r0 = r7;
    0x000309c8 add.w sb, sp, 0x38                        |     sb += var_38h;
    0x000309cc strd r2, r3, [sp]                         |     __asm ("strd r2, r3, [sp]");
    0x000309d0 mov r2, r6                                |     r2 = r6;
    0x000309d2 bl 0xd454                                 |     fcn_0000d454 (r0, r1, r2, r3);
    0x000309d6 ldr.w r3, [r8, 0x18]                      |     r3 = *((r8 + 0x18));
    0x000309da mov r0, sb                                |     r0 = sb;
    0x000309dc ldr.w r2, [r8, 0x10]                      |     r2 = *((r8 + 0x10));
    0x000309e0 adds r3, 1                                |     r3++;
    0x000309e2 str.w r3, [r8, 0x18]                      |     __asm ("str.w r3, [r8, 0x18]");
    0x000309e6 asrs r3, r2, 0x1f                         |     r3 = r2 >> 0x1f;
    0x000309e8 bl 0x9cd4                                 |     fcn_00009cd4 (r0, r1, r2);
    0x000309ec mov r1, sb                                |     r1 = sb;
    0x000309ee mov r2, r0                                |     r2 = r0;
    0x000309f0 mov r0, r6                                |     r0 = r6;
    0x000309f2 bl 0x89e0                                 |     fcn_000089e0 (r0, r1, r2);
    0x000309f6 ldr.w r5, [r8, 0x30]                      |     r5 = *((r8 + 0x30));
                                                         |     if (r5 == 0) {
    0x000309fa cbz r5, 0x30a2a                           |         goto label_4;
                                                         |     }
                                                         |     do {
    0x000309fc mov r4, r5                                |         r4 = r5;
    0x000309fe mov r0, sb                                |         r0 = sb;
    0x00030a00 ldr r2, [r4, 4]                           |         r2 = *((r4 + 4));
    0x00030a02 ldr r5, [r5, 8]                           |         r5 = *((r5 + 8));
    0x00030a04 asrs r3, r2, 0x1f                         |         r3 = r2 >> 0x1f;
    0x00030a06 bl 0x9cd4                                 |         fcn_00009cd4 (r0, r1, r2);
    0x00030a0a mov r1, sb                                |         r1 = sb;
    0x00030a0c mov r2, r0                                |         r2 = r0;
    0x00030a0e mov r0, r6                                |         r0 = r6;
    0x00030a10 bl 0x89e0                                 |         fcn_000089e0 (r0, r1, r2);
    0x00030a14 ldrd r1, r2, [r4]                         |         __asm ("ldrd r1, r2, [r4]");
    0x00030a18 mov r0, r6                                |         r0 = r6;
    0x00030a1a bl 0x89e0                                 |         fcn_000089e0 (r0, r1, r2);
    0x00030a1c invalid                                   |         
    0x00030a20 mov r0, r7                                |         r0 = r7;
    0x00030a22 bl 0xe12c                                 |         fcn_0000e12c (r0, r1);
    0x00030a26 cmp r5, 0                                 |         
    0x00030a28 bne 0x309fc                               |         
                                                         |     } while (r5 != 0);
                                                         | label_4:
    0x00030a2a movs r3, 0                                |     r3 = 0;
    0x00030a2c mov r2, r8                                |     r2 = r8;
    0x00030a2e mov r1, r6                                |     r1 = r6;
    0x00030a30 mov r0, r7                                |     r0 = r7;
    0x00030a32 str.w r3, [r8, 0x30]                      |     __asm ("str.w r3, [r8, 0x30]");
    0x00030a36 bl 0xe308                                 |     r0 = fcn_0000e308 (r0, r1, r2);
    0x00030a3a mov r4, r0                                |     r4 = r0;
    0x00030a3c b 0x30990                                 |     goto label_0;
                                                         | label_3:
    0x00030a3e ldr.w sb, [r7]                            |     sb = *(r7);
    0x00030a42 ldr.w r0, [sb, 4]                         |     r0 = *((sb + 4));
    0x00030a46 bl 0x11e2c                                |     r0 = fcn_00011e2c (r0);
    0x00030a4a mov r5, r0                                |     r5 = r0;
                                                         |     if (r0 != 0) {
    0x00030a4c cbz r0, 0x30a74                           |         
    0x00030a4e add r3, sp, 0xc                           |         r3 += var_ch_2;
    0x00030a50 mov r1, r4                                |         r1 = r4;
    0x00030a52 str r3, [sp]                              |         *(sp) = r3;
    0x00030a54 mov r0, sb                                |         r0 = sb;
    0x00030a56 ldr.w r4, [sb, 0x18]                      |         r4 = *((sb + 0x18));
    0x00030a5a movw r3, 0x101e                           |         r3 = 0x101e;
    0x00030a5e mov r2, r5                                |         r2 = r5;
    0x00030a60 blx r4                                    |         r0 = uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00030a62 mov r4, r0                                |         r4 = r0;
                                                         |         if (r0 == 0) {
    0x00030a64 cbnz r0, 0x30a6c                          |             
    0x00030a66 str.w r5, [r8, 0x2c]                      |             __asm ("str.w r5, [r8, 0x2c]");
    0x00030a6a b 0x309c0                                 |             goto label_1;
                                                         |         }
    0x00030a6c mov r0, r5                                |         r0 = r5;
    0x00030a6e blx 0x6050                                |         fcn_00006050 ();
    0x00030a72 b 0x30990                                 |         goto label_0;
                                                         |     }
    0x00030a74 movs r4, 7                                |     r4 = 7;
    0x00030a76 b 0x30990                                 |     goto label_0;
                                                         | label_2:
    0x00030a78 blx 0x6498                                |     fcn_00006498 ();
    0x00030a7c strb r0, [r4, 0xb]                        |     *((r4 + 0xb)) = r0;
    0x00030a7e movs r4, r0                               |     r4 = r0;
    0x00030a80 lsls r0, r1, 0xe                          |     r0 = r1 << 0xe;
    0x00030a82 movs r0, r0                               |     
    0x00030a84 strb r4, [r0, 0xb]                        |     *((r0 + 0xb)) = r4;
    0x00030a86 movs r4, r0                               |     r4 = r0;
                                                         | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x31a20 */
                                                                 | #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.00031a20 ()                                      | void fcn_00031a20 (int16_t arg_1h, int16_t arg_5h, int16_t arg_10h, int16_t arg_12h, int16_t arg_14h, int16_t arg_20h, int16_t arg_34h, int16_t arg_38h, int16_t arg_40h, int16_t arg_44h, int16_t arg_48h, int16_t arg1) {
                                                                 |     int16_t var_0h;
                                                                 |     int32_t var_0h_2;
                                                                 |     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;
                                                                 |     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_9ah;
                                                                 |     int16_t var_9ch;
                                                                 |     int16_t var_a0h;
                                                                 |     int16_t var_a4h;
                                                                 |     int16_t var_a8h;
                                                                 |     int32_t var_a8h_2;
                                                                 |     int16_t var_c8h;
                                                                 |     int16_t var_d0h;
                                                                 |     int16_t var_d4h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_dch;
                                                                 |     int32_t var_54h_2;
                                                                 |     int16_t var_e8h;
                                                                 |     int16_t var_ech;
                                                                 |     int16_t var_4h_3;
                                                                 |     int16_t var_4h_5;
                                                                 |     int32_t var_4h_4;
                                                                 |     int16_t var_fch;
                                                                 |     int16_t var_4h_2;
                                                                 |     int16_t var_110h;
                                                                 |     int16_t var_124h;
                                                                 |     int16_t var_128h;
                                                                 |     int16_t var_0h_4;
                                                                 |     int16_t var_134h;
                                                                 |     int16_t var_138h;
                                                                 |     int16_t var_0h_3;
                                                                 |     r0 = arg1;
    0x00031a20 invalid                                           |     
    0x00031a24 movs r2, 0xab                                     |     r2 = 0xab;
    0x00031a26 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00031a2a movt r2, 0xaaaa                                   |     r2 = (r2 & 0xFFFF) | 0xaaaa0000;
    0x00031a2e sub sp, 0x13c                                     |     
    0x00031a30 ldrsh.w r5, [r0, 0x54]                            |     r5 = *((r0 + 0x54));
    0x00031a34 mov r4, r0                                        |     r4 = r0;
    0x00031a36 ldr r3, [r3, 0x24]                                |     r3 = *((r3 + 0x24));
    0x00031a38 str r0, [sp, 0x30]                                |     var_30h = r0;
    0x00031a3a ldr.w r0, [pc, 0xb00]                             |     r0 = *(0x0003253c);
    0x00031a3e ldr.w r1, [pc, 0xb00]                             |     
    0x00031a42 lsls r3, r3, 1                                    |     r3 <<= 1;
    0x00031a44 str r5, [sp, 0x24]                                |     var_24h = r5;
    0x00031a46 add r0, pc                                        |     r0 += pc;
    0x00031a48 umull r2, r3, r2, r3                              |     r2:r3 = r2 * r3;
    0x00031a4c ldr r1, [r0, r1]                                  |     r1 = *((r0 + r1));
    0x00031a4e ldr r1, [r1]                                      |     r1 = *(0x32542);
    0x00031a50 str r1, [sp, 0x134]                               |     var_134h = r1;
    0x00031a52 mov.w r1, 0                                       |     r1 = 0;
    0x00031a56 add.w r1, r5, 0x20                                |     r1 = r5 + 0x20;
    0x00031a5a lsrs r3, r3, 1                                    |     r3 >>= 1;
    0x00031a5c ldr.w r1, [r4, r1, lsl 2]                         |     offset_0 = r1 << 2;
                                                                 |     r1 = *((r4 + offset_0));
    0x00031a60 str r3, [sp, 0x60]                                |     var_60h = r3;
    0x00031a62 ldr.w r3, [pc, 0xae0]                             |     
    0x00031a66 str r1, [sp, 0x20]                                |     var_20h = r1;
    0x00031a68 add r3, pc                                        |     r3 = 0x63fb2;
    0x00031a6a str r3, [sp, 0x94]                                |     var_94h = r3;
    0x00031a6c movs r3, 0                                        |     r3 = 0;
    0x00031a6e str r3, [sp, 0x4c]                                |     var_4ch = r3;
    0x00031a70 add r3, sp, 0xd0                                  |     r3 += var_d0h;
    0x00031a72 str r3, [sp, 0x58]                                |     var_58h = r3;
    0x00031a74 add r3, sp, 0xd4                                  |     r3 += var_d4h;
    0x00031a76 str r3, [sp, 0x90]                                |     var_90h = r3;
                                                                 | label_2:
    0x00031a78 ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x00031a7a ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00031a7c mov r5, r1                                        |     r5 = r1;
    0x00031a7e ldrb r3, [r2, 1]                                  |     r3 = *((r2 + 1));
                                                                 |     if (r1 != 0) {
    0x00031a80 cbnz r1, 0x31ace                                  |         goto label_42;
                                                                 |     }
                                                                 |     if (r3 == 0) {
    0x00031a82 cbz r3, 0x31aa2                                   |         goto label_3;
                                                                 |     }
    0x00031a84 ldr r0, [r2, 0x44]                                |     r0 = *((r2 + 0x44));
    0x00031a86 ldr r6, [r2, 0x34]                                |     r6 = *((r2 + 0x34));
    0x00031a88 strd r1, r1, [sp, 0xa4]                           |     __asm ("strd r1, r1, [var_a4h]");
    0x00031a8c bl 0x2bdf4                                        |     r0 = fcn_0002bdf4 (r0, r1, r2);
    0x00031a90 mov r5, r0                                        |     r5 = r0;
    0x00031a92 str r0, [sp, 0xa0]                                |     var_a0h = r0;
    0x00031a94 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00031a96 beq.w 0x31cca                                     |         goto label_43;
                                                                 |     }
    0x00031a9a ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00031a9c ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00031a9e str.w r2, [r3, 0x84]                              |     __asm ("str.w r2, [r3, 0x84]");
                                                                 |     do {
                                                                 | label_3:
    0x00031aa2 ldr r3, [sp, 0x4c]                                |         r3 = var_4ch;
                                                                 |         if (r3 != 0) {
    0x00031aa4 cbz r3, 0x31aac                                   |             
    0x00031aa6 mov r0, r3                                        |             r0 = r3;
    0x00031aa8 bl 0x11040                                        |             fcn_00011040 (r0);
                                                                 |         }
    0x00031aac ldr.w r2, [pc, 0xa98]                             |         
    0x00031ab0 ldr.w r3, [pc, 0xa8c]                             |         r3 = *(0x32540);
    0x00031ab4 add r2, pc                                        |         r2 = 0x64000;
    0x00031ab6 ldr r3, [r2, r3]                                  |         r3 = *(0x64000);
    0x00031ab8 ldr r2, [r3]                                      |         r2 = *(0x64000);
    0x00031aba ldr r3, [sp, 0x134]                               |         r3 = var_134h;
    0x00031abc eors r2, r3                                       |         r2 ^= r3;
    0x00031abe mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00031ac2 bne.w 0x32860                                     |             goto label_44;
                                                                 |         }
    0x00031ac6 mov r0, r5                                        |         r0 = r5;
    0x00031ac8 add sp, 0x13c                                     |         
    0x00031aca pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 |         if (r3 == 0) {
                                                                 | label_42:
    0x00031ace cbnz r3, 0x31adc                                  |             
    0x00031ad0 ldr r2, [sp, 0x20]                                |             r2 = var_20h;
    0x00031ad2 ldr r1, [sp, 0x60]                                |             r1 = var_60h;
    0x00031ad4 ldrh r2, [r2, 0xe]                                |             r2 = *((r2 + 0xe));
    0x00031ad6 cmp r2, r1                                        |             
                                                                 |             if (r2 <= r1) {
    0x00031ad8 ble.w 0x3243a                                     |                 goto label_45;
                                                                 |             }
                                                                 |         }
    0x00031adc ldr r3, [sp, 0x24]                                |         r3 = var_24h;
    0x00031ade ldr r1, [sp, 0x30]                                |         r1 = var_30h;
    0x00031ae0 add.w r2, r3, 0x1f                                |         r2 = r3 + 0x1f;
    0x00031ae4 ldr.w fp, [r1, r2, lsl 2]                         |         offset_1 = r2 << 2;
                                                                 |         fp = *((r1 + offset_1));
    0x00031ae8 add.w r3, r1, r3, lsl 1                           |         r3 = r1 + (r3 << 1);
    0x00031aec ldr.w r0, [fp, 0x44]                              |         r0 = *(arg_44h);
    0x00031af0 ldrh.w r4, [r3, 0x54]                             |         r4 = *((r3 + 0x54));
    0x00031af4 bl 0x2bdf4                                        |         fcn_0002bdf4 (r0, r1, r2);
    0x00031af8 str r0, [sp, 0x48]                                |         var_48h = r0;
                                                                 |         if (r0 == 0) {
    0x00031afa cbz r0, 0x31b18                                   |             goto label_46;
                                                                 |         }
    0x00031afc ldr r2, [sp, 0x20]                                |         r2 = var_20h;
    0x00031afe movs r3, 0                                        |         r3 = 0;
    0x00031b00 ldr r5, [sp, 0x48]                                |         r5 = var_48h;
    0x00031b02 strb r3, [r2, 1]                                  |         *((r2 + 1)) = r3;
    0x00031b04 ldr r0, [r2, 0x44]                                |         r0 = *((r2 + 0x44));
    0x00031b06 bl 0x2bd94                                        |         fcn_0002bd94 (r0);
    0x00031b0a ldr r2, [sp, 0x30]                                |         r2 = var_30h;
    0x00031b0c ldrh.w r3, [r2, 0x54]                             |         r3 = *((r2 + 0x54));
    0x00031b10 subs r3, 1                                        |         r3--;
    0x00031b12 strh.w r3, [r2, 0x54]                             |         *((r2 + 0x54)) = r3;
    0x00031b16 b 0x31aa2                                         |         
                                                                 |     } while (1);
                                                                 | label_46:
    0x00031b18 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00031b1a ldrb r3, [r2, 4]                                  |     r3 = *((r2 + 4));
                                                                 |     if (r3 != 0) {
    0x00031b1c cbz r3, 0x31b26                                   |         
    0x00031b1e ldrb r5, [r2, 1]                                  |         r5 = *((r2 + 1));
    0x00031b20 cmp r5, 1                                         |         
                                                                 |         if (r5 == 1) {
    0x00031b22 beq.w 0x32002                                     |             goto label_47;
                                                                 |         }
                                                                 |     }
                                                                 | label_12:
    0x00031b26 ldr r5, [sp, 0x30]                                |     r5 = var_30h;
    0x00031b28 ldr r3, [r5, 4]                                   |     r3 = *((r5 + 4));
    0x00031b2a ldr r0, [r3, 0x20]                                |     r0 = *((r3 + 0x20));
    0x00031b2c bl 0xdc94                                         |     fcn_0000dc94 (r0);
    0x00031b30 ldrb.w r5, [r5, 0x52]                             |     r5 = *((r5 + 0x52));
    0x00031b34 movs r1, 0                                        |     r1 = 0;
    0x00031b36 ldr.w sb, [fp, 0x34]                              |     sb = *(arg_34h);
    0x00031b3a str r1, [sp, 0xa0]                                |     var_a0h = r1;
    0x00031b3c str r5, [sp, 0x40]                                |     var_40h = r5;
    0x00031b3e str r0, [sp, 0x3c]                                |     var_3ch = r0;
    0x00031b40 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00031b42 beq.w 0x32358                                     |         goto label_48;
                                                                 |     }
    0x00031b46 ldrb.w r3, [fp, 1]                                |     r3 = *(arg_1h);
    0x00031b4a ldrh.w r0, [fp, 0x10]                             |     r0 = *(arg_10h);
    0x00031b4e adds r2, r3, r0                                   |     r2 = r3 + r0;
    0x00031b50 cmp r2, 1                                         |     
                                                                 |     if (r2 <= 1) {
    0x00031b52 ble.w 0x31f8a                                     |         goto label_49;
                                                                 |     }
    0x00031b56 rsb.w r1, r5, 2                                   |     r1 = 2 - r5;
    0x00031b5a str r4, [sp, 0x50]                                |     var_50h = r4;
    0x00031b5c str r1, [sp, 0x44]                                |     var_44h = r1;
    0x00031b5e cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x00031b60 bne.w 0x31fec                                     |         goto label_50;
                                                                 |     }
    0x00031b64 subs r3, r1, r3                                   |     r3 = r1 - r3;
                                                                 | label_11:
    0x00031b66 ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x00031b68 cmp r0, r3                                        |     
    0x00031b6a ldr.w r1, [fp, 0x38]                              |     r1 = *(arg_38h);
    0x00031b6e rsb.w r2, r2, 3                                   |     r2 = 3 - r2;
    0x00031b72 str r2, [sp, 0x54]                                |     var_54h = r2;
                                                                 |     if (r0 == r3) {
    0x00031b74 beq.w 0x31f96                                     |         goto label_51;
                                                                 |     }
    0x00031b78 ldr.w r2, [fp, 0x40]                              |     r2 = *(arg_40h);
    0x00031b7c ldrh.w r0, [fp, 0x12]                             |     r0 = *(arg_12h);
    0x00031b80 ldrb.w r4, [r2, r3, lsl 1]                        |     offset_2 = r3 << 1;
                                                                 |     r4 = *((r2 + offset_2));
    0x00031b84 add.w r2, r2, r3, lsl 1                           |     r2 += (r3 << 1);
    0x00031b88 ldrb r3, [r2, 1]                                  |     r3 = *((r2 + 1));
    0x00031b8a orr.w r3, r3, r4, lsl 8                           |     r3 |= (r4 << 8);
    0x00031b8e ands r3, r0                                       |     r3 &= r0;
    0x00031b90 adds r3, r1, r3                                   |     r3 = r1 + r3;
    0x00031b92 str r3, [sp, 0x5c]                                |     var_5ch = r3;
                                                                 | label_9:
    0x00031b94 ldr r2, [sp, 0x44]                                |     r2 = var_44h;
    0x00031b96 add r0, sp, 0x110                                 |     r0 += var_110h;
    0x00031b98 ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x00031b9a add r1, sp, 0xc8                                  |     r1 += var_c8h;
    0x00031b9c ldr r4, [sp, 0x50]                                |     r4 = var_50h;
    0x00031b9e subs r6, r2, 1                                    |     r6 = r2 - 1;
    0x00031ba0 mov sl, r2                                        |     sl = r2;
    0x00031ba2 ldr r5, [r3]                                      |     r5 = *(r3);
    0x00031ba4 lsls r3, r2, 2                                    |     r3 = r2 << 2;
    0x00031ba6 add r6, r4                                        |     r6 += r4;
    0x00031ba8 str r1, [sp, 0x68]                                |     var_68h = r1;
    0x00031baa adds r2, r0, r3                                   |     r2 = r0 + r3;
    0x00031bac adds r7, r1, r3                                   |     r7 = r1 + r3;
    0x00031bae str r2, [sp, 0x18]                                |     var_18h = r2;
    0x00031bb0 rev r5, r5                                        |     r5 = SWAP32 (r5);
    0x00031bb2 ldr r2, [sp, 0x58]                                |     r2 = var_58h;
    0x00031bb4 str r3, [sp, 0x6c]                                |     var_6ch = r3;
    0x00031bb6 str r5, [sp, 0xa4]                                |     var_a4h = r5;
    0x00031bb8 add.w r8, r2, r3                                  |     r8 = r2 + r3;
    0x00031bbc movs r3, 0                                        |     r3 = 0;
    0x00031bbe str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00031bc0 add r3, sp, 0xa0                                  |     r3 += var_a0h;
    0x00031bc2 str r0, [sp, 0x64]                                |     var_64h = r0;
    0x00031bc4 str r3, [sp, 0x38]                                |     var_38h = r3;
    0x00031bc6 str r7, [sp, 0x14]                                |     var_14h = r7;
    0x00031bc8 b 0x31c60                                         |     
                                                                 |     while (r6 != r2) {
                                                                 | label_0:
    0x00031bca ldr.w r2, [fp, 0x40]                              |         r2 = *(arg_40h);
    0x00031bce subs r4, r6, r4                                   |         r4 = r6 - r4;
    0x00031bd0 ldrh.w r5, [fp, 0x12]                             |         r5 = *(arg_12h);
    0x00031bd4 mov r0, fp                                        |         r0 = fp;
    0x00031bd6 ldr.w r1, [fp, 0x38]                              |         r1 = *(arg_38h);
    0x00031bda ldrb.w ip, [r2, r4, lsl 1]                        |         offset_3 = r4 << 1;
                                                                 |         ip = *((r2 + offset_3));
    0x00031bde add.w r2, r2, r4, lsl 1                           |         r2 += (r4 << 1);
    0x00031be2 str r3, [sp, 0x2c]                                |         var_2ch = r3;
    0x00031be4 ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x00031be6 ldrb r7, [r2, 1]                                  |         r7 = *((r2 + 1));
    0x00031be8 orr.w r7, r7, ip, lsl 8                           |         r7 |= (ip << 8);
    0x00031bec ands r7, r5                                       |         r7 &= r5;
    0x00031bee ldr r5, [r1, r7]                                  |         r5 = *((r1 + r7));
    0x00031bf0 add r1, r7                                        |         r1 += r7;
    0x00031bf2 str r1, [r3, -0x4]                                |         *((r3 - 0x4)) = r1;
    0x00031bf6 str r1, [sp, 0x28]                                |         var_28h = r1;
    0x00031bf8 rev r5, r5                                        |         r5 = SWAP32 (r5);
    0x00031bfa str r5, [sp, 0xa4]                                |         var_a4h = r5;
    0x00031bfc bl 0x9f14                                         |         fcn_00009f14 (r0, r1, r2, r3);
    0x00031c00 ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x00031c02 mov r2, r0                                        |         r2 = r0;
    0x00031c04 str r0, [r3, -0x4]                                |         *((r3 - 0x4)) = r0;
    0x00031c08 ldrh.w r0, [sb, 0x16]                             |         r0 = *((sb + 0x16));
    0x00031c0c lsls r1, r0, 0x1d                                 |         r1 = r0 << 0x1d;
                                                                 |         if (r1 < r0) {
    0x00031c0e bpl 0x31c44                                       |             
    0x00031c10 ldr.w r0, [sb, 0x24]                              |             r0 = *((sb + 0x24));
    0x00031c14 adds r4, r7, r2                                   |             r4 = r7 + r2;
    0x00031c16 ldrd r1, r3, [sp, 0x28]                           |             __asm ("ldrd r1, r3, [var_28h]");
    0x00031c1a cmp r4, r0                                        |             
                                                                 |             if (r4 > r0) {
    0x00031c1c bgt.w 0x32264                                     |                 goto label_52;
                                                                 |             }
    0x00031c20 ldr r4, [sp, 0x3c]                                |             r4 = var_3ch;
    0x00031c22 strd r1, r2, [sp, 0x28]                           |             __asm ("strd r1, r2, [var_28h]");
    0x00031c26 adds r0, r4, r7                                   |             r0 = r4 + r7;
    0x00031c28 blx 0x6214                                        |             fcn_00006214 ();
    0x00031c2c ldr.w r3, [fp, 0x38]                              |             r3 = *(arg_38h);
    0x00031c30 ldr r1, [sp, 0x28]                                |             r1 = var_28h;
    0x00031c32 ldr r2, [sp, 0x2c]                                |             r2 = var_2ch;
    0x00031c34 subs r1, r1, r3                                   |             r1 -= r3;
    0x00031c36 ldr r3, [sp, 0x14]                                |             r3 = var_14h;
    0x00031c38 add r1, r4                                        |             r1 += r4;
    0x00031c3a ldrb.w r4, [fp, 1]                                |             r4 = *(arg_1h);
    0x00031c3e str r1, [r3, -0x4]                                |             *((r3 - 0x4)) = r1;
    0x00031c42 subs r4, r6, r4                                   |             r4 = r6 - r4;
                                                                 |         }
    0x00031c44 ldr r3, [sp, 0x38]                                |         r3 = var_38h;
    0x00031c46 mov r1, r4                                        |         r1 = r4;
    0x00031c48 mov r0, fp                                        |         r0 = fp;
    0x00031c4a bl 0x29ab4                                        |         fcn_00029ab4 (r0, r1, r2, r3);
                                                                 | label_1:
    0x00031c4e ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x00031c50 add.w sl, sl, -1                                  |         sl += -1;
    0x00031c54 subs r6, 1                                        |         r6--;
    0x00031c56 subs r3, 4                                        |         r3 -= 4;
    0x00031c58 str r3, [sp, 0x14]                                |         var_14h = r3;
    0x00031c5a ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x00031c5c subs r3, 4                                        |         r3 -= 4;
    0x00031c5e str r3, [sp, 0x18]                                |         var_18h = r3;
    0x00031c60 movs r3, 0                                        |         r3 = 0;
    0x00031c62 mov r2, r8                                        |         r2 = r8;
    0x00031c64 mov r1, r5                                        |         r1 = r5;
    0x00031c66 mov r0, sb                                        |         r0 = sb;
    0x00031c68 bl 0x2e658                                        |         fcn_0002e658 (r0, r1, r2, r3, r4, r5);
    0x00031c6c lsl.w r2, sl, 2                                   |         r2 = sl << 2;
    0x00031c70 mov r3, r0                                        |         r3 = r0;
    0x00031c72 str r0, [sp, 0xa0]                                |         var_a0h = r0;
    0x00031c74 str r2, [sp, 0x34]                                |         var_34h = r2;
    0x00031c76 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x00031c78 bne 0x31d76                                       |             goto label_53;
                                                                 |         }
    0x00031c7a ldr r1, [r8], -4                                  |         r1 = *(r8);
                                                                 |         r8 += -4;
    0x00031c7e ldrh r2, [r1, 0x10]                               |         r2 = *((r1 + 0x10));
    0x00031c80 ldrb r1, [r1, 1]                                  |         r1 = *((r1 + 1));
    0x00031c82 adds r2, 1                                        |         r2++;
    0x00031c84 add r2, r1                                        |         r2 += r1;
    0x00031c86 ldr r1, [sp, 0x1c]                                |         r1 = var_1ch;
    0x00031c88 add r1, r2                                        |         r1 += r2;
    0x00031c8a str r1, [sp, 0x1c]                                |         var_1ch = r1;
    0x00031c8c cmp.w sl, 0                                       |         
                                                                 |         if (sl == 0) {
    0x00031c90 beq.w 0x31e32                                     |             goto label_54;
                                                                 |         }
    0x00031c94 ldrh.w r2, [fp, 0x14]                             |         r2 = *(arg_14h);
    0x00031c98 ldrb.w r4, [fp, 1]                                |         r4 = *(arg_1h);
    0x00031c9c cmp r6, r2                                        |         
    0x00031c9e bne 0x31bca                                       |         
                                                                 |     }
    0x00031ca0 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00031ca2 beq 0x31bca                                       |         goto label_0;
                                                                 |     }
    0x00031ca4 ldr.w r1, [fp, 0x20]                              |     r1 = *(arg_20h);
    0x00031ca8 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00031caa str r0, [sp, 0x28]                                |     var_28h = r0;
    0x00031cac mov r0, fp                                        |     r0 = fp;
    0x00031cae ldr r5, [r1]                                      |     r5 = *(r1);
    0x00031cb0 str r1, [r3, -0x4]                                |     *((r3 - 0x4)) = r1;
    0x00031cb4 rev r5, r5                                        |     r5 = SWAP32 (r5);
    0x00031cb6 str r5, [sp, 0xa4]                                |     var_a4h = r5;
    0x00031cb8 bl 0x9f14                                         |     fcn_00009f14 (r0, r1, r2, r3);
    0x00031cbc ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00031cbe str r0, [r3, -0x4]                                |     *((r3 - 0x4)) = r0;
    0x00031cc2 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00031cc4 strb.w r3, [fp, 1]                                |     *(arg_1h) = r3;
    0x00031cc8 b 0x31c4e                                         |     goto label_1;
                                                                 | label_43:
    0x00031cca ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00031ccc add r1, sp, 0xa4                                  |     r1 += var_a4h;
    0x00031cce ldr r7, [sp, 0x20]                                |     r7 = var_20h;
    0x00031cd0 mov r0, r6                                        |     r0 = r6;
    0x00031cd2 ldr r3, [r7, 0x48]                                |     r3 = *((r7 + 0x48));
    0x00031cd4 str r2, [sp]                                      |     *(sp) = r2;
    0x00031cd6 add r2, sp, 0xa8                                  |     r2 += var_a8h;
    0x00031cd8 bl 0x312b0                                        |     fcn_000312b0 (r0, r1, r2, r3, r4, r5);
    0x00031cdc ldr r4, [sp, 0xa4]                                |     r4 = var_a4h;
    0x00031cde mov r5, r0                                        |     r5 = r0;
    0x00031ce0 str r0, [sp, 0xa0]                                |     var_a0h = r0;
    0x00031ce2 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00031ce4 bne.w 0x31f6e                                     |         goto label_55;
                                                                 |     }
    0x00031ce8 add r5, sp, 0xa0                                  |     r5 += var_a0h;
    0x00031cea mov r1, r4                                        |     r1 = r4;
    0x00031cec mov r2, r5                                        |     r2 = r5;
    0x00031cee mov r0, r7                                        |     r0 = r7;
    0x00031cf0 bl 0x2f4f0                                        |     fcn_0002f4f0 (r0, r1, r2);
    0x00031cf4 ldrb r3, [r6, 0x11]                               |     r3 = *((r6 + 0x11));
    0x00031cf6 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00031cf8 bne.w 0x31f78                                     |         goto label_56;
                                                                 |     }
                                                                 | label_8:
    0x00031cfc ldr r5, [sp, 0xa0]                                |     r5 = var_a0h;
                                                                 |     if (r5 == 0) {
    0x00031cfe cbnz r5, 0x31d60                                  |         
    0x00031d00 ldr r6, [sp, 0x20]                                |         r6 = var_20h;
    0x00031d02 add.w r0, r4, 0x14                                |         r0 = r4 + 0x14;
    0x00031d06 ldrb r2, [r6, 1]                                  |         r2 = *((r6 + 1));
    0x00031d08 add.w r1, r6, 0x14                                |         r1 = r6 + 0x14;
    0x00031d0c lsls r2, r2, 1                                    |         r2 <<= 1;
    0x00031d0e blx 0x6214                                        |         fcn_00006214 ();
    0x00031d12 ldrb r2, [r6, 1]                                  |         r2 = *((r6 + 1));
    0x00031d14 add.w r1, r6, 0x20                                |         r1 = r6 + 0x20;
    0x00031d18 add.w r0, r4, 0x20                                |         r0 = r4 + 0x20;
    0x00031d1c lsls r2, r2, 2                                    |         r2 <<= 2;
    0x00031d1e blx 0x6214                                        |         fcn_00006214 ();
    0x00031d22 ldrb r2, [r6, 1]                                  |         r2 = *((r6 + 1));
    0x00031d24 mov r0, r6                                        |         r0 = r6;
    0x00031d26 ldr r3, [r4, 0x38]                                |         r3 = *((r4 + 0x38));
    0x00031d28 strb r2, [r4, 1]                                  |         *((r4 + 1)) = r2;
    0x00031d2a ldrb r1, [r3]                                     |         r1 = *(r3);
    0x00031d2c and r1, r1, 0xf7                                  |         r1 &= 0xf7;
    0x00031d30 bl 0x28d10                                        |         fcn_00028d10 (r0, r1);
    0x00031d34 ldr r3, [sp, 0xa8]                                |         r3 = var_a8h;
    0x00031d36 movs r0, 1                                        |         r0 = 1;
    0x00031d38 ldrb r2, [r6, 5]                                  |         r2 = *((r6 + 5));
    0x00031d3a ldr r6, [r6, 0x38]                                |         r6 = *((r6 + 0x38));
    0x00031d3c strd r4, r0, [sp, 0x20]                           |         __asm ("strd r4, r0, [var_24h]");
    0x00031d40 adds r2, 8                                        |         r2 += 8;
    0x00031d42 lsrs r7, r3, 0x18                                 |         r7 = r3 >> 0x18;
    0x00031d44 adds r1, r6, r2                                   |         r1 = r6 + r2;
    0x00031d46 strb r7, [r6, r2]                                 |         *((r6 + r2)) = r7;
    0x00031d48 lsrs r2, r3, 0x10                                 |         r2 = r3 >> 0x10;
    0x00031d4a strb r3, [r1, 3]                                  |         *((r1 + 3)) = r3;
    0x00031d4c lsrs r3, r3, 8                                    |         r3 >>= 8;
    0x00031d4e strb r2, [r1, 1]                                  |         *((r1 + 1)) = r2;
    0x00031d50 strb r3, [r1, 2]                                  |         *((r1 + 2)) = r3;
    0x00031d52 ldr r3, [sp, 0x30]                                |         r3 = var_30h;
    0x00031d54 str.w r4, [r3, 0x84]                              |         __asm ("str.w r4, [r3, 0x84]");
    0x00031d58 str r0, [r3, 0x54]                                |         *((r3 + 0x54)) = r0;
    0x00031d5a strh.w r5, [r3, 0x58]                             |         *((r3 + 0x58)) = r5;
    0x00031d5e b 0x31a78                                         |         goto label_2;
                                                                 |     }
                                                                 | label_7:
    0x00031d60 ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x00031d62 movs r3, 0                                        |     r3 = 0;
    0x00031d64 str.w r3, [r2, 0x84]                              |     __asm ("str.w r3, [r2, 0x84]");
    0x00031d68 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00031d6a beq.w 0x31aa2                                     |         goto label_3;
                                                                 |     }
    0x00031d6e ldr r0, [r4, 0x44]                                |     r0 = *((r4 + 0x44));
    0x00031d70 bl 0x2bd94                                        |     fcn_0002bd94 (r0);
    0x00031d74 b 0x31aa2                                         |     goto label_3;
                                                                 | label_53:
    0x00031d76 add.w r2, sl, 1                                   |     r2 = sl + 1;
    0x00031d7a movs r3, 0xc                                      |     r3 = 0xc;
    0x00031d7c lsls r2, r2, 2                                    |     r2 <<= 2;
    0x00031d7e movs r1, 0                                        |     r1 = 0;
    0x00031d80 str r0, [sp, 0x14]                                |     var_14h = r0;
    0x00031d82 ldr r0, [sp, 0x58]                                |     r0 = var_58h;
    0x00031d84 blx 0x67ec                                        |     fcn_000067ec ();
    0x00031d88 movs r0, 0                                        |     r0 = 0;
    0x00031d8a bl 0xde98                                         |     fcn_0000de98 (r0);
    0x00031d8e ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x00031d90 ldr.w sl, [sp, 0x14]                              |     sl = var_14h;
    0x00031d94 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x00031d96 ble 0x31df4                                       |         goto label_24;
                                                                 |     }
    0x00031d98 ldr r3, [sp, 0xd0]                                |     r3 = var_d0h;
    0x00031d9a str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x00031d9c movs r3, 0                                        |     r3 = 0;
    0x00031d9e str r3, [sp, 0x14]                                |     var_14h = r3;
                                                                 | label_19:
    0x00031da0 ldr r6, [sp, 0x44]                                |     r6 = var_44h;
    0x00031da2 add r5, sp, 0xd4                                  |     r5 += var_d4h;
    0x00031da4 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00031da6 movs r4, 0                                        |     r4 = 0;
                                                                 |     do {
                                                                 |         if (r3 != 0) {
    0x00031da8 cbz r3, 0x31db0                                   |             
    0x00031daa ldr r0, [r3, 0x44]                                |             r0 = *((r3 + 0x44));
    0x00031dac bl 0x2bd94                                        |             fcn_0002bd94 (r0);
                                                                 |         }
    0x00031db0 cmp r4, r6                                        |         
                                                                 |         if (r4 >= r6) {
    0x00031db2 bge 0x31dd4                                       |             goto label_57;
                                                                 |         }
    0x00031db4 ldr r3, [r5], 4                                   |         r3 = *(r5);
                                                                 |         r5 += 4;
    0x00031db8 adds r4, 1                                        |         r4++;
    0x00031dba b 0x31da8                                         |         
                                                                 |     } while (1);
                                                                 | label_16:
    0x00031dbc mov sl, r0                                        |     sl = r0;
    0x00031dbe ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x00031dc0 bl 0xde98                                         |     fcn_0000de98 (r0);
    0x00031dc4 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x00031dc6 cmp r3, 0                                         |     
    0x00031dc8 itt gt                                            |     
                                                                 |     if (r3 <= 0) {
    0x00031dca movgt r3, r7                                      |         r3 = r7;
                                                                 |     }
                                                                 |     if (r3 <= 0) {
    0x00031dcc strgt r3, [sp, 0x14]                              |         var_14h = r3;
                                                                 |     }
                                                                 |     if (r3 > 0) {
    0x00031dce bgt.w 0x322c4                                     |         goto label_21;
                                                                 |     }
    0x00031dd2 str r7, [sp, 0x14]                                |     var_14h = r7;
                                                                 | label_57:
    0x00031dd4 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
                                                                 |     if (r3 == 0) {
    0x00031dd6 cbz r3, 0x31df4                                   |         goto label_24;
                                                                 |     }
    0x00031dd8 add r3, sp, 0xe8                                  |     r3 += var_e8h;
    0x00031dda str r3, [sp, 0x2c]                                |     var_2ch = r3;
                                                                 | label_22:
    0x00031ddc ldr r4, [sp, 0x2c]                                |     r4 = var_2ch;
    0x00031dde ldr r6, [sp, 0x14]                                |     r6 = var_14h;
    0x00031de0 ldr r5, [sp, 0x48]                                |     r5 = var_48h;
                                                                 |     do {
    0x00031de2 ldr r3, [r4], 4                                   |         r3 = *(r4);
                                                                 |         r4 += 4;
                                                                 |         if (r3 != 0) {
    0x00031de6 cbz r3, 0x31dee                                   |             
    0x00031de8 ldr r0, [r3, 0x44]                                |             r0 = *((r3 + 0x44));
    0x00031dea bl 0x2bd94                                        |             fcn_0002bd94 (r0);
                                                                 |         }
    0x00031dee adds r5, 1                                        |         r5++;
    0x00031df0 cmp r5, r6                                        |         
    0x00031df2 blt 0x31de2                                       |         
                                                                 |     } while (r5 < r6);
                                                                 | label_24:
    0x00031df4 ldr r0, [sp, 0x4c]                                |     r0 = var_4ch;
    0x00031df6 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00031df8 str r3, [sp, 0x4c]                                |     var_4ch = r3;
                                                                 |     if (r0 != 0) {
    0x00031dfa cbz r0, 0x31e00                                   |         
    0x00031dfc bl 0x11040                                        |         fcn_00011040 (r0);
                                                                 |     }
                                                                 | label_13:
    0x00031e00 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00031e02 movs r2, 0                                        |     r2 = 0;
    0x00031e04 strb r2, [r3, 1]                                  |     *((r3 + 1)) = r2;
    0x00031e06 ldr r0, [r3, 0x44]                                |     r0 = *((r3 + 0x44));
    0x00031e08 bl 0x2bd94                                        |     fcn_0002bd94 (r0);
    0x00031e0c ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00031e0e ldrh.w r2, [r3, 0x54]                             |     r2 = *((r3 + 0x54));
    0x00031e12 subs r2, 1                                        |     r2--;
    0x00031e14 sxth r2, r2                                       |     __asm ("sxth r2, r2");
    0x00031e16 str r2, [sp, 0x24]                                |     var_24h = r2;
    0x00031e18 strh.w r2, [r3, 0x54]                             |     *((r3 + 0x54)) = r2;
    0x00031e1c cmp.w sl, 0                                       |     
                                                                 |     if (sl != 0) {
    0x00031e20 bne.w 0x3289c                                     |         goto label_58;
                                                                 |     }
    0x00031e24 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00031e26 ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x00031e28 adds r3, 0x20                                     |     r3 += 0x20;
    0x00031e2a ldr.w r3, [r2, r3, lsl 2]                         |     offset_4 = r3 << 2;
                                                                 |     r3 = *((r2 + offset_4));
    0x00031e2e str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00031e30 b 0x31a78                                         |     goto label_2;
                                                                 | label_54:
    0x00031e32 ldr.w r3, [sb, 0x20]                              |     r3 = *((sb + 0x20));
    0x00031e36 ldr r4, [sp, 0x1c]                                |     r4 = var_1ch;
    0x00031e38 ldr r1, [sp, 0x54]                                |     r1 = var_54h;
    0x00031e3a add.w r2, r3, 0x50                                |     r2 = r3 + 0x50;
    0x00031e3e str r0, [sp, 0x14]                                |     var_14h = r0;
    0x00031e40 adds r4, 3                                        |     r4 += 3;
    0x00031e42 str r2, [sp, 0x70]                                |     var_70h = r2;
    0x00031e44 bic r4, r4, 3                                     |     r4 = BIT_MASK (r4, 3);
    0x00031e48 mla r3, r1, r2, r3                                |     __asm ("mla r3, r1, r2, r3");
    0x00031e4c lsls r5, r4, 1                                    |     r5 = r4 << 1;
    0x00031e4e adds r0, r5, r4                                   |     r0 = r5 + r4;
    0x00031e50 add.w r0, r3, r0, lsl 1                           |     r0 = r3 + (r0 << 1);
    0x00031e54 bl 0xdd58                                         |     fcn_0000dd58 (r0, r1, r2, r3, r4, r5, r6);
    0x00031e58 str r0, [sp, 0x28]                                |     var_28h = r0;
    0x00031e5a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00031e5c beq.w 0x32402                                     |         goto label_59;
                                                                 |     }
    0x00031e60 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00031e62 add.w r8, r3, r4, lsl 2                           |     r8 = r3 + (r4 << 2);
    0x00031e66 ldr r4, [sp, 0xd0]                                |     r4 = var_d0h;
    0x00031e68 ldrb r3, [r4, 3]                                  |     r3 = *((r4 + 3));
    0x00031e6a ldrb r7, [r4, 4]                                  |     r7 = *((r4 + 4));
    0x00031e6c str r4, [sp, 0x2c]                                |     var_2ch = r4;
    0x00031e6e lsls r3, r3, 2                                    |     r3 <<= 2;
    0x00031e70 str r3, [sp, 0x74]                                |     var_74h = r3;
    0x00031e72 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x00031e74 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x00031e76 ble.w 0x3235e                                     |         goto label_60;
                                                                 |     }
    0x00031e7a add.w r3, r8, r5                                  |     r3 = r8 + r5;
    0x00031e7e str.w sl, [sp, 0x1c]                              |     __asm ("str.w sl, [var_1ch]");
    0x00031e82 str r3, [sp, 0x78]                                |     var_78h = r3;
    0x00031e84 clz r3, r7                                        |     r3 &= r7;
    0x00031e88 lsrs r3, r3, 5                                    |     r3 >>= 5;
    0x00031e8a str.w sl, [sp, 0x84]                              |     __asm ("str.w sl, [var_84h]");
    0x00031e8e str.w fp, [sp, 0x88]                              |     __asm ("str.w fp, [var_88h]");
    0x00031e92 str r3, [sp, 0x7c]                                |     var_7ch = r3;
    0x00031e94 add r3, sp, 0xdc                                  |     r3 += var_dch;
    0x00031e96 str r3, [sp, 0x80]                                |     var_80h = r3;
    0x00031e98 strd r8, sb, [sp, 0x34]                           |     __asm ("strd r8, sb, [var_38h]");
    0x00031e9c str r7, [sp, 0x8c]                                |     var_8ch = r7;
    0x00031e9e str.w sl, [sp, 0x18]                              |     __asm ("str.w sl, [var_18h]");
                                                                 | label_5:
    0x00031ea2 ldr r7, [sp, 0x38]                                |     r7 = var_38h;
    0x00031ea4 movs r2, 0x4c                                     |     r2 = 0x4c;
    0x00031ea6 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00031ea8 mov r1, r4                                        |     r1 = r4;
    0x00031eaa ldr r5, [r7, 0x20]                                |     r5 = *((r7 + 0x20));
    0x00031eac add r5, r3                                        |     r5 += r3;
    0x00031eae ldr r3, [sp, 0x78]                                |     r3 = var_78h;
    0x00031eb0 add r5, r3                                        |     r5 += r3;
    0x00031eb2 ldr r3, [sp, 0x80]                                |     r3 = var_80h;
    0x00031eb4 adds r6, r5, r2                                   |     r6 = r5 + r2;
    0x00031eb6 mov r0, r5                                        |     r0 = r5;
    0x00031eb8 str.w r5, [r3, sl, lsl 2]                         |     __asm ("str.w r5, [r3, sl, lsl 2]");
    0x00031ebc blx 0x6214                                        |     fcn_00006214 ();
    0x00031ec0 ldr r2, [r7, 0x20]                                |     r2 = *((r7 + 0x20));
    0x00031ec2 mov r0, r6                                        |     r0 = r6;
    0x00031ec4 str r6, [r5, 0x38]                                |     *((r5 + 0x38)) = r6;
    0x00031ec6 ldr r1, [r4, 0x38]                                |     r1 = *((r4 + 0x38));
    0x00031ec8 blx 0x6214                                        |     fcn_00006214 ();
    0x00031ecc ldrb r3, [r5, 1]                                  |     r3 = *((r5 + 1));
    0x00031ece ldrh r7, [r5, 0x10]                               |     r7 = *((r5 + 0x10));
    0x00031ed0 add r7, r3                                        |     r7 += r3;
    0x00031ed2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00031ed4 beq 0x31fa2                                       |         goto label_61;
                                                                 |     }
                                                                 |     if (r7 == 0) {
    0x00031ed6 cbz r7, 0x31f36                                   |         goto label_10;
                                                                 |     }
    0x00031ed8 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x00031eda add.w r8, r3, -1                                  |     r8 = r3 + -1;
    0x00031ede ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00031ee0 movs r6, 0                                        |     r6 = 0;
    0x00031ee2 add.w r4, r5, 0x14                                |     r4 = r5 + 0x14;
    0x00031ee6 add.w sb, r2, r3, lsl 2                           |     sb = r2 + (r3 << 2);
    0x00031eea ldr r2, [sp, 0x34]                                |     r2 = var_34h;
    0x00031eec add.w fp, r2, r3, lsl 1                           |     
                                                                 | label_4:
    0x00031ef0 mov r2, r6                                        |     r2 = r6;
    0x00031ef2 mov r3, r8                                        |     r3 = r8;
                                                                 |     do {
    0x00031ef4 ldrh.w r1, [r4, r3, lsl 1]                        |         offset_5 = r3 << 1;
                                                                 |         r1 = *((r4 + offset_5));
    0x00031ef8 cmp r1, r2                                        |         
                                                                 |         if (r1 <= r2) {
    0x00031efa bgt 0x31f00                                       |             
                                                                 |             if (r1 == r2) {
    0x00031efc beq 0x31f66                                       |                 goto label_62;
                                                                 |             }
    0x00031efe subs r2, 1                                        |             r2--;
                                                                 |         }
    0x00031f00 subs r3, 1                                        |         r3--;
    0x00031f02 bhs 0x31ef4                                       |         
                                                                 |     } while (r3 >= 1);
    0x00031f04 ldr r3, [r5, 0x40]                                |     r3 = *((r5 + 0x40));
    0x00031f06 ldrh r0, [r5, 0x12]                               |     r0 = *((r5 + 0x12));
    0x00031f08 ldr r1, [r5, 0x38]                                |     r1 = *((r5 + 0x38));
    0x00031f0a ldrb.w ip, [r3, r2, lsl 1]                        |     offset_6 = r2 << 1;
                                                                 |     ip = *((r3 + offset_6));
    0x00031f0e add.w r3, r3, r2, lsl 1                           |     r3 += (r2 << 1);
    0x00031f12 ldrb r3, [r3, 1]                                  |     r3 = *((r3 + 1));
    0x00031f14 orr.w r3, r3, ip, lsl 8                           |     r3 |= (ip << 8);
    0x00031f18 ands r3, r0                                       |     r3 &= r0;
    0x00031f1a add r1, r3                                        |     r1 += r3;
                                                                 | label_6:
    0x00031f1c adds r6, 1                                        |     r6++;
    0x00031f1e mov r0, r5                                        |     r0 = r5;
    0x00031f20 str r1, [sb], 4                                   |     *(sb) = r1;
                                                                 |     sb += 4;
    0x00031f24 bl 0x9f14                                         |     fcn_00009f14 (r0, r1, r2, r3);
    0x00031f28 cmp r7, r6                                        |     
    0x00031f2a strh r0, [fp], 2                                  |     *(fp) = r0;
                                                                 |     fp += 2;
                                                                 |     if (r7 != r6) {
    0x00031f2e bne 0x31ef0                                       |         goto label_4;
                                                                 |     }
    0x00031f30 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00031f32 add r3, r7                                        |     r3 += r7;
    0x00031f34 str r3, [sp, 0x1c]                                |     var_1ch = r3;
                                                                 | label_10:
    0x00031f36 ldr r3, [sp, 0x7c]                                |     r3 = var_7ch;
    0x00031f38 ldr r2, [sp, 0x44]                                |     r2 = var_44h;
    0x00031f3a cmp r2, sl                                        |     
    0x00031f3c ite le                                            |     
                                                                 |     if (r2 > sl) {
    0x00031f3e movle r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r2 <= sl) {
    0x00031f40 andgt r3, r3, 1                                   |         r3 &= 1;
                                                                 |     }
    0x00031f44 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00031f46 bne.w 0x322f4                                     |         goto label_63;
                                                                 |     }
    0x00031f4a ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00031f4c ldr r1, [sp, 0x70]                                |     r1 = var_70h;
    0x00031f4e add r2, r1                                        |     r2 += r1;
    0x00031f50 str r2, [sp, 0x18]                                |     var_18h = r2;
    0x00031f52 ldr r2, [sp, 0x44]                                |     r2 = var_44h;
    0x00031f54 cmp r2, sl                                        |     
                                                                 |     if (r2 == sl) {
    0x00031f56 beq.w 0x32112                                     |         goto label_64;
                                                                 |     }
                                                                 | label_23:
    0x00031f5a ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x00031f5c add.w sl, sl, 1                                   |     sl++;
    0x00031f60 ldr.w r4, [r3, sl, lsl 2]                         |     offset_7 = sl << 2;
                                                                 |     r4 = *((r3 + offset_7));
    0x00031f64 b 0x31ea2                                         |     goto label_5;
                                                                 | label_62:
    0x00031f66 adds r3, 8                                        |     r3 += 8;
    0x00031f68 ldr.w r1, [r5, r3, lsl 2]                         |     offset_8 = r3 << 2;
                                                                 |     r1 = *((r5 + offset_8));
    0x00031f6c b 0x31f1c                                         |     goto label_6;
                                                                 | label_55:
    0x00031f6e ldrb r3, [r6, 0x11]                               |     r3 = *((r6 + 0x11));
    0x00031f70 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00031f72 beq.w 0x31d60                                     |         goto label_7;
                                                                 |     }
    0x00031f76 add r5, sp, 0xa0                                  |     r5 += var_a0h;
                                                                 | label_56:
    0x00031f78 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00031f7a mov r0, r6                                        |     r0 = r6;
    0x00031f7c ldr r1, [sp, 0xa8]                                |     r1 = var_a8h;
    0x00031f7e movs r2, 5                                        |     r2 = 5;
    0x00031f80 ldr r3, [r3, 0x48]                                |     r3 = *((r3 + 0x48));
    0x00031f82 str r5, [sp]                                      |     *(sp) = r5;
    0x00031f84 bl 0x2d07c                                        |     fcn_0002d07c (r0, r1, r2, r3, r4, r5, r6);
    0x00031f88 b 0x31cfc                                         |     goto label_8;
                                                                 | label_49:
    0x00031f8a str r1, [sp, 0x50]                                |     var_50h = r1;
    0x00031f8c adds r3, r2, 1                                    |     r3 = r2 + 1;
    0x00031f8e ldr.w r1, [fp, 0x38]                              |     r1 = *(arg_38h);
    0x00031f92 str r3, [sp, 0x54]                                |     var_54h = r3;
    0x00031f94 str r2, [sp, 0x44]                                |     var_44h = r2;
                                                                 | label_51:
    0x00031f96 ldrb.w r3, [fp, 5]                                |     r3 = *(arg_5h);
    0x00031f9a adds r3, 8                                        |     r3 += 8;
    0x00031f9c adds r3, r1, r3                                   |     r3 = r1 + r3;
    0x00031f9e str r3, [sp, 0x5c]                                |     var_5ch = r3;
    0x00031fa0 b 0x31b94                                         |     goto label_9;
                                                                 | label_61:
    0x00031fa2 ldrh.w r8, [r5, 0x12]                             |     r8 = *((r5 + 0x12));
    0x00031fa6 ldrh r4, [r5, 0xc]                                |     r4 = *((r5 + 0xc));
    0x00031fa8 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x00031faa beq 0x31f36                                       |         goto label_10;
                                                                 |     }
    0x00031fac ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00031fae add r4, r5                                        |     r4 += r5;
    0x00031fb0 ldr r1, [sp, 0x28]                                |     r1 = var_28h;
    0x00031fb2 ldr r0, [sp, 0x34]                                |     r0 = var_34h;
    0x00031fb4 adds r2, r7, r3                                   |     r2 = r7 + r3;
    0x00031fb6 str r2, [sp, 0x1c]                                |     var_1ch = r2;
    0x00031fb8 add.w r7, r1, r3, lsl 2                           |     r7 = r1 + (r3 << 2);
    0x00031fbc add.w fp, r1, r2, lsl 2                           |     
    0x00031fc0 add.w sb, r0, r3, lsl 1                           |     sb = r0 + (r3 << 1);
                                                                 |     do {
    0x00031fc4 ldrb.w r3, [r4, 0x4c]                             |         r3 = *((r4 + 0x4c));
    0x00031fc8 mov r0, r5                                        |         r0 = r5;
    0x00031fca ldrb.w r1, [r4, 0x4d]                             |         r1 = *((r4 + 0x4d));
    0x00031fce adds r4, 2                                        |         r4 += 2;
    0x00031fd0 orr.w r1, r1, r3, lsl 8                           |         r1 |= (r3 << 8);
    0x00031fd4 and.w r1, r1, r8                                  |         r1 &= r8;
    0x00031fd8 add r1, r6                                        |         r1 += r6;
    0x00031fda str r1, [r7], 4                                   |         *(r7) = r1;
                                                                 |         r7 += 4;
    0x00031fde bl 0x9f14                                         |         fcn_00009f14 (r0, r1, r2, r3);
    0x00031fe2 cmp fp, r7                                        |         
    0x00031fe4 strh r0, [sb], 2                                  |         *(sb) = r0;
                                                                 |         sb += 2;
    0x00031fe8 bne 0x31fc4                                       |         
                                                                 |     } while (fp != r7);
    0x00031fea b 0x31f36                                         |     goto label_10;
                                                                 | label_50:
    0x00031fec ldr r1, [sp, 0x50]                                |     r1 = var_50h;
    0x00031fee cmp r1, r2                                        |     
                                                                 |     if (r1 == r2) {
    0x00031ff0 beq.w 0x3239c                                     |         goto label_65;
                                                                 |     }
    0x00031ff4 ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x00031ff6 ldr r1, [sp, 0x44]                                |     r1 = var_44h;
    0x00031ff8 subs r2, 1                                        |     r2--;
    0x00031ffa str r2, [sp, 0x50]                                |     var_50h = r2;
    0x00031ffc add r2, r1                                        |     r2 += r1;
    0x00031ffe subs r3, r2, r3                                   |     r3 = r2 - r3;
    0x00032000 b 0x31b66                                         |     goto label_11;
                                                                 | label_47:
    0x00032002 mov r3, r2                                        |     r3 = r2;
    0x00032004 ldrh r2, [r2, 0x10]                               |     r2 = *((r2 + 0x10));
    0x00032006 ldrh r3, [r3, 0x14]                               |     r3 = *((r3 + 0x14));
    0x00032008 cmp r3, r2                                        |     
                                                                 |     if (r3 != r2) {
    0x0003200a bne.w 0x31b26                                     |         goto label_12;
                                                                 |     }
    0x0003200e ldr.w r2, [fp, 0x48]                              |     r2 = *(arg_48h);
    0x00032012 cmp r2, 1                                         |     
                                                                 |     if (r2 == 1) {
    0x00032014 beq.w 0x31b26                                     |         goto label_12;
                                                                 |     }
    0x00032018 ldrh.w r2, [fp, 0x10]                             |     r2 = *(arg_10h);
    0x0003201c cmp r2, r4                                        |     
                                                                 |     if (r2 != r4) {
    0x0003201e bne.w 0x31b26                                     |         goto label_12;
                                                                 |     }
    0x00032022 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00032024 ldr r4, [r2, 0x34]                                |     r4 = *((r2 + 0x34));
    0x00032026 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00032028 beq.w 0x32842                                     |         goto label_66;
                                                                 |     }
    0x0003202c ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x0003202e add r2, sp, 0xa4                                  |     r2 += var_a4h;
    0x00032030 add r1, sp, 0x9c                                  |     r1 += var_9ch;
    0x00032032 mov r0, r4                                        |     r0 = r4;
    0x00032034 str r3, [sp]                                      |     *(sp) = r3;
    0x00032036 bl 0x312b0                                        |     r0 = fcn_000312b0 (r0, r1, r2, r3, r4, r5);
    0x0003203a mov sl, r0                                        |     sl = r0;
    0x0003203c str r0, [sp, 0xa0]                                |     var_a0h = r0;
    0x0003203e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00032040 bne.w 0x31e00                                     |         goto label_13;
                                                                 |     }
    0x00032044 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x00032046 ldr r1, [r0, 0x20]                                |     r1 = *((r0 + 0x20));
    0x00032048 str r1, [sp, 0xa8]                                |     var_a8h = r1;
    0x0003204a bl 0x9f14                                         |     fcn_00009f14 (r0, r1, r2, r3);
    0x0003204e ldr r6, [sp, 0x9c]                                |     r6 = var_9ch;
    0x00032050 movs r1, 0xd                                      |     r1 = 0xd;
    0x00032052 strh.w r0, [sp, 0x9a]                             |     var_9ah = r0;
    0x00032056 mov r0, r6                                        |     r0 = r6;
    0x00032058 bl 0x28d10                                        |     fcn_00028d10 (r0, r1);
    0x0003205c mov r1, r5                                        |     r1 = r5;
    0x0003205e add.w r3, sp, 0x9a                                |     r3 += var_9ah;
    0x00032062 add r2, sp, 0xa8                                  |     r2 += var_a8h;
    0x00032064 mov r0, r6                                        |     r0 = r6;
    0x00032066 bl 0x8934                                         |     fcn_00008934 (r0, r1, r2, r3, r4, r5, r6);
    0x0003206a ldrb r3, [r4, 0x11]                               |     r3 = *((r4 + 0x11));
    0x0003206c add r5, sp, 0xa0                                  |     r5 += var_a0h;
    0x0003206e ldr r7, [sp, 0xa4]                                |     r7 = var_a4h;
    0x00032070 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00032072 bne.w 0x32868                                     |         goto label_67;
                                                                 |     }
                                                                 | label_41:
    0x00032076 ldr r4, [sp, 0x20]                                |     r4 = var_20h;
    0x00032078 ldr r2, [r4, 0x40]                                |     r2 = *((r4 + 0x40));
    0x0003207a ldrh r3, [r4, 0x10]                               |     r3 = *((r4 + 0x10));
    0x0003207c ldrh r1, [r4, 0x12]                               |     r1 = *((r4 + 0x12));
    0x0003207e subs r3, 1                                        |     r3--;
    0x00032080 add.w r0, r2, r3, lsl 1                           |     r0 = r2 + (r3 << 1);
    0x00032084 ldrb.w r2, [r2, r3, lsl 1]                        |     offset_9 = r3 << 1;
                                                                 |     r2 = *((r2 + offset_9));
    0x00032088 ldrb r3, [r0, 1]                                  |     r3 = *((r0 + 1));
    0x0003208a orr.w r3, r3, r2, lsl 8                           |     r3 |= (r2 << 8);
    0x0003208e ldr r2, [r4, 0x38]                                |     r2 = *((r4 + 0x38));
    0x00032090 ands r3, r1                                       |     r3 &= r1;
    0x00032092 add r2, r3                                        |     r2 += r3;
    0x00032094 add.w r1, r2, 9                                   |     r1 = r2 + 9;
                                                                 |     do {
    0x00032098 mov r4, r2                                        |         r4 = r2;
    0x0003209a adds r2, 1                                        |         r2++;
    0x0003209c str r2, [sp, 0xa8]                                |         var_a8h = r2;
    0x0003209e cmp r1, r2                                        |         
    0x000320a0 ldrb r0, [r2, -0x1]                               |         r0 = *((r2 - 0x1));
    0x000320a4 ite ls                                            |         
                                                                 |         if (r1 > r2) {
    0x000320a6 movls r3, 0                                       |             r3 = 0;
                                                                 |         }
                                                                 |         if (r1 <= r2) {
    0x000320a8 movhi r3, 1                                       |             r3 = 1;
                                                                 |         }
    0x000320aa ands.w r3, r3, r0, lsr 7                          |         r3 &= (r0 >> 7);
    0x000320ae bne 0x32098                                       |         
                                                                 |     } while (r3 != r3);
    0x000320b0 adds r4, 0xa                                      |     r4 += 0xa;
    0x000320b2 add r3, sp, 0x128                                 |     r3 += var_128h;
                                                                 |     do {
    0x000320b4 adds r2, 1                                        |         r2++;
    0x000320b6 str r2, [sp, 0xa8]                                |         var_a8h = r2;
    0x000320b8 ldrb r1, [r2, -0x1]                               |         r1 = *((r2 - 0x1));
    0x000320bc strb r1, [r3], 1                                  |         *(r3) = r1;
                                                                 |         r3++;
    0x000320c0 lsrs r1, r1, 7                                    |         r1 >>= 7;
    0x000320c2 cmp r4, r2                                        |         
    0x000320c4 ite ls                                            |         
                                                                 |         if (r4 > r2) {
    0x000320c6 movls r1, 0                                       |             r1 = 0;
                                                                 |         }
                                                                 |         if (r4 <= r2) {
    0x000320c8 andhi r1, r1, 1                                   |             r1 &= 1;
                                                                 |         }
    0x000320cc cmp r1, 0                                         |         
    0x000320ce bne 0x320b4                                       |         
                                                                 |     } while (r1 != 0);
    0x000320d0 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x000320d2 mov r0, r1                                        |     r0 = r1;
    0x000320d4 ldrh.w r1, [fp, 0x10]                             |     r1 = *(arg_10h);
    0x000320d8 str r5, [sp, 8]                                   |     var_8h = r5;
    0x000320da ldr r2, [r2, 0x48]                                |     r2 = *((r2 + 0x48));
    0x000320dc strd r0, r2, [sp]                                 |     __asm ("strd r0, r2, [sp]");
    0x000320e0 add r2, sp, 0x124                                 |     r2 += var_124h;
    0x000320e2 subs r3, r3, r2                                   |     r3 -= r2;
    0x000320e4 mov r0, fp                                        |     r0 = fp;
    0x000320e6 bl 0x2f960                                        |     fcn_0002f960 (r0, r1, r2, r3, r4, r5);
    0x000320ea ldrb.w r2, [fp, 5]                                |     r2 = *(arg_5h);
    0x000320ee lsrs r1, r7, 0x18                                 |     r1 = r7 >> 0x18;
    0x000320f0 ldr.w r3, [fp, 0x38]                              |     r3 = *(arg_38h);
    0x000320f4 adds r2, 8                                        |     r2 += 8;
    0x000320f6 strb r1, [r3, r2]                                 |     *((r3 + r2)) = r1;
    0x000320f8 add r3, r2                                        |     r3 += r2;
    0x000320fa strb r7, [r3, 3]                                  |     *((r3 + 3)) = r7;
    0x000320fc lsrs r2, r7, 0x10                                 |     r2 = r7 >> 0x10;
    0x000320fe lsrs r7, r7, 8                                    |     r7 >>= 8;
    0x00032100 strb r2, [r3, 1]                                  |     *((r3 + 1)) = r2;
    0x00032102 strb r7, [r3, 2]                                  |     *((r3 + 2)) = r7;
                                                                 |     if (r6 != 0) {
    0x00032104 cbz r6, 0x3210c                                   |         
    0x00032106 ldr r0, [r6, 0x44]                                |         r0 = *((r6 + 0x44));
    0x00032108 bl 0x2bd94                                        |         fcn_0002bd94 (r0);
                                                                 |     }
    0x0003210c ldr.w sl, [sp, 0xa0]                              |     sl = var_a0h;
    0x00032110 b 0x31e00                                         |     goto label_13;
                                                                 | label_64:
    0x00032112 ldrd r8, sb, [sp, 0x34]                           |     __asm ("ldrd r8, sb, [var_38h]");
    0x00032116 ldr r1, [sp, 0x74]                                |     r1 = var_74h;
    0x00032118 ldr r6, [sp, 0x1c]                                |     r6 = var_1ch;
    0x0003211a ldr.w r2, [sb, 0x24]                              |     r2 = *((sb + 0x24));
    0x0003211e sub.w r4, r1, 0xc                                 |     r4 = r1 - 0xc;
    0x00032122 ldr.w fp, [sp, 0x88]                              |     fp = var_88h;
    0x00032126 ldr r7, [sp, 0x8c]                                |     r7 = var_8ch;
    0x00032128 add r4, r2                                        |     r4 += r2;
    0x0003212a cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0003212c beq.w 0x32830                                     |         goto label_68;
                                                                 |     }
    0x00032130 mov r1, r3                                        |     r1 = r3;
    0x00032132 mov r0, r3                                        |     r0 = r3;
                                                                 |     do {
    0x00032134 ldrh.w r2, [r8, r3, lsl 1]                        |         offset_10 = r3 << 1;
                                                                 |         r2 = *((r8 + offset_10));
    0x00032138 adds r5, r2, 2                                    |         r5 = r2 + 2;
    0x0003213a add r0, r5                                        |         r0 += r5;
    0x0003213c cmp r4, r0                                        |         
                                                                 |         if (r4 < r0) {
    0x0003213e bge 0x3215e                                       |             
    0x00032140 subs r0, r0, r2                                   |             r0 -= r2;
    0x00032142 add r2, sp, 0x138                                 |             r2 += var_138h;
    0x00032144 add.w r2, r2, r1, lsl 2                           |             r2 += (r1 << 2);
    0x00032148 str r0, [r2, -0x28]                               |             var_110h = r0;
    0x0003214c str r3, [r2, -0x3c]                               |             var_fch = r3;
                                                                 |             if (r7 != 0) {
    0x00032150 cbz r7, 0x32154                                   |                 
    0x00032152 subs r3, 1                                        |                 r3--;
                                                                 |             }
    0x00032154 adds r1, 1                                        |             r1++;
    0x00032156 cmp r1, 4                                         |             
                                                                 |             if (r1 > 4) {
    0x00032158 bgt.w 0x32378                                     |                 goto label_69;
                                                                 |             }
    0x0003215c movs r0, 0                                        |             r0 = 0;
                                                                 |         }
    0x0003215e adds r3, 1                                        |         r3++;
    0x00032160 cmp r6, r3                                        |         
    0x00032162 bgt 0x32134                                       |         
                                                                 |     } while (r6 > r3);
    0x00032164 lsls r5, r1, 2                                    |     r5 = r1 << 2;
    0x00032166 adds r3, r1, 1                                    |     r3 = r1 + 1;
    0x00032168 mov r2, r1                                        |     r2 = r1;
    0x0003216a str r1, [sp, 0x34]                                |     var_34h = r1;
    0x0003216c ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x0003216e str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00032170 add.w r3, r5, 0x138                               |     r3 = r5 + 0x138;
    0x00032174 add r3, sp, r3                                    |     r3 = sp + r3;
    0x00032176 str r0, [r3, -0x28]                               |     var_110h = r0;
    0x0003217a str r1, [r3, -0x3c]                               |     var_fch = r1;
    0x0003217e cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00032180 beq.w 0x328a2                                     |         goto label_70;
                                                                 |     }
    0x00032184 add.w r3, r5, 0x138                               |     r3 = r5 + 0x138;
    0x00032188 ldr r6, [sp, 0x40]                                |     r6 = var_40h;
    0x0003218a add.w r4, sp, r3                                  |     r4 = sp + r3;
    0x0003218e ldr r3, [sp, 0x64]                                |     r3 = var_64h;
    0x00032190 subs r4, 0x40                                     |     r4 -= 0x40;
    0x00032192 add r5, r3                                        |     r5 += r3;
    0x00032194 mov ip, r3                                        |     
                                                                 | label_15:
    0x00032196 ldr r3, [r4], -4                                  |     r3 = *(r4);
                                                                 |     r4 += -4;
    0x0003219a mov r1, r0                                        |     r1 = r0;
    0x0003219c ldr r0, [r5, -0x4]                                |     r0 = *((r5 - 0x4));
    0x000321a0 subs r2, r3, 1                                    |     r2 = r3 - 1;
    0x000321a2 subs r3, r3, r7                                   |     r3 -= r7;
                                                                 |     if (r1 == 0) {
    0x000321a4 cbz r1, 0x321d4                                   |         goto label_71;
                                                                 |     }
                                                                 |     do {
                                                                 |         if (r6 != 0) {
    0x000321a6 cbnz r6, 0x321e2                                  |             goto label_72;
                                                                 |         }
    0x000321a8 ldrh.w r3, [r8, r3, lsl 1]                        |         offset_11 = r3 << 1;
                                                                 |         r3 = *((r8 + offset_11));
    0x000321ac ldrh.w r2, [r8, r2, lsl 1]                        |         offset_12 = r2 << 1;
                                                                 |         r2 = *((r8 + offset_12));
    0x000321b0 add.w lr, r1, r3                                  |         lr = r1 + r3;
    0x000321b4 adds r2, 2                                        |         r2 += 2;
    0x000321b6 add.w lr, lr, 1                                   |         lr++;
    0x000321ba subs r2, r0, r2                                   |         r2 = r0 - r2;
    0x000321bc cmp lr, r2                                        |         
                                                                 |         if (lr >= r2) {
    0x000321be bge 0x321e2                                       |             goto label_72;
                                                                 |         }
    0x000321c0 mov r0, r2                                        |         r0 = r2;
                                                                 | label_14:
    0x000321c2 ldr r2, [r4, 4]                                   |         r2 = var_4h_4;
    0x000321c4 adds r3, 2                                        |         r3 += 2;
    0x000321c6 add r1, r3                                        |         r1 += r3;
    0x000321c8 subs r3, r2, 1                                    |         r3 = r2 - 1;
    0x000321ca subs r2, 2                                        |         r2 -= 2;
    0x000321cc str r3, [r4, 4]                                   |         var_4h_4 = r3;
    0x000321ce subs r3, r3, r7                                   |         r3 -= r7;
    0x000321d0 cmp r1, 0                                         |         
    0x000321d2 bne 0x321a6                                       |         
                                                                 |     } while (r1 != 0);
                                                                 | label_71:
    0x000321d4 ldrh.w r2, [r8, r2, lsl 1]                        |     offset_13 = r2 << 1;
                                                                 |     r2 = *((r8 + offset_13));
    0x000321d8 ldrh.w r3, [r8, r3, lsl 1]                        |     offset_14 = r3 << 1;
                                                                 |     r3 = *((r8 + offset_14));
    0x000321dc adds r2, 2                                        |     r2 += 2;
    0x000321de subs r0, r0, r2                                   |     r0 -= r2;
    0x000321e0 b 0x321c2                                         |     goto label_14;
                                                                 | label_72:
    0x000321e2 str r1, [r5]                                      |     *(r5) = r1;
    0x000321e4 str r0, [r5, -0x4]!                               |     *((r5 -= 0x4)) = r0;
    0x000321e8 cmp ip, r5                                        |     
                                                                 |     if (ip != r5) {
    0x000321ea bne 0x32196                                       |         goto label_15;
                                                                 |     }
                                                                 | label_38:
    0x000321ec ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x000321ee ldr r3, [r3, 0x48]                                |     r3 = *((r3 + 0x48));
    0x000321f0 cmp r3, 1                                         |     
                                                                 |     if (r3 < 1) {
    0x000321f2 bls.w 0x3244a                                     |         goto label_73;
                                                                 |     }
                                                                 | label_25:
    0x000321f6 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x000321f8 add r5, sp, 0xe8                                  |     r5 += var_e8h;
    0x000321fa add r2, sp, 0xa8                                  |     r2 += var_a8h;
    0x000321fc str.w fp, [sp, 0x14]                              |     __asm ("str.w fp, [var_14h]");
    0x00032200 str.w r8, [sp, 0x38]                              |     __asm ("str.w r8, [var_38h]");
    0x00032204 movs r4, 1                                        |     r4 = 1;
    0x00032206 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x00032208 mov sl, r2                                        |     sl = r2;
    0x0003220a ldr r6, [sp, 0x58]                                |     r6 = var_58h;
    0x0003220c ldr.w r8, [sp, 0x54]                              |     r8 = var_54h;
    0x00032210 ldrb r3, [r3]                                     |     r3 = *(r3);
    0x00032212 str r5, [sp, 0x2c]                                |     var_2ch = r5;
    0x00032214 str r5, [sp, 0x70]                                |     var_70h = r5;
    0x00032216 str r3, [sp, 0x64]                                |     var_64h = r3;
    0x00032218 add r3, sp, 0xa4                                  |     r3 += var_a4h;
    0x0003221a mov fp, r3                                        |     
    0x0003221c str r7, [sp, 0x68]                                |     var_68h = r7;
    0x0003221e b 0x32254                                         |     goto label_74;
                                                                 | label_17:
    0x00032220 ldr r3, [sp, 0xa4]                                |     r3 = var_a4h;
                                                                 | label_18:
    0x00032222 movs r2, 0                                        |     r2 = 0;
    0x00032224 mov r1, sl                                        |     r1 = sl;
    0x00032226 str r2, [sp]                                      |     *(sp) = r2;
    0x00032228 mov r0, sb                                        |     r0 = sb;
    0x0003222a mov r2, fp                                        |     r2 = fp;
    0x0003222c bl 0x312b0                                        |     fcn_000312b0 (r0, r1, r2, r3, r4, r5);
    0x00032230 str r0, [sp, 0xa0]                                |     var_a0h = r0;
    0x00032232 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00032234 bne.w 0x31dbc                                     |         goto label_16;
                                                                 |     }
    0x00032238 ldrb.w r2, [sb, 0x11]                             |     r2 = *((sb + 0x11));
    0x0003223c mov r7, r4                                        |     r7 = r4;
    0x0003223e ldr r3, [sp, 0xa8]                                |     r3 = var_a8h;
    0x00032240 str r3, [r5]                                      |     *(r5) = r3;
    0x00032242 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00032244 bne 0x322ca                                       |         goto label_75;
                                                                 |     }
                                                                 | label_20:
    0x00032246 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00032248 adds r4, 1                                        |     r4++;
    0x0003224a adds r6, 4                                        |     r6 += 4;
    0x0003224c adds r5, 4                                        |     r5 += 4;
    0x0003224e cmp r3, r7                                        |     
                                                                 |     if (r3 <= r7) {
    0x00032250 ble.w 0x323bc                                     |         goto label_76;
                                                                 |     }
                                                                 | label_74:
    0x00032254 subs r7, r4, 1                                    |     r7 = r4 - 1;
    0x00032256 cmp r8, r7                                        |     
                                                                 |     if (r8 > r7) {
    0x00032258 bgt 0x322a2                                       |         goto label_77;
                                                                 |     }
    0x0003225a ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0003225c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0003225e beq 0x32220                                       |         goto label_17;
                                                                 |     }
    0x00032260 movs r3, 1                                        |     r3 = 1;
    0x00032262 b 0x32222                                         |     goto label_18;
                                                                 | label_52:
    0x00032264 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00032266 movs r4, 0xb                                      |     r4 = 0xb;
    0x00032268 blx 0x5fe8                                        |     fcn_00005fe8 ();
    0x0003226c ldr r1, [pc, 0x2dc]                               |     
    0x0003226e add.w r3, r0, 0x14                                |     r3 = r0 + 0x14;
    0x00032272 movw r2, 0xed21                                   |     r2 = 0xed21;
    0x00032276 movs r0, 0xb                                      |     r0 = 0xb;
    0x00032278 add r1, pc                                        |     r1 = 0x647c8;
    0x0003227a blx 0x6820                                        |     fcn_00006820 ();
    0x0003227e movs r3, 0xc                                      |     r3 = 0xc;
    0x00032280 ldr r2, [sp, 0x34]                                |     r2 = var_34h;
    0x00032282 movs r1, 0                                        |     r1 = 0;
    0x00032284 ldr r0, [sp, 0x58]                                |     r0 = var_58h;
    0x00032286 str r4, [sp, 0xa0]                                |     var_a0h = r4;
    0x00032288 blx 0x67ec                                        |     fcn_000067ec ();
    0x0003228c movs r0, 0                                        |     r0 = 0;
    0x0003228e bl 0xde98                                         |     fcn_0000de98 (r0);
    0x00032292 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x00032294 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x00032296 ble.w 0x32434                                     |         goto label_78;
                                                                 |     }
    0x0003229a ldr r3, [sp, 0xd0]                                |     r3 = var_d0h;
    0x0003229c mov sl, r4                                        |     sl = r4;
    0x0003229e str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x000322a0 b 0x31da0                                         |     goto label_19;
                                                                 | label_77:
    0x000322a2 ldr r3, [r6]                                      |     r3 = *(r6);
    0x000322a4 movs r2, 0                                        |     r2 = 0;
    0x000322a6 str r2, [r6]                                      |     *(r6) = r2;
    0x000322a8 mov r7, r4                                        |     r7 = r4;
    0x000322aa ldr r0, [r3, 0x44]                                |     r0 = *((r3 + 0x44));
    0x000322ac str r3, [r5]                                      |     *(r5) = r3;
    0x000322ae str r3, [sp, 0xa8]                                |     var_a8h = r3;
    0x000322b0 bl 0x2bdf4                                        |     fcn_0002bdf4 (r0, r1, r2);
    0x000322b4 str r0, [sp, 0xa0]                                |     var_a0h = r0;
    0x000322b6 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000322b8 beq 0x32246                                       |         goto label_20;
                                                                 |     }
    0x000322ba mov sl, r0                                        |     sl = r0;
    0x000322bc ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x000322be bl 0xde98                                         |     fcn_0000de98 (r0);
    0x000322c2 str r4, [sp, 0x14]                                |     var_14h = r4;
                                                                 | label_21:
    0x000322c4 ldr r3, [sp, 0xd0]                                |     r3 = var_d0h;
    0x000322c6 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x000322c8 b 0x31da0                                         |     goto label_19;
                                                                 | label_75:
    0x000322ca ldr r1, [r3, 0x48]                                |     r1 = *((r3 + 0x48));
    0x000322cc add r2, sp, 0xa0                                  |     r2 += var_a0h;
    0x000322ce ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x000322d0 mov r0, sb                                        |     r0 = sb;
    0x000322d2 ldr r3, [r3, 0x48]                                |     r3 = *((r3 + 0x48));
    0x000322d4 str r2, [sp]                                      |     *(sp) = r2;
    0x000322d6 movs r2, 5                                        |     r2 = 5;
    0x000322d8 bl 0x2d07c                                        |     fcn_0002d07c (r0, r1, r2, r3, r4, r5, r6);
    0x000322dc ldr r0, [sp, 0xa0]                                |     r0 = var_a0h;
    0x000322de cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000322e0 beq 0x32246                                       |         goto label_20;
                                                                 |     }
    0x000322e2 mov sl, r0                                        |     sl = r0;
    0x000322e4 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x000322e6 bl 0xde98                                         |     fcn_0000de98 (r0);
    0x000322ea ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x000322ec str r4, [sp, 0x14]                                |     var_14h = r4;
    0x000322ee cmp r3, 0                                         |     
                                                                 |     if (r3 > 0) {
    0x000322f0 bgt 0x322c4                                       |         goto label_21;
                                                                 |     }
    0x000322f2 b 0x31ddc                                         |     goto label_22;
                                                                 | label_63:
    0x000322f4 ldr r3, [sp, 0x64]                                |     r3 = var_64h;
    0x000322f6 ldr r4, [sp, 0x1c]                                |     r4 = var_1ch;
    0x000322f8 ldr r6, [sp, 0x34]                                |     r6 = var_34h;
    0x000322fa ldr.w r2, [r3, sl, lsl 2]                         |     offset_15 = sl << 2;
                                                                 |     r2 = *((r3 + offset_15));
    0x000322fe ldr r1, [sp, 0x84]                                |     r1 = var_84h;
    0x00032300 ldr r3, [sp, 0x78]                                |     r3 = var_78h;
    0x00032302 strh.w r2, [r6, r4, lsl 1]                        |     offset_16 = r4 << 1;
                                                                 |     *((r6 + offset_16)) = r2;
    0x00032306 uxth r2, r2                                       |     r2 = (int16_t) r2;
    0x00032308 add r3, r1                                        |     r3 += r1;
    0x0003230a add r1, r2                                        |     r1 += r2;
    0x0003230c mov r0, r3                                        |     r0 = r3;
    0x0003230e str r1, [sp, 0x84]                                |     var_84h = r1;
    0x00032310 ldr r1, [sp, 0x68]                                |     r1 = var_68h;
    0x00032312 ldr.w r1, [r1, sl, lsl 2]                         |     offset_17 = sl << 2;
                                                                 |     r1 = *((r1 + offset_17));
    0x00032316 blx 0x6214                                        |     fcn_00006214 ();
    0x0003231a ldrh.w r2, [r6, r4, lsl 1]                        |     offset_18 = r4 << 1;
                                                                 |     r2 = *((r6 + offset_18));
    0x0003231e mov r3, r0                                        |     r3 = r0;
    0x00032320 ldr r1, [sp, 0x74]                                |     r1 = var_74h;
    0x00032322 mov r0, r6                                        |     r0 = r6;
    0x00032324 ldr r6, [sp, 0x28]                                |     r6 = var_28h;
    0x00032326 subs r2, r2, r1                                   |     r2 -= r1;
    0x00032328 adds r1, r3, r1                                   |     r1 = r3 + r1;
    0x0003232a uxth r2, r2                                       |     r2 = (int16_t) r2;
    0x0003232c str.w r1, [r6, r4, lsl 2]                         |     __asm ("str.w r1, [r6, r4, lsl 2]");
    0x00032330 strh.w r2, [r0, r4, lsl 1]                        |     offset_19 = r4 << 1;
                                                                 |     *((r0 + offset_19)) = r2;
    0x00032334 lsls r0, r4, 1                                    |     r0 = r4 << 1;
    0x00032336 ldrb r1, [r5, 3]                                  |     r1 = *((r5 + 3));
    0x00032338 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0003233a beq.w 0x32440                                     |         goto label_79;
                                                                 |     }
    0x0003233e cmp r2, 3                                         |     
    0x00032340 ittt ls                                           |     
                                                                 |     if (r2 > 3) {
    0x00032342 ldrls r3, [sp, 0x34]                              |         r3 = var_34h;
                                                                 |     }
                                                                 |     if (r2 > 3) {
    0x00032344 movls r2, 4                                       |         r2 = 4;
                                                                 |     }
                                                                 |     if (r2 <= 3) {
    0x00032346 strhls r2, [r3, r0]                               |         __asm ("strhls r2, [r3, r0]");
                                                                 |     }
                                                                 | label_26:
    0x00032348 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0003234a ldr r2, [sp, 0x70]                                |     r2 = var_70h;
    0x0003234c adds r3, 1                                        |     r3++;
    0x0003234e str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00032350 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00032352 add r3, r2                                        |     r3 += r2;
    0x00032354 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00032356 b 0x31f5a                                         |     goto label_23;
                                                                 | label_48:
    0x00032358 mov.w sl, 7                                       |     sl = 7;
    0x0003235c b 0x31df4                                         |     goto label_24;
                                                                 | label_60:
    0x0003235e ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00032360 str.w sl, [sp, 0xfc]                              |     __asm ("str.w sl, [var_fch]");
    0x00032364 ldr r3, [r3, 0x48]                                |     r3 = *((r3 + 0x48));
    0x00032366 cmp r3, 1                                         |     
                                                                 |     if (r3 < 1) {
    0x00032368 bls 0x3241a                                       |         goto label_80;
                                                                 |     }
    0x0003236a movs r3, 1                                        |     r3 = 1;
    0x0003236c str.w sl, [sp, 0x1c]                              |     __asm ("str.w sl, [var_1ch]");
    0x00032370 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00032372 str.w sl, [sp, 0x34]                              |     __asm ("str.w sl, [var_34h]");
    0x00032376 b 0x321f6                                         |     goto label_25;
                                                                 | label_69:
    0x00032378 blx 0x5fe8                                        |     fcn_00005fe8 ();
    0x0003237c ldr r1, [pc, 0x1d0]                               |     
    0x0003237e add.w r3, r0, 0x14                                |     r3 = r0 + 0x14;
    0x00032382 movw r2, 0xedac                                   |     r2 = 0xedac;
    0x00032386 add r1, pc                                        |     r1 = 0x648da;
                                                                 | label_27:
    0x00032388 movs r0, 0xb                                      |     r0 = 0xb;
    0x0003238a movs r4, 0xb                                      |     r4 = 0xb;
    0x0003238c blx 0x6820                                        |     fcn_00006820 ();
    0x00032390 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x00032392 mov sl, r4                                        |     sl = r4;
    0x00032394 str r4, [sp, 0xa0]                                |     var_a0h = r4;
    0x00032396 bl 0xde98                                         |     fcn_0000de98 (r0);
    0x0003239a b 0x31da0                                         |     goto label_19;
                                                                 | label_65:
    0x0003239c ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x0003239e subs r3, r1, 2                                    |     r3 = r1 - 2;
    0x000323a0 ldr.w r1, [fp, 0x38]                              |     r1 = *(arg_38h);
    0x000323a4 add r3, r2                                        |     r3 += r2;
    0x000323a6 str r3, [sp, 0x50]                                |     var_50h = r3;
    0x000323a8 rsb.w r3, r2, 3                                   |     r3 = 3 - r2;
    0x000323ac str r3, [sp, 0x54]                                |     var_54h = r3;
    0x000323ae ldrb.w r3, [fp, 5]                                |     r3 = *(arg_5h);
    0x000323b2 adds r3, 8                                        |     r3 += 8;
    0x000323b4 adds r3, r1, r3                                   |     r3 = r1 + r3;
    0x000323b6 str r3, [sp, 0x5c]                                |     var_5ch = r3;
    0x000323b8 b.w 0x31b94                                       |     goto label_9;
                                                                 | label_76:
    0x000323bc ldr r2, [sp, 0x54]                                |     r2 = var_54h;
    0x000323be mov r3, r7                                        |     r3 = r7;
    0x000323c0 ldr.w r8, [sp, 0x38]                              |     r8 = var_38h;
    0x000323c4 ldr.w fp, [sp, 0x14]                              |     fp = var_14h;
    0x000323c8 cmp r3, r2                                        |     
    0x000323ca str r7, [sp, 0x38]                                |     var_38h = r7;
    0x000323cc ldr r7, [sp, 0x68]                                |     r7 = var_68h;
                                                                 |     if (r3 >= r2) {
    0x000323ce bge.w 0x3283c                                     |         goto label_81;
                                                                 |     }
    0x000323d2 ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x000323d4 ldr r1, [sp, 0x58]                                |     r1 = var_58h;
    0x000323d6 ldr r0, [sp, 0x6c]                                |     r0 = var_6ch;
    0x000323d8 ldr.w sl, [sp, 0xa0]                              |     sl = var_a0h;
    0x000323dc lsls r3, r2, 2                                    |     r3 = r2 << 2;
    0x000323de ldr.w r6, [r1, r2, lsl 2]                         |     offset_20 = r2 << 2;
                                                                 |     r6 = *((r1 + offset_20));
    0x000323e2 ldr r2, [sp, 0x90]                                |     r2 = var_90h;
    0x000323e4 adds r4, r1, r3                                   |     r4 = r1 + r3;
    0x000323e6 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x000323e8 adds r4, 4                                        |     r4 += 4;
    0x000323ea adds r5, r2, r0                                   |     r5 = r2 + r0;
    0x000323ec cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x000323f0 beq 0x3245c                                       |         goto label_82;
                                                                 |     }
                                                                 | label_40:
    0x000323f2 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x000323f4 bl 0xde98                                         |     fcn_0000de98 (r0);
    0x000323f8 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x000323fa str r3, [sp, 0x14]                                |     var_14h = r3;
    0x000323fc ldr r3, [sp, 0xd0]                                |     r3 = var_d0h;
    0x000323fe str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x00032400 b 0x31da0                                         |     goto label_19;
                                                                 | label_59:
    0x00032402 movs r4, 7                                        |     r4 = 7;
    0x00032404 str r4, [sp, 0xa0]                                |     var_a0h = r4;
    0x00032406 mov sl, r4                                        |     sl = r4;
    0x00032408 bl 0xde98                                         |     fcn_0000de98 (r0);
    0x0003240c ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x0003240e cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x00032410 ble.w 0x31df4                                     |         goto label_24;
                                                                 |     }
    0x00032414 ldr r3, [sp, 0xd0]                                |     r3 = var_d0h;
    0x00032416 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x00032418 b 0x31da0                                         |     goto label_19;
                                                                 | label_80:
    0x0003241a blx 0x5fe8                                        |     fcn_00005fe8 ();
    0x0003241e ldr r1, [sp, 0x94]                                |     r1 = var_94h;
    0x00032420 add.w r3, r0, 0x14                                |     r3 = r0 + 0x14;
    0x00032424 movw r2, 0xedea                                   |     r2 = 0xedea;
    0x00032428 movs r0, 0xb                                      |     r0 = 0xb;
    0x0003242a blx 0x6820                                        |     fcn_00006820 ();
    0x0003242e ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x00032430 bl 0xde98                                         |     fcn_0000de98 (r0);
                                                                 | label_78:
    0x00032434 mov.w sl, 0xb                                     |     sl = 0xb;
    0x00032438 b 0x31df4                                         |     goto label_24;
                                                                 | label_45:
    0x0003243a mov r5, r3                                        |     r5 = r3;
    0x0003243c b.w 0x31aa2                                       |     goto label_3;
                                                                 | label_79:
    0x00032440 ldr r2, [r5, 0x38]                                |     r2 = *((r5 + 0x38));
    0x00032442 ldr r1, [sp, 0x74]                                |     r1 = var_74h;
    0x00032444 ldr r2, [r2, 8]                                   |     r2 = *((r2 + 8));
    0x00032446 str r2, [r3, r1]                                  |     *((r3 + r1)) = r2;
    0x00032448 b 0x32348                                         |     goto label_26;
                                                                 | label_73:
    0x0003244a blx 0x5fe8                                        |     fcn_00005fe8 ();
    0x0003244e ldr r1, [pc, 0x104]                               |     
    0x00032450 add.w r3, r0, 0x14                                |     r3 = r0 + 0x14;
    0x00032454 movw r2, 0xedea                                   |     r2 = 0xedea;
    0x00032458 add r1, pc                                        |     r1 = 0x649b2;
    0x0003245a b 0x32388                                         |     goto label_27;
                                                                 | label_82:
    0x0003245c mov sl, r4                                        |     sl = r4;
    0x0003245e b 0x32464                                         |     
                                                                 |     while (sl != r5) {
    0x00032460 ldr r6, [sl], 4                                   |         r6 = *(sl);
                                                                 |         sl += 4;
    0x00032464 ldr r2, [r6, 0x48]                                |         r2 = *((r6 + 0x48));
    0x00032466 mov r1, r6                                        |         r1 = r6;
    0x00032468 ldr r0, [r6, 0x34]                                |         r0 = *((r6 + 0x34));
    0x0003246a bl 0x2fc54                                        |         r0 = fcn_0002fc54 (r0, r1, r2, r3);
    0x0003246e mov r4, r0                                        |         r4 = r0;
    0x00032470 str r0, [sp, 0xa0]                                |         var_a0h = r0;
    0x00032472 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x00032474 bne.w 0x32864                                     |             goto label_83;
                                                                 |         }
    0x00032478 ldr r0, [r6, 0x44]                                |         r0 = *((r6 + 0x44));
    0x0003247a bl 0x2bd94                                        |         fcn_0002bd94 (r0);
    0x0003247e cmp sl, r5                                        |         
    0x00032480 str r4, [sl, -0x4]                                |         *((sl - 0x4)) = r4;
    0x00032484 bne 0x32460                                       |         
                                                                 |     }
                                                                 | label_39:
    0x00032486 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
                                                                 |     if (r3 == 0) {
    0x00032488 cbz r3, 0x324ec                                   |         goto label_84;
                                                                 |     }
    0x0003248a str.w r8, [sp, 0x40]                              |     __asm ("str.w r8, [var_40h]");
    0x0003248e mov.w lr, 0                                       |     lr = 0;
    0x00032492 ldr.w ip, [sp, 0x2c]                              |     ip = var_2ch;
    0x00032496 mov sl, r7                                        |     sl = r7;
    0x00032498 ldr r5, [sp, 0x18]                                |     r5 = var_18h;
    0x0003249a ldr.w r8, [sp, 0x34]                              |     r8 = var_34h;
                                                                 | label_28:
    0x0003249e ldr r7, [ip], 4                                   |     r7 = *(ip);
                                                                 |     ip += 4;
    0x000324a2 mov r6, lr                                        |     r6 = lr;
    0x000324a4 add.w lr, lr, 1                                   |     lr++;
    0x000324a8 cmp r5, lr                                        |     
    0x000324aa ldr r2, [r7, 0x48]                                |     r2 = *((r7 + 0x48));
                                                                 |     if (r5 <= lr) {
    0x000324ac ble 0x324e2                                       |         goto label_85;
                                                                 |     }
    0x000324ae mov r4, ip                                        |     r4 = ip;
    0x000324b0 mov r0, r6                                        |     r0 = r6;
    0x000324b2 mov r3, lr                                        |     r3 = lr;
                                                                 |     do {
    0x000324b4 ldr r1, [r4], 4                                   |         r1 = *(r4);
                                                                 |         r4 += 4;
    0x000324b8 ldr r1, [r1, 0x48]                                |         r1 = *((r1 + 0x48));
    0x000324ba cmp r1, r2                                        |         
    0x000324bc it lo                                             |         
                                                                 |         if (r1 >= r2) {
    0x000324be movlo r0, r3                                      |             r0 = r3;
                                                                 |         }
    0x000324c0 add.w r3, r3, 1                                   |         r3++;
    0x000324c4 it lo                                             |         
                                                                 |         if (r1 >= r2) {
    0x000324c6 movlo r2, r1                                      |             r2 = r1;
                                                                 |         }
    0x000324c8 cmp r5, r3                                        |         
    0x000324ca bne 0x324b4                                       |         
                                                                 |     } while (r5 != r3);
    0x000324cc cmp r0, r6                                        |     
                                                                 |     if (r0 > r6) {
    0x000324ce ble 0x324e2                                       |         
    0x000324d0 add r3, sp, 0x138                                 |         r3 += var_138h;
    0x000324d2 add.w r0, r3, r0, lsl 2                           |         r0 = r3 + (r0 << 2);
    0x000324d6 ldr r3, [r0, -0x50]                               |         r3 = var_ech;
    0x000324da str r3, [ip, -0x4]                                |         *((ip - 0x4)) = r3;
    0x000324de str r7, [r0, -0x50]                               |         var_ech = r7;
                                                                 |     }
                                                                 | label_85:
    0x000324e2 cmp lr, r8                                        |     
                                                                 |     if (lr != r8) {
    0x000324e4 bne 0x3249e                                       |         goto label_28;
                                                                 |     }
    0x000324e6 ldr.w r8, [sp, 0x40]                              |     r8 = var_40h;
    0x000324ea mov r7, sl                                        |     r7 = sl;
                                                                 | label_84:
    0x000324ec ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x000324ee movs r6, 0                                        |     r6 = 0;
    0x000324f0 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x000324f2 add r0, sp, 0xfc                                  |     r0 += var_fch;
    0x000324f4 ldr r1, [sp, 0x5c]                                |     r1 = var_5ch;
    0x000324f6 str.w fp, [sp, 0x34]                              |     __asm ("str.w fp, [var_34h]");
    0x000324fa add r3, r2                                        |     r3 += r2;
    0x000324fc add r2, sp, 0x138                                 |     r2 += var_138h;
    0x000324fe str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00032500 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x00032502 str.w sb, [sp, 0x7c]                              |     __asm ("str.w sb, [var_7ch]");
    0x00032506 mov sb, r0                                        |     sb = r0;
    0x00032508 str r7, [sp, 0x5c]                                |     var_5ch = r7;
    0x0003250a ldr.w sl, [sp, 0x64]                              |     sl = var_64h;
    0x0003250e add.w r3, r2, r3, lsl 2                           |     r3 = r2 + (r3 << 2);
    0x00032512 add r2, sp, 0xa0                                  |     r2 += var_a0h;
    0x00032514 str r2, [sp, 0x40]                                |     var_40h = r2;
    0x00032516 add r2, sp, 0xa8                                  |     r2 += var_a8h;
    0x00032518 ldr r3, [r3, -0x54]                               |     r3 = var_54h_2;
    0x0003251c str r2, [sp, 0x78]                                |     var_78h = r2;
    0x0003251e ldr r7, [sp, 0x70]                                |     r7 = var_70h;
    0x00032520 str r3, [sp, 0x68]                                |     var_68h = r3;
    0x00032522 ldr r3, [r3, 0x48]                                |     r3 = *((r3 + 0x48));
    0x00032524 ldr.w fp, [sp, 0x50]                              |     fp = var_50h;
    0x00032528 str r6, [sp, 0x14]                                |     var_14h = r6;
    0x0003252a strb r3, [r1, 3]                                  |     *((r1 + 3)) = r3;
    0x0003252c lsrs r2, r3, 0x18                                 |     r2 = r3 >> 0x18;
    0x0003252e strb r2, [r1]                                     |     *(r1) = r2;
    0x00032530 lsrs r2, r3, 0x10                                 |     r2 = r3 >> 0x10;
    0x00032532 lsrs r3, r3, 8                                    |     r3 >>= 8;
    0x00032534 strb r2, [r1, 1]                                  |     *((r1 + 1)) = r2;
    0x00032536 strb r3, [r1, 2]                                  |     *((r1 + 2)) = r3;
    0x00032538 b 0x325b4                                         |     
                                                                 |     while (r1 > r4) {
    0x00032558 ldr r3, [sp, 0x28]                                |         r3 = var_28h;
    0x0003255a lsl.w ip, r4, 2                                   |         
    0x0003255e ldr r6, [sp, 0x14]                                |         r6 = var_14h;
    0x00032560 ldrb r0, [r5, 3]                                  |         r0 = *((r5 + 3));
    0x00032562 ldr.w r1, [r3, r4, lsl 2]                         |         offset_21 = r4 << 2;
                                                                 |         r1 = *((r3 + offset_21));
    0x00032566 ldr r3, [sp, 0x3c]                                |         r3 = var_3ch;
    0x00032568 ldrh.w r2, [r8, r4, lsl 1]                        |         offset_22 = r4 << 1;
                                                                 |         r2 = *((r8 + offset_22));
    0x0003256c adds r6, r3, r6                                   |         r6 = r3 + r6;
    0x0003256e ldr r3, [sp, 0x74]                                |         r3 = var_74h;
    0x00032570 adds r3, r2, r3                                   |         r3 = r2 + r3;
    0x00032572 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00032574 beq 0x325e0                                       |             goto label_86;
                                                                 |         }
    0x00032576 ldr r0, [sp, 0x5c]                                |         r0 = var_5ch;
    0x00032578 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x0003257a bne 0x325e8                                       |             goto label_87;
                                                                 |         }
    0x0003257c cmp r2, 4                                         |         
    0x0003257e sub.w r1, r1, 4                                   |         r1 -= 4;
                                                                 |         if (r2 == 4) {
    0x00032582 beq.w 0x32800                                     |             goto label_88;
                                                                 |         }
                                                                 | label_30:
    0x00032586 ldr r2, [sp, 0x40]                                |         r2 = var_40h;
    0x00032588 ldr r0, [sp, 0x34]                                |         r0 = var_34h;
    0x0003258a str r2, [sp, 8]                                   |         var_8h = r2;
    0x0003258c ldr r2, [r5, 0x48]                                |         r2 = *((r5 + 0x48));
    0x0003258e strd r6, r2, [sp]                                 |         __asm ("strd r6, r2, [sp]");
    0x00032592 mov r2, r1                                        |         r2 = r1;
    0x00032594 ldr r1, [sp, 0x14]                                |         r1 = var_14h;
    0x00032596 add r1, r3                                        |         r1 += r3;
    0x00032598 str r1, [sp, 0x14]                                |         var_14h = r1;
    0x0003259a mov r1, fp                                        |         r1 = fp;
    0x0003259c bl 0x2f960                                        |         fcn_0002f960 (r0, r1, r2, r3, r4, r5);
    0x000325a0 ldr r3, [sp, 0xa0]                                |         r3 = var_a0h;
    0x000325a2 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x000325a4 bne.w 0x32812                                     |             goto label_89;
                                                                 |         }
    0x000325a8 adds r6, r4, 1                                    |         r6 = r4 + 1;
    0x000325aa add.w fp, fp, 1                                   |         
                                                                 | label_29:
    0x000325ae ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x000325b0 cmp r3, r7                                        |         
                                                                 |         if (r3 == r7) {
    0x000325b2 beq 0x3260e                                       |             goto label_90;
                                                                 |         }
    0x000325b4 ldr r5, [r7], 4                                   |         r5 = *(r7);
                                                                 |         r7 += 4;
    0x000325b8 mov r1, sl                                        |         r1 = sl;
    0x000325ba mov r0, r5                                        |         r0 = r5;
    0x000325bc bl 0x28d10                                        |         fcn_00028d10 (r0, r1);
    0x000325c0 ldr r2, [sp, 0x28]                                |         r2 = var_28h;
    0x000325c2 add.w r3, r8, r6, lsl 1                           |         r3 = r8 + (r6 << 1);
    0x000325c6 ldr r4, [sb], 4                                   |         r4 = *(sb);
                                                                 |         sb += 4;
    0x000325ca mov r0, r5                                        |         r0 = r5;
    0x000325cc subs r1, r4, r6                                   |         r1 = r4 - r6;
    0x000325ce add.w r2, r2, r6, lsl 2                           |         r2 += (r6 << 2);
    0x000325d2 bl 0x8934                                         |         fcn_00008934 (r0, r1, r2, r3, r4, r5, r6);
    0x000325d6 ldr r1, [sp, 0x1c]                                |         r1 = var_1ch;
    0x000325d8 cmp r1, r4                                        |         
    0x000325da bgt 0x32558                                       |         
                                                                 |     }
    0x000325dc mov r6, r4                                        |     r6 = r4;
    0x000325de b 0x325ae                                         |     goto label_29;
                                                                 | label_86:
    0x000325e0 ldr r2, [r5, 0x38]                                |     r2 = *((r5 + 0x38));
    0x000325e2 ldr r0, [r1]                                      |     r0 = *(r1);
    0x000325e4 str r0, [r2, 8]                                   |     *((r2 + 8)) = r0;
    0x000325e6 b 0x32586                                         |     goto label_30;
                                                                 | label_87:
    0x000325e8 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x000325ea mov r0, r5                                        |     r0 = r5;
    0x000325ec ldr r2, [sp, 0x78]                                |     r2 = var_78h;
    0x000325ee subs r4, 1                                        |     r4--;
    0x000325f0 add ip, r3                                        |     
    0x000325f2 ldr r1, [ip, -0x4]                                |     r1 = *((ip - 0x4));
    0x000325f6 bl 0x9e14                                         |     fcn_00009e14 (r0, r1, r2);
    0x000325fa ldrd r2, r3, [sp, 0xa8]                           |     __asm ("ldrd r2, r3, [var_a8h]");
    0x000325fe adds r0, r6, 4                                    |     r0 = r6 + 4;
    0x00032600 str r6, [sp, 0x50]                                |     var_50h = r6;
    0x00032602 movs r6, 0                                        |     r6 = 0;
    0x00032604 bl 0x9cd4                                         |     fcn_00009cd4 (r0, r1, r2);
    0x00032608 ldr r1, [sp, 0x50]                                |     r1 = var_50h;
    0x0003260a adds r3, r0, 4                                    |     r3 = r0 + 4;
    0x0003260c b 0x32586                                         |     goto label_30;
                                                                 | label_90:
    0x0003260e ldr r3, [sp, 0x64]                                |     r3 = var_64h;
    0x00032610 ldr.w fp, [sp, 0x34]                              |     fp = var_34h;
    0x00032614 ldr.w sb, [sp, 0x7c]                              |     sb = var_7ch;
    0x00032618 lsls r3, r3, 0x1c                                 |     r3 <<= 0x1c;
    0x0003261a ldr r7, [sp, 0x5c]                                |     r7 = var_5ch;
                                                                 |     if (r3 >= r3) {
    0x0003261c bpl.w 0x32816                                     |         goto label_91;
                                                                 |     }
                                                                 | label_37:
    0x00032620 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00032622 cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x00032624 bne 0x3267a                                       |         goto label_92;
                                                                 |     }
    0x00032626 ldrh.w r3, [fp, 0x10]                             |     r3 = *(arg_10h);
                                                                 |     if (r3 != 0) {
    0x0003262a cbnz r3, 0x3267a                                  |         goto label_92;
                                                                 |     }
    0x0003262c ldr r4, [sp, 0xe8]                                |     r4 = var_e8h;
    0x0003262e ldrb.w r2, [fp, 5]                                |     r2 = *(arg_5h);
    0x00032632 ldrh r3, [r4, 0xe]                                |     r3 = *((r4 + 0xe));
    0x00032634 cmp r2, r3                                        |     
                                                                 |     if (r2 > r3) {
    0x00032636 bhi 0x3267a                                       |         goto label_92;
                                                                 |     }
    0x00032638 ldr.w sl, [sp, 0xa0]                              |     sl = var_a0h;
    0x0003263c cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x00032640 bne 0x32664                                       |         
    0x00032642 mov r1, fp                                        |         r1 = fp;
    0x00032644 add r2, sp, 0xa0                                  |         r2 += var_a0h;
    0x00032646 mov r0, r4                                        |         r0 = r4;
    0x00032648 bl 0x2f4f0                                        |         fcn_0002f4f0 (r0, r1, r2);
    0x0003264c ldr.w sl, [sp, 0xa0]                              |         sl = var_a0h;
    0x00032650 cmp.w sl, 0                                       |         
                                                                 |         if (sl != 0) {
    0x00032654 bne 0x32664                                       |             goto label_35;
                                                                 |         }
    0x00032656 ldr r2, [r4, 0x48]                                |         r2 = *((r4 + 0x48));
    0x00032658 mov r1, r4                                        |         r1 = r4;
    0x0003265a ldr r0, [r4, 0x34]                                |         r0 = *((r4 + 0x34));
    0x0003265c bl 0x2fc54                                        |         r0 = fcn_0002fc54 (r0, r1, r2, r3);
    0x00032660 mov sl, r0                                        |         sl = r0;
    0x00032662 str r0, [sp, 0xa0]                                |         var_a0h = r0;
                                                                 |     }
                                                                 | label_35:
    0x00032664 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x00032666 bl 0xde98                                         |     fcn_0000de98 (r0);
    0x0003266a ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x0003266c cmp r3, 0                                         |     
    0x0003266e ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x00032670 str r3, [sp, 0x14]                                |     var_14h = r3;
                                                                 |     if (r3 > 0) {
    0x00032672 bgt.w 0x322c4                                     |         goto label_21;
                                                                 |     }
    0x00032676 b.w 0x31ddc                                       |     goto label_22;
                                                                 | label_92:
    0x0003267a ldrb.w r3, [sb, 0x11]                             |     r3 = *((sb + 0x11));
    0x0003267e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00032680 beq.w 0x327e2                                     |         goto label_93;
                                                                 |     }
    0x00032684 ldr r5, [sp, 0xdc]                                |     r5 = var_dch;
    0x00032686 ldr r3, [sp, 0xe8]                                |     r3 = var_e8h;
    0x00032688 ldrb r2, [r5, 1]                                  |     r2 = *((r5 + 1));
    0x0003268a str r3, [sp, 0x50]                                |     var_50h = r3;
    0x0003268c ldrh r3, [r5, 0x10]                               |     r3 = *((r5 + 0x10));
    0x0003268e str r2, [sp, 0x14]                                |     var_14h = r2;
    0x00032690 add.w fp, r3, r2                                  |     
    0x00032694 mov.w r3, -1                                      |     r3 = -1;
    0x00032698 mov r0, r3                                        |     r0 = r3;
                                                                 |     if (r2 != 0) {
    0x0003269a cbz r2, 0x326a0                                   |         
    0x0003269c ldrh r3, [r5, 0x14]                               |         r3 = *((r5 + 0x14));
    0x0003269e mov r0, r3                                        |         r0 = r3;
                                                                 |     }
    0x000326a0 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x000326a2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000326a4 beq 0x32768                                       |         goto label_94;
                                                                 |     }
    0x000326a6 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x000326a8 add r1, sp, 0xdc                                  |     r1 += var_dch;
    0x000326aa ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x000326ac mov.w sl, 0                                       |     sl = 0;
    0x000326b0 str r1, [sp, 0x5c]                                |     var_5ch = r1;
    0x000326b2 add r1, sp, 0xa0                                  |     r1 += var_a0h;
    0x000326b4 strd r1, sb, [sp, 0x64]                           |     __asm ("strd r1, sb, [var_68h]");
    0x000326b8 mov r6, sl                                        |     r6 = sl;
    0x000326ba str.w r8, [sp, 0x6c]                              |     __asm ("str.w r8, [var_6ch]");
    0x000326be mov sb, r3                                        |     sb = r3;
    0x000326c0 str r7, [sp, 0x40]                                |     var_40h = r7;
    0x000326c2 mov r8, r0                                        |     r8 = r0;
    0x000326c4 mov r7, r2                                        |     r7 = r2;
    0x000326c6 str.w sl, [sp, 0x34]                              |     __asm ("str.w sl, [var_34h]");
    0x000326ca str.w sl, [sp, 0x24]                              |     __asm ("str.w sl, [var_24h]");
                                                                 | label_31:
    0x000326ce cmp r6, fp                                        |     
    0x000326d0 it ne                                             |     
                                                                 |     if (r6 == fp) {
    0x000326d2 movne r4, 0                                       |         r4 = 0;
                                                                 |     }
                                                                 |     if (r6 != fp) {
    0x000326d4 bne 0x32714                                       |         goto label_95;
                                                                 |     }
    0x000326d6 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x000326d8 add.w r2, sl, 1                                   |     r2 = sl + 1;
    0x000326dc ldr.w ip, [sp, 0x14]                              |     ip = var_14h;
    0x000326e0 clz r4, r3                                        |     r4 &= r3;
    0x000326e4 ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x000326e6 lsrs r4, r4, 5                                    |     r4 >>= 5;
    0x000326e8 adds r0, r6, r4                                   |     r0 = r6 + r4;
    0x000326ea add.w r1, r3, r2, lsl 2                           |     r1 = r3 + (r2 << 2);
                                                                 |     do {
    0x000326ee ldr r5, [r1], 4                                   |         r5 = *(r1);
                                                                 |         r1 += 4;
    0x000326f2 mov sl, r2                                        |         sl = r2;
    0x000326f4 ldrb r3, [r5, 1]                                  |         r3 = *((r5 + 1));
    0x000326f6 ldrh.w fp, [r5, 0x10]                             |         fp = *((r5 + 0x10));
    0x000326fa add fp, r0                                        |         
    0x000326fc add fp, r3                                        |         
                                                                 |         if (r3 != 0) {
    0x000326fe cbz r3, 0x32708                                   |             
    0x00032700 ldrh.w r8, [r5, 0x14]                             |             r8 = *((r5 + 0x14));
    0x00032704 mov ip, r3                                        |             
    0x00032706 add r8, r0                                        |             r8 += r0;
                                                                 |         }
    0x00032708 cmp fp, r6                                        |         
                                                                 |         if (fp != r6) {
    0x0003270a bne 0x32710                                       |             goto label_96;
                                                                 |         }
    0x0003270c adds r2, 1                                        |         r2++;
    0x0003270e b 0x326ee                                         |         
                                                                 |     } while (1);
                                                                 | label_96:
    0x00032710 str.w ip, [sp, 0x14]                              |     __asm ("str.w ip, [var_14h]");
                                                                 | label_95:
    0x00032714 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00032716 cmp r6, r8                                        |     
    0x00032718 add.w r3, r3, 0x138                               |     r3 += 0x138;
    0x0003271c add r3, sp, r3                                    |     r3 = sp + r3;
    0x0003271e ldr r3, [r3, -0x3c]                               |     r3 = var_fch;
                                                                 |     if (r6 == r8) {
    0x00032722 beq 0x327b0                                       |         goto label_97;
                                                                 |     }
    0x00032724 cmp r6, r3                                        |     
                                                                 |     if (r6 == r3) {
    0x00032726 beq 0x32792                                       |         goto label_98;
                                                                 |     }
                                                                 | label_32:
    0x00032728 cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x0003272a bne 0x3280e                                       |         goto label_99;
                                                                 |     }
    0x0003272c ldr r2, [r5, 0x48]                                |     r2 = *((r5 + 0x48));
    0x0003272e adds r4, r6, 1                                    |     r4 = r6 + 1;
    0x00032730 ldr r3, [r7, 0x48]                                |     r3 = *((r7 + 0x48));
    0x00032732 cmp r2, r3                                        |     
                                                                 |     if (r2 != r3) {
    0x00032734 beq 0x32758                                       |         
                                                                 | label_34:
    0x00032736 ldr r3, [sp, 0x74]                                |         r3 = var_74h;
    0x00032738 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0003273a beq 0x327e8                                       |             goto label_100;
                                                                 |         }
                                                                 | label_36:
    0x0003273c ldr r3, [sp, 0x6c]                                |         r3 = var_6ch;
    0x0003273e ldrh.w r2, [r3, r6, lsl 1]                        |         offset_23 = r6 << 1;
                                                                 |         r2 = *((r3 + offset_23));
    0x00032742 ldrh r3, [r7, 0xa]                                |         r3 = *((r7 + 0xa));
    0x00032744 cmp r2, r3                                        |         
                                                                 |         if (r2 < r3) {
    0x00032746 bls 0x32758                                       |             goto label_33;
                                                                 |         }
    0x00032748 ldr r3, [sp, 0xa0]                                |         r3 = var_a0h;
                                                                 |         if (r3 != 0) {
    0x0003274a cbnz r3, 0x32758                                  |             goto label_33;
                                                                 |         }
    0x0003274c ldr.w r1, [sb]                                    |         r1 = *(sb);
    0x00032750 mov r0, r7                                        |         r0 = r7;
    0x00032752 ldr r2, [sp, 0x64]                                |         r2 = var_64h;
    0x00032754 bl 0x2d1e4                                        |         fcn_0002d1e4 (r0, r1, r2, r3, r4);
                                                                 |     }
                                                                 | label_33:
    0x00032758 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0003275a mov r6, r4                                        |     r6 = r4;
    0x0003275c add.w sb, sb, 4                                   |     sb += 4;
    0x00032760 cmp r3, r4                                        |     
                                                                 |     if (r3 != r4) {
    0x00032762 bne 0x326ce                                       |         goto label_31;
                                                                 |     }
    0x00032764 ldr.w sb, [sp, 0x68]                              |     sb = var_68h;
                                                                 | label_94:
    0x00032768 ldr r3, [sp, 0x74]                                |     r3 = var_74h;
    0x0003276a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003276c bne 0x327e2                                       |         goto label_93;
                                                                 |     }
    0x0003276e ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x00032770 add r4, sp, 0xec                                  |     r4 += var_ech;
    0x00032772 add r5, sp, 0xa0                                  |     r5 += var_a0h;
                                                                 |     do {
    0x00032774 ldr r2, [r3, 0x38]                                |         r2 = *((r3 + 0x38));
    0x00032776 mov r0, sb                                        |         r0 = sb;
    0x00032778 ldr r3, [r3, 0x48]                                |         r3 = *((r3 + 0x48));
    0x0003277a ldr r1, [r2, 8]                                   |         r1 = *((r2 + 8));
    0x0003277c movs r2, 5                                        |         r2 = 5;
    0x0003277e str r5, [sp]                                      |         *(sp) = r5;
    0x00032780 rev r1, r1                                        |         r1 = SWAP32 (r1);
    0x00032782 bl 0x2d07c                                        |         fcn_0002d07c (r0, r1, r2, r3, r4, r5, r6);
    0x00032786 ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x00032788 cmp r3, r4                                        |         
                                                                 |         if (r3 == r4) {
    0x0003278a beq 0x327e2                                       |             goto label_93;
                                                                 |         }
    0x0003278c ldr r3, [r4], 4                                   |         r3 = *(r4);
                                                                 |         r4 += 4;
    0x00032790 b 0x32774                                         |         
                                                                 |     } while (1);
                                                                 | label_98:
    0x00032792 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00032794 adds r3, 1                                        |     r3++;
    0x00032796 str r3, [sp, 0x34]                                |     var_34h = r3;
    0x00032798 lsls r3, r3, 2                                    |     r3 <<= 2;
    0x0003279a str r3, [sp, 0x24]                                |     var_24h = r3;
    0x0003279c add.w r3, r3, 0x138                               |     r3 += 0x138;
    0x000327a0 add r3, sp, r3                                    |     r3 = sp + r3;
    0x000327a2 ldr r7, [r3, -0x50]                               |     r7 = var_ech;
    0x000327a6 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x000327a8 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000327aa bne 0x32728                                       |         goto label_32;
                                                                 |     }
    0x000327ac adds r4, r6, 1                                    |     r4 = r6 + 1;
    0x000327ae b 0x32758                                         |     goto label_33;
                                                                 | label_97:
    0x000327b0 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x000327b2 subs r2, 1                                        |     r2--;
    0x000327b4 cmp r2, 0                                         |     
    0x000327b6 str r2, [sp, 0x14]                                |     var_14h = r2;
    0x000327b8 itet gt                                           |     
                                                                 |     if (r2 <= 0) {
    0x000327ba addgt r8, r6, 1                                   |         r8 = r6 + 1;
                                                                 |     }
                                                                 |     if (r2 <= 0) {
    0x000327be addgt r4, r6, 1                                   |         r4 = r6 + 1;
                                                                 |     }
                                                                 |     if (r2 > 0) {
    0x000327c0 mov r4, r8                                        |         r4 = r8;
                                                                 |     }
    0x000327c2 cmp r6, r3                                        |     
                                                                 |     if (r6 != r3) {
    0x000327c4 bne 0x32736                                       |         goto label_34;
                                                                 |     }
    0x000327c6 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x000327c8 adds r3, 1                                        |     r3++;
    0x000327ca str r3, [sp, 0x34]                                |     var_34h = r3;
    0x000327cc lsls r3, r3, 2                                    |     r3 <<= 2;
    0x000327ce str r3, [sp, 0x24]                                |     var_24h = r3;
    0x000327d0 add.w r3, r3, 0x138                               |     r3 += 0x138;
    0x000327d4 add r3, sp, r3                                    |     r3 = sp + r3;
    0x000327d6 ldr r7, [r3, -0x50]                               |     r7 = var_ech;
    0x000327da ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x000327dc cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000327de bne 0x32736                                       |         goto label_34;
                                                                 |     }
    0x000327e0 b 0x32758                                         |     goto label_33;
                                                                 | label_93:
    0x000327e2 ldr.w sl, [sp, 0xa0]                              |     sl = var_a0h;
    0x000327e6 b 0x32664                                         |     goto label_35;
                                                                 | label_100:
    0x000327e8 ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x000327ec ldr r2, [sp, 0x64]                                |     r2 = var_64h;
    0x000327ee ldr r0, [sp, 0x68]                                |     r0 = var_68h;
    0x000327f0 ldr r1, [r3]                                      |     r1 = *(r3);
    0x000327f2 ldr r3, [r7, 0x48]                                |     r3 = *((r7 + 0x48));
    0x000327f4 str r2, [sp]                                      |     *(sp) = r2;
    0x000327f6 movs r2, 5                                        |     r2 = 5;
    0x000327f8 rev r1, r1                                        |     r1 = SWAP32 (r1);
    0x000327fa bl 0x2d07c                                        |     fcn_0002d07c (r0, r1, r2, r3, r4, r5, r6);
    0x000327fe b 0x3273c                                         |     goto label_36;
                                                                 | label_88:
    0x00032800 ldr r0, [sp, 0x34]                                |     r0 = var_34h;
    0x00032802 str r1, [sp, 0x50]                                |     var_50h = r1;
    0x00032804 bl 0x9f14                                         |     fcn_00009f14 (r0, r1, r2, r3);
    0x00032808 ldr r1, [sp, 0x50]                                |     r1 = var_50h;
    0x0003280a mov r3, r0                                        |     r3 = r0;
    0x0003280c b 0x32586                                         |     goto label_30;
                                                                 | label_99:
    0x0003280e adds r4, r6, 1                                    |     r4 = r6 + 1;
    0x00032810 b 0x32736                                         |     goto label_34;
                                                                 | label_89:
    0x00032812 mov sl, r3                                        |     sl = r3;
    0x00032814 b 0x32664                                         |     goto label_35;
                                                                 | label_91:
    0x00032816 ldr r3, [sp, 0x6c]                                |     r3 = var_6ch;
    0x00032818 add.w r3, r3, 0x138                               |     r3 += 0x138;
    0x0003281c add.w r2, sp, r3                                  |     r2 = sp + r3;
    0x00032820 ldr r3, [sp, 0x68]                                |     r3 = var_68h;
    0x00032822 ldr r2, [r2, -0x5c]                               |     r2 = var_dch;
    0x00032826 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x00032828 ldr r2, [r2, 0x38]                                |     r2 = *((r2 + 0x38));
    0x0003282a ldr r2, [r2, 8]                                   |     r2 = *((r2 + 8));
    0x0003282c str r2, [r3, 8]                                   |     *((r3 + 8)) = r2;
    0x0003282e b 0x32620                                         |     goto label_37;
                                                                 | label_68:
    0x00032830 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00032832 str r3, [sp, 0xfc]                                |     var_fch = r3;
    0x00032834 str r3, [sp, 0x34]                                |     var_34h = r3;
    0x00032836 movs r3, 1                                        |     r3 = 1;
    0x00032838 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x0003283a b 0x321ec                                         |     goto label_38;
                                                                 | label_81:
    0x0003283c lsls r3, r3, 2                                    |     r3 <<= 2;
    0x0003283e str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00032840 b 0x32486                                         |     goto label_39;
                                                                 | label_66:
    0x00032842 blx 0x5fe8                                        |     fcn_00005fe8 ();
    0x00032846 ldr r1, [pc, 0x60]                                |     
    0x00032848 add.w r3, r0, 0x14                                |     r3 = r0 + 0x14;
    0x0003284c movw r2, 0xebd0                                   |     r2 = 0xebd0;
    0x00032850 movs r0, 0xb                                      |     r0 = 0xb;
    0x00032852 mov.w sl, 0xb                                     |     sl = 0xb;
    0x00032856 add r1, pc                                        |     r1 = 0x65104;
    0x00032858 blx 0x6820                                        |     fcn_00006820 ();
    0x0003285c b.w 0x31e00                                       |     goto label_13;
                                                                 | label_44:
    0x00032860 blx 0x6498                                        |     r0 = fcn_00006498 ();
                                                                 | label_83:
    0x00032864 mov sl, r0                                        |     sl = r0;
    0x00032866 b 0x323f2                                         |     goto label_40;
                                                                 | label_67:
    0x00032868 add r5, sp, 0xa0                                  |     r5 += var_a0h;
    0x0003286a ldr.w r3, [fp, 0x48]                              |     r3 = *(arg_48h);
    0x0003286e movs r2, 5                                        |     r2 = 5;
    0x00032870 mov r0, r4                                        |     r0 = r4;
    0x00032872 mov r1, r7                                        |     r1 = r7;
    0x00032874 str r5, [sp]                                      |     *(sp) = r5;
    0x00032876 bl 0x2d07c                                        |     fcn_0002d07c (r0, r1, r2, r3, r4, r5, r6);
    0x0003287a ldrh r2, [r6, 0xa]                                |     r2 = *((r6 + 0xa));
    0x0003287c ldrh.w r3, [sp, 0x9a]                             |     r3 = var_9ah;
    0x00032880 cmp r2, r3                                        |     
                                                                 |     if (r2 >= r3) {
    0x00032882 bhs.w 0x32076                                     |         goto label_41;
                                                                 |     }
    0x00032886 ldr r3, [sp, 0xa0]                                |     r3 = var_a0h;
    0x00032888 ldr r1, [sp, 0xa8]                                |     r1 = var_a8h;
    0x0003288a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003288c bne.w 0x32076                                     |         goto label_41;
                                                                 |     }
    0x00032890 mov r2, r5                                        |     r2 = r5;
    0x00032892 mov r0, r6                                        |     r0 = r6;
    0x00032894 bl 0x2d1e4                                        |     fcn_0002d1e4 (r0, r1, r2, r3, r4);
    0x00032898 b.w 0x32076                                       |     goto label_41;
                                                                 | label_58:
    0x0003289c mov r5, sl                                        |     r5 = sl;
    0x0003289e b.w 0x31aa2                                       |     goto label_3;
                                                                 | label_70:
    0x000328a2 movs r3, 1                                        |     r3 = 1;
    0x000328a4 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x000328a6 b 0x321ec                                         |     goto label_38;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x328ac */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.000328ac ()                                      | void fcn_000328ac (int16_t arg_4h, int16_t arg1) {
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_48h;
                                                                 |     int16_t var_7ch;
                                                                 |     int16_t var_a8h;
                                                                 |     int16_t var_ach;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_b8h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_24h_2;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     r0 = arg1;
    0x000328ac push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x000328b0 sub sp, 0x34                                      |     
    0x000328b2 ldrsh.w r6, [r0, 0x54]                            |     r6 = *((r0 + 0x54));
    0x000328b6 ldr r2, [pc, 0x23c]                               |     
    0x000328b8 ldr r3, [pc, 0x23c]                               |     r3 = *(0x32af8);
    0x000328ba add.w r8, r0, r6, lsl 2                           |     r8 = r0 + (r6 << 2);
    0x000328be add r2, pc                                        |     r2 = 0x653b8;
    0x000328c0 ldr r3, [r2, r3]                                  |     
    0x000328c2 ldr.w r5, [r8, 0x80]                              |     r5 = *((r8 + 0x80));
    0x000328c6 ldr r3, [r3]                                      |     r3 = *(0x653b8);
    0x000328c8 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x000328ca mov.w r3, 0                                       |     r3 = 0;
    0x000328ce add.w r3, r0, r6, lsl 1                           |     r3 = r0 + (r6 << 1);
    0x000328d2 ldrh.w r7, [r3, 0x56]                             |     r7 = *((r3 + 0x56));
    0x000328d6 ldrh r3, [r5, 0x10]                               |     r3 = *((r5 + 0x10));
    0x000328d8 cmp r3, r7                                        |     
                                                                 |     if (r3 >= r7) {
    0x000328da bls 0x328e6                                       |         
    0x000328dc ldrb.w r3, [r0, 0x51]                             |         r3 = *((r0 + 0x51));
    0x000328e0 mov r4, r0                                        |         r4 = r0;
    0x000328e2 cmp r3, 1                                         |         
                                                                 |         if (r3 == 1) {
    0x000328e4 beq 0x32906                                       |             goto label_4;
                                                                 |         }
                                                                 |     }
    0x000328e6 movs r3, 1                                        |     r3 = 1;
                                                                 |     do {
                                                                 | label_0:
    0x000328e8 ldr r1, [pc, 0x210]                               |         
    0x000328ea ldr r2, [pc, 0x20c]                               |         r2 = *(0x32afa);
    0x000328ec add r1, pc                                        |         r1 = 0x653ec;
    0x000328ee ldr r2, [r1, r2]                                  |         r2 = *(0x653ec);
    0x000328f0 ldr r1, [r2]                                      |         r1 = *(0x653ec);
    0x000328f2 ldr r2, [sp, 0x2c]                                |         r2 = var_2ch;
    0x000328f4 eors r1, r2                                       |         r1 ^= r2;
    0x000328f6 mov.w r2, 0                                       |         r2 = 0;
                                                                 |         if (r1 != r2) {
    0x000328fa bne.w 0x32af0                                     |             goto label_5;
                                                                 |         }
    0x000328fe mov r0, r3                                        |         r0 = r3;
    0x00032900 add sp, 0x34                                      |         
    0x00032902 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_4:
    0x00032906 ldr r1, [r5, 0x38]                                |         r1 = *((r5 + 0x38));
    0x00032908 ldr r3, [r5, 0x40]                                |         r3 = *((r5 + 0x40));
    0x0003290a ldrb r2, [r5, 3]                                  |         r2 = *((r5 + 3));
    0x0003290c str r1, [sp, 0x14]                                |         var_14h = r1;
    0x0003290e ldrh r1, [r5, 0x12]                               |         r1 = *((r5 + 0x12));
    0x00032910 ldr.w sb, [r0]                                    |         sb = *(r0);
    0x00032914 str r1, [sp, 0x18]                                |         var_18h = r1;
    0x00032916 ldrb.w r1, [r3, r7, lsl 1]                        |         offset_0 = r7 << 1;
                                                                 |         r1 = *((r3 + offset_0));
    0x0003291a add.w r3, r3, r7, lsl 1                           |         r3 += (r7 << 1);
    0x0003291e ldr.w sl, [sb, 4]                                 |         sl = *((sb + 4));
    0x00032922 ldrb.w fp, [r3, 1]                                |         fp = *((r3 + 1));
    0x00032926 str r1, [sp, 0x1c]                                |         var_1ch = r1;
                                                                 |         if (r2 != 0) {
    0x00032928 cbnz r2, 0x3293a                                  |             goto label_6;
                                                                 |         }
    0x0003292a add r1, sp, 0x28                                  |         r1 += var_28h;
    0x0003292c str r2, [sp, 0x28]                                |         var_28h = r2;
    0x0003292e bl 0x2f05c                                        |         r0 = fcn_0002f05c (r0, r1);
    0x00032932 mov r3, r0                                        |         r3 = r0;
    0x00032934 str r0, [sp, 0x24]                                |         var_24h_2 = r0;
    0x00032936 cmp r0, 0                                         |         
    0x00032938 bne 0x328e8                                       |         
                                                                 |     } while (r0 != 0);
                                                                 | label_6:
    0x0003293a ldr r1, [r4, 0x44]                                |     r1 = *((r4 + 0x44));
    0x0003293c mov r2, r4                                        |     r2 = r4;
    0x0003293e ldr.w r0, [sl, 8]                                 |     r0 = *((sl + 8));
    0x00032942 bl 0x2da04                                        |     r0 = fcn_0002da04 (r0, r1, r2);
    0x00032946 mov r3, r0                                        |     r3 = r0;
    0x00032948 str r0, [sp, 0x24]                                |     var_24h_2 = r0;
    0x0003294a cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0003294c bne 0x328e8                                       |         goto label_0;
                                                                 |     }
    0x0003294e ldr r2, [r4, 0x10]                                |     r2 = *((r4 + 0x10));
    0x00032950 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00032952 beq.w 0x32a94                                     |         goto label_7;
                                                                 |     }
                                                                 | label_2:
    0x00032956 ldr r0, [r5, 0x44]                                |     r0 = *((r5 + 0x44));
    0x00032958 bl 0x2bdf4                                        |     r0 = fcn_0002bdf4 (r0, r1, r2);
    0x0003295c mov r3, r0                                        |     r3 = r0;
    0x0003295e str r0, [sp, 0x24]                                |     var_24h_2 = r0;
    0x00032960 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00032962 bne 0x328e8                                       |         goto label_0;
                                                                 |     }
    0x00032964 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00032966 mov r0, r5                                        |     r0 = r5;
    0x00032968 orr.w fp, fp, r3, lsl 8                           |     
    0x0003296c ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0003296e and.w r1, fp, r3                                  |     r1 = fp & r3;
    0x00032972 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00032974 add r3, r1                                        |     r3 += r1;
    0x00032976 mov sb, r3                                        |     sb = r3;
    0x00032978 mov r1, r3                                        |     r1 = r3;
    0x0003297a bl 0x2ff40                                        |     fcn_0002ff40 (r0, r1);
    0x0003297e mov r1, sb                                        |     r1 = sb;
    0x00032980 str r0, [sp, 0x24]                                |     var_24h_2 = r0;
    0x00032982 str r0, [sp, 0x14]                                |     var_14h = r0;
    0x00032984 mov r0, r5                                        |     r0 = r5;
    0x00032986 bl 0x9f14                                         |     fcn_00009f14 (r0, r1, r2, r3);
    0x0003298a ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0003298c mov r2, r0                                        |     r2 = r0;
    0x0003298e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00032990 bne 0x328e8                                       |         goto label_0;
                                                                 |     }
    0x00032992 add.w sb, sp, 0x24                                |     sb += var_24h_2;
    0x00032996 mov r1, r7                                        |     r1 = r7;
    0x00032998 mov r3, sb                                        |     r3 = sb;
    0x0003299a mov r0, r5                                        |     r0 = r5;
    0x0003299c bl 0x29ab4                                        |     fcn_00029ab4 (r0, r1, r2, r3);
    0x000329a0 ldr r3, [sp, 0x24]                                |     r3 = var_24h_2;
    0x000329a2 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000329a4 bne 0x328e8                                       |         goto label_0;
                                                                 |     }
    0x000329a6 ldrb r2, [r5, 3]                                  |     r2 = *((r5 + 3));
                                                                 |     if (r2 == 0) {
    0x000329a8 cbz r2, 0x329fe                                   |         goto label_8;
                                                                 |     }
                                                                 | label_1:
    0x000329aa mov r0, r4                                        |     r0 = r4;
    0x000329ac bl 0x31a20                                        |     r0 = fcn_00031a20 (r0, r1, r2, r3, r4, r5, r6);
    0x000329b0 mov r3, r0                                        |     r3 = r0;
    0x000329b2 str r0, [sp, 0x24]                                |     var_24h_2 = r0;
    0x000329b4 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000329b6 bne 0x328e8                                       |         goto label_0;
                                                                 |     }
    0x000329b8 ldrsh.w r2, [r4, 0x54]                            |     r2 = *((r4 + 0x54));
    0x000329bc cmp r6, r2                                        |     
                                                                 |     if (r6 >= r2) {
    0x000329be bge.w 0x32ac8                                     |         goto label_9;
                                                                 |     }
    0x000329c2 mov r5, r0                                        |     r5 = r0;
    0x000329c4 b 0x329de                                         |     
                                                                 |     while (r6 < r2) {
    0x000329c6 ldr r1, [r3, -0x4]!                               |         r1 = *((r3 -= 0x4));
    0x000329ca subs r2, 1                                        |         r2--;
    0x000329cc sxth r2, r2                                       |         __asm ("sxth r2, r2");
    0x000329ce strh.w r2, [r4, 0x54]                             |         *((r4 + 0x54)) = r2;
                                                                 |         if (r1 != 0) {
    0x000329d2 cbz r1, 0x329e6                                   |             
    0x000329d4 ldr r0, [r1, 0x44]                                |             r0 = *((r1 + 0x44));
    0x000329d6 bl 0x2bd94                                        |             fcn_0002bd94 (r0);
    0x000329da ldrsh.w r2, [r4, 0x54]                            |             r2 = *((r4 + 0x54));
    0x000329de add.w r3, r2, 0x21                                |             r3 = r2 + 0x21;
    0x000329e2 add.w r3, r4, r3, lsl 2                           |             r3 = r4 + (r3 << 2);
                                                                 |         }
    0x000329e6 cmp r6, r2                                        |         
    0x000329e8 blt 0x329c6                                       |         
                                                                 |     }
    0x000329ea mov r0, r4                                        |     r0 = r4;
    0x000329ec str r5, [sp, 0x14]                                |     var_14h = r5;
    0x000329ee bl 0x31a20                                        |     fcn_00031a20 (r0, r1, r2, r3, r4, r5, r6);
    0x000329f2 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x000329f4 str r0, [sp, 0x24]                                |     var_24h_2 = r0;
    0x000329f6 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000329f8 beq 0x32ac8                                       |         goto label_9;
                                                                 |     }
    0x000329fa mov r3, r0                                        |     r3 = r0;
    0x000329fc b 0x328e8                                         |     goto label_0;
                                                                 | label_8:
    0x000329fe ldr.w r3, [r8, 0x84]                              |     r3 = *((r8 + 0x84));
    0x00032a02 str r2, [sp, 0x1c]                                |     var_1ch = r2;
    0x00032a04 ldr r3, [r3, 0x48]                                |     r3 = *((r3 + 0x48));
    0x00032a06 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00032a08 ldrsh.w r3, [r4, 0x54]                            |     r3 = *((r4 + 0x54));
    0x00032a0c adds r3, 0x20                                     |     r3 += 0x20;
    0x00032a0e ldr.w r8, [r4, r3, lsl 2]                         |     offset_1 = r3 << 2;
                                                                 |     r8 = *((r4 + offset_1));
    0x00032a12 ldr.w r1, [r8, 0x40]                              |     r1 = *((r8 + 0x40));
    0x00032a16 ldrh.w r3, [r8, 0x10]                             |     r3 = *((r8 + 0x10));
    0x00032a1a ldrh.w r0, [r8, 0x12]                             |     r0 = *((r8 + 0x12));
    0x00032a1e subs r3, 1                                        |     r3--;
    0x00032a20 add.w ip, r1, r3, lsl 1                           |     
    0x00032a24 ldrb.w r1, [r1, r3, lsl 1]                        |     offset_2 = r3 << 1;
                                                                 |     r1 = *((r1 + offset_2));
    0x00032a28 ldrb.w r3, [ip, 1]                                |     r3 = *((ip + 1));
    0x00032a2c orr.w r3, r3, r1, lsl 8                           |     r3 |= (r1 << 8);
    0x00032a30 ldr.w r1, [r8, 0x38]                              |     r1 = *((r8 + 0x38));
    0x00032a34 ands r3, r0                                       |     r3 &= r0;
    0x00032a36 mov r0, r8                                        |     r0 = r8;
    0x00032a38 adds r3, r1, r3                                   |     r3 = r1 + r3;
    0x00032a3a mov r1, r3                                        |     r1 = r3;
    0x00032a3c str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00032a3e bl 0x9f14                                         |     fcn_00009f14 (r0, r1, r2, r3);
    0x00032a42 ldr.w r3, [sl, 0x50]                              |     r3 = *((sl + 0x50));
    0x00032a46 mov fp, r0                                        |     
    0x00032a48 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00032a4a beq 0x32ad4                                       |         goto label_10;
                                                                 |     }
                                                                 | label_3:
    0x00032a4c ldr.w r0, [r8, 0x44]                              |     r0 = *((r8 + 0x44));
    0x00032a50 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00032a52 bl 0x2bdf4                                        |     fcn_0002bdf4 (r0, r1, r2);
    0x00032a56 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00032a58 mov r1, r7                                        |     r1 = r7;
    0x00032a5a str r0, [sp, 0x24]                                |     var_24h_2 = r0;
    0x00032a5c mov r0, r5                                        |     r0 = r5;
    0x00032a5e str.w sb, [sp, 8]                                 |     __asm ("str.w sb, [var_8h]");
    0x00032a62 str r3, [sp, 4]                                   |     var_ach = r3;
    0x00032a64 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00032a66 str r3, [sp]                                      |     *(sp) = r3;
    0x00032a68 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00032a6a subs r2, r3, 4                                    |     r2 = r3 - 4;
    0x00032a6c add.w r3, fp, 4                                   |     r3 += arg_4h;
    0x00032a70 bl 0x2f960                                        |     fcn_0002f960 (r0, r1, r2, r3, r4, r5);
    0x00032a74 ldr r3, [sp, 0x24]                                |     r3 = var_24h_2;
    0x00032a76 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00032a78 bne.w 0x328e8                                     |         goto label_0;
                                                                 |     }
    0x00032a7c ldrh.w r1, [r8, 0x10]                             |     r1 = *((r8 + 0x10));
    0x00032a80 mov r3, sb                                        |     r3 = sb;
    0x00032a82 mov r2, fp                                        |     r2 = fp;
    0x00032a84 mov r0, r8                                        |     r0 = r8;
    0x00032a86 subs r1, 1                                        |     r1--;
    0x00032a88 bl 0x29ab4                                        |     fcn_00029ab4 (r0, r1, r2, r3);
    0x00032a8c ldr r3, [sp, 0x24]                                |     r3 = var_24h_2;
    0x00032a8e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00032a90 beq 0x329aa                                       |         goto label_1;
                                                                 |     }
    0x00032a92 b 0x328e8                                         |     goto label_0;
                                                                 | label_7:
    0x00032a94 ldr.w r3, [sb, 4]                                 |     r3 = *((sb + 4));
    0x00032a98 ldrd lr, r0, [r4, 0x18]                           |     __asm ("ldrd lr, r0, [r4, 0x18]");
    0x00032a9c ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00032a9e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00032aa0 beq.w 0x32956                                     |         goto label_2;
                                                                 |     }
    0x00032aa4 mov ip, r4                                        |     
                                                                 |     do {
    0x00032aa6 ldrb.w r1, [r3, 0x50]                             |         r1 = *((r3 + 0x50));
    0x00032aaa lsls r1, r1, 0x1b                                 |         r1 <<= 0x1b;
                                                                 |         if (r1 < r1) {
    0x00032aac bpl 0x32abe                                       |             
    0x00032aae ldrd r4, r1, [r3, 0x18]                           |             __asm ("ldrd r4, r1, [r3, 0x18]");
    0x00032ab2 cmp r0, r1                                        |             
    0x00032ab4 it eq                                             |             
                                                                 |             if (r0 == r1) {
    0x00032ab6 cmpeq lr, r4                                      |                 __asm ("cmpeq lr, r4");
                                                                 |             }
    0x00032ab8 it eq                                             |             
                                                                 |             if (r0 == r1) {
    0x00032aba strbeq r2, [r3, 0x51]                             |                 *((r3 + 0x51)) = r2;
                                                                 |                 goto label_11;
                                                                 |             }
                                                                 |         }
                                                                 | label_11:
    0x00032abe ldr r3, [r3, 8]                                   |         r3 = *((r3 + 8));
    0x00032ac0 cmp r3, 0                                         |         
    0x00032ac2 bne 0x32aa6                                       |         
                                                                 |     } while (r3 != 0);
    0x00032ac4 mov r4, ip                                        |     r4 = ip;
    0x00032ac6 b 0x32956                                         |     goto label_2;
                                                                 | label_9:
    0x00032ac8 mov r0, r4                                        |     r0 = r4;
    0x00032aca str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00032acc bl 0x2e878                                        |     fcn_0002e878 (r0);
    0x00032ad0 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00032ad2 b 0x328e8                                         |     goto label_0;
                                                                 | label_10:
    0x00032ad4 ldr.w r0, [sl, 0x20]                              |     r0 = *((sl + 0x20));
    0x00032ad8 bl 0xdc94                                         |     r0 = fcn_0000dc94 (r0);
    0x00032adc mov r3, r0                                        |     r3 = r0;
    0x00032ade str.w r0, [sl, 0x50]                              |     __asm ("str.w r0, [sl, 0x50]");
    0x00032ae2 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00032ae4 beq 0x32a4c                                       |         goto label_3;
                                                                 |     }
    0x00032ae6 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00032ae8 str r2, [r0]                                      |     *(r0) = r2;
    0x00032aea ldr.w r3, [sl, 0x50]                              |     r3 = *((sl + 0x50));
    0x00032aee b 0x32a4c                                         |     goto label_3;
                                                                 | label_5:
    0x00032af0 blx 0x6498                                        |     fcn_00006498 ();
    0x00032af4 strh r2, [r3, r6]                                 |     *((r3 + r6)) = r2;
    0x00032af6 movs r4, r0                                       |     r4 = r0;
    0x00032af8 lsls r0, r1, 0xe                                  |     r0 = r1 << 0xe;
    0x00032afa movs r0, r0                                       |     
    0x00032afc strh r4, [r5, r5]                                 |     *((r5 + r5)) = r4;
    0x00032afe movs r4, r0                                       |     r4 = r0;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x32b00 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00032b00 ()                                      | void fcn_00032b00 (int16_t arg_a8h, int16_t arg_ach, int16_t arg_b0h, int16_t arg_b4h, int16_t arg_b8h, 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;
                                                                 |     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_6eh;
                                                                 |     int16_t var_70h;
                                                                 |     int16_t var_72h;
                                                                 |     int16_t var_7ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00032b00 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x00032b04 sub sp, 0x84                                      |     
    0x00032b06 ldr.w r4, [pc, 0x4b0]                             |     
    0x00032b0a mov r5, r0                                        |     r5 = r0;
    0x00032b0c mov sb, r3                                        |     sb = r3;
    0x00032b0e str r0, [sp, 0x20]                                |     var_20h = r0;
    0x00032b10 ldr.w r0, [pc, 0x4a8]                             |     r0 = *(0x32fbc);
    0x00032b14 add r4, pc                                        |     r4 = 0x65ad2;
    0x00032b16 ldrb.w r3, [r5, 0x51]                             |     r3 = *((r5 + 0x51));
    0x00032b1a ldr r5, [sp, 0xac]                                |     r5 = *(arg_ach);
    0x00032b1c ldr r0, [r4, r0]                                  |     
    0x00032b1e ldr r4, [sp, 0xa8]                                |     r4 = *(arg_a8h);
    0x00032b20 cmp r3, 4                                         |     
    0x00032b22 ldr r0, [r0]                                      |     r0 = *(0x65ad2);
    0x00032b24 str r0, [sp, 0x7c]                                |     var_7ch = r0;
    0x00032b26 mov.w r0, 0                                       |     r0 = 0;
    0x00032b2a str r1, [sp, 0x10]                                |     var_10h = r1;
    0x00032b2c str r4, [sp, 0x24]                                |     var_24h = r4;
    0x00032b2e ldr r4, [sp, 0xb8]                                |     r4 = *(arg_b8h);
    0x00032b30 str r4, [sp, 0x48]                                |     var_48h = r4;
                                                                 |     if (r3 == 4) {
    0x00032b32 beq.w 0x32d40                                     |         goto label_13;
                                                                 |     }
    0x00032b36 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00032b38 mov r7, r2                                        |     r7 = r2;
    0x00032b3a ldr.w r8, [r3]                                    |     r8 = *(r3);
    0x00032b3e mov r2, r3                                        |     r2 = r3;
    0x00032b40 ldr r1, [r3, 0x44]                                |     r1 = *((r3 + 0x44));
    0x00032b42 mov sl, r3                                        |     sl = r3;
    0x00032b44 ldr.w r6, [r8, 4]                                 |     r6 = *((r8 + 4));
    0x00032b48 ldr r0, [r6, 8]                                   |     r0 = *((r6 + 8));
    0x00032b4a bl 0x2da04                                        |     fcn_0002da04 (r0, r1, r2);
    0x00032b4e str r0, [sp, 0x14]                                |     var_14h = r0;
    0x00032b50 str r0, [sp, 0x44]                                |     var_44h = r0;
    0x00032b52 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00032b54 bne.w 0x32d22                                     |         goto label_3;
                                                                 |     }
    0x00032b58 ldr.w r3, [sl, 0x10]                              |     r3 = *((sl + 0x10));
    0x00032b5c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00032b5e beq.w 0x32d62                                     |         goto label_14;
                                                                 |     }
                                                                 | label_1:
    0x00032b62 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00032b64 beq.w 0x32dc6                                     |         goto label_15;
                                                                 |     }
                                                                 | label_2:
    0x00032b68 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00032b6a ldrsh.w r3, [r2, 0x54]                            |     r3 = *((r2 + 0x54));
    0x00032b6e adds r3, 0x20                                     |     r3 += 0x20;
    0x00032b70 ldr.w r3, [r2, r3, lsl 2]                         |     offset_0 = r3 << 2;
                                                                 |     r3 = *((r2 + offset_0));
    0x00032b74 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x00032b76 ldr r3, [r6, 0x50]                                |     r3 = *((r6 + 0x50));
    0x00032b78 str r3, [sp, 0x28]                                |     var_28h = r3;
    0x00032b7a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00032b7c beq.w 0x32f0a                                     |         goto label_16;
                                                                 |     }
                                                                 | label_9:
    0x00032b80 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x00032b82 movs r3, 0                                        |     r3 = 0;
    0x00032b84 strd r3, r3, [sp, 0x50]                           |     __asm ("strd r3, r3, [var_54h]");
    0x00032b88 ldrb r2, [r0, 3]                                  |     r2 = *((r0 + 3));
    0x00032b8a ldrb r1, [r0, 4]                                  |     r1 = *((r0 + 4));
    0x00032b8c ldr.w r8, [r0, 0x34]                              |     r8 = *((r0 + 0x34));
    0x00032b90 clz r2, r2                                        |     r2 &= r2;
    0x00032b94 lsrs r2, r2, 5                                    |     r2 >>= 5;
    0x00032b96 lsls r4, r2, 2                                    |     r4 = r2 << 2;
    0x00032b98 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00032b9a bne.w 0x32d48                                     |         goto label_17;
                                                                 |     }
    0x00032b9e mov r5, r1                                        |     r5 = r1;
    0x00032ba0 mov r6, r1                                        |     r6 = r1;
                                                                 | label_0:
    0x00032ba2 ldr r1, [sp, 0x28]                                |     r1 = var_28h;
    0x00032ba4 mov r3, sb                                        |     r3 = sb;
    0x00032ba6 mov r2, r7                                        |     r2 = r7;
    0x00032ba8 adds r0, r1, r4                                   |     r0 = r1 + r4;
    0x00032baa bl 0x9cd4                                         |     fcn_00009cd4 (r0, r1, r2);
    0x00032bae ldrd r1, sl, [sp, 0x28]                           |     __asm ("ldrd r1, sl, [var_2ch]");
    0x00032bb2 add r4, r0                                        |     r4 += r0;
    0x00032bb4 add r2, sp, 0x58                                  |     r2 += var_58h;
    0x00032bb6 mov r0, sl                                        |     r0 = sl;
    0x00032bb8 bl 0x9e14                                         |     fcn_00009e14 (r0, r1, r2);
    0x00032bbc ldrb.w r3, [sl, 2]                                |     r3 = *((sl + 2));
    0x00032bc0 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00032bc2 bne.w 0x32e9c                                     |         goto label_18;
                                                                 |     }
    0x00032bc6 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x00032bc8 cmp.w r7, -0x80000000                             |     
    0x00032bcc sbcs sb, sb, 0                                    |     __asm ("sbcs sb, sb, 0");
    0x00032bd0 ite ge                                            |     
                                                                 |     if (r7 < -0x80000000) {
    0x00032bd2 movge r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r7 >= -0x80000000) {
    0x00032bd4 movlt r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00032bd6 cmp r2, 0                                         |     
    0x00032bd8 it eq                                             |     
                                                                 |     if (r2 != 0) {
    0x00032bda orreq r3, r3, 1                                   |         r3 |= 1;
                                                                 |     }
    0x00032bde cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00032be0 bne.w 0x32f3c                                     |         goto label_19;
                                                                 |     }
    0x00032be4 str r5, [sp, 0x14]                                |     var_14h = r5;
    0x00032be6 add r6, r7                                        |     r6 += r7;
    0x00032be8 mov r5, r7                                        |     r5 = r7;
                                                                 | label_7:
    0x00032bea ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x00032bec cmp r6, 0                                         |     
    0x00032bee ldrh.w r7, [sp, 0x70]                             |     r7 = var_70h;
    0x00032bf2 add.w r3, r2, r4                                  |     r3 = r2 + r4;
    0x00032bf6 ldrh.w r4, [sp, 0x6e]                             |     r4 = var_6eh;
    0x00032bfa add r7, r2                                        |     r7 += r2;
    0x00032bfc ldrh.w r2, [sp, 0x72]                             |     r2 = var_72h;
    0x00032c00 str r2, [sp, 0x3c]                                |     var_3ch = r2;
                                                                 |     if (r6 <= 0) {
    0x00032c02 ble 0x32cda                                       |         goto label_20;
                                                                 |     }
    0x00032c04 ldr r2, [pc, 0x3b8]                               |     
    0x00032c06 add r2, pc                                        |     r2 = 0x65bca;
    0x00032c08 str r2, [sp, 0x34]                                |     var_34h = r2;
    0x00032c0a movw r2, 0xcccd                                   |     
    0x00032c0e movt r2, 0xcccc                                   |     r2 = 0xcccccccd;
    0x00032c12 str r2, [sp, 0x38]                                |     var_38h = r2;
    0x00032c14 movs r2, 0                                        |     r2 = 0;
    0x00032c16 str r2, [sp, 0x1c]                                |     var_1ch = r2;
                                                                 |     do {
    0x00032c18 cmp r4, 0                                         |         
                                                                 |         if (r4 == 0) {
    0x00032c1a bne 0x32c8e                                       |             
    0x00032c1c ldr r2, [sp, 0x54]                                |             r2 = var_54h;
    0x00032c1e ldrb.w r3, [r8, 0x11]                             |             r3 = *((r8 + 0x11));
    0x00032c22 str r2, [sp, 0x18]                                |             var_18h = r2;
    0x00032c24 ldr r4, [sp, 0x18]                                |             r4 = var_18h;
    0x00032c26 cmp r3, 0                                         |             
                                                                 |             if (r3 != 0) {
    0x00032c28 bne.w 0x32df4                                     |                 goto label_21;
                                                                 |             }
                                                                 | label_5:
    0x00032c2c movs r2, 0                                        |             r2 = 0;
    0x00032c2e mov r3, r4                                        |             r3 = r4;
    0x00032c30 str r2, [sp]                                      |             *(sp) = r2;
    0x00032c32 add r1, sp, 0x50                                  |             r1 += var_50h;
    0x00032c34 add r2, sp, 0x54                                  |             r2 += var_54h;
    0x00032c36 mov r0, r8                                        |             r0 = r8;
    0x00032c38 bl 0x312b0                                        |             fcn_000312b0 (r0, r1, r2, r3, r4, r5);
    0x00032c3c ldrb.w r3, [r8, 0x11]                             |             r3 = *((r8 + 0x11));
    0x00032c40 str r0, [sp, 0x4c]                                |             var_4ch = r0;
    0x00032c42 subs r3, 0                                        |             
    0x00032c44 it ne                                             |             
                                                                 |             if (r3 == 0) {
    0x00032c46 movne r3, 1                                       |                 r3 = 1;
                                                                 |             }
    0x00032c48 cmp r0, 0                                         |             
    0x00032c4a it ne                                             |             
                                                                 |             if (r0 == 0) {
    0x00032c4c movne r3, 0                                       |                 r3 = 0;
                                                                 |             }
    0x00032c4e cmp r3, 0                                         |             
                                                                 |             if (r3 != 0) {
    0x00032c50 bne.w 0x32e5a                                     |                 goto label_22;
                                                                 |             }
    0x00032c54 cmp r0, 0                                         |             
                                                                 |             if (r0 != 0) {
    0x00032c56 bne.w 0x32fb4                                     |                 goto label_23;
                                                                 |             }
    0x00032c5a ldr r4, [sp, 0x54]                                |             r4 = var_54h;
                                                                 | label_6:
    0x00032c5c lsrs r3, r4, 0x18                                 |             r3 = r4 >> 0x18;
    0x00032c5e strb r4, [r7, 3]                                  |             *((r7 + 3)) = r4;
    0x00032c60 strb r3, [r7]                                     |             *(r7) = r3;
    0x00032c62 lsrs r3, r4, 0x10                                 |             r3 = r4 >> 0x10;
    0x00032c64 lsrs r4, r4, 8                                    |             r4 >>= 8;
    0x00032c66 strb r3, [r7, 1]                                  |             *((r7 + 1)) = r3;
    0x00032c68 ldr r3, [sp, 0x1c]                                |             r3 = var_1ch;
    0x00032c6a strb r4, [r7, 2]                                  |             *((r7 + 2)) = r4;
                                                                 |             if (r3 != 0) {
    0x00032c6c cbz r3, 0x32c74                                   |                 
    0x00032c6e ldr r0, [r3, 0x44]                                |                 r0 = *((r3 + 0x44));
    0x00032c70 bl 0x2bd94                                        |                 fcn_0002bd94 (r0);
                                                                 |             }
    0x00032c74 ldr r2, [sp, 0x50]                                |             r2 = var_50h;
    0x00032c76 movs r3, 0                                        |             r3 = 0;
    0x00032c78 ldr r7, [r2, 0x38]                                |             r7 = *((r2 + 0x38));
    0x00032c7a str r2, [sp, 0x1c]                                |             var_1ch = r2;
    0x00032c7c strb r3, [r7]                                     |             *(r7) = r3;
    0x00032c7e strb r3, [r7, 1]                                  |             *((r7 + 1)) = r3;
    0x00032c80 strb r3, [r7, 2]                                  |             *((r7 + 2)) = r3;
    0x00032c82 strb r3, [r7, 3]                                  |             *((r7 + 3)) = r3;
    0x00032c84 ldr r3, [r2, 0x38]                                |             r3 = *((r2 + 0x38));
    0x00032c86 ldr.w r4, [r8, 0x24]                              |             r4 = *((r8 + 0x24));
    0x00032c8a adds r3, 4                                        |             r3 += 4;
    0x00032c8c subs r4, 4                                        |             r4 -= 4;
                                                                 |         }
    0x00032c8e cmp r4, r6                                        |         
    0x00032c90 mov sb, r4                                        |         sb = r4;
    0x00032c92 it ge                                             |         
                                                                 |         if (r4 < r6) {
    0x00032c94 movge sb, r6                                      |             sb = r6;
                                                                 |         }
    0x00032c96 cmp r5, 0                                         |         
                                                                 |         if (r5 <= 0) {
    0x00032c98 ble.w 0x32de6                                     |             goto label_24;
                                                                 |         }
    0x00032c9c cmp sb, r5                                        |         
    0x00032c9e mov r0, r3                                        |         r0 = r3;
    0x00032ca0 it ge                                             |         
                                                                 |         if (sb < r5) {
    0x00032ca2 movge sb, r5                                      |             sb = r5;
                                                                 |         }
    0x00032ca4 ldr r1, [sp, 0x10]                                |         r1 = var_10h;
    0x00032ca6 mov r2, sb                                        |         r2 = sb;
    0x00032ca8 blx 0x6214                                        |         r0 = fcn_00006214 ();
    0x00032cac mov r3, r0                                        |         r3 = r0;
                                                                 | label_4:
    0x00032cae subs.w r5, r5, sb                                 |         r5 -= sb;
    0x00032cb2 sub.w r6, r6, sb                                  |         r6 -= sb;
    0x00032cb6 it ne                                             |         
                                                                 |         if (r5 == r5) {
    0x00032cb8 ldrne r2, [sp, 0x10]                              |             r2 = var_10h;
                                                                 |         }
    0x00032cba add r3, sb                                        |         r3 += sb;
    0x00032cbc it eq                                             |         
                                                                 |         if (r5 != r5) {
    0x00032cbe ldreq r2, [sp, 0x24]                              |             r2 = var_24h;
                                                                 |         }
    0x00032cc0 sub.w r4, r4, sb                                  |         r4 -= sb;
    0x00032cc4 ite eq                                            |         
                                                                 |         if (r5 != r5) {
    0x00032cc6 ldreq r5, [sp, 0x14]                              |             r5 = var_14h;
                                                                 |         }
                                                                 |         if (r5 == r5) {
    0x00032cc8 addne r2, sb                                      |             r2 += sb;
                                                                 |         }
    0x00032cca cmp r6, 0                                         |         
    0x00032ccc str r2, [sp, 0x10]                                |         var_10h = r2;
    0x00032cce bgt 0x32c18                                       |         
                                                                 |     } while (r6 > 0);
    0x00032cd0 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
                                                                 |     if (r3 != 0) {
    0x00032cd2 cbz r3, 0x32cda                                   |         
    0x00032cd4 ldr r0, [r3, 0x44]                                |         r0 = *((r3 + 0x44));
    0x00032cd6 bl 0x2bd94                                        |         fcn_0002bd94 (r0);
                                                                 |     }
                                                                 | label_20:
    0x00032cda ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00032cdc movs r3, 0                                        |     r3 = 0;
    0x00032cde str r3, [sp, 0x44]                                |     var_44h = r3;
    0x00032ce0 ldrsh.w r3, [r2, 0x54]                            |     r3 = *((r2 + 0x54));
    0x00032ce4 add.w r3, r2, r3, lsl 1                           |     r3 = r2 + (r3 << 1);
    0x00032ce8 ldr r2, [sp, 0x48]                                |     r2 = var_48h;
    0x00032cea ldrh.w r4, [r3, 0x56]                             |     r4 = *((r3 + 0x56));
    0x00032cee cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00032cf0 beq.w 0x32ea2                                     |         goto label_25;
                                                                 |     }
                                                                 |     if (r2 < 0) {
    0x00032cf4 blt.w 0x32f28                                     |         goto label_26;
                                                                 |     }
                                                                 | label_10:
    0x00032cf8 add r5, sp, 0x44                                  |     r5 += var_44h;
                                                                 | label_8:
    0x00032cfa str r5, [sp, 8]                                   |     var_8h = r5;
    0x00032cfc mov r1, r4                                        |     r1 = r4;
    0x00032cfe ldr r5, [sp, 0x2c]                                |     r5 = var_2ch;
    0x00032d00 movs r4, 0                                        |     r4 = 0;
    0x00032d02 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00032d04 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x00032d06 mov r0, r5                                        |     r0 = r5;
    0x00032d08 strd r4, r4, [sp]                                 |     __asm ("strd r4, r4, [sp]");
    0x00032d0c bl 0x2f960                                        |     fcn_0002f960 (r0, r1, r2, r3, r4, r5);
    0x00032d10 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x00032d12 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00032d14 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00032d16 strh r4, [r2, 0x32]                               |     *((r2 + 0x32)) = r4;
                                                                 |     if (r3 != 0) {
    0x00032d18 cbnz r3, 0x32d22                                  |         goto label_3;
                                                                 |     }
    0x00032d1a ldrb r3, [r5, 1]                                  |     r3 = *((r5 + 1));
    0x00032d1c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00032d1e bne.w 0x32f6c                                     |         goto label_27;
                                                                 |     }
                                                                 |     do {
                                                                 | label_3:
    0x00032d22 ldr r2, [pc, 0x2a0]                               |         
    0x00032d24 ldr r3, [pc, 0x294]                               |         r3 = *(0x32fbc);
    0x00032d26 add r2, pc                                        |         r2 = 0x65cf0;
    0x00032d28 ldr r3, [r2, r3]                                  |         r3 = *(0x65cf0);
    0x00032d2a ldr r2, [r3]                                      |         r2 = *(0x65cf0);
    0x00032d2c ldr r3, [sp, 0x7c]                                |         r3 = var_7ch;
    0x00032d2e eors r2, r3                                       |         r2 ^= r3;
    0x00032d30 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00032d34 bne.w 0x32fb0                                     |             goto label_28;
                                                                 |         }
    0x00032d38 ldr r0, [sp, 0x14]                                |         r0 = var_14h;
    0x00032d3a add sp, 0x84                                      |         
    0x00032d3c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_13:
    0x00032d40 ldr r3, [sp, 0x20]                                |         r3 = var_20h;
    0x00032d42 ldr r3, [r3, 0x4c]                                |         r3 = *((r3 + 0x4c));
    0x00032d44 str r3, [sp, 0x14]                                |         var_14h = r3;
    0x00032d46 b 0x32d22                                         |         
                                                                 |     } while (1);
                                                                 | label_17:
    0x00032d48 ldr r1, [sp, 0xb0]                                |     r1 = *(arg_b0h);
    0x00032d4a adds r6, r5, r1                                   |     r6 = r5 + r1;
    0x00032d4c ldr r1, [sp, 0x28]                                |     r1 = var_28h;
    0x00032d4e cmp r6, 0x7f                                      |     
    0x00032d50 add.w r0, r1, r4                                  |     r0 = r1 + r4;
                                                                 |     if (r6 > 0x7f) {
    0x00032d54 bhi.w 0x32f56                                     |         goto label_29;
                                                                 |     }
    0x00032d58 movs r3, 1                                        |     r3 = 1;
    0x00032d5a strb.w r6, [r1, r2, lsl 2]                        |     offset_1 = r2 << 2;
                                                                 |     *((r1 + offset_1)) = r6;
    0x00032d5e add r4, r3                                        |     r4 += r3;
    0x00032d60 b 0x32ba2                                         |     goto label_0;
                                                                 | label_14:
    0x00032d62 ldr.w r3, [r8, 4]                                 |     r3 = *((r8 + 4));
    0x00032d66 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
                                                                 |     if (r3 == 0) {
    0x00032d68 cbz r3, 0x32d88                                   |         goto label_30;
                                                                 |     }
                                                                 |     do {
    0x00032d6a ldrb.w r2, [r3, 0x50]                             |         r2 = *((r3 + 0x50));
    0x00032d6e lsls r2, r2, 0x1b                                 |         r2 <<= 0x1b;
                                                                 |         if (r2 < r2) {
    0x00032d70 bpl 0x32d82                                       |             
    0x00032d72 ldrd r1, r2, [r3, 0x18]                           |             __asm ("ldrd r1, r2, [r3, 0x18]");
    0x00032d76 cmp sb, r2                                        |             
    0x00032d78 it eq                                             |             
                                                                 |             if (sb == r2) {
    0x00032d7a cmpeq r7, r1                                      |                 __asm ("cmpeq r7, r1");
                                                                 |             }
    0x00032d7c it eq                                             |             
                                                                 |             if (sb == r2) {
    0x00032d7e strbeq r0, [r3, 0x51]                             |                 *((r3 + 0x51)) = r0;
                                                                 |                 goto label_31;
                                                                 |             }
                                                                 |         }
                                                                 | label_31:
    0x00032d82 ldr r3, [r3, 8]                                   |         r3 = *((r3 + 8));
    0x00032d84 cmp r3, 0                                         |         
    0x00032d86 bne 0x32d6a                                       |         
                                                                 |     } while (r3 != 0);
                                                                 | label_30:
    0x00032d88 cmp r7, 1                                         |     
    0x00032d8a sbcs r3, sb, 0                                    |     __asm ("sbcs r3, sb, 0");
    0x00032d8e ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00032d90 ldrb.w r2, [r3, 0x50]                             |     r2 = *((r3 + 0x50));
    0x00032d94 ite ge                                            |     
                                                                 |     if (r7 < 1) {
    0x00032d96 movge r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r7 >= 1) {
    0x00032d98 movlt r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00032d9a ands.w r3, r3, r2, lsr 1                          |     r3 &= (r2 >> 1);
                                                                 |     if (r3 == r3) {
    0x00032d9e beq.w 0x32b62                                     |         goto label_1;
                                                                 |     }
    0x00032da2 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00032da4 subs r1, r7, 1                                    |     r1 = r7 - 1;
    0x00032da6 ldrd r0, r2, [r3, 0x18]                           |     __asm ("ldrd r0, r2, [r3, 0x18]");
    0x00032daa adc r3, sb, -1                                    |     __asm ("adc r3, sb, -1");
    0x00032dae cmp r2, r3                                        |     
    0x00032db0 it eq                                             |     
                                                                 |     if (r2 == r3) {
    0x00032db2 cmpeq r0, r1                                      |         __asm ("cmpeq r0, r1");
                                                                 |     }
    0x00032db4 itt eq                                            |     
                                                                 |     if (r2 != r3) {
    0x00032db6 moveq r3, -1                                      |         r3 = -1;
                                                                 |     }
                                                                 |     if (r2 != r3) {
    0x00032dba str r3, [sp, 0x48]                                |         var_48h = r3;
                                                                 |         goto label_32;
                                                                 |     }
                                                                 |     if (r2 == r3) {
                                                                 | label_32:
    0x00032dbc beq.w 0x32b68                                     |         goto label_2;
                                                                 |     }
    0x00032dc0 cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x00032dc2 bne.w 0x32b68                                     |         goto label_2;
                                                                 |     }
                                                                 | label_15:
    0x00032dc6 ldr r3, [sp, 0xb4]                                |     r3 = *(arg_b4h);
    0x00032dc8 mov r2, r7                                        |     r2 = r7;
    0x00032dca ldr r1, [sp, 0x10]                                |     r1 = var_10h;
    0x00032dcc ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x00032dce str r3, [sp]                                      |     *(sp) = r3;
    0x00032dd0 add r3, sp, 0x48                                  |     r3 += var_48h;
    0x00032dd2 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00032dd4 mov r3, sb                                        |     r3 = sb;
    0x00032dd6 bl 0x2edc8                                        |     fcn_0002edc8 (r0, r1, r2, r3, r4);
    0x00032dda str r0, [sp, 0x44]                                |     var_44h = r0;
    0x00032ddc cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00032dde beq.w 0x32b68                                     |         goto label_2;
                                                                 |     }
    0x00032de2 str r0, [sp, 0x14]                                |     var_14h = r0;
    0x00032de4 b 0x32d22                                         |     goto label_3;
                                                                 | label_24:
    0x00032de6 mov r0, r3                                        |     r0 = r3;
    0x00032de8 mov r2, sb                                        |     r2 = sb;
    0x00032dea movs r1, 0                                        |     r1 = 0;
    0x00032dec blx 0x5fcc                                        |     r0 = fcn_00005fcc ();
    0x00032df0 mov r3, r0                                        |     r3 = r0;
    0x00032df2 b 0x32cae                                         |     goto label_4;
                                                                 | label_21:
    0x00032df4 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00032df6 ldr.w sb, [r8, 0x20]                              |     sb = *((r8 + 0x20));
    0x00032dfa ldr.w fp, [sp, 0x38]                              |     fp = var_38h;
    0x00032dfe ldr.w sl, [r3, 0x110]                             |     sl = *((r3 + 0x110));
    0x00032e02 str r5, [sp, 0xac]                                |     *(arg_ach) = r5;
    0x00032e04 mov r5, r2                                        |     r5 = r2;
    0x00032e06 str r6, [sp, 0x30]                                |     var_30h = r6;
                                                                 |     do {
    0x00032e08 adds r6, r5, 1                                    |         r6 = r5 + 1;
    0x00032e0a cmp r6, 1                                         |         
    0x00032e0c it ls                                             |         
                                                                 |         if (r6 > 1) {
    0x00032e0e movls r1, 0                                       |             r1 = 0;
                                                                 |         }
                                                                 |         if (r6 >= 1) {
    0x00032e10 bls 0x32e3c                                       |             
    0x00032e12 ldr.w r4, [r8, 0x24]                              |             r4 = *((r8 + 0x24));
    0x00032e16 subs r0, r5, 1                                    |             r0 = r5 - 1;
    0x00032e18 umull r1, r4, fp, r4                              |             r1:r4 = fp * r4;
    0x00032e1c lsrs r4, r4, 2                                    |             r4 >>= 2;
    0x00032e1e adds r4, 1                                        |             r4++;
    0x00032e20 mov r1, r4                                        |             r1 = r4;
    0x00032e22 bl 0x5dc60                                        |             r0 = fcn_0005dc60 (r0, r1, r2);
    0x00032e26 mul r4, r0, r4                                    |             r4 = r0 * r4;
    0x00032e2a mov r1, sb                                        |             r1 = sb;
    0x00032e2c mov r0, sl                                        |             r0 = sl;
    0x00032e2e bl 0x5dc60                                        |             fcn_0005dc60 (r0, r1, r2);
    0x00032e32 adds r1, r4, 2                                    |             r1 = r4 + 2;
    0x00032e34 adds r0, 1                                        |             r0++;
    0x00032e36 cmp r1, r0                                        |             
    0x00032e38 it eq                                             |             
                                                                 |             if (r1 == r0) {
    0x00032e3a addeq r1, r4, 3                                   |                 r1 = r4 + 3;
                                                                 |                 goto label_33;
                                                                 |             }
                                                                 |         }
                                                                 | label_33:
    0x00032e3c cmp r6, r1                                        |         
                                                                 |         if (r6 != r1) {
    0x00032e3e beq 0x32e4c                                       |             
    0x00032e40 mov r1, sb                                        |             r1 = sb;
    0x00032e42 mov r0, sl                                        |             r0 = sl;
    0x00032e44 bl 0x5dc60                                        |             r0 = fcn_0005dc60 (r0, r1, r2);
    0x00032e48 cmp r0, r5                                        |             
                                                                 |             if (r0 != r5) {
    0x00032e4a bne 0x32e50                                       |                 goto label_34;
                                                                 |             }
                                                                 |         }
    0x00032e4c mov r5, r6                                        |         r5 = r6;
    0x00032e4e b 0x32e08                                         |         
                                                                 |     } while (1);
                                                                 | label_34:
    0x00032e50 mov r4, r6                                        |     r4 = r6;
    0x00032e52 ldr r5, [sp, 0xac]                                |     r5 = *(arg_ach);
    0x00032e54 ldr r6, [sp, 0x30]                                |     r6 = var_30h;
    0x00032e56 str r4, [sp, 0x54]                                |     var_54h = r4;
    0x00032e58 b 0x32c2c                                         |     goto label_5;
                                                                 | label_22:
    0x00032e5a ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00032e5c add r2, sp, 0x4c                                  |     r2 += var_4ch;
    0x00032e5e ldr r4, [sp, 0x54]                                |     r4 = var_54h;
    0x00032e60 mov r0, r8                                        |     r0 = r8;
    0x00032e62 str r2, [sp]                                      |     *(sp) = r2;
    0x00032e64 cmp r3, 0                                         |     
    0x00032e66 ite ne                                            |     
                                                                 |     if (r3 == 0) {
    0x00032e68 movne r2, 4                                       |         r2 = 4;
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x00032e6a moveq r2, 3                                       |         r2 = 3;
                                                                 |     }
    0x00032e6c mov r1, r4                                        |     r1 = r4;
    0x00032e6e bl 0x2d07c                                        |     fcn_0002d07c (r0, r1, r2, r3, r4, r5, r6);
    0x00032e72 ldr r0, [sp, 0x4c]                                |     r0 = var_4ch;
    0x00032e74 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00032e76 beq.w 0x32c5c                                     |         goto label_6;
                                                                 |     }
    0x00032e7a ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x00032e7c mov r3, r0                                        |     r3 = r0;
                                                                 |     if (r2 != 0) {
    0x00032e7e cbz r2, 0x32e8a                                   |         
    0x00032e80 str r0, [sp, 0x10]                                |         var_10h = r0;
    0x00032e82 ldr r0, [r2, 0x44]                                |         r0 = *((r2 + 0x44));
    0x00032e84 bl 0x2bd94                                        |         fcn_0002bd94 (r0);
    0x00032e88 ldr r3, [sp, 0x10]                                |         r3 = var_10h;
                                                                 |     }
                                                                 | label_12:
    0x00032e8a ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
                                                                 |     if (r2 != 0) {
    0x00032e8c cbz r2, 0x32e98                                   |         
    0x00032e8e ldr r0, [r2, 0x44]                                |         r0 = *((r2 + 0x44));
    0x00032e90 str r3, [sp, 0x10]                                |         var_10h = r3;
    0x00032e92 bl 0x2bd94                                        |         fcn_0002bd94 (r0);
    0x00032e96 ldr r3, [sp, 0x10]                                |         r3 = var_10h;
                                                                 |     }
    0x00032e98 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00032e9a b 0x32d22                                         |     goto label_3;
                                                                 | label_18:
    0x00032e9c ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00032e9e str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00032ea0 b 0x32bea                                         |     goto label_7;
                                                                 | label_25:
    0x00032ea2 ldr r5, [sp, 0x2c]                                |     r5 = var_2ch;
    0x00032ea4 ldr r0, [r5, 0x44]                                |     r0 = *((r5 + 0x44));
    0x00032ea6 bl 0x2bdf4                                        |     fcn_0002bdf4 (r0, r1, r2);
    0x00032eaa str r0, [sp, 0x14]                                |     var_14h = r0;
    0x00032eac str r0, [sp, 0x44]                                |     var_44h = r0;
    0x00032eae cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00032eb0 bne.w 0x32d22                                     |         goto label_3;
                                                                 |     }
    0x00032eb4 ldr r3, [r5, 0x40]                                |     r3 = *((r5 + 0x40));
    0x00032eb6 ldrh r0, [r5, 0x12]                               |     r0 = *((r5 + 0x12));
    0x00032eb8 ldr r2, [r5, 0x38]                                |     r2 = *((r5 + 0x38));
    0x00032eba ldrb r1, [r5, 3]                                  |     r1 = *((r5 + 3));
    0x00032ebc ldrb.w r5, [r3, r4, lsl 1]                        |     offset_2 = r4 << 1;
                                                                 |     r5 = *((r3 + offset_2));
    0x00032ec0 add.w r3, r3, r4, lsl 1                           |     r3 += (r4 << 1);
    0x00032ec4 ldrb r3, [r3, 1]                                  |     r3 = *((r3 + 1));
    0x00032ec6 orr.w r3, r3, r5, lsl 8                           |     r3 |= (r5 << 8);
    0x00032eca ands r3, r0                                       |     r3 &= r0;
    0x00032ecc adds r5, r2, r3                                   |     r5 = r2 + r3;
    0x00032ece cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00032ed0 beq 0x32fa8                                       |         goto label_35;
                                                                 |     }
                                                                 | label_11:
    0x00032ed2 ldr r6, [sp, 0x2c]                                |     r6 = var_2ch;
    0x00032ed4 mov r1, r5                                        |     r1 = r5;
    0x00032ed6 mov r0, r6                                        |     r0 = r6;
    0x00032ed8 bl 0x9f14                                         |     fcn_00009f14 (r0, r1, r2, r3);
    0x00032edc mov r1, r5                                        |     r1 = r5;
    0x00032ede mov r5, r0                                        |     r5 = r0;
    0x00032ee0 mov r0, r6                                        |     r0 = r6;
    0x00032ee2 bl 0x2ff40                                        |     fcn_0002ff40 (r0, r1);
    0x00032ee6 str r0, [sp, 0x14]                                |     var_14h = r0;
    0x00032ee8 str r0, [sp, 0x44]                                |     var_44h = r0;
    0x00032eea cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00032eec bne.w 0x32d22                                     |         goto label_3;
                                                                 |     }
    0x00032ef0 mov r2, r5                                        |     r2 = r5;
    0x00032ef2 add r5, sp, 0x44                                  |     r5 += var_44h;
    0x00032ef4 mov r3, r5                                        |     r3 = r5;
    0x00032ef6 mov r1, r4                                        |     r1 = r4;
    0x00032ef8 mov r0, r6                                        |     r0 = r6;
    0x00032efa bl 0x29ab4                                        |     fcn_00029ab4 (r0, r1, r2, r3);
    0x00032efe ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x00032f00 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00032f02 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00032f04 beq.w 0x32cfa                                     |         goto label_8;
                                                                 |     }
    0x00032f08 b 0x32d22                                         |     goto label_3;
                                                                 | label_16:
    0x00032f0a ldr r0, [r6, 0x20]                                |     r0 = *((r6 + 0x20));
    0x00032f0c bl 0xdc94                                         |     fcn_0000dc94 (r0);
    0x00032f10 str r0, [r6, 0x50]                                |     *((r6 + 0x50)) = r0;
                                                                 |     if (r0 == 0) {
    0x00032f12 cbz r0, 0x32f22                                   |         goto label_36;
                                                                 |     }
    0x00032f14 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00032f16 str r3, [r0]                                      |     *(r0) = r3;
    0x00032f18 ldr r3, [r6, 0x50]                                |     r3 = *((r6 + 0x50));
    0x00032f1a str r3, [sp, 0x28]                                |     var_28h = r3;
    0x00032f1c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00032f1e bne.w 0x32b80                                     |         goto label_9;
                                                                 |     }
                                                                 | label_36:
    0x00032f22 movs r3, 7                                        |     r3 = 7;
    0x00032f24 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00032f26 b 0x32d22                                         |     goto label_3;
                                                                 | label_26:
    0x00032f28 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x00032f2a ldrh r2, [r2, 0x10]                               |     r2 = *((r2 + 0x10));
    0x00032f2c cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00032f2e beq.w 0x32cf8                                     |         goto label_10;
                                                                 |     }
    0x00032f32 adds r4, 1                                        |     r4++;
    0x00032f34 uxth r4, r4                                       |     r4 = (int16_t) r4;
    0x00032f36 strh.w r4, [r3, 0x56]                             |     *((r3 + 0x56)) = r4;
    0x00032f3a b 0x32cf8                                         |     goto label_10;
                                                                 | label_19:
    0x00032f3c blx 0x5fe8                                        |     fcn_00005fe8 ();
    0x00032f40 ldr r1, [pc, 0x84]                                |     
    0x00032f42 add.w r3, r0, 0x14                                |     r3 = r0 + 0x14;
    0x00032f46 movw r2, 0xea86                                   |     r2 = 0xea86;
    0x00032f4a movs r0, 0xb                                      |     r0 = 0xb;
    0x00032f4c str r0, [sp, 0x14]                                |     var_14h = r0;
    0x00032f4e add r1, pc                                        |     r1 = 0x65f1a;
    0x00032f50 blx 0x6820                                        |     fcn_00006820 ();
    0x00032f54 b 0x32d22                                         |     goto label_3;
                                                                 | label_29:
    0x00032f56 bic r2, r6, 0x3fc0                                |     r2 = BIT_MASK (r6, 0x3fc0);
    0x00032f5a bic r2, r2, 0x3f                                  |     r2 = BIT_MASK (r2, 0x3f);
                                                                 |     if (r2 != 0) {
    0x00032f5e cbz r2, 0x32f94                                   |         
    0x00032f60 mov r2, r6                                        |         r2 = r6;
    0x00032f62 bl 0x9cd4                                         |         r0 = fcn_00009cd4 (r0, r1, r2);
    0x00032f66 uxtb r3, r0                                       |         r3 = (int8_t) r0;
    0x00032f68 add r4, r3                                        |         r4 += r3;
    0x00032f6a b 0x32ba2                                         |         goto label_0;
                                                                 | label_27:
    0x00032f6c ldrb.w r3, [r2, 0x50]                             |         r3 = *((r2 + 0x50));
    0x00032f70 mov r5, r2                                        |         r5 = r2;
    0x00032f72 mov r0, r2                                        |         r0 = r2;
    0x00032f74 bic r3, r3, 2                                     |         r3 = BIT_MASK (r3, 2);
    0x00032f78 strb.w r3, [r2, 0x50]                             |         *((r2 + 0x50)) = r3;
    0x00032f7c bl 0x31a20                                        |         fcn_00031a20 (r0, r1, r2, r3, r4, r5, r6);
    0x00032f80 ldrsh.w r3, [r5, 0x54]                            |         r3 = *((r5 + 0x54));
    0x00032f84 str r0, [sp, 0x14]                                |         var_14h = r0;
    0x00032f86 adds r3, 0x20                                     |         r3 += 0x20;
    0x00032f88 ldr.w r3, [r5, r3, lsl 2]                         |         offset_3 = r3 << 2;
                                                                 |         r3 = *((r5 + offset_3));
    0x00032f8c strb r4, [r3, 1]                                  |         *((r3 + 1)) = r4;
    0x00032f8e strb.w r4, [r5, 0x51]                             |         *((r5 + 0x51)) = r4;
    0x00032f92 b 0x32d22                                         |         goto label_3;
                                                                 |     }
    0x00032f94 lsrs r3, r6, 7                                    |     r3 = r6 >> 7;
    0x00032f96 orn r3, r3, 0x7f                                  |     r3 |= 0x7f;
                                                                 |     r3 = ~r3;
    0x00032f9a strb r3, [r0]                                     |     *(r0) = r3;
    0x00032f9c and r3, r6, 0x7f                                  |     r3 = r6 & 0x7f;
    0x00032fa0 strb r3, [r0, 1]                                  |     *((r0 + 1)) = r3;
    0x00032fa2 movs r3, 2                                        |     r3 = 2;
    0x00032fa4 add r4, r3                                        |     r4 += r3;
    0x00032fa6 b 0x32ba2                                         |     goto label_0;
                                                                 | label_35:
    0x00032fa8 ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x00032faa ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x00032fac str r3, [r2]                                      |     *(r2) = r3;
    0x00032fae b 0x32ed2                                         |     goto label_11;
                                                                 | label_28:
    0x00032fb0 blx 0x6498                                        |     r0 = fcn_00006498 ();
                                                                 | label_23:
    0x00032fb4 mov r3, r0                                        |     r3 = r0;
    0x00032fb6 b 0x32e8a                                         |     goto label_12;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x335d0 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.000335d0 ()                                      | void fcn_000335d0 (int16_t arg1) {
                                                                 |     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_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     r0 = arg1;
    0x000335d0 ldr.w r2, [pc, 0x91c]                             |     r2 = *(0x00033ef0);
    0x000335d4 ldr.w r3, [pc, 0x91c]                             |     
    0x000335d8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x000335dc sub sp, 0x34                                      |     
    0x000335de add r2, pc                                        |     r2 += pc;
    0x000335e0 ldr r5, [r0]                                      |     r5 = *(r0);
    0x000335e2 mov r4, r0                                        |     r4 = r0;
    0x000335e4 ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x000335e6 ldr r3, [r3]                                      |     r3 = *(0x33ef4);
    0x000335e8 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x000335ea mov.w r3, 0                                       |     r3 = 0;
    0x000335ee ldrb.w r3, [r5, 0x40]                             |     r3 = *((r5 + 0x40));
                                                                 |     if (r3 != 0) {
    0x000335f2 cbz r3, 0x335f8                                   |         
    0x000335f4 movs r3, 7                                        |         r3 = 7;
    0x000335f6 str r3, [r0, 0x50]                                |         *((r0 + 0x50)) = r3;
                                                                 |     }
    0x000335f8 ldr.w r0, [r4, 0xc8]                              |     r0 = *((r4 + 0xc8));
                                                                 |     if (r0 != 0) {
    0x000335fc cbz r0, 0x33608                                   |         
    0x000335fe ldr.w r2, [r4, 0xc4]                              |         r2 = *((r4 + 0xc4));
    0x00033602 movs r1, 0                                        |         r1 = 0;
    0x00033604 blx 0x5fcc                                        |         fcn_00005fcc ();
                                                                 |     }
    0x00033608 ldr.w r3, [r4, 0xb0]                              |     r3 = *((r4 + 0xb0));
                                                                 |     if (r3 == 0) {
    0x0003360c cbz r3, 0x3361a                                   |         goto label_40;
                                                                 |     }
                                                                 |     do {
    0x0003360e mov r0, r3                                        |         r0 = r3;
    0x00033610 ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x00033612 cmp r3, 0                                         |         
    0x00033614 bne 0x3360e                                       |         
                                                                 |     } while (r3 != 0);
    0x00033616 bl 0x7cc0                                         |     fcn_00007cc0 (r0);
                                                                 | label_40:
    0x0003361a ldr r3, [r4, 0x38]                                |     r3 = *((r4 + 0x38));
    0x0003361c movs r6, 0                                        |     r6 = 0;
    0x0003361e str.w r6, [r4, 0xb0]                              |     __asm ("str.w r6, [r4, 0xb0]");
    0x00033622 str.w r6, [r4, 0xb8]                              |     __asm ("str.w r6, [r4, 0xb8]");
                                                                 |     if (r3 == 0) {
    0x00033626 cbz r3, 0x3364a                                   |         goto label_41;
                                                                 |     }
    0x00033628 ldr r2, [r4, 0x24]                                |     r2 = *((r4 + 0x24));
    0x0003362a cmp r2, r6                                        |     
                                                                 |     if (r2 <= r6) {
    0x0003362c ble 0x3364a                                       |         goto label_41;
                                                                 |     }
    0x0003362e mov r7, r6                                        |     r7 = r6;
                                                                 |     do {
    0x00033630 ldr.w r1, [r3, r6, lsl 2]                         |         offset_0 = r6 << 2;
                                                                 |         r1 = *((r3 + offset_0));
                                                                 |         if (r1 != 0) {
    0x00033634 cbz r1, 0x33644                                   |             
    0x00033636 mov r0, r4                                        |             r0 = r4;
    0x00033638 bl 0x2e3cc                                        |             fcn_0002e3cc (r0, r1);
    0x0003363c ldr r3, [r4, 0x38]                                |             r3 = *((r4 + 0x38));
    0x0003363e ldr r2, [r4, 0x24]                                |             r2 = *((r4 + 0x24));
    0x00033640 str.w r7, [r3, r6, lsl 2]                         |             __asm ("str.w r7, [r3, r6, lsl 2]");
                                                                 |         }
    0x00033644 adds r6, 1                                        |         r6++;
    0x00033646 cmp r6, r2                                        |         
    0x00033648 blt 0x33630                                       |         
                                                                 |     } while (r6 < r2);
                                                                 | label_41:
    0x0003364a ldr r0, [r4, 8]                                   |     r0 = *((r4 + 8));
                                                                 |     if (r0 != 0) {
    0x0003364c cbz r0, 0x33656                                   |         
    0x0003364e ldr r1, [r4, 0x1c]                                |         r1 = *((r4 + 0x1c));
    0x00033650 cmp r1, 0                                         |         
                                                                 |         if (r1 != 0) {
    0x00033652 bne.w 0x337d6                                     |             goto label_42;
                                                                 |         }
                                                                 |     }
                                                                 | label_1:
    0x00033656 ldr.w sb, [r4, 0xb4]                              |     sb = *((r4 + 0xb4));
    0x0003365a cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x0003365e beq 0x336d2                                       |         goto label_43;
                                                                 |     }
    0x00033660 mov r3, sb                                        |     r3 = sb;
    0x00033662 mov sb, r5                                        |     sb = r5;
    0x00033664 mov r5, r3                                        |     r5 = r3;
                                                                 | label_0:
    0x00033666 ldr r1, [r5, 0x3c]                                |     r1 = *((r5 + 0x3c));
    0x00033668 add.w r8, r5, 0x48                                |     r8 = r5 + 0x48;
    0x0003366c ldr r3, [r5, 0x40]                                |     r3 = *((r5 + 0x40));
    0x0003366e ldr r2, [r5, 4]                                   |     r2 = *((r5 + 4));
    0x00033670 add.w r7, r1, r1, lsl 2                           |     r7 = r1 + (r1 << 2);
    0x00033674 cmp r3, 0                                         |     
    0x00033676 str.w r2, [r4, 0xb4]                              |     __asm ("str.w r2, [r4, 0xb4]");
    0x0003367a lsl.w r7, r7, 3                                   |     r7 <<= 3;
                                                                 |     if (r3 <= 0) {
    0x0003367e ble 0x3369a                                       |         goto label_44;
                                                                 |     }
    0x00033680 add r7, r8                                        |     r7 += r8;
    0x00033682 movs r6, 0                                        |     r6 = 0;
                                                                 |     do {
    0x00033684 ldr r1, [r7], 4                                   |         r1 = *(r7);
                                                                 |         r7 += 4;
                                                                 |         if (r1 != 0) {
    0x00033688 cbz r1, 0x33692                                   |             
    0x0003368a ldr r0, [r5]                                      |             r0 = *(r5);
    0x0003368c bl 0x2e3cc                                        |             fcn_0002e3cc (r0, r1);
    0x00033690 ldr r3, [r5, 0x40]                                |             r3 = *((r5 + 0x40));
                                                                 |         }
    0x00033692 adds r6, 1                                        |         r6++;
    0x00033694 cmp r6, r3                                        |         
    0x00033696 blt 0x33684                                       |         
                                                                 |     } while (r6 < r3);
    0x00033698 ldr r1, [r5, 0x3c]                                |     r1 = *((r5 + 0x3c));
                                                                 |     if (r1 != 0) {
                                                                 | label_44:
    0x0003369a cbz r1, 0x336a2                                   |         
    0x0003369c mov r0, r8                                        |         r0 = r8;
    0x0003369e bl 0xfff8                                         |         fcn_0000fff8 (r0, r1);
                                                                 |     }
    0x000336a2 ldr r3, [r5]                                      |     r3 = *(r5);
    0x000336a4 mov r1, r5                                        |     r1 = r5;
    0x000336a6 ldr r0, [r3]                                      |     r0 = *(r3);
    0x000336a8 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x000336ac ldr.w r5, [r4, 0xb4]                              |     r5 = *((r4 + 0xb4));
    0x000336b0 cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x000336b2 bne 0x33666                                       |         goto label_0;
                                                                 |     }
    0x000336b4 ldr.w r6, [r4, 0xcc]                              |     r6 = *((r4 + 0xcc));
    0x000336b8 mov r5, sb                                        |     r5 = sb;
                                                                 |     if (r6 == 0) {
    0x000336ba cbz r6, 0x336da                                   |         goto label_45;
                                                                 |     }
                                                                 |     do {
    0x000336bc ldr r3, [r6, 0xc]                                 |         r3 = *((r6 + 0xc));
                                                                 |         if (r3 != 0) {
    0x000336be cbz r3, 0x336c4                                   |             
    0x000336c0 ldr r0, [r6, 8]                                   |             r0 = *((r6 + 8));
    0x000336c2 blx r3                                            |             uint32_t (*r3)(uint32_t) (r0);
                                                                 |         }
    0x000336c4 ldr r3, [r6, 0x10]                                |         r3 = *((r6 + 0x10));
    0x000336c6 mov r1, r6                                        |         r1 = r6;
    0x000336c8 ldr r0, [r4]                                      |         r0 = *(r4);
    0x000336ca str.w r3, [r4, 0xcc]                              |         __asm ("str.w r3, [r4, 0xcc]");
    0x000336ce bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
                                                                 | label_43:
    0x000336d2 ldr.w r6, [r4, 0xcc]                              |         r6 = *((r4 + 0xcc));
    0x000336d6 cmp r6, 0                                         |         
    0x000336d8 bne 0x336bc                                       |         
                                                                 |     } while (r6 != 0);
                                                                 | label_45:
    0x000336da ldr r2, [r4, 0x28]                                |     r2 = *((r4 + 0x28));
    0x000336dc movw r3, 0xda3                                    |     
    0x000336e0 movt r3, 0xbdf2                                   |     r3 = 0xbdf20da3;
    0x000336e4 cmp r2, r3                                        |     
                                                                 |     if (r2 != r3) {
    0x000336e6 bne 0x337b0                                       |         goto label_46;
                                                                 |     }
    0x000336e8 ldr r3, [r4, 0x4c]                                |     r3 = *((r4 + 0x4c));
    0x000336ea cmp r3, 0                                         |     
                                                                 |     if (r3 < 0) {
    0x000336ec blt.w 0x33806                                     |         goto label_5;
                                                                 |     }
    0x000336f0 ldrb.w r3, [r4, 0x59]                             |     r3 = *((r4 + 0x59));
    0x000336f4 lsls r2, r3, 0x1e                                 |     r2 = r3 << 0x1e;
                                                                 |     if (r2 >= r3) {
    0x000336f6 bpl 0x337de                                       |         goto label_47;
                                                                 |     }
    0x000336f8 ldr r3, [r4, 0x64]                                |     r3 = *((r4 + 0x64));
                                                                 |     if (r3 != 0) {
    0x000336fa cbz r3, 0x33702                                   |         
    0x000336fc mov r0, r4                                        |         r0 = r4;
    0x000336fe bl 0xd1c8                                         |         fcn_0000d1c8 (r0);
                                                                 |     }
    0x00033702 ldr r1, [r4, 0x50]                                |     r1 = *((r4 + 0x50));
    0x00033704 uxtb r2, r1                                       |     r2 = (int8_t) r1;
    0x00033706 cmp r2, 7                                         |     
                                                                 |     if (r2 != 7) {
    0x00033708 bne.w 0x3382a                                     |         goto label_48;
                                                                 |     }
                                                                 | label_13:
    0x0003370c ldrsb.w r3, [r4, 0x58]                            |     r3 = *((r4 + 0x58));
    0x00033710 cmp r3, 0                                         |     
                                                                 |     if (r3 < 0) {
    0x00033712 blt.w 0x338fe                                     |         goto label_49;
                                                                 |     }
                                                                 | label_12:
    0x00033716 mov.w r1, 0x204                                   |     r1 = 0x204;
    0x0003371a mov r0, r5                                        |     r0 = r5;
    0x0003371c bl 0x2dc10                                        |     fcn_0002dc10 (r0, r1);
    0x00033720 movs r6, 1                                        |     r6 = 1;
    0x00033722 mov r0, r5                                        |     r0 = r5;
    0x00033724 bl 0xfc88                                         |     fcn_0000fc88 (r0);
    0x00033728 strb.w r6, [r5, 0x3e]                             |     *((r5 + 0x3e)) = r6;
    0x0003372c movs r3, 0                                        |     r3 = 0;
    0x0003372e ldr r1, [r4, 0x50]                                |     r1 = *((r4 + 0x50));
    0x00033730 str r3, [sp, 0xc]                                 |     var_ch = r3;
                                                                 | label_10:
    0x00033732 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00033734 beq.w 0x33906                                     |         goto label_50;
                                                                 |     }
                                                                 | label_3:
    0x00033738 ldr.w r3, [r5, 0x128]                             |     r3 = *((r5 + 0x128));
    0x0003373c cmp r3, 0                                         |     
                                                                 |     if (r3 > 0) {
    0x0003373e ble 0x33746                                       |         
    0x00033740 ldr.w r2, [r5, 0x140]                             |         r2 = *((r5 + 0x140));
                                                                 |         if (r2 == 0) {
    0x00033744 cbz r2, 0x3375e                                   |             goto label_51;
                                                                 |         }
                                                                 |     }
    0x00033746 ldrb.w r2, [r5, 0x3e]                             |     r2 = *((r5 + 0x3e));
                                                                 |     if (r2 != 0) {
    0x0003374a cbz r2, 0x3375e                                   |         
    0x0003374c ldrb.w r2, [r4, 0x59]                             |         r2 = *((r4 + 0x59));
    0x00033750 ldr.w r1, [r5, 0x94]                              |         r1 = *((r5 + 0x94));
    0x00033754 mvns r2, r2                                       |         r2 = ~r2;
    0x00033756 and r2, r2, 1                                     |         r2 &= 1;
    0x0003375a cmp r1, r2                                        |         
                                                                 |         if (r1 == r2) {
    0x0003375c beq 0x33858                                       |             goto label_52;
                                                                 |         }
                                                                 |     }
                                                                 | label_51:
    0x0003375e ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00033760 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00033762 bne.w 0x33886                                     |         goto label_53;
                                                                 |     }
    0x00033766 ldr r3, [r4, 0x50]                                |     r3 = *((r4 + 0x50));
    0x00033768 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0003376a beq.w 0x338fa                                     |         goto label_54;
                                                                 |     }
    0x0003376e ldrb.w r3, [r4, 0x56]                             |     r3 = *((r4 + 0x56));
    0x00033772 cmp r3, 3                                         |     
                                                                 |     if (r3 == 3) {
    0x00033774 beq.w 0x338fa                                     |         goto label_54;
                                                                 |     }
    0x00033778 cmp r3, 2                                         |     
                                                                 |     if (r3 == 2) {
    0x0003377a beq.w 0x33886                                     |         goto label_53;
                                                                 |     }
    0x0003377e mov.w r1, 0x204                                   |     r1 = 0x204;
    0x00033782 mov r0, r5                                        |     r0 = r5;
    0x00033784 bl 0x2dc10                                        |     fcn_0002dc10 (r0, r1);
    0x00033788 mov r0, r5                                        |     r0 = r5;
    0x0003378a bl 0xfc88                                         |     fcn_0000fc88 (r0);
    0x0003378e movs r3, 1                                        |     r3 = 1;
    0x00033790 strb.w r3, [r5, 0x3e]                             |     *((r5 + 0x3e)) = r3;
                                                                 | label_4:
    0x00033794 ldrb.w r3, [r4, 0x58]                             |     r3 = *((r4 + 0x58));
    0x00033798 lsls r0, r3, 0x1b                                 |     r0 = r3 << 0x1b;
                                                                 |     if (r0 >= r3) {
    0x0003379a bpl.w 0x338bc                                     |         goto label_9;
                                                                 |     }
                                                                 | label_8:
    0x0003379e ldr r2, [r4, 0x5c]                                |     r2 = *((r4 + 0x5c));
    0x000337a0 ldr r3, [r5, 0x54]                                |     r3 = *((r5 + 0x54));
    0x000337a2 add r3, r2                                        |     r3 += r2;
    0x000337a4 strd r2, r3, [r5, 0x50]                           |     __asm ("strd r2, r3, [r5, 0x50]");
    0x000337a8 b 0x338ee                                         |     goto label_55;
                                                                 |     do {
    0x000337aa ldr r3, [r4, 0x50]                                |         r3 = *((r4 + 0x50));
    0x000337ac cmp r3, 5                                         |         
                                                                 |         if (r3 == 5) {
    0x000337ae beq 0x33824                                       |             goto label_22;
                                                                 |         }
                                                                 | label_46:
    0x000337b0 mov.w sl, 0                                       |         sl = 0;
                                                                 | label_2:
    0x000337b4 ldr.w r2, [pc, 0x740]                             |         
    0x000337b8 ldr.w r3, [pc, 0x738]                             |         r3 = *(0x33ef4);
    0x000337bc add r2, pc                                        |         r2 = 0x676b8;
    0x000337be ldr r3, [r2, r3]                                  |         r3 = *(0x676b8);
    0x000337c0 ldr r2, [r3]                                      |         r2 = *(0x676b8);
    0x000337c2 ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x000337c4 eors r2, r3                                       |         r2 ^= r3;
    0x000337c6 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x000337ca bne.w 0x33c44                                     |             goto label_56;
                                                                 |         }
    0x000337ce mov r0, sl                                        |         r0 = sl;
    0x000337d0 add sp, 0x34                                      |         
    0x000337d2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_42:
    0x000337d6 adds r0, 0x28                                     |         r0 += 0x28;
    0x000337d8 bl 0xfff8                                         |         fcn_0000fff8 (r0, r1);
    0x000337dc b 0x33656                                         |         goto label_1;
                                                                 | label_47:
    0x000337de ldr.w r2, [r5, 0x8c]                              |         r2 = *((r5 + 0x8c));
    0x000337e2 ands r3, r3, 1                                    |         r3 &= 1;
    0x000337e6 add.w r2, r2, -1                                  |         r2 += -1;
    0x000337ea str.w r2, [r5, 0x8c]                              |         __asm ("str.w r2, [r5, 0x8c]");
                                                                 |         if (r3 == r3) {
    0x000337ee bne 0x33806                                       |             
                                                                 | label_7:
    0x000337f0 ldr.w r2, [r5, 0x94]                              |             r2 = *((r5 + 0x94));
    0x000337f4 subs r2, 1                                        |             r2--;
    0x000337f6 str.w r2, [r5, 0x94]                              |             __asm ("str.w r2, [r5, 0x94]");
                                                                 |             if (r3 == 0) {
                                                                 | label_6:
    0x000337fa cbz r3, 0x33806                                   |                 goto label_5;
                                                                 |             }
    0x000337fc ldr.w r3, [r5, 0x90]                              |             r3 = *((r5 + 0x90));
    0x00033800 subs r3, 1                                        |             r3--;
    0x00033802 str.w r3, [r5, 0x90]                              |             __asm ("str.w r3, [r5, 0x90]");
                                                                 |         }
                                                                 | label_5:
    0x00033806 ldr r2, [r4]                                      |         r2 = *(r4);
    0x00033808 movw r3, 0x2973                                   |         
    0x0003380c movt r3, 0x519c                                   |         r3 = 0x519c2973;
    0x00033810 str r3, [r4, 0x28]                                |         *((r4 + 0x28)) = r3;
    0x00033812 ldrb.w r3, [r2, 0x40]                             |         r3 = *((r2 + 0x40));
    0x00033816 cmp r3, 0                                         |         
    0x00033818 beq 0x337aa                                       |         
                                                                 |     } while (r3 == 0);
    0x0003381a movs r3, 7                                        |     r3 = 7;
    0x0003381c mov.w sl, 0                                       |     sl = 0;
    0x00033820 str r3, [r4, 0x50]                                |     *((r4 + 0x50)) = r3;
    0x00033822 b 0x337b4                                         |     goto label_2;
                                                                 | label_22:
    0x00033824 mov.w sl, 5                                       |     sl = 5;
    0x00033828 b 0x337b4                                         |     goto label_2;
                                                                 | label_48:
    0x0003382a sub.w r3, r2, 9                                   |     r3 = r2 - 9;
    0x0003382e cmp r2, 0xd                                       |     
    0x00033830 it ne                                             |     
                                                                 |     if (r2 != 0xd) {
    0x00033832 cmpne r3, 1                                       |         __asm ("cmpne r3, 1");
                                                                 |     }
    0x00033834 ite ls                                            |     
                                                                 |     if (r2 > 0xd) {
    0x00033836 movls r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r2 <= 0xd) {
    0x00033838 movhi r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r2 > 0xd) {
    0x0003383a bhi 0x338f4                                       |         goto label_57;
                                                                 |     }
    0x0003383c ldrb.w r3, [r4, 0x59]                             |     r3 = *((r4 + 0x59));
    0x00033840 mvns r3, r3                                       |     r3 = ~r3;
    0x00033842 and r3, r3, 1                                     |     r3 &= 1;
    0x00033846 cmp r2, 9                                         |     
    0x00033848 it ne                                             |     
                                                                 |     if (r2 == 9) {
    0x0003384a orrne r3, r3, 1                                   |         r3 |= 1;
                                                                 |     }
    0x0003384e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00033850 bne 0x33932                                       |         goto label_58;
                                                                 |     }
    0x00033852 movs r6, 1                                        |     r6 = 1;
    0x00033854 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00033856 b 0x33738                                         |     goto label_3;
                                                                 | label_52:
    0x00033858 ldr r2, [r4, 0x50]                                |     r2 = *((r4 + 0x50));
    0x0003385a cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0003385c beq 0x3394a                                       |         goto label_59;
                                                                 |     }
    0x0003385e ldrb.w r2, [r4, 0x56]                             |     r2 = *((r4 + 0x56));
    0x00033862 eor r1, r6, 1                                     |     r1 = r6 ^ 1;
    0x00033866 cmp r2, 3                                         |     
    0x00033868 ite ne                                            |     
                                                                 |     if (r2 == 3) {
    0x0003386a movne r1, 0                                       |         r1 = 0;
                                                                 |     }
                                                                 |     if (r2 != 3) {
    0x0003386c andeq r1, r1, 1                                   |         r1 &= 1;
                                                                 |     }
    0x00033870 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00033872 bne 0x3394a                                       |         goto label_59;
                                                                 |     }
    0x00033874 mov r0, r5                                        |     r0 = r5;
    0x00033876 bl 0x2dc10                                        |     fcn_0002dc10 (r0, r1);
                                                                 | label_18:
    0x0003387a movs r3, 0                                        |     r3 = 0;
    0x0003387c str.w r3, [r5, 0x1ec]                             |     __asm ("str.w r3, aav.0x000000ff");
    0x00033880 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00033882 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00033884 beq 0x33794                                       |         goto label_4;
                                                                 |     }
                                                                 | label_53:
    0x00033886 movs r6, 2                                        |     r6 = 2;
                                                                 | label_11:
    0x00033888 mov r1, r6                                        |     r1 = r6;
    0x0003388a mov r0, r4                                        |     r0 = r4;
    0x0003388c bl 0x2ce80                                        |     r0 = fcn_0002ce80 (r0, r1);
                                                                 |     if (r0 != 0) {
    0x00033890 cbz r0, 0x338b4                                   |         
    0x00033892 ldr r2, [r4, 0x50]                                |         r2 = *((r4 + 0x50));
    0x00033894 cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x00033896 beq 0x3393a                                       |             goto label_60;
                                                                 |         }
    0x00033898 uxtb r2, r2                                       |         r2 = (int8_t) r2;
    0x0003389a cmp r2, 0x13                                      |         
                                                                 |         if (r2 == 0x13) {
    0x0003389c beq 0x3393a                                       |             goto label_60;
                                                                 |         }
                                                                 | label_14:
    0x0003389e mov.w r1, 0x204                                   |         r1 = 0x204;
    0x000338a2 mov r0, r5                                        |         r0 = r5;
    0x000338a4 bl 0x2dc10                                        |         fcn_0002dc10 (r0, r1);
    0x000338a8 mov r0, r5                                        |         r0 = r5;
    0x000338aa bl 0xfc88                                         |         fcn_0000fc88 (r0);
    0x000338ae movs r3, 1                                        |         r3 = 1;
    0x000338b0 strb.w r3, [r5, 0x3e]                             |         *((r5 + 0x3e)) = r3;
                                                                 |     }
    0x000338b4 ldrb.w r3, [r4, 0x58]                             |     r3 = *((r4 + 0x58));
    0x000338b8 lsls r1, r3, 0x1b                                 |     r1 = r3 << 0x1b;
                                                                 |     if (r1 < r3) {
    0x000338ba bmi 0x338e4                                       |         goto label_61;
                                                                 |     }
                                                                 | label_9:
    0x000338bc ldr r3, [r4, 0x64]                                |     r3 = *((r4 + 0x64));
                                                                 |     if (r3 != 0) {
    0x000338be cbz r3, 0x338c6                                   |         
    0x000338c0 mov r0, r4                                        |         r0 = r4;
    0x000338c2 bl 0x11824                                        |         fcn_00011824 (r0);
                                                                 |     }
    0x000338c6 ldr r3, [r4, 0x4c]                                |     r3 = *((r4 + 0x4c));
    0x000338c8 cmp r3, 0                                         |     
                                                                 |     if (r3 < 0) {
    0x000338ca blt 0x33806                                       |         goto label_5;
                                                                 |     }
    0x000338cc ldr.w r3, [r5, 0x8c]                              |     r3 = *((r5 + 0x8c));
    0x000338d0 ldrb.w r1, [r4, 0x59]                             |     r1 = *((r4 + 0x59));
    0x000338d4 subs r2, r3, 1                                    |     r2 = r3 - 1;
    0x000338d6 str.w r2, [r5, 0x8c]                              |     __asm ("str.w r2, [r5, 0x8c]");
    0x000338da lsls r2, r1, 0x1f                                 |     r2 = r1 << 0x1f;
    0x000338dc and r3, r1, 2                                     |     r3 = r1 & 2;
                                                                 |     if (r2 < r1) {
    0x000338e0 bmi 0x337fa                                       |         goto label_6;
                                                                 |     }
    0x000338e2 b 0x337f0                                         |     goto label_7;
                                                                 | label_61:
    0x000338e4 cmp r6, 2                                         |     
                                                                 |     if (r6 != 2) {
    0x000338e6 bne.w 0x3379e                                     |         goto label_8;
                                                                 |     }
    0x000338ea movs r3, 0                                        |     r3 = 0;
    0x000338ec str r3, [r5, 0x50]                                |     *((r5 + 0x50)) = r3;
                                                                 | label_55:
    0x000338ee movs r3, 0                                        |     r3 = 0;
    0x000338f0 str r3, [r4, 0x5c]                                |     *((r4 + 0x5c)) = r3;
    0x000338f2 b 0x338bc                                         |     goto label_9;
                                                                 | label_57:
    0x000338f4 mov r6, r3                                        |     r6 = r3;
    0x000338f6 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x000338f8 b 0x33732                                         |     goto label_10;
                                                                 | label_54:
    0x000338fa movs r6, 1                                        |     r6 = 1;
    0x000338fc b 0x33888                                         |     goto label_11;
                                                                 | label_49:
    0x000338fe movs r3, 2                                        |     r3 = 2;
    0x00033900 movs r6, 1                                        |     r6 = 1;
    0x00033902 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00033904 b 0x33732                                         |     goto label_10;
                                                                 | label_50:
    0x00033906 ldrd r2, r3, [r4, 0x90]                           |     __asm ("ldrd r2, r3, [r4, 0x90]");
    0x0003390a cmp r2, 1                                         |     
    0x0003390c sbcs r3, r3, 0                                    |     __asm ("sbcs r3, r3, 0");
                                                                 |     if (r2 < 1) {
    0x00033910 blt.w 0x33738                                     |         goto label_3;
                                                                 |     }
    0x00033914 ldr.w r2, [pc, 0x5e4]                             |     r2 = *(0x00033efc);
    0x00033918 movw r3, 0x313                                    |     r3 = 0x313;
    0x0003391c str r3, [r4, 0x50]                                |     *((r4 + 0x50)) = r3;
    0x0003391e movs r3, 2                                        |     r3 = 2;
    0x00033920 ldr r1, [r4]                                      |     r1 = *(r4);
    0x00033922 add.w r0, r4, 0x2c                                |     r0 = r4 + 0x2c;
    0x00033926 add r2, pc                                        |     r2 += pc;
    0x00033928 strb.w r3, [r4, 0x56]                             |     *((r4 + 0x56)) = r3;
    0x0003392c bl 0x1c9d0                                        |     fcn_0001c9d0 (r0, r1);
    0x00033930 b 0x33738                                         |     goto label_3;
                                                                 | label_58:
    0x00033932 cmp r2, 0xd                                       |     
                                                                 |     if (r2 != 0xd) {
    0x00033934 bne.w 0x33716                                     |         goto label_12;
                                                                 |     }
    0x00033938 b 0x3370c                                         |     goto label_13;
                                                                 | label_60:
    0x0003393a str r0, [r4, 0x50]                                |     *((r4 + 0x50)) = r0;
    0x0003393c mov r0, r5                                        |     r0 = r5;
    0x0003393e ldr r1, [r4, 0x2c]                                |     r1 = *((r4 + 0x2c));
    0x00033940 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x00033944 movs r3, 0                                        |     r3 = 0;
    0x00033946 str r3, [r4, 0x2c]                                |     *((r4 + 0x2c)) = r3;
    0x00033948 b 0x3389e                                         |     goto label_14;
                                                                 | label_59:
    0x0003394a ldr r1, [r4]                                      |     r1 = *(r4);
    0x0003394c ldr.w r0, [r1, 0x1f8]                             |     r0 = *((r1 + 0x1f8));
    0x00033950 ldr.w r2, [r1, 0x1f0]                             |     r2 = *((r1 + 0x1f0));
    0x00033954 ldr.w r6, [r1, 0x1fc]                             |     r6 = *((r1 + 0x1fc));
    0x00033958 adds r2, r2, r0                                   |     r2 += r0;
    0x0003395a ldr.w r0, [r1, 0x1f4]                             |     r0 = *((r1 + 0x1f4));
    0x0003395e adc.w r0, r0, r6                                  |     __asm ("adc.w r0, r0, r6");
    0x00033962 cmp r2, 1                                         |     
    0x00033964 sbcs r0, r0, 0                                    |     __asm ("sbcs r0, r0, 0");
                                                                 |     if (r2 >= 1) {
    0x00033968 bge 0x33a46                                       |         goto label_62;
                                                                 |     }
    0x0003396a movs r6, 0                                        |     r6 = 0;
    0x0003396c ldr.w r8, [r5, 0x140]                             |     r8 = *((r5 + 0x140));
    0x00033970 cmp r3, r6                                        |     
    0x00033972 mov fp, r6                                        |     
    0x00033974 mov sb, r5                                        |     sb = r5;
    0x00033976 str.w r6, [r5, 0x140]                             |     __asm ("str.w r6, aav.0x000000ff");
                                                                 |     if (r3 <= r6) {
    0x0003397a ble 0x339ca                                       |         goto label_63;
                                                                 |     }
                                                                 |     do {
    0x0003397c add.w r1, r8, r6, lsl 2                           |         r1 = r8 + (r6 << 2);
                                                                 | label_15:
    0x00033980 ldr r2, [r1], 4                                   |         r2 = *(r1);
                                                                 |         r1 += 4;
    0x00033984 adds r6, 1                                        |         r6++;
    0x00033986 ldr r7, [r2, 8]                                   |         r7 = *((r2 + 8));
                                                                 |         if (r7 == 0) {
    0x00033988 cbz r7, 0x339c6                                   |             goto label_64;
                                                                 |         }
    0x0003398a ldr r2, [r7]                                      |         r2 = *(r7);
    0x0003398c ldr r2, [r2, 0x3c]                                |         r2 = *((r2 + 0x3c));
                                                                 |         if (r2 == 0) {
    0x0003398e cbz r2, 0x339c6                                   |             goto label_64;
                                                                 |         }
    0x00033990 mov r0, r7                                        |         r0 = r7;
    0x00033992 blx r2                                            |         uint32_t (*r2)(uint32_t) (r0);
    0x00033994 ldr r5, [r4]                                      |         r5 = *(r4);
    0x00033996 mov sl, r0                                        |         sl = r0;
    0x00033998 ldr r1, [r4, 0x2c]                                |         r1 = *((r4 + 0x2c));
    0x0003399a mov r0, r5                                        |         r0 = r5;
    0x0003399c bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
    0x000339a0 ldr r1, [r7, 8]                                   |         r1 = *((r7 + 8));
    0x000339a2 mov r0, r5                                        |         r0 = r5;
    0x000339a4 bl 0xd418                                         |         fcn_0000d418 (r0, r1);
    0x000339a8 str r0, [r4, 0x2c]                                |         *((r4 + 0x2c)) = r0;
    0x000339aa ldr r0, [r7, 8]                                   |         r0 = *((r7 + 8));
    0x000339ac blx 0x6050                                        |         fcn_00006050 ();
    0x000339b0 str.w fp, [r7, 8]                                 |         __asm ("str.w fp, [r7, 8]");
    0x000339b4 cmp.w sl, 0                                       |         
                                                                 |         if (sl != 0) {
    0x000339b8 bne.w 0x33c48                                     |             goto label_65;
                                                                 |         }
    0x000339bc ldr.w r3, [sb, 0x128]                             |         r3 = *((sb + 0x128));
    0x000339c0 cmp r3, r6                                        |         
    0x000339c2 bgt 0x3397c                                       |         
                                                                 |     } while (r3 > r6);
    0x000339c4 b 0x339ca                                         |     goto label_63;
                                                                 | label_64:
    0x000339c6 cmp r3, r6                                        |     
                                                                 |     if (r3 != r6) {
    0x000339c8 bne 0x33980                                       |         goto label_15;
                                                                 |     }
                                                                 | label_63:
    0x000339ca movs r3, 0                                        |     r3 = 0;
    0x000339cc str.w r8, [sb, 0x140]                             |     __asm ("str.w r8, aav.0x000000ff");
    0x000339d0 mov r5, sb                                        |     r5 = sb;
    0x000339d2 mov r7, r3                                        |     r7 = r3;
    0x000339d4 mov r8, r3                                        |     r8 = r3;
    0x000339d6 mov sb, r3                                        |     sb = r3;
                                                                 | label_17:
    0x000339d8 ldr r1, [r5, 0x14]                                |     r1 = *((r5 + 0x14));
    0x000339da cmp r8, r1                                        |     
                                                                 |     if (r8 >= r1) {
    0x000339dc bge 0x33a7c                                       |         goto label_66;
                                                                 |     }
    0x000339de ldr r2, [r5, 0x10]                                |     r2 = *((r5 + 0x10));
    0x000339e0 add.w r2, r2, r8, lsl 4                           |     r2 += (r8 << 4);
    0x000339e4 b 0x339ee                                         |     
                                                                 |     while (r6 == 0) {
                                                                 | label_16:
    0x000339e6 cmp r8, r1                                        |         
    0x000339e8 add.w r2, r2, 0x10                                |         r2 += 0x10;
                                                                 |         if (r8 == r1) {
    0x000339ec beq 0x33a7c                                       |             goto label_66;
                                                                 |         }
    0x000339ee ldr r6, [r2, 4]                                   |         r6 = *((r2 + 4));
    0x000339f0 mov r0, r8                                        |         r0 = r8;
    0x000339f2 add.w r8, r8, 1                                   |         r8++;
    0x000339f6 cmp r6, 0                                         |         
    0x000339f8 beq 0x339e6                                       |         
                                                                 |     }
    0x000339fa ldrb.w ip, [r6, 8]                                |     ip = *((r6 + 8));
    0x000339fe cmp.w ip, 2                                       |     
                                                                 |     if (ip != 2) {
    0x00033a02 bne 0x339e6                                       |         goto label_16;
                                                                 |     }
    0x00033a04 cmp r0, 1                                         |     
    0x00033a06 mov r0, r6                                        |     r0 = r6;
    0x00033a08 it ne                                             |     
                                                                 |     if (r0 == 1) {
    0x00033a0a addne r7, 1                                       |         r7++;
                                                                 |     }
    0x00033a0c bl 0xd140                                         |     fcn_0000d140 (r0);
    0x00033a10 ldr r2, [r6, 4]                                   |     r2 = *((r6 + 4));
    0x00033a12 ldr r0, [r2]                                      |     r0 = *(r2);
    0x00033a14 ldr.w r3, [r0, 0xe0]                              |     r3 = *((r0 + 0xe0));
    0x00033a18 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00033a1a beq.w 0x33c24                                     |         goto label_67;
                                                                 |     }
    0x00033a1e ldrb r3, [r6, 9]                                  |     r3 = *((r6 + 9));
                                                                 |     if (r3 != 0) {
    0x00033a20 cbz r3, 0x33a42                                   |         
    0x00033a22 ldr r3, [r6, 0xc]                                 |         r3 = *((r6 + 0xc));
    0x00033a24 add.w sl, r3, -1                                  |         sl = r3 + -1;
    0x00033a28 str.w sl, [r6, 0xc]                               |         __asm ("str.w sl, [r6, 0xc]");
    0x00033a2c cmp.w sl, 0                                       |         
                                                                 |         if (sl != 0) {
    0x00033a30 bne 0x33a42                                       |             goto label_68;
                                                                 |         }
                                                                 | label_28:
    0x00033a32 ldr r0, [r2, 0x38]                                |         r0 = *((r2 + 0x38));
    0x00033a34 blx 0x63dc                                        |         fcn_000063dc ();
    0x00033a38 strb.w sb, [r6, 0xa]                              |         *((r6 + 0xa)) = sb;
                                                                 | label_27:
    0x00033a3c cmp.w sl, 0                                       |         
                                                                 |         if (sl != 0) {
    0x00033a40 bne 0x33af4                                       |             goto label_29;
                                                                 |         }
                                                                 |     }
                                                                 | label_68:
    0x00033a42 movs r3, 1                                        |     r3 = 1;
    0x00033a44 b 0x339d8                                         |     goto label_17;
                                                                 | label_62:
    0x00033a46 ldr.w r2, [pc, 0x4b8]                             |     r2 = *(0x00033f00);
    0x00033a4a movs r3, 2                                        |     r3 = 2;
    0x00033a4c movw r6, 0x313                                    |     r6 = 0x313;
    0x00033a50 strb.w r3, [r4, 0x56]                             |     *((r4 + 0x56)) = r3;
    0x00033a54 add.w r0, r4, 0x2c                                |     r0 = r4 + 0x2c;
    0x00033a58 str r6, [r4, 0x50]                                |     *((r4 + 0x50)) = r6;
    0x00033a5a add r2, pc                                        |     r2 += pc;
    0x00033a5c bl 0x1c9d0                                        |     fcn_0001c9d0 (r0, r1);
    0x00033a60 ldrb.w r3, [r4, 0x59]                             |     r3 = *((r4 + 0x59));
    0x00033a64 lsls r7, r3, 0x1f                                 |     r7 = r3 << 0x1f;
    0x00033a66 it pl                                             |     
                                                                 |     if (r7 < r3) {
    0x00033a68 movpl sl, r6                                      |         sl = r6;
                                                                 |     }
                                                                 |     if (r7 < r3) {
    0x00033a6a bmi.w 0x33c0c                                     |         goto label_69;
                                                                 |     }
                                                                 | label_21:
    0x00033a6e movs r1, 0                                        |     r1 = 0;
    0x00033a70 mov r0, r5                                        |     r0 = r5;
    0x00033a72 str.w sl, [r4, 0x50]                              |     __asm ("str.w sl, [r4, 0x50]");
    0x00033a76 bl 0x2dc10                                        |     fcn_0002dc10 (r0, r1);
    0x00033a7a b 0x3387a                                         |     goto label_18;
                                                                 |     if (r3 != 0) {
                                                                 | label_66:
    0x00033a7c cbz r3, 0x33a8e                                   |         
    0x00033a7e ldr.w r3, [r5, 0xb8]                              |         r3 = *((r5 + 0xb8));
                                                                 |         if (r3 == 0) {
    0x00033a82 cbz r3, 0x33a8e                                   |             goto label_70;
                                                                 |         }
    0x00033a84 ldr.w r0, [r5, 0xb4]                              |         r0 = *((r5 + 0xb4));
    0x00033a88 blx r3                                            |         r0 = uint32_t (*r3)(uint32_t) (r0);
    0x00033a8a cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x00033a8c bne 0x33b12                                       |             goto label_71;
                                                                 |         }
                                                                 |     }
                                                                 | label_70:
    0x00033a8e ldr r3, [r5, 0x10]                                |     r3 = *((r5 + 0x10));
    0x00033a90 movs r6, 0                                        |     r6 = 0;
    0x00033a92 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x00033a94 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x00033a96 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00033a98 ldrb r2, [r3, 0xf]                                |     r2 = *((r3 + 0xf));
                                                                 |     if (r2 != 0) {
    0x00033a9a cbnz r2, 0x33ac2                                  |         goto label_20;
                                                                 |     }
    0x00033a9c ldr.w r2, [r3, 0xa8]                              |     r2 = *((r3 + 0xa8));
    0x00033aa0 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00033aa2 beq.w 0x33c08                                     |         goto label_72;
                                                                 |     }
    0x00033aa6 ldrb r6, [r2]                                     |     r6 = *(r2);
                                                                 |     if (r6 == 0) {
    0x00033aa8 cbz r6, 0x33ac2                                   |         goto label_20;
                                                                 |     }
    0x00033aaa mov r3, r2                                        |     r3 = r2;
                                                                 |     do {
    0x00033aac ldrb r6, [r3, 1]!                                 |         r6 = *((r3 += 1));
    0x00033ab0 cmp r6, 0                                         |         
    0x00033ab2 bne 0x33aac                                       |         
                                                                 |     } while (r6 != 0);
    0x00033ab4 subs r3, r3, r2                                   |     r3 -= r2;
    0x00033ab6 ubfx r3, r3, 0, 0x1e                              |     r3 = (r3 >> 0) & ((1 << 0x1e) - 1);
    0x00033aba cmp r3, 0                                         |     
    0x00033abc it ne                                             |     
                                                                 |     if (r3 != 0) {
    0x00033abe cmpne r7, 1                                       |         __asm ("cmpne r7, 1");
                                                                 |     }
                                                                 |     if (r3 > 0) {
    0x00033ac0 bgt 0x33b70                                       |         goto label_73;
                                                                 |     }
                                                                 | label_20:
    0x00033ac2 ldr r0, [r5, 0x14]                                |     r0 = *((r5 + 0x14));
    0x00033ac4 cmp r0, r6                                        |     
                                                                 |     if (r0 <= r6) {
    0x00033ac6 ble 0x33b18                                       |         goto label_74;
                                                                 |     }
    0x00033ac8 ldr r3, [r5, 0x10]                                |     r3 = *((r5 + 0x10));
    0x00033aca add.w r3, r3, r6, lsl 4                           |     r3 += (r6 << 4);
    0x00033ace b 0x33ad8                                         |     
                                                                 |     while (r2 == 0) {
                                                                 | label_19:
    0x00033ad0 cmp r0, r6                                        |         
    0x00033ad2 add.w r3, r3, 0x10                                |         r3 += 0x10;
                                                                 |         if (r0 == r6) {
    0x00033ad6 beq 0x33b18                                       |             goto label_74;
                                                                 |         }
    0x00033ad8 ldr r2, [r3, 4]                                   |         r2 = *((r3 + 4));
    0x00033ada adds r6, 1                                        |         r6++;
    0x00033adc cmp r2, 0                                         |         
    0x00033ade beq 0x33ad0                                       |         
                                                                 |     }
    0x00033ae0 ldrb r1, [r2, 8]                                  |     r1 = *((r2 + 8));
    0x00033ae2 cmp r1, 2                                         |     
                                                                 |     if (r1 != 2) {
    0x00033ae4 bne 0x33ad0                                       |         goto label_19;
                                                                 |     }
    0x00033ae6 mov r0, r2                                        |     r0 = r2;
    0x00033ae8 movs r1, 0                                        |     r1 = 0;
    0x00033aea bl 0x331e8                                        |     r0 = fcn_000331e8 (r0, r1);
    0x00033aee cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00033af0 beq 0x33ac2                                       |         goto label_20;
                                                                 |     }
                                                                 | label_23:
    0x00033af2 mov sl, r0                                        |     sl = r0;
                                                                 | label_29:
    0x00033af4 cmp.w sl, 5                                       |     
                                                                 |     if (sl != 5) {
    0x00033af8 bne 0x33a6e                                       |         goto label_21;
                                                                 |     }
    0x00033afa ldrb.w r3, [r4, 0x59]                             |     r3 = *((r4 + 0x59));
    0x00033afe lsls r6, r3, 0x1f                                 |     r6 = r3 << 0x1f;
                                                                 |     if (r6 >= r3) {
    0x00033b00 bpl 0x33a6e                                       |         goto label_21;
                                                                 |     }
    0x00033b02 ldr r3, [r4, 0x64]                                |     r3 = *((r4 + 0x64));
    0x00033b04 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00033b06 beq.w 0x33824                                     |         goto label_22;
                                                                 |     }
    0x00033b0a mov r0, r4                                        |     r0 = r4;
    0x00033b0c bl 0x11824                                        |     fcn_00011824 (r0);
    0x00033b10 b 0x337b4                                         |     goto label_2;
                                                                 | label_71:
    0x00033b12 movw sl, 0x213                                    |     sl = 0x213;
    0x00033b16 b 0x33a6e                                         |     goto label_21;
                                                                 | label_74:
    0x00033b18 movs r6, 0                                        |     r6 = 0;
    0x00033b1a b 0x33b2a                                         |     goto label_75;
                                                                 | label_24:
    0x00033b1c mov r0, r2                                        |     r0 = r2;
    0x00033b1e movs r1, 0                                        |     r1 = 0;
    0x00033b20 bl 0x2cc9c                                        |     r0 = fcn_0002cc9c (r0, r1);
    0x00033b24 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00033b26 bne 0x33af2                                       |         goto label_23;
                                                                 |     }
    0x00033b28 ldr r0, [r5, 0x14]                                |     r0 = *((r5 + 0x14));
                                                                 | label_75:
    0x00033b2a cmp r6, r0                                        |     
                                                                 |     if (r6 >= r0) {
    0x00033b2c bge 0x33b48                                       |         goto label_31;
                                                                 |     }
    0x00033b2e ldr r3, [r5, 0x10]                                |     r3 = *((r5 + 0x10));
    0x00033b30 add.w r3, r3, r6, lsl 4                           |     r3 += (r6 << 4);
                                                                 | label_25:
    0x00033b34 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x00033b36 adds r6, 1                                        |     r6++;
                                                                 |     if (r2 == 0) {
    0x00033b38 cbz r2, 0x33b40                                   |         goto label_76;
                                                                 |     }
    0x00033b3a ldrb r1, [r2, 8]                                  |     r1 = *((r2 + 8));
    0x00033b3c cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00033b3e bne 0x33b1c                                       |         goto label_24;
                                                                 |     }
                                                                 | label_76:
    0x00033b40 cmp r0, r6                                        |     
    0x00033b42 add.w r3, r3, 0x10                                |     r3 += 0x10;
                                                                 |     if (r0 != r6) {
    0x00033b46 bne 0x33b34                                       |         goto label_25;
                                                                 |     }
                                                                 | label_31:
    0x00033b48 ldr.w r3, [r5, 0x140]                             |     r3 = *((r5 + 0x140));
                                                                 |     if (r3 != 0) {
    0x00033b4c cbz r3, 0x33b56                                   |         
    0x00033b4e movs r1, 0x40                                     |         r1 = 0x40;
    0x00033b50 mov r0, r5                                        |         r0 = r5;
    0x00033b52 bl 0xef6c                                         |         fcn_0000ef6c (r0, r1);
                                                                 |     }
    0x00033b56 ldr r3, [r5, 0x18]                                |     r3 = *((r5 + 0x18));
    0x00033b58 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00033b5c bic r3, r3, 0x1000000                             |     r3 = BIT_MASK (r3, 0x1000000);
    0x00033b60 bic r3, r3, 2                                     |     r3 = BIT_MASK (r3, 2);
    0x00033b64 vstr d16, [r5, 0x1f0]                             |     __asm ("vstr d16, aav.0x000000ff");
    0x00033b68 vstr d16, [r5, 0x1f8]                             |     __asm ("vstr d16, aav.0x000000ff");
    0x00033b6c str r3, [r5, 0x18]                                |     *((r5 + 0x18)) = r3;
    0x00033b6e b 0x3387a                                         |     goto label_18;
                                                                 | label_73:
    0x00033b70 ldr r7, [r5]                                      |     r7 = *(r5);
    0x00033b72 mov r3, r2                                        |     r3 = r2;
                                                                 |     do {
    0x00033b74 ldrb r1, [r3, 1]!                                 |         r1 = *((r3 += 1));
    0x00033b78 cmp r1, 0                                         |         
    0x00033b7a bne 0x33b74                                       |         
                                                                 |     } while (r1 != 0);
    0x00033b7c mov r8, r1                                        |     r8 = r1;
    0x00033b7e ldr r1, [pc, 0x384]                               |     
    0x00033b80 subs r3, r3, r2                                   |     r3 -= r2;
    0x00033b82 mov r0, r5                                        |     r0 = r5;
    0x00033b84 bic sb, r3, 0xc0000000                            |     sb = BIT_MASK (r3, 0xc0000000);
    0x00033b88 add r1, pc                                        |     r1 = 0x67a92;
    0x00033b8a bl 0x1babc                                        |     r0 = fcn_0001babc (r0);
    0x00033b8e mov r6, r0                                        |     r6 = r0;
    0x00033b90 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00033b92 beq.w 0x33e84                                     |         goto label_77;
                                                                 |     }
    0x00033b96 add.w r3, r0, sb                                  |     r3 = r0 + sb;
    0x00033b9a add.w sl, sp, 0x28                                |     sl += var_28h;
    0x00033b9e str r3, [sp, 8]                                   |     var_8h = r3;
    0x00033ba0 add.w sb, sp, 0x24                                |     sb += var_24h;
    0x00033ba4 ldr r3, [pc, 0x360]                               |     
    0x00033ba6 str r4, [sp, 0x10]                                |     var_10h = r4;
    0x00033ba8 add r3, pc                                        |     r3 = 0x67ab4;
    0x00033baa str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00033bac ldr r3, [pc, 0x35c]                               |     
    0x00033bae add r3, pc                                        |     r3 = 0x67abe;
    0x00033bb0 str r3, [sp, 0x18]                                |     var_18h = r3;
                                                                 |     do {
                                                                 | label_26:
    0x00033bb2 mov r1, sl                                        |         r1 = sl;
    0x00033bb4 movs r0, 4                                        |         r0 = 4;
    0x00033bb6 blx 0x67ac                                        |         fcn_000067ac ();
    0x00033bba ldr r3, [sp, 0x28]                                |         r3 = var_28h;
    0x00033bbc movs r0, 0xd                                      |         r0 = 0xd;
    0x00033bbe ldr r2, [sp, 0x14]                                |         r2 = var_14h;
    0x00033bc0 add.w r8, r8, 1                                   |         r8++;
    0x00033bc4 ldr r1, [sp, 8]                                   |         r1 = var_8h;
    0x00033bc6 uxtb.w ip, r3                                     |         ip = (int8_t) r3;
    0x00033bca lsrs r3, r3, 8                                    |         r3 >>= 8;
    0x00033bcc str.w ip, [sp]                                    |         __asm ("str.w ip, [sp]");
    0x00033bd0 blx 0x6658                                        |         fcn_00006658 ();
    0x00033bd4 ldr r4, [r7, 0x20]                                |         r4 = *((r7 + 0x20));
    0x00033bd6 mov r3, sb                                        |         r3 = sb;
    0x00033bd8 movs r2, 0                                        |         r2 = 0;
    0x00033bda mov r1, r6                                        |         r1 = r6;
    0x00033bdc mov r0, r7                                        |         r0 = r7;
    0x00033bde blx r4                                            |         r0 = uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00033be0 mov fp, r0                                        |         
    0x00033be2 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x00033be4 bne.w 0x33e8a                                     |             goto label_78;
                                                                 |         }
    0x00033be8 ldr r3, [sp, 0x24]                                |         r3 = var_24h;
    0x00033bea cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00033bec beq.w 0x33e90                                     |             goto label_79;
                                                                 |         }
    0x00033bf0 cmp.w r8, 0x65                                    |         
                                                                 |         if (r8 == 0x65) {
    0x00033bf4 beq 0x33c50                                       |             goto label_80;
                                                                 |         }
    0x00033bf6 cmp.w r8, 1                                       |         
    0x00033bfa bne 0x33bb2                                       |         
                                                                 |     } while (r8 != 1);
    0x00033bfc ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x00033bfe mov r2, r6                                        |     r2 = r6;
    0x00033c00 movs r0, 0xd                                      |     r0 = 0xd;
    0x00033c02 blx 0x6820                                        |     fcn_00006820 ();
    0x00033c06 b 0x33bb2                                         |     goto label_26;
                                                                 | label_72:
    0x00033c08 mov r6, r2                                        |     r6 = r2;
    0x00033c0a b 0x33ac2                                         |     goto label_20;
                                                                 | label_69:
    0x00033c0c ldr r3, [r4, 0x64]                                |     r3 = *((r4 + 0x64));
    0x00033c0e mov.w sl, 1                                       |     sl = 1;
    0x00033c12 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00033c14 beq.w 0x337b4                                     |         goto label_2;
                                                                 |     }
    0x00033c18 mov r0, r4                                        |     r0 = r4;
    0x00033c1a mov.w sl, 1                                       |     sl = 1;
    0x00033c1e bl 0x11824                                        |     fcn_00011824 (r0);
    0x00033c22 b 0x337b4                                         |     goto label_2;
                                                                 | label_67:
    0x00033c24 movs r1, 4                                        |     r1 = 4;
    0x00033c26 bl 0xb7dc                                         |     fcn_0000b7dc (r0, r1);
    0x00033c2a ldrb r3, [r6, 9]                                  |     r3 = *((r6 + 9));
    0x00033c2c mov sl, r0                                        |     sl = r0;
    0x00033c2e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00033c30 beq.w 0x33a3c                                     |         goto label_27;
                                                                 |     }
    0x00033c34 ldr r3, [r6, 0xc]                                 |     r3 = *((r6 + 0xc));
    0x00033c36 subs r3, 1                                        |     r3--;
    0x00033c38 str r3, [r6, 0xc]                                 |     *((r6 + 0xc)) = r3;
    0x00033c3a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00033c3c bne.w 0x33a3c                                     |         goto label_27;
                                                                 |     }
    0x00033c40 ldr r2, [r6, 4]                                   |     r2 = *((r6 + 4));
    0x00033c42 b 0x33a32                                         |     goto label_28;
                                                                 | label_56:
    0x00033c44 blx 0x6498                                        |     fcn_00006498 ();
                                                                 | label_65:
    0x00033c48 mov r5, sb                                        |     r5 = sb;
    0x00033c4a str.w r8, [sb, 0x140]                             |     __asm ("str.w r8, aav.0x000000ff");
    0x00033c4e b 0x33af4                                         |     goto label_29;
                                                                 | label_80:
    0x00033c50 ldr r1, [pc, 0x2bc]                               |     
    0x00033c52 mov r2, r6                                        |     r2 = r6;
    0x00033c54 movs r0, 0xd                                      |     r0 = 0xd;
    0x00033c56 ldr r4, [sp, 0x10]                                |     r4 = var_10h;
    0x00033c58 str r6, [sp, 8]                                   |     var_8h = r6;
    0x00033c5a add r1, pc                                        |     r1 = 0x67b6e;
    0x00033c5c blx 0x6820                                        |     fcn_00006820 ();
    0x00033c60 ldr r3, [r7, 0x1c]                                |     r3 = *((r7 + 0x1c));
    0x00033c62 mov r2, fp                                        |     r2 = fp;
    0x00033c64 mov r1, r6                                        |     r1 = r6;
    0x00033c66 mov r0, r7                                        |     r0 = r7;
    0x00033c68 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
                                                                 | label_35:
    0x00033c6a ldr r0, [r7, 4]                                   |     r0 = *((r7 + 4));
    0x00033c6c bl 0x11e2c                                        |     r0 = fcn_00011e2c (r0);
    0x00033c70 mov r8, r0                                        |     r8 = r0;
    0x00033c72 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00033c74 beq.w 0x33e7c                                     |         goto label_81;
                                                                 |     }
    0x00033c78 movs r3, 0                                        |     r3 = 0;
    0x00033c7a ldr r1, [sp, 8]                                   |     r1 = var_8h;
    0x00033c7c str r3, [sp]                                      |     *(sp) = r3;
    0x00033c7e mov r2, r8                                        |     r2 = r8;
    0x00033c80 ldr r6, [r7, 0x18]                                |     r6 = *((r7 + 0x18));
    0x00033c82 movw r3, 0x4016                                   |     r3 = 0x4016;
    0x00033c86 mov r0, r7                                        |     r0 = r7;
    0x00033c88 blx r6                                            |     r0 = uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00033c8a mov fp, r0                                        |     
    0x00033c8c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00033c8e bne.w 0x33e6a                                     |         goto label_82;
                                                                 |     }
    0x00033c92 ldr r0, [r5, 0x14]                                |     r0 = *((r5 + 0x14));
    0x00033c94 cmp r0, 0                                         |     
                                                                 |     if (r0 <= 0) {
    0x00033c96 ble 0x33d3e                                       |         goto label_83;
                                                                 |     }
    0x00033c98 mov sb, fp                                        |     sb = fp;
    0x00033c9a mov sl, r4                                        |     sl = r4;
    0x00033c9c strd fp, fp, [sp, 0x10]                           |     __asm ("strd fp, fp, [var_10h]");
    0x00033ca0 str.w fp, [sp, 0x18]                              |     __asm ("str.w fp, [var_18h]");
    0x00033ca4 b 0x33cb2                                         |     
                                                                 |     while (r6 == 0) {
                                                                 | label_30:
    0x00033ca6 ldr r3, [sp, 0x10]                                |         r3 = var_10h;
    0x00033ca8 adds r3, 1                                        |         r3++;
    0x00033caa cmp r3, r0                                        |         
    0x00033cac str r3, [sp, 0x10]                                |         var_10h = r3;
                                                                 |         if (r3 >= r0) {
    0x00033cae bge.w 0x33db6                                     |             goto label_84;
                                                                 |         }
    0x00033cb2 ldr r3, [r5, 0x10]                                |         r3 = *((r5 + 0x10));
    0x00033cb4 ldr r2, [sp, 0x10]                                |         r2 = var_10h;
    0x00033cb6 add.w r3, r3, r2, lsl 4                           |         r3 += (r2 << 4);
    0x00033cba ldr r6, [r3, 4]                                   |         r6 = *((r3 + 4));
    0x00033cbc cmp r6, 0                                         |         
    0x00033cbe beq 0x33ca6                                       |         
                                                                 |     }
    0x00033cc0 ldrb r2, [r6, 8]                                  |     r2 = *((r6 + 8));
    0x00033cc2 cmp r2, 2                                         |     
                                                                 |     if (r2 != 2) {
    0x00033cc4 bne 0x33ca6                                       |         goto label_30;
                                                                 |     }
    0x00033cc6 ldr r2, [r6, 4]                                   |     r2 = *((r6 + 4));
    0x00033cc8 ldr r1, [r2]                                      |     r1 = *(r2);
    0x00033cca ldr.w r4, [r1, 0xac]                              |     r4 = *((r1 + 0xac));
    0x00033cce cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00033cd0 beq 0x33ca6                                       |         goto label_30;
                                                                 |     }
    0x00033cd2 cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x00033cd6 beq.w 0x33e96                                     |         goto label_85;
                                                                 |     }
                                                                 | label_36:
    0x00033cda ldrb r3, [r4]                                     |     r3 = *(r4);
    0x00033cdc cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00033cde beq.w 0x33ecc                                     |         goto label_86;
                                                                 |     }
    0x00033ce2 mov r3, r4                                        |     r3 = r4;
                                                                 |     do {
    0x00033ce4 ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x00033ce8 cmp r2, 0                                         |         
    0x00033cea bne 0x33ce4                                       |         
                                                                 |     } while (r2 != 0);
                                                                 | label_37:
    0x00033cec ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x00033cee subs r3, r3, r4                                   |     r3 -= r4;
    0x00033cf0 bic r2, r3, 0xc0000000                            |     r2 = BIT_MASK (r3, 0xc0000000);
    0x00033cf4 ldr.w r3, [r8]                                    |     r3 = *(r8);
    0x00033cf8 adds r2, 1                                        |     r2++;
    0x00033cfa mov r0, r8                                        |     r0 = r8;
    0x00033cfc str r1, [sp]                                      |     *(sp) = r1;
    0x00033cfe ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x00033d00 str r1, [sp, 4]                                   |     var_4h = r1;
    0x00033d02 mov r1, r4                                        |     r1 = r4;
    0x00033d04 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x00033d06 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00033d08 ldrb r3, [r4]                                     |     r3 = *(r4);
    0x00033d0a mov r2, r0                                        |     r2 = r0;
    0x00033d0c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00033d0e beq.w 0x33ed0                                     |         goto label_87;
                                                                 |     }
    0x00033d12 mov r3, r4                                        |     r3 = r4;
                                                                 |     do {
    0x00033d14 ldrb r1, [r3, 1]!                                 |         r1 = *((r3 += 1));
    0x00033d18 cmp r1, 0                                         |         
    0x00033d1a bne 0x33d14                                       |         
                                                                 |     } while (r1 != 0);
                                                                 | label_38:
    0x00033d1c ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x00033d1e subs r3, r3, r4                                   |     r3 -= r4;
    0x00033d20 bic r3, r3, 0xc0000000                            |     r3 = BIT_MASK (r3, 0xc0000000);
    0x00033d24 adds r3, 1                                        |     r3++;
    0x00033d26 adds r3, r3, r1                                   |     r3 += r1;
    0x00033d28 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00033d2a ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00033d2c adc r3, r3, 0                                     |     __asm ("adc r3, r3, 0");
    0x00033d30 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00033d32 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00033d34 bne.w 0x33ed4                                     |         goto label_88;
                                                                 |     }
    0x00033d38 ldr r0, [r5, 0x14]                                |     r0 = *((r5 + 0x14));
    0x00033d3a b 0x33ca6                                         |     goto label_30;
                                                                 | label_32:
    0x00033d3c str r6, [sp, 8]                                   |     var_8h = r6;
                                                                 | label_83:
    0x00033d3e ldr.w r3, [r8]                                    |     r3 = *(r8);
                                                                 |     if (r3 != 0) {
    0x00033d42 cbz r3, 0x33d50                                   |         
    0x00033d44 ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x00033d46 mov r0, r8                                        |         r0 = r8;
    0x00033d48 blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00033d4a movs r3, 0                                        |         r3 = 0;
    0x00033d4c str.w r3, [r8]                                    |         __asm ("str.w r3, [r8]");
                                                                 |     }
    0x00033d50 mov r0, r8                                        |     r0 = r8;
    0x00033d52 blx 0x6050                                        |     fcn_00006050 ();
    0x00033d56 ldr r6, [sp, 8]                                   |     r6 = var_8h;
    0x00033d58 mov r0, r7                                        |     r0 = r7;
    0x00033d5a ldr r3, [r7, 0x1c]                                |     r3 = *((r7 + 0x1c));
    0x00033d5c movs r2, 1                                        |     r2 = 1;
    0x00033d5e mov r1, r6                                        |     r1 = r6;
    0x00033d60 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00033d62 mov r1, r6                                        |     r1 = r6;
    0x00033d64 mov sl, r0                                        |     sl = r0;
    0x00033d66 mov r0, r5                                        |     r0 = r5;
    0x00033d68 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x00033d6c cmp.w sl, 0                                       |     
                                                                 |     if (sl != 0) {
    0x00033d70 bne.w 0x33af4                                     |         goto label_29;
                                                                 |     }
    0x00033d74 ldr r3, [pc, 0x19c]                               |     
    0x00033d76 add r3, pc                                        |     
    0x00033d78 ldr.w r3, [r3, 0x1a8]                             |     r3 = *(0x67e36);
                                                                 |     if (r3 != 0) {
    0x00033d7c cbz r3, 0x33d80                                   |         
    0x00033d7e blx r3                                            |         uint32_t (*r3)(uint32_t) (r0);
                                                                 |     }
    0x00033d80 ldr r0, [r5, 0x14]                                |     r0 = *((r5 + 0x14));
    0x00033d82 b 0x33da0                                         |     
                                                                 |     while (sl < r0) {
    0x00033d84 ldr r3, [r5, 0x10]                                |         r3 = *((r5 + 0x10));
    0x00033d86 add.w r3, r3, sl, lsl 4                           |         r3 += (sl << 4);
    0x00033d8a ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
                                                                 |         if (r3 != 0) {
    0x00033d8c cbz r3, 0x33d9c                                   |             
    0x00033d8e ldrb r2, [r3, 8]                                  |             r2 = *((r3 + 8));
                                                                 |             if (r2 == 0) {
    0x00033d90 cbz r2, 0x33d9c                                   |                 goto label_89;
                                                                 |             }
    0x00033d92 mov r0, r3                                        |             r0 = r3;
    0x00033d94 movs r1, 1                                        |             r1 = 1;
    0x00033d96 bl 0x2cc9c                                        |             fcn_0002cc9c (r0, r1);
    0x00033d9a ldr r0, [r5, 0x14]                                |             r0 = *((r5 + 0x14));
                                                                 |         }
                                                                 | label_89:
    0x00033d9c add.w sl, sl, 1                                   |         sl++;
    0x00033da0 cmp sl, r0                                        |         
    0x00033da2 blt 0x33d84                                       |         
                                                                 |     }
    0x00033da4 ldr r3, [pc, 0x170]                               |     
    0x00033da6 add r3, pc                                        |     
    0x00033da8 ldr.w r3, [r3, 0x1ac]                             |     r3 = *(0x67e6e);
    0x00033dac cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00033dae beq.w 0x33b48                                     |         goto label_31;
                                                                 |     }
    0x00033db2 blx r3                                            |     uint32_t (*r3)() ();
    0x00033db4 b 0x33b48                                         |     goto label_31;
                                                                 | label_84:
    0x00033db6 mov r4, sl                                        |     r4 = sl;
    0x00033db8 cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x00033dbc beq 0x33e3a                                       |         goto label_90;
                                                                 |     }
    0x00033dbe ldr.w r3, [r8]                                    |     r3 = *(r8);
    0x00033dc2 mov r0, r8                                        |     r0 = r8;
    0x00033dc4 ldr r3, [r3, 0x30]                                |     r3 = *((r3 + 0x30));
    0x00033dc6 blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00033dc8 ands sb, r0, 0x400                                |     sb = r0 & 0x400;
                                                                 |     if (sb == r0) {
    0x00033dcc bne 0x33dde                                       |         
    0x00033dce ldr.w r3, [r8]                                    |         r3 = *(r8);
    0x00033dd2 movs r1, 2                                        |         r1 = 2;
    0x00033dd4 mov r0, r8                                        |         r0 = r8;
    0x00033dd6 ldr r3, [r3, 0x14]                                |         r3 = *((r3 + 0x14));
    0x00033dd8 blx r3                                            |         r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x00033dda mov sl, r0                                        |         sl = r0;
                                                                 |         if (r0 != 0) {
    0x00033ddc cbnz r0, 0x33e3e                                  |             goto label_91;
                                                                 |         }
                                                                 |     }
    0x00033dde ldr r0, [r5, 0x14]                                |     r0 = *((r5 + 0x14));
    0x00033de0 ldr r6, [sp, 8]                                   |     r6 = var_8h;
                                                                 | label_34:
    0x00033de2 cmp r0, fp                                        |     
                                                                 |     if (r0 <= fp) {
    0x00033de4 ble 0x33d3c                                       |         goto label_32;
                                                                 |     }
    0x00033de6 ldr r3, [r5, 0x10]                                |     r3 = *((r5 + 0x10));
    0x00033de8 add.w r3, r3, fp, lsl 4                           |     r3 += (fp << 4);
    0x00033dec b 0x33df6                                         |     goto label_92;
                                                                 | label_33:
    0x00033dee cmp r0, fp                                        |     
    0x00033df0 add.w r3, r3, 0x10                                |     r3 += 0x10;
                                                                 |     if (r0 == fp) {
    0x00033df4 beq 0x33d3c                                       |         goto label_32;
                                                                 |     }
                                                                 | label_92:
    0x00033df6 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x00033df8 add.w fp, fp, 1                                   |     
    0x00033dfc cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00033dfe beq 0x33dee                                       |         goto label_33;
                                                                 |     }
    0x00033e00 ldrb r1, [r2, 8]                                  |     r1 = *((r2 + 8));
    0x00033e02 cmp r1, 2                                         |     
                                                                 |     if (r1 != 2) {
    0x00033e04 bne 0x33dee                                       |         goto label_33;
                                                                 |     }
    0x00033e06 mov r0, r2                                        |     r0 = r2;
    0x00033e08 mov r1, r6                                        |     r1 = r6;
    0x00033e0a bl 0x331e8                                        |     r0 = fcn_000331e8 (r0, r1);
                                                                 |     if (r0 != 0) {
    0x00033e0e cbz r0, 0x33e36                                   |         
    0x00033e10 ldr.w r3, [r8]                                    |         r3 = *(r8);
    0x00033e14 mov sl, r0                                        |         sl = r0;
    0x00033e16 str r6, [sp, 8]                                   |         var_8h = r6;
                                                                 |         if (r3 != 0) {
    0x00033e18 cbz r3, 0x33e26                                   |             
    0x00033e1a ldr r3, [r3, 4]                                   |             r3 = *((r3 + 4));
    0x00033e1c mov r0, r8                                        |             r0 = r8;
    0x00033e1e blx r3                                            |             uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00033e20 movs r3, 0                                        |             r3 = 0;
    0x00033e22 str.w r3, [r8]                                    |             __asm ("str.w r3, [r8]");
                                                                 |         }
    0x00033e26 mov r0, r8                                        |         r0 = r8;
    0x00033e28 blx 0x6050                                        |         fcn_00006050 ();
    0x00033e2c ldr r1, [sp, 8]                                   |         r1 = var_8h;
    0x00033e2e mov r0, r5                                        |         r0 = r5;
    0x00033e30 bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
    0x00033e34 b 0x33af4                                         |         goto label_29;
                                                                 |     }
    0x00033e36 ldr r0, [r5, 0x14]                                |     r0 = *((r5 + 0x14));
    0x00033e38 b 0x33de2                                         |     goto label_34;
                                                                 | label_90:
    0x00033e3a ldr r6, [sp, 8]                                   |     r6 = var_8h;
    0x00033e3c b 0x33de2                                         |     goto label_34;
                                                                 | label_91:
    0x00033e3e ldr.w r3, [r8]                                    |     r3 = *(r8);
                                                                 |     if (r3 != 0) {
    0x00033e42 cbz r3, 0x33e4e                                   |         
    0x00033e44 ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x00033e46 mov r0, r8                                        |         r0 = r8;
    0x00033e48 blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00033e4a str.w sb, [r8]                                    |         __asm ("str.w sb, [r8]");
                                                                 |     }
                                                                 | label_39:
    0x00033e4e mov r0, r8                                        |     r0 = r8;
    0x00033e50 blx 0x6050                                        |     fcn_00006050 ();
    0x00033e54 ldr r6, [sp, 8]                                   |     r6 = var_8h;
    0x00033e56 mov r0, r7                                        |     r0 = r7;
    0x00033e58 ldr r3, [r7, 0x1c]                                |     r3 = *((r7 + 0x1c));
    0x00033e5a movs r2, 0                                        |     r2 = 0;
    0x00033e5c mov r1, r6                                        |     r1 = r6;
    0x00033e5e blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00033e60 mov r1, r6                                        |     r1 = r6;
    0x00033e62 mov r0, r5                                        |     r0 = r5;
    0x00033e64 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x00033e68 b 0x33af4                                         |     goto label_29;
                                                                 | label_82:
    0x00033e6a mov r0, r8                                        |     r0 = r8;
    0x00033e6c blx 0x6050                                        |     fcn_00006050 ();
                                                                 |     do {
    0x00033e70 ldr r1, [sp, 8]                                   |         r1 = var_8h;
    0x00033e72 mov r0, r5                                        |         r0 = r5;
    0x00033e74 mov sl, fp                                        |         sl = fp;
    0x00033e76 bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
    0x00033e7a b 0x33af4                                         |         goto label_29;
                                                                 | label_81:
    0x00033e7c ldr r1, [sp, 8]                                   |         r1 = var_8h;
    0x00033e7e mov r0, r5                                        |         r0 = r5;
    0x00033e80 bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
                                                                 | label_77:
    0x00033e84 mov.w sl, 7                                       |         sl = 7;
    0x00033e88 b 0x33a6e                                         |         goto label_21;
                                                                 | label_78:
    0x00033e8a ldr r4, [sp, 0x10]                                |         r4 = var_10h;
    0x00033e8c str r6, [sp, 8]                                   |         var_8h = r6;
    0x00033e8e b 0x33e70                                         |         
                                                                 |     } while (1);
                                                                 | label_79:
    0x00033e90 ldr r4, [sp, 0x10]                                |     r4 = var_10h;
    0x00033e92 str r6, [sp, 8]                                   |     var_8h = r6;
    0x00033e94 b 0x33c6a                                         |     goto label_35;
                                                                 | label_85:
    0x00033e96 mov r0, r6                                        |     r0 = r6;
    0x00033e98 str r2, [sp, 0x1c]                                |     var_1ch = r2;
    0x00033e9a bl 0xd140                                         |     fcn_0000d140 (r0);
    0x00033e9e ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00033ea0 ldrb r0, [r6, 9]                                  |     r0 = *((r6 + 9));
    0x00033ea2 ldr r2, [r2]                                      |     r2 = *(r2);
    0x00033ea4 ldrb r2, [r2, 7]                                  |     r2 = *((r2 + 7));
                                                                 |     if (r0 == 0) {
    0x00033ea6 cbz r0, 0x33eb0                                   |         goto label_93;
                                                                 |     }
    0x00033ea8 ldr r0, [r6, 0xc]                                 |     r0 = *((r6 + 0xc));
    0x00033eaa subs r0, 1                                        |     r0--;
    0x00033eac str r0, [r6, 0xc]                                 |     *((r6 + 0xc)) = r0;
    0x00033eae cbz r0, 0x33eba                                   |     
                                                                 |     while (1) {
                                                                 | label_93:
    0x00033eb0 clz sb, r2                                        |         sb &= r2;
    0x00033eb4 lsr.w sb, sb, 5                                   |         sb >>= 5;
    0x00033eb8 b 0x33cda                                         |         goto label_36;
    0x00033eba ldr r0, [r6, 4]                                   |         r0 = *((r6 + 4));
    0x00033ebc str r2, [sp, 0x1c]                                |         var_1ch = r2;
    0x00033ebe ldr r0, [r0, 0x38]                                |         r0 = *((r0 + 0x38));
    0x00033ec0 blx 0x63dc                                        |         fcn_000063dc ();
    0x00033ec4 ldr r2, [sp, 0x1c]                                |         r2 = var_1ch;
    0x00033ec6 strb.w sb, [r6, 0xa]                              |         *((r6 + 0xa)) = sb;
    0x00033eca b 0x33eb0                                         |         
                                                                 |     }
                                                                 | label_86:
    0x00033ecc mov r3, r4                                        |     r3 = r4;
    0x00033ece b 0x33cec                                         |     goto label_37;
                                                                 | label_87:
    0x00033ed0 mov r3, r4                                        |     r3 = r4;
    0x00033ed2 b 0x33d1c                                         |     goto label_38;
                                                                 | label_88:
    0x00033ed4 ldr.w r3, [r8]                                    |     r3 = *(r8);
    0x00033ed8 mov r4, sl                                        |     r4 = sl;
    0x00033eda mov sl, r2                                        |     sl = r2;
    0x00033edc cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00033ede beq 0x33e4e                                       |         goto label_39;
                                                                 |     }
    0x00033ee0 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x00033ee2 mov r0, r8                                        |     r0 = r8;
    0x00033ee4 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00033ee6 movs r3, 0                                        |     r3 = 0;
    0x00033ee8 str.w r3, [r8]                                    |     __asm ("str.w r3, [r8]");
    0x00033eec b 0x33e4e                                         |     goto label_39;
                                                                 | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x33fac */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) fcn.00033fac ()                                  | void fcn_00033fac (int16_t arg_20h, uint32_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
                                                             |     r2 = arg3;
                                                             |     r3 = arg4;
    0x00033fac push.w {r3, r4, r5, r6, r7, r8, sb, lr}       |     
    0x00033fb0 cmp r0, 0                                     |     
                                                             |     if (arg_20h == ) {
    0x00033fb2 beq 0x3409c                                   |         goto label_4;
                                                             |     }
    0x00033fb4 ldr r6, [r0, 0x18]                            |     r6 = *(arg_20hx18);
    0x00033fb6 mov r7, r2                                    |     r7 = r2;
    0x00033fb8 mov r5, r3                                    |     r5 = r3;
    0x00033fba mov r4, r0                                    |     r4 = r0;
    0x00033fbc mov r8, r1                                    |     r8 = r1;
    0x00033fbe ldr r0, [r6, 0xc]                             |     r0 = *((r6 + 0xc));
    0x00033fc0 blx 0x6810                                    |     fcn_00006810 ();
    0x00033fc4 orrs.w r3, r7, r5                             |     r3 = r7 | r5;
    0x00033fc8 ldr.w sb, [r4, 0x14]                          |     sb = *((r4 + 0x14));
                                                             |     if (r3 >= r7) {
    0x00033fcc bmi 0x33fd6                                   |         
    0x00033fce ldr r3, [r4, 4]                               |         r3 = *((r4 + 4));
    0x00033fd0 adds r2, r7, r5                               |         r2 = r7 + r5;
    0x00033fd2 cmp r2, r3                                    |         
                                                             |         if (r2 <= r3) {
    0x00033fd4 ble 0x33ffa                                   |             goto label_5;
                                                             |         }
                                                             |     }
    0x00033fd6 movs r2, 0                                    |     r2 = 0;
    0x00033fd8 movs r1, 1                                    |     r1 = 1;
    0x00033fda mov r0, r6                                    |     r0 = r6;
    0x00033fdc movs r5, 1                                    |     r5 = 1;
    0x00033fde bl 0x1c64c                                    |     fcn_0001c64c (r0, r1);
    0x00033fe2 ldrb.w r3, [r6, 0x40]                         |     r3 = *((r6 + 0x40));
    0x00033fe6 cmp r3, 0                                     |     
                                                             |     if (r3 != 0) {
    0x00033fe8 bne 0x34056                                   |         goto label_1;
                                                             |     }
                                                             |     do {
                                                             | label_0:
    0x00033fea ldr r3, [r6, 0x38]                            |         r3 = *((r6 + 0x38));
    0x00033fec ldr r0, [r6, 0xc]                             |         r0 = *((r6 + 0xc));
    0x00033fee ands r5, r3                                   |         r5 &= r3;
    0x00033ff0 blx 0x63dc                                    |         fcn_000063dc ();
    0x00033ff4 mov r0, r5                                    |         r0 = r5;
    0x00033ff6 pop.w {r3, r4, r5, r6, r7, r8, sb, pc}        |         
                                                             | label_5:
    0x00033ffa cmp.w sb, 0                                   |         
                                                             |         if (sb == 0) {
    0x00033ffe beq 0x34090                                   |             goto label_6;
                                                             |         }
    0x00034000 ldr r3, [r4, 0x10]                            |         r3 = *((r4 + 0x10));
    0x00034002 ldr r0, [r3]                                  |         r0 = *(r3);
    0x00034004 bl 0xd140                                     |         fcn_0000d140 (r0);
    0x00034008 ldr r1, [r4, 8]                               |         r1 = *((r4 + 8));
    0x0003400a mov r3, r8                                    |         r3 = r8;
    0x0003400c mov r2, r7                                    |         r2 = r7;
    0x0003400e ldr r0, [r4, 0x10]                            |         r0 = *((r4 + 0x10));
    0x00034010 add r1, r5                                    |         r1 += r5;
    0x00034012 ldr r5, [sp, 0x20]                            |         r5 = *(arg_20h);
    0x00034014 blx r5                                        |         uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00034016 ldr r3, [r4, 0x10]                            |         r3 = *((r4 + 0x10));
    0x00034018 mov r5, r0                                    |         r5 = r0;
    0x0003401a ldr r7, [r3]                                  |         r7 = *(r3);
    0x0003401c ldrb r3, [r7, 9]                              |         r3 = *((r7 + 9));
                                                             |         if (r3 != 0) {
    0x0003401e cbz r3, 0x34030                               |             
    0x00034020 ldr r3, [r7, 0xc]                             |             r3 = *((r7 + 0xc));
    0x00034022 add.w r8, r3, -1                              |             r8 = r3 + -1;
    0x00034026 str.w r8, [r7, 0xc]                           |             __asm ("str.w r8, [r7, 0xc]");
    0x0003402a cmp.w r8, 0                                   |             
                                                             |             if (r8 == 0) {
    0x0003402e beq 0x340be                                   |                 goto label_7;
                                                             |             }
                                                             |         }
                                                             | label_2:
    0x00034030 cmp r5, 4                                     |         
                                                             |         if (r5 == 4) {
    0x00034032 beq 0x3406a                                   |             goto label_8;
                                                             |         }
    0x00034034 movw r3, 0xc0a                                |         r3 = 0xc0a;
    0x00034038 str r5, [r6, 0x34]                            |         *((r6 + 0x34)) = r5;
    0x0003403a subs r3, r5, r3                               |         r3 = r5 - r3;
    0x0003403c str.w r5, [sb, 0x50]                          |         __asm ("str.w r5, [sb, 0x50]");
    0x00034040 clz r3, r3                                    |         r3 &= r3;
    0x00034044 ldrb.w r2, [r6, 0x40]                         |         r2 = *((r6 + 0x40));
    0x00034048 lsrs r3, r3, 5                                |         r3 >>= 5;
    0x0003404a cmp r2, 0                                     |         
    0x0003404c it ne                                         |         
                                                             |         if (r2 == 0) {
    0x0003404e orrne r3, r3, 1                               |             r3 |= 1;
                                                             |         }
    0x00034052 cmp r3, 0                                     |         
    0x00034054 beq 0x33fea                                   |         
                                                             |     } while (r3 == 0);
                                                             | label_1:
    0x00034056 movs r1, 7                                    |     r1 = 7;
    0x00034058 movs r2, 0                                    |     r2 = 0;
    0x0003405a mov r0, r6                                    |     r0 = r6;
    0x0003405c mov r5, r1                                    |     r5 = r1;
    0x0003405e bl 0x1c64c                                    |     fcn_0001c64c (r0, r1);
    0x00034062 movs r3, 0                                    |     r3 = 0;
    0x00034064 strb.w r3, [r6, 0x40]                         |     *((r6 + 0x40)) = r3;
    0x00034068 b 0x33fea                                     |     goto label_0;
                                                             | label_8:
    0x0003406a ldr.w r2, [sb, 0x28]                          |     r2 = *((sb + 0x28));
    0x0003406e movw r1, 0xda3                                |     
    0x00034072 movw r3, 0x2973                               |     
    0x00034076 movt r1, 0xbdf2                               |     r1 = 0xbdf20da3;
    0x0003407a movt r3, 0x519c                               |     r3 = 0x519c2973;
    0x0003407e cmp r2, r3                                    |     
    0x00034080 it ne                                         |     
                                                             |     if (r2 != r3) {
    0x00034082 cmpne r2, r1                                  |         __asm ("cmpne r2, r1");
                                                             |     }
                                                             |     if (r2 == r3) {
    0x00034084 beq 0x340cc                                   |         goto label_9;
                                                             |     }
                                                             | label_3:
    0x00034086 mov r0, sb                                    |     r0 = sb;
    0x00034088 bl 0x103f4                                    |     fcn_000103f4 (r0);
    0x0003408c movs r3, 0                                    |     r3 = 0;
    0x0003408e str r3, [r4, 0x14]                            |     *((r4 + 0x14)) = r3;
                                                             | label_6:
    0x00034090 ldrb.w r3, [r6, 0x40]                         |     r3 = *((r6 + 0x40));
    0x00034094 movs r5, 4                                    |     r5 = 4;
    0x00034096 cmp r3, 0                                     |     
                                                             |     if (r3 == 0) {
    0x00034098 beq 0x33fea                                   |         goto label_0;
                                                             |     }
    0x0003409a b 0x34056                                     |     goto label_1;
                                                             | label_4:
    0x0003409c blx 0x5fe8                                    |     fcn_00005fe8 ();
    0x000340a0 ldr r1, [pc, 0x30]                            |     
    0x000340a2 add.w r3, r0, 0x14                            |     r3 = r0 + 0x14;
    0x000340a6 movw r2, 0x3006                               |     
    0x000340aa movs r0, 0x15                                 |     r0 = 0x15;
    0x000340ac mov r5, r0                                    |     r5 = r0;
    0x000340ae movt r2, 1                                    |     r2 = 0x13006;
    0x000340b2 add r1, pc                                    |     r1 = 0x6818a;
    0x000340b4 blx 0x6820                                    |     fcn_00006820 ();
    0x000340b8 mov r0, r5                                    |     r0 = r5;
    0x000340ba pop.w {r3, r4, r5, r6, r7, r8, sb, pc}        |     
                                                             | label_7:
    0x000340be ldr r3, [r7, 4]                               |     r3 = *((r7 + 4));
    0x000340c0 ldr r0, [r3, 0x38]                            |     r0 = *((r3 + 0x38));
    0x000340c2 blx 0x63dc                                    |     fcn_000063dc ();
    0x000340c6 strb.w r8, [r7, 0xa]                          |     *((r7 + 0xa)) = r8;
    0x000340ca b 0x34030                                     |     goto label_2;
                                                             | label_9:
    0x000340cc mov r0, sb                                    |     r0 = sb;
    0x000340ce bl 0x33f1c                                    |     fcn_00033f1c (r0);
    0x000340d2 b 0x34086                                     |     goto label_3;
                                                             | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x34de0 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
                                                                 |                                ((n & 0x0000ff00) <<  8) | \
                                                                 |                                ((n & 0x00ff0000) >>  8) | \
                                                                 |                                ((n & 0xff000000) >> 24)))
                                                                 | #define SWAP64(val) ((uint64_t) (((val & 0x00000000000000ffull) << 56) | \
                                                                 |                                  ((val & 0x000000000000ff00ull) << 40) | \
                                                                 |                                  ((val & 0x0000000000ff0000ull) << 24) | \
                                                                 |                                  ((val & 0x00000000ff000000ull) <<  8) | \
                                                                 |                                  ((val & 0x000000ff00000000ull) >>  8) | \
                                                                 |                                  ((val & 0x0000ff0000000000ull) >> 24) | \
                                                                 |                                  ((val & 0x00ff000000000000ull) >> 40) | \
                                                                 |                                  ((val & 0xff00000000000000ull) >> 56)))
                                                                 |  
    ; (fcn) fcn.00034de0 ()                                      | void fcn_00034de0 (int16_t arg_1a0h, int16_t arg_250h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_100h;
                                                                 |     int16_t var_4h_3;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch_2;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h_2;
                                                                 |     int16_t var_18h_2;
                                                                 |     int16_t var_1ch_2;
                                                                 |     int16_t var_20h_3;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_50h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00034de0 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00034de4 sub sp, 0x2c                                      |     
    0x00034de6 ldr r4, [pc, 0x198]                               |     
    0x00034de8 mov r6, r3                                        |     r6 = r3;
    0x00034dea cmp r6, 0                                         |     
    0x00034dec str r3, [sp, 0x1c]                                |     var_1ch_2 = r3;
    0x00034dee ldr r3, [pc, 0x194]                               |     r3 = *(0x34f86);
    0x00034df0 add r4, pc                                        |     r4 = 0x69d76;
    0x00034df2 ldr.w r8, [sp, 0x50]                              |     r8 = var_50h;
    0x00034df6 ldr r3, [r4, r3]                                  |     
    0x00034df8 ldr r3, [r3]                                      |     r3 = *(0x69d76);
    0x00034dfa str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00034dfc mov.w r3, 0                                       |     r3 = 0;
    0x00034e00 str r2, [sp, 0x18]                                |     var_18h_2 = r2;
    0x00034e02 add.w r2, r6, -1                                  |     r2 = r6 + -1;
    0x00034e06 str r1, [sp, 0x10]                                |     var_10h = r1;
    0x00034e08 str r2, [sp, 8]                                   |     var_8h = r2;
                                                                 |     if (r6 <= 0) {
    0x00034e0a ble 0x34e9c                                       |         goto label_4;
                                                                 |     }
    0x00034e0c ldr r3, [pc, 0x178]                               |     
    0x00034e0e mov r5, r0                                        |     r5 = r0;
    0x00034e10 ldrd fp, r6, [sp, 0x18]                           |     __asm ("ldrd fp, r6, [var_18h_2]");
    0x00034e14 add r3, pc                                        |     r3 = 0x69da0;
    0x00034e16 str r3, [sp, 0x14]                                |     var_14h_2 = r3;
    0x00034e18 add r3, sp, 0x20                                  |     r3 += var_20h_3;
    0x00034e1a str r3, [sp, 0xc]                                 |     var_ch_2 = r3;
                                                                 |     do {
                                                                 | label_1:
    0x00034e1c ldr r3, [r5, 0x10]                                |         r3 = *((r5 + 0x10));
    0x00034e1e cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00034e20 beq 0x34e9c                                       |             goto label_4;
                                                                 |         }
    0x00034e22 cmp.w fp, 0                                       |         
                                                                 |         if (fp <= 0) {
    0x00034e26 ble.w 0x34f54                                     |             goto label_5;
                                                                 |         }
    0x00034e2a mov r2, r8                                        |         r2 = r8;
    0x00034e2c mov r1, fp                                        |         r1 = fp;
    0x00034e2e mov r0, r5                                        |         r0 = r5;
    0x00034e30 bl 0x34cc0                                        |         r0 = fcn_00034cc0 (r0, r1, r2);
    0x00034e34 mov r3, r0                                        |         r3 = r0;
                                                                 |         if (r0 != 0) {
    0x00034e36 cbnz r0, 0x34e9c                                  |             goto label_4;
                                                                 |         }
    0x00034e38 ldr r2, [sp, 0xc]                                 |         r2 = var_ch_2;
    0x00034e3a mov r1, fp                                        |         r1 = fp;
    0x00034e3c ldr r0, [r5, 4]                                   |         r0 = *((r5 + 4));
    0x00034e3e bl 0x2a698                                        |         r0 = fcn_0002a698 (r0, r1, r2, r3);
    0x00034e42 mov r4, r0                                        |         r4 = r0;
    0x00034e44 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x00034e46 bne.w 0x34f6c                                     |             goto label_6;
                                                                 |         }
    0x00034e4a ldr r1, [sp, 0x10]                                |         r1 = var_10h;
    0x00034e4c ldr.w sb, [sp, 0x20]                              |         sb = var_20h_3;
    0x00034e50 ldr r3, [r5]                                      |         r3 = *(r5);
    0x00034e52 ldr.w sl, [sb, 4]                                 |         sl = *((sb + 4));
    0x00034e56 ldrb r2, [r3, 0x11]                               |         r2 = *((r3 + 0x11));
                                                                 |         if (r1 == 0) {
    0x00034e58 cbz r1, 0x34eb6                                   |             goto label_7;
                                                                 |         }
    0x00034e5a ldr.w r7, [sl, 4]                                 |         r7 = *((sl + 4));
    0x00034e5e rev r7, r7                                        |         r7 = SWAP32 (r7);
    0x00034e60 cmp r2, 0                                         |         
                                                                 |         if (r2 != 0) {
    0x00034e62 bne 0x34f40                                       |             goto label_8;
                                                                 |         }
                                                                 | label_3:
    0x00034e64 ldr r0, [r3, 0x24]                                |         r0 = *((r3 + 0x24));
    0x00034e66 adds r2, r0, 3                                    |         r2 = r0 + 3;
    0x00034e68 ands.w r2, r2, r0, asr 32                         |         r2 &= (r0 >> 32);
    0x00034e6c it lo                                             |         
                                                                 |         if (r2 >= r2) {
    0x00034e6e movlo r2, r0                                      |             r2 = r0;
                                                                 |         }
    0x00034e70 asrs r2, r2, 2                                    |         r2 >>= 2;
    0x00034e72 subs r2, 1                                        |         r2--;
    0x00034e74 cmp r2, r7                                        |         
                                                                 |         if (r2 > r7) {
    0x00034e76 bgt 0x34ef0                                       |             goto label_9;
                                                                 |         }
    0x00034e78 ldr r2, [sp, 0x14]                                |         r2 = var_14h_2;
    0x00034e7a mov r3, fp                                        |         r3 = fp;
    0x00034e7c mov r1, r8                                        |         r1 = r8;
    0x00034e7e mov r0, r5                                        |         r0 = r5;
    0x00034e80 subs r6, 2                                        |         r6 -= 2;
    0x00034e82 bl 0x34c14                                        |         fcn_00034c14 (r0, r1, r2);
                                                                 | label_0:
    0x00034e86 ldr.w r1, [sl]                                    |         r1 = *(sl);
    0x00034e8a subs r3, r6, 1                                    |         r3 = r6 - 1;
    0x00034e8c mov r0, sb                                        |         r0 = sb;
    0x00034e8e str r3, [sp, 8]                                   |         var_8h = r3;
    0x00034e90 rev.w fp, r1                                      |         r1 = SWAPundefined (fp);
    0x00034e94 bl 0x2bd94                                        |         fcn_0002bd94 (r0);
    0x00034e98 cmp r6, 0                                         |         
    0x00034e9a bgt 0x34e1c                                       |         
                                                                 |     } while (r6 > 0);
                                                                 | label_4:
    0x00034e9c ldr r2, [pc, 0xec]                                |     
    0x00034e9e ldr r3, [pc, 0xe4]                                |     r3 = *(0x34f86);
    0x00034ea0 add r2, pc                                        |     r2 = 0x69e30;
    0x00034ea2 ldr r3, [r2, r3]                                  |     r3 = *(0x69e30);
    0x00034ea4 ldr r2, [r3]                                      |     r2 = *(0x69e30);
    0x00034ea6 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00034ea8 eors r2, r3                                       |     r2 ^= r3;
    0x00034eaa mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x00034eae bne 0x34f7c                                       |         goto label_10;
                                                                 |     }
    0x00034eb0 add sp, 0x2c                                      |     
    0x00034eb2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_7:
    0x00034eb6 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x00034eb8 cmp r2, 0                                         |     
    0x00034eba it ne                                             |     
                                                                 |     if (r2 != 0) {
    0x00034ebc cmpne r3, 0                                       |         __asm ("cmpne r3, 0");
                                                                 |     }
    0x00034ebe it le                                             |     
                                                                 |     if (r2 <= 0) {
    0x00034ec0 ldrle r6, [sp, 8]                                 |         r6 = var_8h;
                                                                 |         goto label_11;
                                                                 |     }
                                                                 |     if (r2 <= 0) {
                                                                 | label_11:
    0x00034ec2 ble 0x34e86                                       |         goto label_0;
                                                                 |     }
    0x00034ec4 ldr.w r1, [sl]                                    |     r1 = *(sl);
    0x00034ec8 mov r3, fp                                        |     r3 = fp;
    0x00034eca movs r2, 4                                        |     r2 = 4;
    0x00034ecc mov r0, r5                                        |     r0 = r5;
    0x00034ece str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x00034ed2 rev r1, r1                                        |     r1 = SWAP32 (r1);
    0x00034ed4 bl 0x34d20                                        |     fcn_00034d20 (r0, r1, r2, r3, r4, r5, r6);
    0x00034ed8 ldr.w r1, [sl]                                    |     r1 = *(sl);
    0x00034edc mov r0, sb                                        |     r0 = sb;
    0x00034ede rev.w fp, r1                                      |     r1 = SWAPundefined (fp);
    0x00034ee2 bl 0x2bd94                                        |     fcn_0002bd94 (r0);
    0x00034ee6 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x00034ee8 mov r6, r3                                        |     r6 = r3;
    0x00034eea subs r3, 1                                        |     r3--;
    0x00034eec str r3, [sp, 8]                                   |     var_8h = r3;
    0x00034eee b 0x34e1c                                         |     goto label_1;
                                                                 | label_9:
    0x00034ef0 cmp r7, 0                                         |     
                                                                 |     if (r7 <= 0) {
    0x00034ef2 ble 0x34f3a                                       |         goto label_12;
                                                                 |     }
    0x00034ef4 mov r2, r8                                        |     r2 = r8;
    0x00034ef6 add.w r6, sl, 8                                   |     r6 = sl + 8;
    0x00034efa mov r8, r7                                        |     r8 = r7;
    0x00034efc mov r7, r2                                        |     r7 = r2;
    0x00034efe b 0x34f16                                         |     
                                                                 |     while (r3 == 0) {
                                                                 | label_2:
    0x00034f00 mov r1, fp                                        |         r1 = fp;
    0x00034f02 adds r4, 1                                        |         r4++;
    0x00034f04 mov r2, r7                                        |         r2 = r7;
    0x00034f06 mov r0, r5                                        |         r0 = r5;
    0x00034f08 bl 0x34cc0                                        |         fcn_00034cc0 (r0, r1, r2);
    0x00034f0c cmp r8, r4                                        |         
    0x00034f0e add.w r6, r6, 4                                   |         r6 += 4;
                                                                 |         if (r8 == r4) {
    0x00034f12 beq 0x34f34                                       |             goto label_13;
                                                                 |         }
    0x00034f14 ldr r3, [r5]                                      |         r3 = *(r5);
    0x00034f16 ldrb r3, [r3, 0x11]                               |         r3 = *((r3 + 0x11));
    0x00034f18 ldr.w fp, [r6]                                    |         fp = *(r6);
    0x00034f1c rev.w fp, fp                                      |         fp = SWAPundefined (fp);
    0x00034f20 cmp r3, 0                                         |         
    0x00034f22 beq 0x34f00                                       |         
                                                                 |     }
    0x00034f24 movs r3, 0                                        |     r3 = 0;
    0x00034f26 movs r2, 2                                        |     r2 = 2;
    0x00034f28 mov r1, fp                                        |     r1 = fp;
    0x00034f2a mov r0, r5                                        |     r0 = r5;
    0x00034f2c str r7, [sp]                                      |     *(sp) = r7;
    0x00034f2e bl 0x34d20                                        |     fcn_00034d20 (r0, r1, r2, r3, r4, r5, r6);
    0x00034f32 b 0x34f00                                         |     goto label_2;
                                                                 | label_13:
    0x00034f34 mov r3, r7                                        |     r3 = r7;
    0x00034f36 mov r7, r8                                        |     r7 = r8;
    0x00034f38 mov r8, r3                                        |     r8 = r3;
                                                                 | label_12:
    0x00034f3a ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x00034f3c subs r6, r3, r7                                   |     r6 = r3 - r7;
    0x00034f3e b 0x34e86                                         |     goto label_0;
                                                                 | label_8:
    0x00034f40 mov r3, r0                                        |     r3 = r0;
    0x00034f42 movs r2, 2                                        |     r2 = 2;
    0x00034f44 mov r1, fp                                        |     r1 = fp;
    0x00034f46 mov r0, r5                                        |     r0 = r5;
    0x00034f48 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x00034f4c bl 0x34d20                                        |     fcn_00034d20 (r0, r1, r2, r3, r4, r5, r6);
    0x00034f50 ldr r3, [r5]                                      |     r3 = *(r5);
    0x00034f52 b 0x34e64                                         |     goto label_3;
                                                                 | label_5:
    0x00034f54 ldr r2, [sp, 0x18]                                |     r2 = var_18h_2;
    0x00034f56 mov r3, r6                                        |     r3 = r6;
    0x00034f58 ldr r4, [sp, 0x1c]                                |     r4 = var_1ch_2;
    0x00034f5a mov r1, r8                                        |     r1 = r8;
    0x00034f5c mov r0, r5                                        |     r0 = r5;
    0x00034f5e str r2, [sp, 4]                                   |     var_4h_3 = r2;
    0x00034f60 ldr r2, [pc, 0x2c]                                |     
    0x00034f62 str r4, [sp]                                      |     *(sp) = r4;
    0x00034f64 add r2, pc                                        |     r2 = 0x69ef8;
    0x00034f66 bl 0x34c14                                        |     fcn_00034c14 (r0, r1, r2);
    0x00034f6a b 0x34e9c                                         |     goto label_4;
                                                                 | label_6:
    0x00034f6c ldr r2, [pc, 0x24]                                |     
    0x00034f6e mov r3, fp                                        |     r3 = fp;
    0x00034f70 mov r1, r8                                        |     r1 = r8;
    0x00034f72 mov r0, r5                                        |     r0 = r5;
    0x00034f74 add r2, pc                                        |     r2 = 0x69f0c;
    0x00034f76 bl 0x34c14                                        |     fcn_00034c14 (r0, r1, r2);
    0x00034f7a b 0x34e9c                                         |     goto label_4;
                                                                 | label_10:
    0x00034f7c blx 0x6498                                        |     fcn_00006498 ();
    0x00034f80 cmp r6, 0x68                                      |     
    0x00034f82 movs r4, r0                                       |     r4 = r0;
    0x00034f84 lsls r0, r1, 0xe                                  |     r0 = r1 << 0xe;
    0x00034f86 movs r0, r0                                       |     
    0x00034f88 add r6, sp, 0x30                                  |     r6 += var_30h;
    0x00034f8a movs r2, r0                                       |     r2 = r0;
    0x00034f8c cmp r5, 0xb8                                      |     
    0x00034f8e movs r4, r0                                       |     r4 = r0;
    0x00034f90 add r4, sp, 0x1a0                                 |     r4 += arg_1a0h;
    0x00034f92 movs r2, r0                                       |     r2 = r0;
    0x00034f94 add r4, sp, 0x250                                 |     r4 += arg_250h;
    0x00034f96 movs r2, r0                                       |     r2 = r0;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x34f98 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
                                                                 |                                ((n & 0x0000ff00) <<  8) | \
                                                                 |                                ((n & 0x00ff0000) >>  8) | \
                                                                 |                                ((n & 0xff000000) >> 24)))
                                                                 |  
    ; (fcn) fcn.00034f98 ()                                      | void fcn_00034f98 (int16_t arg_1e0h, int16_t arg_200h, int16_t arg_2b0h, int16_t arg_310h, int16_t arg_330h, int16_t arg_3c8h, int16_t arg_3e0h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h_2;
                                                                 |     int16_t var_10h_2;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h_3;
                                                                 |     int16_t var_1ch_4;
                                                                 |     int16_t var_20h_2;
                                                                 |     int16_t var_24h_3;
                                                                 |     int16_t var_28h_2;
                                                                 |     int16_t var_2ch_2;
                                                                 |     int16_t var_30h_2;
                                                                 |     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_2;
                                                                 |     int16_t var_58h;
                                                                 |     int16_t var_5ch;
                                                                 |     int16_t var_66h;
                                                                 |     int16_t var_68h;
                                                                 |     int16_t var_70h;
                                                                 |     int16_t var_98h;
                                                                 |     int16_t var_c8h;
                                                                 |     int16_t var_d4h;
                                                                 |     int16_t var_e8h;
                                                                 |     int16_t var_100h;
                                                                 |     int16_t var_18h_2;
                                                                 |     int16_t var_158h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00034f98 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x00034f9c mov r6, r2                                        |     r6 = r2;
    0x00034f9e sub sp, 0xdc                                      |     
    0x00034fa0 ldr.w r2, [pc, 0x550]                             |     
    0x00034fa4 mov r4, r1                                        |     r4 = r1;
    0x00034fa6 add.w r8, sp, 0x70                                |     r8 += var_70h;
    0x00034faa str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00034fac mov r5, r0                                        |     r5 = r0;
    0x00034fae ldr r1, [sp, 0x100]                               |     r1 = var_100h;
    0x00034fb0 add r2, pc                                        |     r2 = 0x6a4a8;
    0x00034fb2 ldr.w r3, [pc, 0x544]                             |     r3 = *(0x354fa);
    0x00034fb6 movs r0, 0x64                                     |     r0 = 0x64;
    0x00034fb8 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00034fbc str r1, [sp, 0x18]                                |     var_18h_3 = r1;
    0x00034fbe mov r1, r8                                        |     r1 = r8;
    0x00034fc0 ldr r3, [r2, r3]                                  |     
    0x00034fc2 ldr.w r2, [pc, 0x538]                             |     
    0x00034fc6 ldr r3, [r3]                                      |     r3 = *(0x6a4a8);
    0x00034fc8 str r3, [sp, 0xd4]                                |     var_d4h = r3;
    0x00034fca mov.w r3, 0                                       |     r3 = 0;
    0x00034fce mov r3, r4                                        |     r3 = r4;
    0x00034fd0 add r2, pc                                        |     r2 = 0x6a4d2;
    0x00034fd2 vstr d16, [sp, 0x40]                              |     __asm ("vstr d16, [sp, 0x40]");
    0x00034fd4 lsrs r0, r2, 0xc                                  |     r0 = r2 >> 0xc;
    0x00034fd6 vstr d16, [sp, 0x48]                              |     __asm ("vstr d16, [sp, 0x48]");
    0x00034fda blx 0x6658                                        |     fcn_00006658 ();
    0x00034fde ldr.w sl, [r5]                                    |     sl = *(r5);
    0x00034fe2 ldr.w r3, [sl, 0x24]                              |     r3 = *((sl + 0x24));
    0x00034fe6 str r3, [sp, 0x10]                                |     var_10h_2 = r3;
    0x00034fe8 cbnz r4, 0x3500e                                  |     
                                                                 |     while (r0 != 0) {
    0x00034fea movs r7, 0                                        |         r7 = 0;
                                                                 | label_2:
    0x00034fec ldr.w r2, [pc, 0x510]                             |         
    0x00034ff0 ldr.w r3, [pc, 0x504]                             |         r3 = *(0x354f8);
    0x00034ff4 add r2, pc                                        |         r2 = 0x6a4f8;
    0x00034ff6 ldr r3, [r2, r3]                                  |         r3 = *(0x6a4f8);
    0x00034ff8 ldr r2, [r3]                                      |         r2 = *(0x6a4f8);
    0x00034ffa ldr r3, [sp, 0xd4]                                |         r3 = var_d4h;
    0x00034ffc eors r2, r3                                       |         r2 ^= r3;
    0x00034ffe mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00035002 bne.w 0x354ee                                     |             goto label_17;
                                                                 |         }
    0x00035006 mov r0, r7                                        |         r0 = r7;
    0x00035008 add sp, 0xdc                                      |         
    0x0003500a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
    0x0003500e mov r2, r6                                        |         r2 = r6;
    0x00035010 mov r1, r4                                        |         r1 = r4;
    0x00035012 mov r0, r5                                        |         r0 = r5;
    0x00035014 bl 0x34cc0                                        |         r0 = fcn_00034cc0 (r0, r1, r2);
    0x00035018 mov r7, r0                                        |         r7 = r0;
    0x0003501a cmp r0, 0                                         |         
    0x0003501c bne 0x34fea                                       |         
                                                                 |     }
    0x0003501e add r3, sp, 0x50                                  |     r3 += var_50h_2;
    0x00035020 ldr.w r0, [sl]                                    |     r0 = *(sl);
    0x00035024 mov r2, r3                                        |     r2 = r3;
    0x00035026 str r3, [sp, 0x24]                                |     var_24h_3 = r3;
    0x00035028 mov r1, r4                                        |     r1 = r4;
    0x0003502a mov r3, r7                                        |     r3 = r7;
    0x0003502c bl 0x2a698                                        |     r0 = fcn_0002a698 (r0, r1, r2, r3);
    0x00035030 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00035032 bne.w 0x35280                                     |         goto label_18;
                                                                 |     }
    0x00035036 ldr r3, [sp, 0x50]                                |     r3 = var_50h_2;
    0x00035038 cmp r4, 1                                         |     
    0x0003503a ite eq                                            |     
                                                                 |     if (r4 != 1) {
    0x0003503c moveq r2, 0x64                                    |         r2 = 0x64;
                                                                 |     }
                                                                 |     if (r4 == 1) {
    0x0003503e movne r2, 0                                       |         r2 = 0;
                                                                 |     }
    0x00035040 ldrd r1, r6, [r3, 4]                              |     __asm ("ldrd r1, r6, [r3, 4]");
    0x00035044 mov r0, r6                                        |     r0 = r6;
    0x00035046 str r3, [r6, 0x44]                                |     *((r6 + 0x44)) = r3;
    0x00035048 str r1, [r6, 0x38]                                |     *((r6 + 0x38)) = r1;
    0x0003504a strb r2, [r6, 5]                                  |     *((r6 + 5)) = r2;
    0x0003504c str.w sl, [r6, 0x34]                              |     __asm ("str.w sl, [r6, 0x34]");
    0x00035050 str r4, [r6, 0x48]                                |     *((r6 + 0x48)) = r4;
    0x00035052 strb r7, [r6]                                     |     *(r6) = r7;
    0x00035054 bl 0x2e4c8                                        |     fcn_0002e4c8 (r0);
    0x00035058 str r0, [sp, 0x30]                                |     var_30h_2 = r0;
    0x0003505a cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0003505c bne.w 0x35442                                     |         goto label_19;
                                                                 |     }
    0x00035060 ldrh r3, [r6, 0x10]                               |     r3 = *((r6 + 0x10));
    0x00035062 movs r7, 1                                        |     r7 = 1;
    0x00035064 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00035066 beq.w 0x3517a                                     |         goto label_20;
                                                                 |     }
    0x0003506a ldr.w r3, [pc, 0x498]                             |     
    0x0003506e mov fp, r4                                        |     
    0x00035070 ldr r7, [sp, 0x30]                                |     r7 = var_30h_2;
    0x00035072 str.w sl, [sp, 0x1c]                              |     __asm ("str.w sl, [var_1ch_4]");
    0x00035076 mov sl, r5                                        |     sl = r5;
    0x00035078 add r3, pc                                        |     
    0x0003507a str r3, [sp, 0x28]                                |     var_28h_2 = r3;
    0x0003507c ldr.w r3, [pc, 0x488]                             |     r3 = *(0x00035508);
    0x00035080 str r7, [sp, 0x2c]                                |     var_2ch_2 = r7;
    0x00035082 add r3, pc                                        |     
    0x00035084 str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x00035086 ldr.w r3, [pc, 0x484]                             |     r3 = *(0x0003550c);
    0x0003508a add r3, pc                                        |     r3 = 0xd4696;
    0x0003508c str r3, [sp, 0x38]                                |     var_38h = r3;
                                                                 |     do {
    0x0003508e ldr.w r3, [sl, 0x10]                              |         r3 = *((sl + 0x10));
    0x00035092 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00035094 beq 0x3516e                                       |             goto label_21;
                                                                 |         }
    0x00035096 ldr r2, [sp, 0x28]                                |         r2 = var_28h_2;
    0x00035098 mov r3, fp                                        |         r3 = fp;
    0x0003509a mov r1, r8                                        |         r1 = r8;
    0x0003509c movs r0, 0x64                                     |         r0 = 0x64;
    0x0003509e str r7, [sp]                                      |         *(sp) = r7;
    0x000350a0 blx 0x6658                                        |         fcn_00006658 ();
    0x000350a4 ldr r3, [r6, 0x40]                                |         r3 = *((r6 + 0x40));
    0x000350a6 mov r0, r6                                        |         r0 = r6;
    0x000350a8 ldrh r1, [r6, 0x12]                               |         r1 = *((r6 + 0x12));
    0x000350aa ldr r5, [r6, 0x38]                                |         r5 = *((r6 + 0x38));
    0x000350ac ldrb.w r4, [r3, r7, lsl 1]                        |         offset_0 = r7 << 1;
                                                                 |         r4 = *((r3 + offset_0));
    0x000350b0 add.w r3, r3, r7, lsl 1                           |         r3 += (r7 << 1);
    0x000350b4 ldr r2, [sp, 0x24]                                |         r2 = var_24h_3;
    0x000350b6 str r5, [sp, 0x20]                                |         var_20h_2 = r5;
    0x000350b8 ldrb.w sb, [r3, 1]                                |         sb = *((r3 + 1));
    0x000350bc orr.w sb, sb, r4, lsl 8                           |         sb |= (r4 << 8);
    0x000350c0 and.w sb, sb, r1                                  |         sb &= r1;
    0x000350c4 add r5, sb                                        |         r5 += sb;
    0x000350c6 mov r1, r5                                        |         r1 = r5;
    0x000350c8 bl 0x9e14                                         |         fcn_00009e14 (r0, r1, r2);
    0x000350cc ldrb r2, [r6, 2]                                  |         r2 = *((r6 + 2));
    0x000350ce ldr r4, [sp, 0x5c]                                |         r4 = var_5ch;
    0x000350d0 cmp r2, 0                                         |         
                                                                 |         if (r2 != 0) {
    0x000350d2 bne.w 0x35290                                     |             goto label_22;
                                                                 |         }
    0x000350d6 ldr r2, [sp, 0x50]                                |         r2 = var_50h_2;
    0x000350d8 add r4, r2                                        |         r4 += r2;
                                                                 | label_3:
    0x000350da ldrh.w ip, [sp, 0x66]                             |         ip = var_66h;
    0x000350de cmp ip, r4                                        |         
                                                                 |         if (ip < r4) {
    0x000350e0 bhs 0x35128                                       |             
    0x000350e2 ldr r3, [sp, 0x1c]                                |             r3 = var_1ch_4;
    0x000350e4 ldrh.w r2, [sp, 0x68]                             |             r2 = var_68h;
    0x000350e8 ldr r1, [r6, 0x38]                                |             r1 = *((r6 + 0x38));
    0x000350ea ldr r0, [r3, 0x24]                                |             r0 = *((r3 + 0x24));
    0x000350ec str r2, [sp, 0x34]                                |             var_34h = r2;
    0x000350ee add r1, r0                                        |             r1 += r0;
    0x000350f0 adds r0, r5, r2                                   |             r0 = r5 + r2;
    0x000350f2 cmp r0, r1                                        |             
                                                                 |             if (r0 > r1) {
    0x000350f4 bhi 0x35128                                       |                 goto label_23;
                                                                 |             }
    0x000350f6 ldr r2, [sp, 0x10]                                |             r2 = var_10h_2;
    0x000350f8 sub.w r0, r2, ip                                  |             r0 = r2 - ip;
    0x000350fc subs r1, r2, 4                                    |             r1 = r2 - 4;
    0x000350fe subs r0, 5                                        |             r0 -= 5;
    0x00035100 add r0, r4                                        |             r0 += r4;
    0x00035102 bl 0x5dc60                                        |             fcn_0005dc60 (r0, r1, r2);
    0x00035106 ldr r3, [sp, 0x1c]                                |             r3 = var_1ch_4;
    0x00035108 mov r4, r0                                        |             r4 = r0;
    0x0003510a ldr r2, [sp, 0x34]                                |             r2 = var_34h;
    0x0003510c ldrb r3, [r3, 0x11]                               |             r3 = *((r3 + 0x11));
    0x0003510e ldr r1, [r5, r2]                                  |             r1 = *((r5 + r2));
    0x00035110 rev r1, r1                                        |             r1 = SWAP32 (r1);
    0x00035112 cmp r3, 0                                         |             
                                                                 |             if (r3 != 0) {
    0x00035114 bne.w 0x3542e                                     |                 goto label_24;
                                                                 |             }
                                                                 | label_13:
    0x00035118 mov r2, r1                                        |             r2 = r1;
    0x0003511a mov r3, r4                                        |             r3 = r4;
    0x0003511c movs r1, 0                                        |             r1 = 0;
    0x0003511e mov r0, sl                                        |             r0 = sl;
    0x00035120 str.w r8, [sp]                                    |             __asm ("str.w r8, [sp]");
    0x00035124 bl 0x34de0                                        |             fcn_00034de0 (r0, r1, r2, r3, r4, r5);
                                                                 |         }
                                                                 | label_23:
    0x00035128 ldrb r3, [r6, 3]                                  |         r3 = *((r6 + 3));
                                                                 |         if (r3 == 0) {
    0x0003512a cbnz r3, 0x35166                                  |             
    0x0003512c ldr r3, [sp, 0x20]                                |             r3 = var_20h_2;
    0x0003512e ldr.w r4, [r3, sb]                                |             r4 = *((r3 + sb));
    0x00035132 ldr r3, [sp, 0x1c]                                |             r3 = var_1ch_4;
    0x00035134 rev r4, r4                                        |             r4 = SWAP32 (r4);
    0x00035136 ldrb r3, [r3, 0x11]                               |             r3 = *((r3 + 0x11));
    0x00035138 cmp r3, 0                                         |             
                                                                 |             if (r3 != 0) {
    0x0003513a bne.w 0x352c4                                     |                 goto label_25;
                                                                 |             }
                                                                 | label_5:
    0x0003513e mov r1, r4                                        |             r1 = r4;
    0x00035140 cmp r7, 0                                         |             
                                                                 |             if (r7 == 0) {
    0x00035142 beq.w 0x352a0                                     |                 goto label_26;
                                                                 |             }
    0x00035146 add r3, sp, 0x48                                  |             r3 += var_48h;
    0x00035148 mov r2, r8                                        |             r2 = r8;
    0x0003514a str r3, [sp]                                      |             *(sp) = r3;
    0x0003514c mov r0, sl                                        |             r0 = sl;
    0x0003514e add r3, sp, 0x40                                  |             r3 += var_40h;
    0x00035150 bl 0x34f98                                        |             fcn_00034f98 (r0, r1, r2, r3, r4, r5, r6);
    0x00035154 ldr r3, [sp, 0x2c]                                |             r3 = var_2ch_2;
    0x00035156 cmp r0, r3                                        |             
                                                                 |             if (r0 == r3) {
    0x00035158 beq 0x35166                                       |                 goto label_4;
                                                                 |             }
    0x0003515a str r0, [sp, 0x2c]                                |             var_2ch_2 = r0;
    0x0003515c mov r1, r8                                        |             r1 = r8;
    0x0003515e ldr r2, [sp, 0x38]                                |             r2 = var_38h;
    0x00035160 mov r0, sl                                        |             r0 = sl;
    0x00035162 bl 0x34c14                                        |             fcn_00034c14 (r0, r1, r2);
                                                                 |         }
                                                                 | label_4:
    0x00035166 ldrh r3, [r6, 0x10]                               |         r3 = *((r6 + 0x10));
    0x00035168 adds r7, 1                                        |         r7++;
    0x0003516a cmp r3, r7                                        |         
    0x0003516c bgt 0x3508e                                       |         
                                                                 |     } while (r3 > r7);
                                                                 | label_21:
    0x0003516e ldr r7, [sp, 0x2c]                                |     r7 = var_2ch_2;
    0x00035170 mov r5, sl                                        |     r5 = sl;
    0x00035172 ldr.w sl, [sp, 0x1c]                              |     sl = var_1ch_4;
    0x00035176 mov r4, fp                                        |     r4 = fp;
    0x00035178 adds r7, 1                                        |     r7++;
                                                                 | label_20:
    0x0003517a ldrb r3, [r6, 3]                                  |     r3 = *((r6 + 3));
    0x0003517c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0003517e beq.w 0x353d6                                     |         goto label_27;
                                                                 |     }
                                                                 | label_11:
    0x00035182 ldrb r3, [r6, 2]                                  |     r3 = *((r6 + 2));
    0x00035184 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00035186 bne.w 0x35380                                     |         goto label_28;
                                                                 |     }
                                                                 | label_8:
    0x0003518a ldr.w r0, [sl, 0x20]                              |     r0 = *((sl + 0x20));
    0x0003518e ldrb.w sb, [r6, 5]                                |     sb = *((r6 + 5));
    0x00035192 ldr.w sl, [r6, 0x38]                              |     sl = *((r6 + 0x38));
    0x00035196 bl 0xdc94                                         |     r0 = fcn_0000dc94 (r0);
    0x0003519a mov r8, r0                                        |     r8 = r0;
    0x0003519c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0003519e beq.w 0x3537a                                     |         goto label_29;
                                                                 |     }
    0x000351a2 add.w r2, sl, sb                                  |     r2 = sl + sb;
    0x000351a6 ldr r0, [sp, 0x10]                                |     r0 = var_10h_2;
    0x000351a8 ldrb r3, [r2, 5]                                  |     r3 = *((r2 + 5));
    0x000351aa movs r1, 0                                        |     r1 = 0;
    0x000351ac ldrb.w fp, [r2, 6]                                |     fp = *((r2 + 6));
    0x000351b0 add.w sb, sb, 0xc                                 |     sb += 0xc;
    0x000351b4 str r2, [sp, 0x20]                                |     var_20h_2 = r2;
    0x000351b6 orr.w fp, fp, r3, lsl 8                           |     
    0x000351ba add.w fp, fp, -1                                  |     
    0x000351be uxth.w fp, fp                                     |     fp = (int16_t) fp;
    0x000351c2 add.w fp, fp, 1                                   |     
    0x000351c6 sub.w r2, r0, fp                                  |     r2 = r0 - fp;
    0x000351ca add.w r0, r8, fp                                  |     r0 = r8 + fp;
    0x000351ce blx 0x5fcc                                        |     fcn_00005fcc ();
    0x000351d2 mov r2, fp                                        |     r2 = fp;
    0x000351d4 movs r1, 1                                        |     r1 = 1;
    0x000351d6 mov r0, r8                                        |     r0 = r8;
    0x000351d8 blx 0x5fcc                                        |     fcn_00005fcc ();
    0x000351dc ldrb r3, [r6, 3]                                  |     r3 = *((r6 + 3));
    0x000351de sub.w sb, sb, r3, lsl 2                           |     sb -= (r3 << 2);
    0x000351e2 ldr r3, [sp, 0x20]                                |     r3 = var_20h_2;
    0x000351e4 ldrb r2, [r3, 3]                                  |     r2 = *((r3 + 3));
    0x000351e6 ldrb r3, [r3, 4]                                  |     r3 = *((r3 + 4));
    0x000351e8 orrs.w r3, r3, r2, lsl 8                          |     r3 |= (r2 << 8);
    0x000351ec mov r1, r3                                        |     r1 = r3;
                                                                 |     if (r3 == r3) {
    0x000351ee beq 0x352de                                       |         goto label_30;
                                                                 |     }
    0x000351f0 ldr r3, [pc, 0x31c]                               |     
    0x000351f2 mov.w fp, 0                                       |     
    0x000351f6 ldr r2, [sp, 0x10]                                |     r2 = var_10h_2;
    0x000351f8 add.w sb, sb, 1                                   |     sb++;
    0x000351fc add sb, sl                                        |     sb += sl;
    0x000351fe str.w sl, [sp, 0x1c]                              |     __asm ("str.w sl, [var_1ch_4]");
    0x00035202 add r3, pc                                        |     r3 = 0x6a716;
    0x00035204 str r7, [sp, 0x24]                                |     var_24h_3 = r7;
    0x00035206 subs r2, 3                                        |     r2 -= 3;
    0x00035208 str r4, [sp, 0x14]                                |     var_14h = r4;
    0x0003520a mov sl, r2                                        |     sl = r2;
    0x0003520c mov r4, fp                                        |     r4 = fp;
    0x0003520e mov r7, r1                                        |     r7 = r1;
    0x00035210 mov fp, r3                                        |     
    0x00035212 b 0x3523a                                         |     
                                                                 |     while (r2 >= sl) {
    0x00035214 ldr r3, [sp, 0x10]                                |         r3 = var_10h_2;
    0x00035216 add.w r0, r2, 0xff00                              |         r0 = r2 + fcn.0000ff00;
    0x0003521a adds r0, 0xff                                     |         r0 += 0xff;
    0x0003521c cmp r3, r0                                        |         
                                                                 |         if (r3 > r0) {
    0x0003521e bgt 0x35266                                       |             goto label_31;
                                                                 |         }
                                                                 | label_0:
    0x00035220 ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x00035222 mov r2, fp                                        |         r2 = fp;
    0x00035224 movs r1, 0                                        |         r1 = 0;
    0x00035226 mov r0, r5                                        |         r0 = r5;
    0x00035228 str r3, [sp]                                      |         *(sp) = r3;
    0x0003522a mov r3, r4                                        |         r3 = r4;
    0x0003522c bl 0x34c14                                        |         fcn_00034c14 (r0, r1, r2);
                                                                 | label_1:
    0x00035230 adds r4, 1                                        |         r4++;
    0x00035232 add.w sb, sb, 2                                   |         sb += 2;
    0x00035236 cmp r7, r4                                        |         
                                                                 |         if (r7 == r4) {
    0x00035238 beq 0x352d6                                       |             goto label_32;
                                                                 |         }
    0x0003523a ldrb r1, [sb, -0x1]                               |         r1 = *((sb - 0x1));
    0x0003523e ldrb.w r2, [sb]                                   |         r2 = *(sb);
    0x00035242 orr.w r2, r2, r1, lsl 8                           |         r2 |= (r1 << 8);
    0x00035246 cmp r2, sl                                        |         
    0x00035248 bge 0x35214                                       |         
                                                                 |     }
    0x0003524a ldr r3, [sp, 0x1c]                                |     r3 = var_1ch_4;
    0x0003524c mov r0, r6                                        |     r0 = r6;
    0x0003524e str r2, [sp, 0x18]                                |     var_18h_3 = r2;
    0x00035250 adds r1, r3, r2                                   |     r1 = r3 + r2;
    0x00035252 bl 0x9f14                                         |     fcn_00009f14 (r0, r1, r2, r3);
    0x00035256 ldr r2, [sp, 0x18]                                |     r2 = var_18h_3;
    0x00035258 ldr r3, [sp, 0x10]                                |     r3 = var_10h_2;
    0x0003525a subs r1, r2, 1                                    |     r1 = r2 - 1;
    0x0003525c add r0, r1                                        |     r0 += r1;
    0x0003525e cmp r0, r3                                        |     
                                                                 |     if (r0 >= r3) {
    0x00035260 bge 0x35220                                       |         goto label_0;
                                                                 |     }
    0x00035262 cmp r0, r2                                        |     
                                                                 |     if (r0 < r2) {
    0x00035264 blt 0x35230                                       |         goto label_1;
                                                                 |     }
                                                                 | label_31:
    0x00035266 adds r0, 1                                        |     r0++;
    0x00035268 add r0, r8                                        |     r0 += r8;
                                                                 |     do {
    0x0003526a subs r3, r0, 2                                    |         r3 = r0 - 2;
    0x0003526c ldrb r1, [r0, -0x1]!                              |         r1 = *((r0 -= 0x1));
    0x00035270 sub.w r3, r3, r8                                  |         r3 -= r8;
    0x00035274 cmp r2, r3                                        |         
    0x00035276 add.w r1, r1, 1                                   |         r1++;
    0x0003527a strb r1, [r0]                                     |         *(r0) = r1;
    0x0003527c ble 0x3526a                                       |         
                                                                 |     } while (r2 <= r3);
    0x0003527e b 0x35230                                         |     goto label_1;
                                                                 | label_18:
    0x00035280 ldr r2, [pc, 0x290]                               |     
    0x00035282 mov r3, r0                                        |     r3 = r0;
    0x00035284 mov r1, r8                                        |     r1 = r8;
    0x00035286 mov r0, r5                                        |     r0 = r5;
    0x00035288 add r2, pc                                        |     r2 = 0x6a7a0;
    0x0003528a bl 0x34c14                                        |     fcn_00034c14 (r0, r1, r2);
    0x0003528e b 0x34fec                                         |     goto label_2;
                                                                 | label_22:
    0x00035290 ldrd r1, r2, [sp, 0x50]                           |     __asm ("ldrd r1, r2, [var_50h_2]");
                                                                 |     if (r7 == 0) {
    0x00035294 cbnz r7, 0x352b0                                  |         
    0x00035296 str r1, [sp, 0x48]                                |         var_48h = r1;
    0x00035298 str r1, [sp, 0x40]                                |         var_40h = r1;
    0x0003529a str r2, [sp, 0x4c]                                |         var_4ch = r2;
    0x0003529c str r2, [sp, 0x44]                                |         var_44h = r2;
    0x0003529e b 0x350da                                         |         goto label_3;
                                                                 | label_26:
    0x000352a0 add r3, sp, 0x40                                  |         r3 += var_40h;
    0x000352a2 mov r2, r8                                        |         r2 = r8;
    0x000352a4 mov r0, sl                                        |         r0 = sl;
    0x000352a6 str r7, [sp]                                      |         *(sp) = r7;
    0x000352a8 bl 0x34f98                                        |         fcn_00034f98 (r0, r1, r2, r3, r4, r5, r6);
    0x000352ac str r0, [sp, 0x2c]                                |         var_2ch_2 = r0;
    0x000352ae b 0x35166                                         |         goto label_4;
                                                                 |     }
    0x000352b0 ldrd r3, r0, [sp, 0x48]                           |     __asm ("ldrd r3, r0, [var_48h]");
    0x000352b4 cmp r3, r1                                        |     
    0x000352b6 sbcs.w lr, r0, r2                                 |     __asm ("sbcs.w lr, r0, r2");
                                                                 |     if (r3 >= r1) {
    0x000352ba bge.w 0x35416                                     |         goto label_33;
                                                                 |     }
                                                                 | label_12:
    0x000352be strd r1, r2, [sp, 0x48]                           |     __asm ("strd r1, r2, [sp, 0x48]");
    0x000352c2 b 0x350da                                         |     goto label_3;
                                                                 | label_25:
    0x000352c4 mov r3, fp                                        |     r3 = fp;
    0x000352c6 movs r2, 5                                        |     r2 = 5;
    0x000352c8 mov r1, r4                                        |     r1 = r4;
    0x000352ca mov r0, sl                                        |     r0 = sl;
    0x000352cc str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x000352d0 bl 0x34d20                                        |     fcn_00034d20 (r0, r1, r2, r3, r4, r5, r6);
    0x000352d4 b 0x3513e                                         |     goto label_5;
                                                                 | label_32:
    0x000352d6 ldr.w sl, [sp, 0x1c]                              |     sl = var_1ch_4;
    0x000352da ldr r7, [sp, 0x24]                                |     r7 = var_24h_3;
    0x000352dc ldr r4, [sp, 0x14]                                |     r4 = var_14h;
                                                                 | label_30:
    0x000352de ldr r2, [sp, 0x20]                                |     r2 = var_20h_2;
    0x000352e0 ldrb r3, [r2, 1]                                  |     r3 = *((r2 + 1));
    0x000352e2 ldrb r2, [r2, 2]                                  |     r2 = *((r2 + 2));
    0x000352e4 orrs.w r2, r2, r3, lsl 8                          |     r2 |= (r3 << 8);
                                                                 |     if (r2 == r2) {
    0x000352e8 beq 0x3531e                                       |         goto label_34;
                                                                 |     }
                                                                 | label_6:
    0x000352ea add.w r0, sl, r2                                  |     r0 = sl + r2;
    0x000352ee ldrb r1, [r0, 2]                                  |     r1 = *((r0 + 2));
    0x000352f0 ldrb r3, [r0, 3]                                  |     r3 = *((r0 + 3));
    0x000352f2 orr.w r3, r3, r1, lsl 8                           |     r3 |= (r1 << 8);
    0x000352f6 add r3, r2                                        |     r3 += r2;
    0x000352f8 cmp r3, r2                                        |     
    0x000352fa itt gt                                            |     
                                                                 |     if (r3 <= r2) {
    0x000352fc addgt r3, r8                                      |         r3 += r8;
                                                                 |     }
                                                                 |     if (r3 <= r2) {
    0x000352fe addgt ip, r8, r2                                  |         
                                                                 |     }
                                                                 |     if (r3 <= r2) {
    0x00035302 ble 0x35312                                       |         goto label_35;
                                                                 |     }
                                                                 |     do {
    0x00035304 ldrb r1, [r3, -0x1]!                              |         r1 = *((r3 -= 0x1));
    0x00035308 cmp r3, ip                                        |         
    0x0003530a add.w r1, r1, 1                                   |         r1++;
    0x0003530e strb r1, [r3]                                     |         *(r3) = r1;
    0x00035310 bne 0x35304                                       |         
                                                                 |     } while (r3 != ip);
                                                                 | label_35:
    0x00035312 ldrb.w r3, [sl, r2]                               |     r3 = *((sl + r2));
    0x00035316 ldrb r2, [r0, 1]                                  |     r2 = *((r0 + 1));
    0x00035318 orrs.w r2, r2, r3, lsl 8                          |     r2 |= (r3 << 8);
                                                                 |     if (r2 != r2) {
    0x0003531c bne 0x352ea                                       |         goto label_6;
                                                                 |     }
                                                                 | label_34:
    0x0003531e ldr r3, [sp, 0x10]                                |     r3 = var_10h_2;
    0x00035320 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x00035322 ble 0x35362                                       |         goto label_10;
                                                                 |     }
    0x00035324 ldr r3, [sp, 0x10]                                |     r3 = var_10h_2;
    0x00035326 add.w r2, r8, -1                                  |     r2 = r8 + -1;
    0x0003532a ldr.w lr, [sp, 0x30]                              |     lr = var_30h_2;
    0x0003532e rsb.w ip, r8, 1                                   |     
    0x00035332 subs r1, r3, 1                                    |     r1 = r3 - 1;
    0x00035334 add r1, r8                                        |     r1 += r8;
    0x00035336 b 0x35340                                         |     
                                                                 |     while (r0 == 0) {
    0x00035338 add.w lr, lr, 1                                   |         lr++;
                                                                 | label_7:
    0x0003533c cmp r2, r1                                        |         
                                                                 |         if (r2 == r1) {
    0x0003533e beq 0x353d0                                       |             goto label_36;
                                                                 |         }
    0x00035340 add.w r3, ip, r2                                  |         r3 = ip + r2;
    0x00035344 ldrb r0, [r2, 1]!                                 |         r0 = *((r2 += 1));
    0x00035348 cmp r0, 0                                         |         
    0x0003534a beq 0x35338                                       |         
                                                                 |     }
    0x0003534c cmp r0, 1                                         |     
                                                                 |     if (r0 == 1) {
    0x0003534e beq 0x3533c                                       |         goto label_7;
                                                                 |     }
    0x00035350 ldr r2, [pc, 0x1c4]                               |     
    0x00035352 movs r1, 0                                        |     r1 = 0;
    0x00035354 mov r0, r5                                        |     r0 = r5;
    0x00035356 str r4, [sp]                                      |     *(sp) = r4;
    0x00035358 str.w lr, [sp, 0x30]                              |     __asm ("str.w lr, [var_30h_2]");
    0x0003535c add r2, pc                                        |     r2 = 0x6a878;
    0x0003535e bl 0x34c14                                        |     fcn_00034c14 (r0, r1, r2);
                                                                 | label_10:
    0x00035362 ldr r3, [sp, 0x20]                                |     r3 = var_20h_2;
    0x00035364 ldr r2, [sp, 0x30]                                |     r2 = var_30h_2;
    0x00035366 ldrb r3, [r3, 7]                                  |     r3 = *((r3 + 7));
    0x00035368 cmp r3, r2                                        |     
                                                                 |     if (r3 != r2) {
    0x0003536a bne 0x353bc                                       |         goto label_37;
                                                                 |     }
                                                                 |     do {
                                                                 | label_9:
    0x0003536c mov r0, r8                                        |         r0 = r8;
    0x0003536e bl 0x11040                                        |         fcn_00011040 (r0);
    0x00035372 ldr r0, [r6, 0x44]                                |         r0 = *((r6 + 0x44));
    0x00035374 bl 0x2bd94                                        |         fcn_0002bd94 (r0);
    0x00035378 b 0x34fec                                         |         goto label_2;
                                                                 | label_29:
    0x0003537a movs r3, 1                                        |         r3 = 1;
    0x0003537c str r3, [r5, 0x18]                                |         *((r5 + 0x18)) = r3;
    0x0003537e b 0x3536c                                         |         
                                                                 |     } while (1);
                                                                 | label_28:
    0x00035380 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00035382 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00035384 beq 0x3546a                                       |         goto label_38;
                                                                 |     }
    0x00035386 ldr r1, [sp, 0x18]                                |     r1 = var_18h_3;
    0x00035388 ldrd r2, r3, [r3]                                 |     __asm ("ldrd r2, r3, [r3]");
    0x0003538c cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0003538e beq.w 0x3549a                                     |         goto label_39;
                                                                 |     }
    0x00035392 ldrd r0, r1, [sp, 0x40]                           |     __asm ("ldrd r0, r1, [var_40h]");
    0x00035396 cmp r2, r0                                        |     
    0x00035398 sbcs.w ip, r3, r1                                 |     __asm ("sbcs.w ip, r3, r1");
                                                                 |     if (r2 >= r0) {
    0x0003539c bge.w 0x354d8                                     |         goto label_40;
                                                                 |     }
                                                                 | label_16:
    0x000353a0 ldr r3, [sp, 0x18]                                |     r3 = var_18h_3;
    0x000353a2 ldrd r0, r1, [r3]                                 |     __asm ("ldrd r0, r1, [r3]");
    0x000353a6 ldrd r2, r3, [sp, 0x48]                           |     __asm ("ldrd r2, r3, [var_48h]");
    0x000353aa cmp r0, r2                                        |     
    0x000353ac sbcs.w ip, r1, r3                                 |     __asm ("sbcs.w ip, r1, r3");
                                                                 |     if (r0 < r2) {
    0x000353b0 blt.w 0x354be                                     |         goto label_41;
                                                                 |     }
                                                                 | label_15:
    0x000353b4 ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x000353b6 strd r2, r3, [r1]                                 |     __asm ("strd r2, r3, [r1]");
    0x000353ba b 0x3518a                                         |     goto label_8;
                                                                 | label_37:
    0x000353bc strd r3, r4, [sp]                                 |     __asm ("strd r3, r4, [sp]");
    0x000353c0 mov r3, r2                                        |     r3 = r2;
    0x000353c2 ldr r2, [pc, 0x158]                               |     
    0x000353c4 mov r0, r5                                        |     r0 = r5;
    0x000353c6 movs r1, 0                                        |     r1 = 0;
    0x000353c8 add r2, pc                                        |     r2 = 0x6a8ea;
    0x000353ca bl 0x34c14                                        |     fcn_00034c14 (r0, r1, r2);
    0x000353ce b 0x3536c                                         |     goto label_9;
                                                                 | label_36:
    0x000353d0 str.w lr, [sp, 0x30]                              |     __asm ("str.w lr, [var_30h_2]");
    0x000353d4 b 0x35362                                         |     goto label_10;
                                                                 | label_27:
    0x000353d6 ldrb r2, [r6, 5]                                  |     r2 = *((r6 + 5));
    0x000353d8 mov r1, r8                                        |     r1 = r8;
    0x000353da ldr r3, [r6, 0x38]                                |     r3 = *((r6 + 0x38));
    0x000353dc movs r0, 0x64                                     |     r0 = 0x64;
    0x000353de add r3, r2                                        |     r3 += r2;
    0x000353e0 ldr r2, [pc, 0x13c]                               |     
    0x000353e2 ldr.w sb, [r3, 8]                                 |     sb = *((r3 + 8));
    0x000353e6 mov r3, r4                                        |     r3 = r4;
    0x000353e8 add r2, pc                                        |     r2 = 0x6a90c;
    0x000353ea blx 0x6658                                        |     fcn_00006658 ();
    0x000353ee ldrb.w r3, [sl, 0x11]                             |     r3 = *((sl + 0x11));
    0x000353f2 rev.w sb, sb                                      |     sb = SWAP32 (sb);
                                                                 |     if (r3 != 0) {
    0x000353f6 cbnz r3, 0x35458                                  |         goto label_42;
                                                                 |     }
                                                                 | label_14:
    0x000353f8 ldrh r3, [r6, 0x10]                               |     r3 = *((r6 + 0x10));
                                                                 |     if (r3 != 0) {
    0x000353fa cbz r3, 0x353fe                                   |         
    0x000353fc add r3, sp, 0x48                                  |         r3 += var_48h;
                                                                 |     }
    0x000353fe str r3, [sp]                                      |     *(sp) = r3;
    0x00035400 mov r1, sb                                        |     r1 = sb;
    0x00035402 movs r3, 0                                        |     r3 = 0;
    0x00035404 mov r2, r8                                        |     r2 = r8;
    0x00035406 mov r0, r5                                        |     r0 = r5;
    0x00035408 bl 0x34f98                                        |     fcn_00034f98 (r0, r1, r2, r3, r4, r5, r6);
    0x0003540c ldrb r3, [r6, 3]                                  |     r3 = *((r6 + 3));
    0x0003540e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00035410 beq.w 0x3518a                                     |         goto label_8;
                                                                 |     }
    0x00035414 b 0x35182                                         |     goto label_11;
                                                                 | label_33:
    0x00035416 strd r1, r2, [sp]                                 |     __asm ("strd r1, r2, [sp]");
    0x0003541a mov r1, r8                                        |     r1 = r8;
    0x0003541c ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x0003541e strd r3, r0, [sp, 8]                              |     __asm ("strd r3, r0, [sp, 8]");
    0x00035422 mov r0, sl                                        |     r0 = sl;
    0x00035424 bl 0x34c14                                        |     fcn_00034c14 (r0, r1, r2);
    0x00035428 ldrd r1, r2, [sp, 0x50]                           |     __asm ("ldrd r1, r2, [var_50h_2]");
    0x0003542c b 0x352be                                         |     goto label_12;
                                                                 | label_24:
    0x0003542e mov r3, fp                                        |     r3 = fp;
    0x00035430 movs r2, 3                                        |     r2 = 3;
    0x00035432 mov r0, sl                                        |     r0 = sl;
    0x00035434 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x00035438 str r1, [sp, 0x34]                                |     var_34h = r1;
    0x0003543a bl 0x34d20                                        |     fcn_00034d20 (r0, r1, r2, r3, r4, r5, r6);
    0x0003543e ldr r1, [sp, 0x34]                                |     r1 = var_34h;
    0x00035440 b 0x35118                                         |     goto label_13;
                                                                 | label_19:
    0x00035442 ldr r2, [pc, 0xe0]                                |     
    0x00035444 mov r0, r5                                        |     r0 = r5;
    0x00035446 ldr r3, [sp, 0x30]                                |     r3 = var_30h_2;
    0x00035448 mov r1, r8                                        |     r1 = r8;
    0x0003544a add r2, pc                                        |     r2 = 0x6a974;
    0x0003544c bl 0x34c14                                        |     fcn_00034c14 (r0, r1, r2);
    0x00035450 ldr r0, [r6, 0x44]                                |     r0 = *((r6 + 0x44));
    0x00035452 bl 0x2bd94                                        |     fcn_0002bd94 (r0);
    0x00035456 b 0x34fec                                         |     goto label_2;
                                                                 | label_42:
    0x00035458 mov r3, r4                                        |     r3 = r4;
    0x0003545a movs r2, 5                                        |     r2 = 5;
    0x0003545c mov r1, sb                                        |     r1 = sb;
    0x0003545e mov r0, r5                                        |     r0 = r5;
    0x00035460 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x00035464 bl 0x34d20                                        |     fcn_00034d20 (r0, r1, r2, r3, r4, r5, r6);
    0x00035468 b 0x353f8                                         |     goto label_14;
                                                                 | label_38:
    0x0003546a ldr r3, [sp, 0x18]                                |     r3 = var_18h_3;
    0x0003546c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0003546e beq.w 0x3518a                                     |         goto label_8;
                                                                 |     }
    0x00035472 ldrd r0, r1, [r3]                                 |     __asm ("ldrd r0, r1, [r3]");
    0x00035476 ldrd r2, r3, [sp, 0x40]                           |     __asm ("ldrd r2, r3, [var_40h]");
    0x0003547a cmp r0, r2                                        |     
    0x0003547c sbcs.w ip, r1, r3                                 |     __asm ("sbcs.w ip, r1, r3");
                                                                 |     if (r0 < r2) {
    0x00035480 blt.w 0x3518a                                     |         goto label_8;
                                                                 |     }
    0x00035484 strd r2, r3, [sp]                                 |     __asm ("strd r2, r3, [sp]");
    0x00035488 ldr r2, [pc, 0x9c]                                |     
    0x0003548a strd r0, r1, [sp, 8]                              |     __asm ("strd r0, r1, [sp, 8]");
    0x0003548e mov r1, r8                                        |     r1 = r8;
    0x00035490 mov r0, r5                                        |     r0 = r5;
    0x00035492 add r2, pc                                        |     r2 = 0x6a9be;
    0x00035494 bl 0x34c14                                        |     fcn_00034c14 (r0, r1, r2);
    0x00035498 b 0x3518a                                         |     goto label_8;
                                                                 | label_39:
    0x0003549a ldrd r0, r1, [sp, 0x48]                           |     __asm ("ldrd r0, r1, [var_48h]");
    0x0003549e cmp r2, r0                                        |     
    0x000354a0 sbcs.w ip, r3, r1                                 |     __asm ("sbcs.w ip, r3, r1");
                                                                 |     if (r2 >= r0) {
    0x000354a4 bge.w 0x3518a                                     |         goto label_8;
                                                                 |     }
    0x000354a8 strd r2, r3, [sp, 8]                              |     __asm ("strd r2, r3, [sp, 8]");
    0x000354ac ldr r2, [pc, 0x7c]                                |     
    0x000354ae strd r0, r1, [sp]                                 |     __asm ("strd r0, r1, [sp]");
    0x000354b2 mov r1, r8                                        |     r1 = r8;
    0x000354b4 mov r0, r5                                        |     r0 = r5;
    0x000354b6 add r2, pc                                        |     r2 = 0x6a9e6;
    0x000354b8 bl 0x34c14                                        |     fcn_00034c14 (r0, r1, r2);
    0x000354bc b 0x3518a                                         |     goto label_8;
                                                                 | label_41:
    0x000354be strd r2, r3, [sp]                                 |     __asm ("strd r2, r3, [sp]");
    0x000354c2 ldr r2, [pc, 0x6c]                                |     
    0x000354c4 strd r0, r1, [sp, 8]                              |     __asm ("strd r0, r1, [sp, 8]");
    0x000354c8 mov r1, r8                                        |     r1 = r8;
    0x000354ca mov r0, r5                                        |     r0 = r5;
    0x000354cc add r2, pc                                        |     r2 = 0x6aa02;
    0x000354ce bl 0x34c14                                        |     fcn_00034c14 (r0, r1, r2);
    0x000354d2 ldrd r2, r3, [sp, 0x48]                           |     __asm ("ldrd r2, r3, [var_48h]");
    0x000354d6 b 0x353b4                                         |     goto label_15;
                                                                 | label_40:
    0x000354d8 strd r2, r3, [sp, 8]                              |     __asm ("strd r2, r3, [sp, 8]");
    0x000354dc ldr r2, [pc, 0x54]                                |     
    0x000354de strd r0, r1, [sp]                                 |     __asm ("strd r0, r1, [sp]");
    0x000354e2 mov r1, r8                                        |     r1 = r8;
    0x000354e4 mov r0, r5                                        |     r0 = r5;
    0x000354e6 add r2, pc                                        |     r2 = 0x6aa1e;
    0x000354e8 bl 0x34c14                                        |     fcn_00034c14 (r0, r1, r2);
    0x000354ec b 0x353a0                                         |     goto label_16;
                                                                 | label_17:
    0x000354ee blx 0x6498                                        |     fcn_00006498 ();
    0x000354f2 nop                                               |     
    0x000354f4 cmp r4, 0xa8                                      |     
    0x000354f6 movs r4, r0                                       |     r4 = r0;
    0x000354f8 lsls r0, r1, 0xe                                  |     r0 = r1 << 0xe;
    0x000354fa movs r0, r0                                       |     
    0x000354fc add r4, sp, 0x1e0                                 |     r4 += arg_1e0h;
    0x000354fe movs r2, r0                                       |     r2 = r0;
    0x00035500 cmp r4, 0x64                                      |     
    0x00035502 movs r4, r0                                       |     r4 = r0;
    0x00035504 add r4, sp, 0x10                                  |     r4 += var_10h_2;
    0x00035506 movs r2, r0                                       |     r2 = r0;
    0x00035508 add r4, sp, 0x58                                  |     r4 += var_58h;
    0x0003550a movs r2, r0                                       |     r2 = r0;
    0x0003550c add r4, sp, 0xe8                                  |     r4 += var_e8h;
    0x0003550e movs r2, r0                                       |     r2 = r0;
    0x00035510 add r3, sp, 0x3c8                                 |     r3 += arg_3c8h;
    0x00035512 movs r2, r0                                       |     r2 = r0;
    0x00035514 add r1, sp, 0x330                                 |     r1 += arg_330h;
    0x00035516 movs r2, r0                                       |     r2 = r0;
    0x00035518 add r2, sp, 0x310                                 |     r2 += arg_310h;
    0x0003551a movs r2, r0                                       |     r2 = r0;
    0x0003551c add r2, sp, 0x200                                 |     r2 += arg_200h;
    0x0003551e movs r2, r0                                       |     r2 = r0;
    0x00035520 add r0, sp, 0x3e0                                 |     r0 += arg_3e0h;
    0x00035522 movs r2, r0                                       |     r2 = r0;
    0x00035524 add r2, sp, 0xc8                                  |     r2 += var_c8h;
    0x00035526 movs r2, r0                                       |     r2 = r0;
    0x00035528 add r1, sp, 0x98                                  |     r1 += var_98h;
    0x0003552a movs r2, r0                                       |     r2 = r0;
    0x0003552c add r0, sp, 0x118                                 |     r0 += var_18h_2;
    0x0003552e movs r2, r0                                       |     r2 = r0;
    0x00035530 add r0, sp, 0x2b0                                 |     r0 += arg_2b0h;
    0x00035532 movs r2, r0                                       |     r2 = r0;
    0x00035534 add r0, sp, 0x158                                 |     r0 += var_158h;
    0x00035536 movs r2, r0                                       |     r2 = r0;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x35d90 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00035d90 ()                                      | void fcn_00035d90 (int16_t arg_bp_40h, int16_t arg_40h, int16_t arg_44h, 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;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00035d90 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x00035d94 sub sp, 0x1c                                      |     
    0x00035d96 ldr r7, [r2]                                      |     r7 = *(r2);
    0x00035d98 mov sb, r0                                        |     sb = r0;
    0x00035d9a mov r4, r1                                        |     r4 = r1;
    0x00035d9c str r2, [sp]                                      |     *(sp) = r2;
    0x00035d9e str r3, [sp, 4]                                   |     var_4h = r3;
    0x00035da0 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00035da2 beq.w 0x35fd8                                     |         goto label_23;
                                                                 |     }
    0x00035da6 ldrb r5, [r1]                                     |     r5 = *(r1);
    0x00035da8 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00035daa beq.w 0x36166                                     |         goto label_24;
                                                                 |     }
    0x00035dae and r0, r7, 0x40                                  |     r0 = r7 & 0x40;
    0x00035db2 mov r3, r1                                        |     r3 = r1;
                                                                 |     do {
    0x00035db4 ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x00035db8 cmp r2, 0                                         |         
    0x00035dba bne 0x35db4                                       |         
                                                                 |     } while (r2 != 0);
    0x00035dbc subs r3, r3, r4                                   |     r3 -= r4;
    0x00035dbe bic r5, r3, 0xc0000000                            |     r5 = BIT_MASK (r3, 0xc0000000);
    0x00035dc2 adds r6, r5, 2                                    |     r6 = r5 + 2;
                                                                 |     if (r0 == 0) {
    0x00035dc4 cbz r0, 0x35e1e                                   |         goto label_25;
                                                                 |     }
    0x00035dc6 cmp r5, 4                                         |     
                                                                 |     if (r5 <= 4) {
    0x00035dc8 ble 0x35dda                                       |         goto label_1;
                                                                 |     }
                                                                 | label_0:
    0x00035dca ldr.w r1, [pc, 0x484]                             |     r1 = *(0x00036250);
    0x00035dce movs r2, 5                                        |     r2 = 5;
    0x00035dd0 mov r0, r4                                        |     r0 = r4;
    0x00035dd2 add r1, pc                                        |     r1 += pc;
    0x00035dd4 blx 0x5e6c                                        |     r0 = fcn_00005e6c ();
                                                                 |     if (r0 == 0) {
    0x00035dd8 cbz r0, 0x35e30                                   |         goto label_26;
                                                                 |     }
                                                                 |     do {
                                                                 | label_1:
    0x00035dda mov r0, r6                                        |         r0 = r6;
    0x00035ddc blx 0x62b8                                        |         r0 = fcn_000062b8 ();
    0x00035de0 mov r6, r0                                        |         r6 = r0;
    0x00035de2 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00035de4 beq.w 0x35fce                                     |             goto label_27;
                                                                 |         }
    0x00035de8 mov r2, r5                                        |         r2 = r5;
    0x00035dea mov r1, r4                                        |         r1 = r4;
    0x00035dec blx 0x6214                                        |         fcn_00006214 ();
    0x00035df0 bic r7, r7, 0x40                                  |         r7 = BIT_MASK (r7, 0x40);
    0x00035df4 movs r3, 0                                        |         r3 = 0;
    0x00035df6 strb r3, [r6, r5]                                 |         *((r6 + r5)) = r3;
    0x00035df8 add r5, r6                                        |         r5 += r6;
    0x00035dfa strb r3, [r5, 1]                                  |         *((r5 + 1)) = r3;
                                                                 | label_6:
    0x00035dfc mov r0, sb                                        |         r0 = sb;
    0x00035dfe movs r4, 0                                        |         r4 = 0;
    0x00035e00 blx 0x6310                                        |         fcn_00006310 ();
    0x00035e04 ldr r3, [sp, 4]                                   |         r3 = var_4h;
    0x00035e06 str r0, [r3]                                      |         *(r3) = r0;
    0x00035e08 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00035e0a beq.w 0x35fde                                     |             goto label_28;
                                                                 |         }
                                                                 | label_5:
    0x00035e0e ldr r3, [sp]                                      |         r3 = *(sp);
    0x00035e10 mov r0, r4                                        |         r0 = r4;
    0x00035e12 str r7, [r3]                                      |         *(r3) = r7;
    0x00035e14 ldr r3, [sp, 0x40]                                |         r3 = *(arg_40h);
    0x00035e16 str r6, [r3]                                      |         *(r3) = r6;
    0x00035e18 add sp, 0x1c                                      |         
    0x00035e1a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_25:
    0x00035e1e ldr.w r3, [pc, 0x434]                             |         r3 = *(0x00036254);
    0x00035e22 add r3, pc                                        |         r3 += pc;
    0x00035e24 ldr r3, [r3, 0xc]                                 |         r3 = *((r3 + 0xc));
    0x00035e26 cmp r3, 0                                         |         
    0x00035e28 beq 0x35dda                                       |         
                                                                 |     } while (r3 == 0);
    0x00035e2a cmp r5, 4                                         |     
                                                                 |     if (r5 > 4) {
    0x00035e2c bgt 0x35dca                                       |         goto label_0;
                                                                 |     }
    0x00035e2e b 0x35dda                                         |     goto label_1;
                                                                 | label_26:
    0x00035e30 subs r3, r4, 1                                    |     r3 = r4 - 1;
    0x00035e32 orr r7, r7, 0x40                                  |     r7 |= 0x40;
    0x00035e36 add r5, r3                                        |     r5 += r3;
                                                                 |     do {
    0x00035e38 ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x00035e3c cmp r2, 0x26                                      |         
    0x00035e3e it eq                                             |         
                                                                 |         if (r2 != 0x26) {
    0x00035e40 addeq r6, 1                                       |             r6++;
                                                                 |         }
    0x00035e42 cmp r5, r3                                        |         
    0x00035e44 bne 0x35e38                                       |         
                                                                 |     } while (r5 != r3);
    0x00035e46 mov r0, r6                                        |     r0 = r6;
    0x00035e48 blx 0x62b8                                        |     r0 = fcn_000062b8 ();
    0x00035e4c mov r6, r0                                        |     r6 = r0;
    0x00035e4e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00035e50 beq.w 0x35fce                                     |         goto label_27;
                                                                 |     }
    0x00035e54 ldrb r3, [r4, 5]                                  |     r3 = *((r4 + 5));
    0x00035e56 cmp r3, 0x2f                                      |     
                                                                 |     if (r3 == 0x2f) {
    0x00035e58 beq.w 0x361aa                                     |         goto label_29;
                                                                 |     }
    0x00035e5c movs r2, 5                                        |     r2 = 5;
    0x00035e5e subs r0, r3, 0                                    |     r0 = r3 - 0;
    0x00035e60 it ne                                             |     
                                                                 |     if (r0 == r3) {
    0x00035e62 movne r0, 1                                       |         r0 = 1;
                                                                 |     }
    0x00035e64 mov r5, r2                                        |     r5 = r2;
                                                                 | label_21:
    0x00035e66 cmp r3, 0x23                                      |     
    0x00035e68 ite eq                                            |     
                                                                 |     if (r3 != 0x23) {
    0x00035e6a moveq r0, 0                                       |         r0 = 0;
                                                                 |     }
                                                                 |     if (r3 == 0x23) {
    0x00035e6c andne r0, r0, 1                                   |         r0 &= 1;
                                                                 |     }
    0x00035e70 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00035e72 beq.w 0x3621c                                     |         goto label_30;
                                                                 |     }
                                                                 | label_20:
    0x00035e76 ldr r0, [pc, 0x3e0]                               |     
    0x00035e78 movs r1, 0                                        |     r1 = 0;
    0x00035e7a mov ip, r1                                        |     
    0x00035e7c add r0, pc                                        |     r0 = 0x6c0da;
    0x00035e7e str r0, [sp, 0x10]                                |     var_10h = r0;
    0x00035e80 rsb.w r0, r4, 2                                   |     r0 = 2 - r4;
    0x00035e84 strd r7, r0, [sp, 8]                              |     __asm ("strd r7, r0, [var_8h]");
    0x00035e88 ldr r7, [sp, 0x10]                                |     r7 = var_10h;
    0x00035e8a b 0x35ebe                                         |     
                                                                 |     while (r3 != 0x25) {
    0x00035e8c cmp.w ip, 1                                       |         
                                                                 |         if (ip == 1) {
    0x00035e90 beq.w 0x35f9c                                     |             goto label_31;
                                                                 |         }
    0x00035e94 cmp.w ip, 0                                       |         
    0x00035e98 it eq                                             |         
                                                                 |         if (ip == 0) {
    0x00035e9a cmpeq r3, 0x3f                                    |             __asm ("cmpeq r3, 0x3f");
                                                                 |         }
    0x00035e9c itt eq                                            |         
                                                                 |         if (ip != 0) {
    0x00035e9e moveq r3, 0                                       |             r3 = 0;
                                                                 |         }
                                                                 |         if (ip != 0) {
    0x00035ea0 moveq ip, 1                                       |             
                                                                 |         }
                                                                 |         if (ip != 0) {
    0x00035ea4 bne 0x35f82                                       |             goto label_32;
                                                                 |         }
                                                                 | label_2:
    0x00035ea6 mov r2, r0                                        |         r2 = r0;
    0x00035ea8 adds r1, 1                                        |         r1++;
    0x00035eaa mov r5, r0                                        |         r5 = r0;
    0x00035eac strb.w r3, [r6, r8]                               |         *((r6 + r8)) = r3;
                                                                 | label_4:
    0x00035eb0 ldrb.w r3, [lr]                                   |         r3 = *(lr);
    0x00035eb4 cmp r3, 0                                         |         
    0x00035eb6 it ne                                             |         
                                                                 |         if (r3 != 0) {
    0x00035eb8 cmpne r3, 0x23                                    |             __asm ("cmpne r3, 0x23");
                                                                 |         }
                                                                 |         if (r3 == 0) {
    0x00035eba beq.w 0x35ffa                                     |             goto label_33;
                                                                 |         }
    0x00035ebe cmp r3, 0x25                                      |         
    0x00035ec0 add.w r0, r5, 1                                   |         r0 = r5 + 1;
    0x00035ec4 mov r8, r1                                        |         r8 = r1;
    0x00035ec6 add.w lr, r4, r0                                  |         lr = r4 + r0;
    0x00035eca bne 0x35e8c                                       |         
                                                                 |     }
    0x00035ecc ldrb.w sl, [r4, r0]                               |     sl = *((r4 + r0));
    0x00035ed0 add.w fp, r7, sl                                  |     
    0x00035ed4 ldrb.w fp, [fp, 0x40]                             |     fp = *(arg_bp_40h);
    0x00035ed8 tst.w fp, 8                                       |     
                                                                 |     if ((fp & 8) == 0) {
    0x00035edc beq 0x35f7c                                       |         goto label_34;
                                                                 |     }
    0x00035ede add r2, r4                                        |     r2 += r4;
    0x00035ee0 ldrb r2, [r2, 2]                                  |     r2 = *((r2 + 2));
    0x00035ee2 add.w fp, r7, r2                                  |     
    0x00035ee6 ldrb.w fp, [fp, 0x40]                             |     fp = *(arg_bp_40h);
    0x00035eea tst.w fp, 8                                       |     
                                                                 |     if ((fp & 8) == 0) {
    0x00035eee beq 0x35f7c                                       |         goto label_34;
                                                                 |     }
    0x00035ef0 ubfx r0, r2, 6, 1                                 |     r0 = (r2 >> 6) & ((1 << 1) - 1);
    0x00035ef4 ubfx r3, sl, 6, 1                                 |     r3 = (sl >> 6) & ((1 << 1) - 1);
    0x00035ef8 add.w r0, r0, r0, lsl 3                           |     r0 += (r0 << 3);
    0x00035efc add.w r3, r3, r3, lsl 3                           |     r3 += (r3 << 3);
    0x00035f00 add r2, r0                                        |     r2 += r0;
    0x00035f02 add r3, sl                                        |     r3 += sl;
    0x00035f04 and r3, r3, 0xf                                   |     r3 &= 0xf;
    0x00035f08 and r2, r2, 0xf                                   |     r2 &= 0xf;
    0x00035f0c adds.w r3, r2, r3, lsl 4                          |     r3 = r2 + (r3 << 4);
    0x00035f10 add.w r0, r5, 3                                   |     r0 = r5 + 3;
    0x00035f14 add.w lr, r4, r0                                  |     lr = r4 + r0;
    0x00035f18 it ne                                             |     
                                                                 |     if (r3 == r2) {
    0x00035f1a uxtbne r3, r3                                     |         __asm ("uxtbne r3, r3");
                                                                 |         goto label_35;
                                                                 |     }
                                                                 |     if (r3 != r2) {
                                                                 | label_35:
    0x00035f1c bne 0x35ea6                                       |         goto label_2;
                                                                 |     }
    0x00035f1e ldrb r3, [r4, r0]                                 |     r3 = *((r4 + r0));
    0x00035f20 cmp r3, 0                                         |     
    0x00035f22 it ne                                             |     
                                                                 |     if (r3 != 0) {
    0x00035f24 cmpne r3, 0x23                                    |         __asm ("cmpne r3, 0x23");
                                                                 |     }
                                                                 |     if (r3 == 0) {
    0x00035f26 beq 0x35ffa                                       |         goto label_33;
                                                                 |     }
    0x00035f28 adds r0, r5, 4                                    |     r0 = r5 + 4;
    0x00035f2a subs.w r8, ip, 0                                  |     r8 = ip - 0;
    0x00035f2e add r0, r4                                        |     r0 += r4;
    0x00035f30 it ne                                             |     
                                                                 |     if (r8 == ip) {
    0x00035f32 movne r8, 1                                       |         r8 = 1;
                                                                 |     }
    0x00035f36 b 0x35f50                                         |     
                                                                 |     while (ip != 1) {
    0x00035f38 cmp r3, 0x26                                      |         
    0x00035f3a it eq                                             |         
                                                                 |         if (r3 == 0x26) {
    0x00035f3c cmpeq ip, 2                                       |             __asm ("cmpeq ip, 2");
                                                                 |         }
                                                                 |         if (r3 == 0x26) {
    0x00035f40 beq.w 0x36244                                     |             goto label_36;
                                                                 |         }
                                                                 | label_3:
    0x00035f44 ldrb r3, [r0], 1                                  |         r3 = *(r0);
                                                                 |         r0++;
    0x00035f48 cmp r3, 0                                         |         
    0x00035f4a it ne                                             |         
                                                                 |         if (r3 != 0) {
    0x00035f4c cmpne r3, 0x23                                    |             __asm ("cmpne r3, 0x23");
                                                                 |         }
                                                                 |         if (r3 == 0) {
    0x00035f4e beq 0x35ffa                                       |             goto label_33;
                                                                 |         }
    0x00035f50 subs r2, r0, r4                                   |         r2 = r0 - r4;
    0x00035f52 cmp r3, 0x3f                                      |         
    0x00035f54 ite eq                                            |         
                                                                 |         if (r3 != 0x3f) {
    0x00035f56 moveq lr, r8                                      |             lr = r8;
                                                                 |         }
                                                                 |         if (r3 == 0x3f) {
    0x00035f58 orrne lr, r8, 1                                   |             lr = r8 | 1;
                                                                 |         }
    0x00035f5c subs r2, 1                                        |         r2--;
    0x00035f5e mov r5, r2                                        |         r5 = r2;
    0x00035f60 cmp.w lr, 0                                       |         
                                                                 |         if (lr == 0) {
    0x00035f64 beq.w 0x3623c                                     |             goto label_37;
                                                                 |         }
    0x00035f68 cmp.w ip, 1                                       |         
    0x00035f6c bne 0x35f38                                       |         
                                                                 |     }
    0x00035f6e cmp r3, 0x3d                                      |     
    0x00035f70 it ne                                             |     
                                                                 |     if (r3 == 0x3d) {
    0x00035f72 cmpne r3, 0x26                                    |         __asm ("cmpne r3, 0x26");
                                                                 |         goto label_38;
                                                                 |     }
                                                                 |     if (r3 != 0x3d) {
                                                                 | label_38:
    0x00035f74 bne 0x35f44                                       |         goto label_3;
                                                                 |     }
                                                                 | label_17:
    0x00035f76 add.w lr, r4, r2                                  |     lr = r4 + r2;
    0x00035f7a b 0x35eb0                                         |     goto label_4;
                                                                 | label_34:
    0x00035f7c cmp.w ip, 1                                       |     
                                                                 |     if (ip == 1) {
    0x00035f80 beq 0x35ea6                                       |         goto label_2;
                                                                 |     }
                                                                 | label_32:
    0x00035f82 cmp.w ip, 2                                       |     
    0x00035f86 it eq                                             |     
                                                                 |     if (ip == 2) {
    0x00035f88 cmpeq r3, 0x26                                    |         __asm ("cmpeq r3, 0x26");
                                                                 |     }
    0x00035f8a ite eq                                            |     
                                                                 |     if (ip != 2) {
    0x00035f8c moveq r2, 1                                       |         r2 = 1;
                                                                 |     }
                                                                 |     if (ip == 2) {
    0x00035f8e movne r2, 0                                       |         r2 = 0;
                                                                 |     }
    0x00035f90 cmp r2, 0                                         |     
    0x00035f92 itt ne                                            |     
                                                                 |     if (r2 == 0) {
    0x00035f94 movne r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r2 == 0) {
    0x00035f96 movne ip, 1                                       |         
                                                                 |     }
    0x00035f9a b 0x35ea6                                         |     goto label_2;
                                                                 | label_31:
    0x00035f9c cmp r3, 0x3d                                      |     
    0x00035f9e it ne                                             |     
                                                                 |     if (r3 == 0x3d) {
    0x00035fa0 cmpne r3, 0x26                                    |         __asm ("cmpne r3, 0x26");
                                                                 |         goto label_39;
                                                                 |     }
                                                                 |     if (r3 != 0x3d) {
                                                                 | label_39:
    0x00035fa2 bne 0x35ea6                                       |         goto label_2;
                                                                 |     }
    0x00035fa4 add.w sl, r6, r1                                  |     sl = r6 + r1;
    0x00035fa8 ldrb r2, [sl, -0x1]                               |     r2 = *((sl - 0x1));
    0x00035fac cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00035fae beq.w 0x3616a                                     |         goto label_40;
                                                                 |     }
    0x00035fb2 cmp r3, 0x26                                      |     
    0x00035fb4 itt ne                                            |     
                                                                 |     if (r3 == 0x26) {
    0x00035fb6 movne r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r3 != 0x26) {
    0x00035fb8 movne ip, 2                                       |         goto label_41;
                                                                 |     }
                                                                 |     if (r3 != 0x26) {
                                                                 | label_41:
    0x00035fbc bne.w 0x35ea6                                     |         goto label_2;
                                                                 |     }
    0x00035fc0 mov.w r3, 0                                       |     r3 = 0;
    0x00035fc4 strb r3, [r6, r1]                                 |     *((r6 + r1)) = r3;
    0x00035fc6 adds r1, 1                                        |     r1++;
    0x00035fc8 mov r8, r1                                        |     r8 = r1;
    0x00035fca movs r3, 0                                        |     r3 = 0;
    0x00035fcc b 0x35ea6                                         |     goto label_2;
                                                                 | label_27:
    0x00035fce movs r4, 7                                        |     r4 = 7;
    0x00035fd0 mov r0, r4                                        |     r0 = r4;
    0x00035fd2 add sp, 0x1c                                      |     
    0x00035fd4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_23:
    0x00035fd8 movs r6, 2                                        |     r6 = 2;
    0x00035fda mov r5, r1                                        |     r5 = r1;
    0x00035fdc b 0x35dda                                         |     goto label_1;
                                                                 | label_28:
    0x00035fde ldr r0, [pc, 0x27c]                               |     
    0x00035fe0 mov r1, sb                                        |     r1 = sb;
    0x00035fe2 movs r4, 1                                        |     r4 = 1;
    0x00035fe4 add r0, pc                                        |     r0 = 0x6c246;
    0x00035fe6 blx 0x6268                                        |     r0 = fcn_00006268 ();
    0x00035fea mov r3, r0                                        |     r3 = r0;
                                                                 | label_11:
    0x00035fec ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x00035fee mov r0, r6                                        |     r0 = r6;
    0x00035ff0 movs r6, 0                                        |     r6 = 0;
    0x00035ff2 str r3, [r2]                                      |     *(r2) = r3;
    0x00035ff4 blx 0x6050                                        |     fcn_00006050 ();
    0x00035ff8 b 0x35e0e                                         |     goto label_5;
                                                                 | label_33:
    0x00035ffa cmp.w ip, 1                                       |     
    0x00035ffe add.w r3, r1, 1                                   |     r3 = r1 + 1;
    0x00036002 ldr r7, [sp, 8]                                   |     r7 = var_8h;
    0x00036004 add.w sl, r6, r1                                  |     sl = r6 + r1;
    0x00036008 mov r2, r3                                        |     r2 = r3;
                                                                 |     if (ip == 1) {
    0x0003600a beq.w 0x3619c                                     |         goto label_42;
                                                                 |     }
                                                                 | label_19:
    0x0003600e movs r3, 0                                        |     r3 = 0;
    0x00036010 strb.w r3, [sl]                                   |     *(sl) = r3;
    0x00036014 strb r3, [r6, r2]                                 |     *((r6 + r2)) = r3;
    0x00036016 ldrb r3, [r6]                                     |     r3 = *(r6);
    0x00036018 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0003601a beq.w 0x36218                                     |         goto label_43;
                                                                 |     }
    0x0003601e mov r3, r6                                        |     r3 = r6;
                                                                 |     do {
    0x00036020 ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x00036024 cmp r2, 0                                         |         
    0x00036026 bne 0x36020                                       |         
                                                                 |     } while (r2 != 0);
    0x00036028 subs r1, r3, r6                                   |     r1 = r3 - r6;
    0x0003602a bic r1, r1, 0xc0000000                            |     r1 = BIT_MASK (r1, 0xc0000000);
    0x0003602e adds r1, 1                                        |     r1++;
                                                                 | label_22:
    0x00036030 ldrb r3, [r6, r1]                                 |     r3 = *((r6 + r1));
    0x00036032 add r1, r6                                        |     r1 += r6;
    0x00036034 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00036036 beq.w 0x35dfc                                     |         goto label_6;
                                                                 |     }
    0x0003603a ldr r3, [pc, 0x224]                               |     
    0x0003603c ldr.w fp, [pc, 0x224]                             |     
    0x00036040 str r6, [sp, 8]                                   |     var_8h = r6;
    0x00036042 add r3, pc                                        |     r3 = 0x6c2a8;
    0x00036044 addw r3, r3, 0xb34                                |     __asm ("addw r3, r3, aav.0x000000ff");
    0x00036048 add fp, pc                                        |     fp = 0x6c2b0;
    0x0003604a str r3, [sp, 0x10]                                |     var_10h = r3;
    0x0003604c mov r8, fp                                        |     r8 = fp;
    0x0003604e ldr r3, [pc, 0x218]                               |     
    0x00036050 mov fp, sb                                        |     
    0x00036052 add r3, pc                                        |     r3 = 0x6c2c0;
    0x00036054 addw r3, r3, 0xb0c                                |     __asm ("addw r3, r3, aav.0x000000ff");
    0x00036058 str r3, [sp, 0x14]                                |     var_14h = r3;
                                                                 | label_7:
    0x0003605a mov r3, r1                                        |     r3 = r1;
                                                                 |     do {
    0x0003605c ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x00036060 cmp r2, 0                                         |         
    0x00036062 bne 0x3605c                                       |         
                                                                 |     } while (r2 != 0);
    0x00036064 subs r3, r3, r1                                   |     r3 -= r1;
    0x00036066 bic r2, r3, 0xc0000000                            |     r2 = BIT_MASK (r3, 0xc0000000);
    0x0003606a adds r3, r2, 1                                    |     r3 = r2 + 1;
    0x0003606c ldrb r4, [r1, r3]                                 |     r4 = *((r1 + r3));
    0x0003606e adds r6, r1, r3                                   |     r6 = r1 + r3;
                                                                 |     if (r4 == 0) {
    0x00036070 cbz r4, 0x36082                                   |         goto label_44;
                                                                 |     }
    0x00036072 mov r4, r6                                        |     r4 = r6;
                                                                 |     do {
    0x00036074 ldrb r3, [r4, 1]!                                 |         r3 = *((r4 += 1));
    0x00036078 cmp r3, 0                                         |         
    0x0003607a bne 0x36074                                       |         
                                                                 |     } while (r3 != 0);
    0x0003607c subs r4, r4, r6                                   |     r4 -= r6;
    0x0003607e bic r4, r4, 0xc0000000                            |     r4 = BIT_MASK (r4, 0xc0000000);
                                                                 | label_44:
    0x00036082 cmp r2, 3                                         |     
                                                                 |     if (r2 == 3) {
    0x00036084 beq 0x360a4                                       |         goto label_45;
                                                                 |     }
    0x00036086 cmp r2, 5                                         |     
                                                                 |     if (r2 == 5) {
    0x00036088 beq 0x360b6                                       |         goto label_46;
                                                                 |     }
    0x0003608a cmp r2, 4                                         |     
                                                                 |     if (r2 == 4) {
    0x0003608c bne 0x36094                                       |         
    0x0003608e ldrb r2, [r1]                                     |         r2 = *(r1);
    0x00036090 cmp r2, 0x6d                                      |         
                                                                 |         if (r2 == 0x6d) {
    0x00036092 beq 0x3613e                                       |             goto label_47;
                                                                 |         }
                                                                 |     }
                                                                 | label_9:
    0x00036094 adds r1, r4, 1                                    |     r1 = r4 + 1;
                                                                 | label_8:
    0x00036096 ldrb r2, [r6, r1]                                 |     r2 = *((r6 + r1));
    0x00036098 add r1, r6                                        |     r1 += r6;
    0x0003609a cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0003609c bne 0x3605a                                       |         goto label_7;
                                                                 |     }
    0x0003609e ldr r6, [sp, 8]                                   |     r6 = var_8h;
    0x000360a0 mov sb, fp                                        |     sb = fp;
    0x000360a2 b 0x35dfc                                         |     goto label_6;
                                                                 | label_45:
    0x000360a4 ldrb r2, [r1]                                     |     r2 = *(r1);
    0x000360a6 cmp r2, 0x76                                      |     
                                                                 |     if (r2 == 0x76) {
    0x000360a8 beq 0x3612a                                       |         goto label_48;
                                                                 |     }
                                                                 | label_14:
    0x000360aa movs r2, 1                                        |     r2 = 1;
                                                                 | label_15:
    0x000360ac cmp r2, 0                                         |     
    0x000360ae it eq                                             |     
                                                                 |     if (r2 != 0) {
    0x000360b0 moveq fp, r6                                      |         
                                                                 |     }
    0x000360b2 adds r1, r4, 1                                    |     r1 = r4 + 1;
    0x000360b4 b 0x36096                                         |     goto label_8;
                                                                 | label_46:
    0x000360b6 mov r0, r8                                        |     r0 = r8;
    0x000360b8 blx 0x5e6c                                        |     r0 = fcn_00005e6c ();
    0x000360bc cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000360be bne 0x36094                                       |         goto label_9;
                                                                 |     }
    0x000360c0 ldr r5, [sp, 0x10]                                |     r5 = var_10h;
    0x000360c2 mov.w sb, 0x60000                                 |     sb = 0x60000;
    0x000360c6 mov sl, sb                                        |     sl = sb;
    0x000360c8 str.w r8, [sp, 0xc]                               |     __asm ("str.w r8, [var_ch]");
                                                                 | label_16:
    0x000360cc ldr r1, [r5]                                      |     r1 = *(r5);
                                                                 |     if (r1 == 0) {
    0x000360ce cbz r1, 0x360f0                                   |         goto label_13;
                                                                 |     }
                                                                 | label_10:
    0x000360d0 ldrb r3, [r1]                                     |     r3 = *(r1);
                                                                 |     if (r3 == 0) {
    0x000360d2 cbz r3, 0x360e4                                   |         goto label_49;
                                                                 |     }
    0x000360d4 mov r3, r1                                        |     r3 = r1;
                                                                 |     do {
    0x000360d6 ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x000360da cmp r2, 0                                         |         
    0x000360dc bne 0x360d6                                       |         
                                                                 |     } while (r2 != 0);
    0x000360de subs r3, r3, r1                                   |     r3 -= r1;
    0x000360e0 bic r3, r3, 0xc0000000                            |     r3 = BIT_MASK (r3, 0xc0000000);
                                                                 | label_49:
    0x000360e4 cmp r4, r3                                        |     
                                                                 |     if (r4 == r3) {
    0x000360e6 beq 0x36106                                       |         goto label_50;
                                                                 |     }
                                                                 | label_12:
    0x000360e8 ldr r1, [r5, 8]!                                  |     r1 = *((r5 += 8));
    0x000360ec cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x000360ee bne 0x360d0                                       |         goto label_10;
                                                                 |     }
                                                                 | label_13:
    0x000360f0 ldr r0, [pc, 0x178]                               |     
    0x000360f2 mov r8, r6                                        |     r8 = r6;
    0x000360f4 ldr r1, [sp, 0xc]                                 |     r1 = var_ch;
    0x000360f6 mov r2, r8                                        |     r2 = r8;
    0x000360f8 ldr r6, [sp, 8]                                   |     r6 = var_8h;
    0x000360fa movs r4, 1                                        |     r4 = 1;
    0x000360fc add r0, pc                                        |     r0 = 0x6c36c;
    0x000360fe blx 0x6268                                        |     r0 = fcn_00006268 ();
    0x00036102 mov r3, r0                                        |     r3 = r0;
    0x00036104 b 0x35fec                                         |     goto label_11;
                                                                 | label_50:
    0x00036106 mov r2, r4                                        |     r2 = r4;
    0x00036108 mov r0, r6                                        |     r0 = r6;
    0x0003610a blx 0x5e6c                                        |     r0 = fcn_00005e6c ();
    0x0003610e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00036110 bne 0x360e8                                       |         goto label_12;
                                                                 |     }
    0x00036112 ldr r2, [r5, 4]                                   |     r2 = *((r5 + 4));
    0x00036114 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00036116 beq 0x360f0                                       |         goto label_13;
                                                                 |     }
    0x00036118 bic r1, r2, 0x80                                  |     r1 = BIT_MASK (r2, 0x80);
    0x0003611c cmp r1, sb                                        |     
                                                                 |     if (r1 > sb) {
    0x0003611e bgt 0x36202                                       |         goto label_51;
                                                                 |     }
    0x00036120 bic.w sl, r7, sl                                  |     sl = BIT_MASK (r7, sl);
    0x00036124 orr.w r7, r2, sl                                  |     r7 = r2 | sl;
    0x00036128 b 0x36094                                         |     goto label_9;
                                                                 | label_48:
    0x0003612a ldrb r2, [r1, 1]                                  |     r2 = *((r1 + 1));
    0x0003612c adds r1, 1                                        |     r1++;
    0x0003612e cmp r2, 0x66                                      |     
                                                                 |     if (r2 != 0x66) {
    0x00036130 bne 0x360aa                                       |         goto label_14;
                                                                 |     }
    0x00036132 ldrb r2, [r1, 1]                                  |     r2 = *((r1 + 1));
    0x00036134 cmp r2, 0x73                                      |     
    0x00036136 it eq                                             |     
                                                                 |     if (r2 == 0x73) {
    0x00036138 moveq r2, 0                                       |         r2 = 0;
                                                                 |         goto label_52;
                                                                 |     }
                                                                 |     if (r2 != 0x73) {
                                                                 | label_52:
    0x0003613a bne 0x360aa                                       |         goto label_14;
                                                                 |     }
    0x0003613c b 0x360ac                                         |     goto label_15;
                                                                 | label_47:
    0x0003613e ldrb r2, [r1, 1]                                  |     r2 = *((r1 + 1));
    0x00036140 adds r1, 1                                        |     r1++;
    0x00036142 cmp r2, 0x6f                                      |     
                                                                 |     if (r2 != 0x6f) {
    0x00036144 bne 0x36094                                       |         goto label_9;
                                                                 |     }
    0x00036146 ldrb r2, [r1, 1]!                                 |     r2 = *((r1 += 1));
    0x0003614a cmp r2, 0x64                                      |     
                                                                 |     if (r2 != 0x64) {
    0x0003614c bne 0x36094                                       |         goto label_9;
                                                                 |     }
    0x0003614e ldrb r2, [r1, 1]                                  |     r2 = *((r1 + 1));
    0x00036150 cmp r2, 0x65                                      |     
                                                                 |     if (r2 != 0x65) {
    0x00036152 bne 0x36094                                       |         goto label_9;
                                                                 |     }
    0x00036154 ldr r3, [pc, 0x118]                               |     
    0x00036156 and sb, r7, 0x87                                  |     sb = r7 & 0x87;
    0x0003615a ldr r5, [sp, 0x14]                                |     r5 = var_14h;
    0x0003615c mov.w sl, 0x87                                    |     sl = 0x87;
    0x00036160 add r3, pc                                        |     r3 = 0x6c3d4;
    0x00036162 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00036164 b 0x360cc                                         |     goto label_16;
                                                                 | label_24:
    0x00036166 movs r6, 2                                        |     r6 = 2;
    0x00036168 b 0x35dda                                         |     goto label_1;
                                                                 | label_40:
    0x0003616a ldrb.w r3, [lr]                                   |     r3 = *(lr);
    0x0003616e cmp r3, 0x23                                      |     
    0x00036170 it ne                                             |     
                                                                 |     if (r3 != 0x23) {
    0x00036172 cmpne r3, 0                                       |         __asm ("cmpne r3, 0");
                                                                 |     }
                                                                 |     if (r3 == 0x23) {
    0x00036174 beq 0x36198                                       |         goto label_53;
                                                                 |     }
    0x00036176 ldr.w lr, [sp, 0xc]                               |     lr = var_ch;
    0x0003617a subs r3, r5, 1                                    |     r3 = r5 - 1;
    0x0003617c add r3, r4                                        |     r3 += r4;
                                                                 | label_18:
    0x0003617e add.w r2, lr, r3                                  |     r2 = lr + r3;
    0x00036182 ldrb r0, [r3, 1]!                                 |     r0 = *((r3 += 1));
    0x00036186 mov r5, r2                                        |     r5 = r2;
    0x00036188 cmp r0, 0x26                                      |     
                                                                 |     if (r0 == 0x26) {
    0x0003618a beq.w 0x35f76                                     |         goto label_17;
                                                                 |     }
    0x0003618e ldrb r2, [r3, 2]                                  |     r2 = *((r3 + 2));
    0x00036190 cmp r2, 0                                         |     
    0x00036192 it ne                                             |     
                                                                 |     if (r2 == 0) {
    0x00036194 cmpne r2, 0x23                                    |         __asm ("cmpne r2, 0x23");
                                                                 |         goto label_54;
                                                                 |     }
                                                                 |     if (r2 != 0) {
                                                                 | label_54:
    0x00036196 bne 0x3617e                                       |         goto label_18;
                                                                 |     }
                                                                 | label_53:
    0x00036198 ldr r7, [sp, 8]                                   |     r7 = var_8h;
    0x0003619a adds r3, r1, 1                                    |     r3 = r1 + 1;
                                                                 | label_42:
    0x0003619c movs r2, 0                                        |     r2 = 0;
    0x0003619e strb.w r2, [sl]                                   |     *(sl) = r2;
    0x000361a2 adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x000361a4 add.w sl, r6, r3                                  |     sl = r6 + r3;
    0x000361a8 b 0x3600e                                         |     goto label_19;
                                                                 | label_29:
    0x000361aa ldrb r2, [r4, 6]                                  |     r2 = *((r4 + 6));
    0x000361ac cmp r2, 0x2f                                      |     
    0x000361ae itt ne                                            |     
                                                                 |     if (r2 == 0x2f) {
    0x000361b0 movne r5, 5                                       |         r5 = 5;
                                                                 |     }
                                                                 |     if (r2 != 0x2f) {
    0x000361b2 movne r2, r5                                      |         r2 = r5;
                                                                 |         goto label_55;
                                                                 |     }
                                                                 |     if (r2 != 0x2f) {
                                                                 | label_55:
    0x000361b4 bne.w 0x35e76                                     |         goto label_20;
                                                                 |     }
    0x000361b8 ldrb r3, [r4, 7]                                  |     r3 = *((r4 + 7));
    0x000361ba add.w r8, r4, 7                                   |     r8 = r4 + 7;
    0x000361be subs r0, r3, 0                                    |     r0 = r3 - 0;
    0x000361c0 it ne                                             |     
                                                                 |     if (r0 == r3) {
    0x000361c2 movne r0, 1                                       |         r0 = 1;
                                                                 |     }
    0x000361c4 cmp r3, 0x2f                                      |     
    0x000361c6 ite eq                                            |     
                                                                 |     if (r3 != 0x2f) {
    0x000361c8 moveq r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (r3 == 0x2f) {
    0x000361ca andne r2, r0, 1                                   |         r2 = r0 & 1;
                                                                 |     }
                                                                 |     if (r2 == 0) {
    0x000361ce cbz r2, 0x36236                                   |         goto label_56;
                                                                 |     }
    0x000361d0 mov r3, r8                                        |     r3 = r8;
    0x000361d2 movs r5, 7                                        |     r5 = 7;
                                                                 |     do {
    0x000361d4 ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x000361d8 mov sl, r5                                        |         sl = r5;
    0x000361da adds r5, 1                                        |         r5++;
    0x000361dc cmp r2, 0                                         |         
    0x000361de it ne                                             |         
                                                                 |         if (r2 != 0) {
    0x000361e0 cmpne r2, 0x2f                                    |             __asm ("cmpne r2, 0x2f");
                                                                 |         }
    0x000361e2 bne 0x361d4                                       |         
                                                                 |     } while (r2 != 0);
    0x000361e4 cmp r5, 0x10                                      |     
                                                                 |     if (r5 == 0x10) {
    0x000361e6 bne 0x36222                                       |         
    0x000361e8 ldr r0, [pc, 0x88]                                |         
    0x000361ea movs r2, 9                                        |         r2 = 9;
    0x000361ec mov r1, r8                                        |         r1 = r8;
    0x000361ee add r0, pc                                        |         r0 = 0x6c466;
    0x000361f0 blx 0x5e6c                                        |         r0 = fcn_00005e6c ();
                                                                 |         if (r0 != 0) {
    0x000361f4 cbnz r0, 0x36222                                  |             goto label_57;
                                                                 |         }
    0x000361f6 ldrb r3, [r4, 0x10]                               |         r3 = *((r4 + 0x10));
    0x000361f8 mov r2, r5                                        |         r2 = r5;
    0x000361fa subs r0, r3, 0                                    |         r0 = r3 - 0;
    0x000361fc it ne                                             |         
                                                                 |         if (r0 == r3) {
    0x000361fe movne r0, 1                                       |             r0 = 1;
                                                                 |         }
    0x00036200 b 0x35e66                                         |         goto label_21;
                                                                 | label_51:
    0x00036202 ldr r0, [pc, 0x74]                                |         
    0x00036204 mov r8, r6                                        |         r8 = r6;
    0x00036206 ldr r1, [sp, 0xc]                                 |         r1 = var_ch;
    0x00036208 mov r2, r8                                        |         r2 = r8;
    0x0003620a ldr r6, [sp, 8]                                   |         r6 = var_8h;
    0x0003620c movs r4, 3                                        |         r4 = 3;
    0x0003620e add r0, pc                                        |         r0 = 0x6c48c;
    0x00036210 blx 0x6268                                        |         r0 = fcn_00006268 ();
    0x00036214 mov r3, r0                                        |         r3 = r0;
    0x00036216 b 0x35fec                                         |         goto label_11;
                                                                 | label_43:
    0x00036218 movs r1, 1                                        |         r1 = 1;
    0x0003621a b 0x36030                                         |         goto label_22;
                                                                 | label_30:
    0x0003621c mov sl, r6                                        |         sl = r6;
    0x0003621e movs r2, 1                                        |         r2 = 1;
    0x00036220 b 0x3600e                                         |         goto label_19;
                                                                 |     }
                                                                 | label_57:
    0x00036222 ldr r0, [pc, 0x58]                                |     
    0x00036224 mov r2, r8                                        |     r2 = r8;
    0x00036226 sub.w r1, sl, 6                                   |     r1 = sl - 6;
    0x0003622a movs r4, 1                                        |     r4 = 1;
    0x0003622c add r0, pc                                        |     r0 = 0x6c4ae;
    0x0003622e blx 0x6268                                        |     r0 = fcn_00006268 ();
    0x00036232 mov r3, r0                                        |     r3 = r0;
    0x00036234 b 0x35fec                                         |     goto label_11;
                                                                 | label_56:
    0x00036236 movs r2, 7                                        |     r2 = 7;
    0x00036238 mov r5, r2                                        |     r5 = r2;
    0x0003623a b 0x35e66                                         |     goto label_21;
                                                                 | label_37:
    0x0003623c mov ip, lr                                        |     
    0x0003623e add.w lr, r4, r2                                  |     lr = r4 + r2;
    0x00036242 b 0x35eb0                                         |     goto label_4;
                                                                 | label_36:
    0x00036244 add.w lr, r4, r2                                  |     lr = r4 + r2;
    0x00036248 mov.w ip, 2                                       |     
    0x0003624c b 0x35eb0                                         |     goto label_4;
                                                                 | }


r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x392a8).
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-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x3b6f0 */
                                                                     | #include <stdint.h>
                                                                     |  
                                                                     | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                     |  
    ; (fcn) fcn.0003b6f0 ()                                          | void fcn_0003b6f0 (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_14h;
                                                                     |     int16_t var_18h;
                                                                     |     int16_t var_1ch;
                                                                     |     int16_t var_20h;
                                                                     |     int16_t var_24h;
                                                                     |     int16_t var_28h;
                                                                     |     int16_t var_30h;
                                                                     |     int16_t var_34h;
                                                                     |     int16_t var_3ch;
                                                                     |     int16_t var_40h;
                                                                     |     int16_t var_44h;
                                                                     |     int16_t var_48h;
                                                                     |     int16_t var_60h;
                                                                     |     int16_t var_6ah;
                                                                     |     int16_t var_74h;
                                                                     |     int16_t var_78h;
                                                                     |     int16_t var_80h;
                                                                     |     int16_t var_84h;
                                                                     |     int16_t var_88h;
                                                                     |     int16_t var_a4h;
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
                                                                     |     r2 = arg3;
    0x0003b6f0 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0003b6f4 mov r6, r1                                            |     r6 = r1;
    0x0003b6f6 ldr.w r1, [pc, 0xb50]                                 |     
    0x0003b6fa mov fp, r2                                            |     
    0x0003b6fc sub sp, 0xac                                          |     
    0x0003b6fe movs r3, 0                                            |     r3 = 0;
    0x0003b700 ldr.w r2, [pc, 0xb48]                                 |     r2 = *(0x3c24c);
    0x0003b704 add r1, pc                                            |     r1 = 0x77952;
    0x0003b706 ldr r5, [r0, 8]                                       |     r5 = *((r0 + 8));
    0x0003b708 ldr r2, [r1, r2]                                      |     
    0x0003b70a ldr r2, [r2]                                          |     r2 = *(0x77952);
    0x0003b70c str r2, [sp, 0xa4]                                    |     var_a4h = r2;
    0x0003b70e mov.w r2, 0                                           |     r2 = 0;
    0x0003b712 strd r3, r3, [sp, 0x3c]                               |     __asm ("strd r3, r3, [var_3ch]");
    0x0003b716 cmp r5, 0                                             |     
                                                                     |     if (r5 == 0) {
    0x0003b718 beq.w 0x3b8e4                                         |         goto label_28;
                                                                     |     }
    0x0003b71c ldr r7, [r0]                                          |     r7 = *(r0);
    0x0003b71e mov r4, r0                                            |     r4 = r0;
    0x0003b720 cmp r6, 0                                             |     
                                                                     |     if (r6 == 0) {
    0x0003b722 beq.w 0x3b8d0                                         |         goto label_29;
                                                                     |     }
    0x0003b726 ldrb.w r8, [r6]                                       |     r8 = *(r6);
    0x0003b72a sub.w r3, r8, 0x13                                    |     r3 = r8 - 0x13;
    0x0003b72e cmp r3, 0x8c                                          |     
                                                                     |     if (r3 > 0x8c) {
    0x0003b730 bhi.w 0x3b8fc                                         |         goto label_30;
                                                                     |     }
                                                                     |     /* switch table (142 cases) at 0x3b738 */
    0x0003b734 tbh [pc, r3, lsl 1]                                   |     __asm ("tbh [pc, r3, lsl 1]");
    0x0003b852 mov r2, fp                                            |     r2 = fp;
    0x0003b854 ldr r1, [r6, 0xc]                                     |     r1 = *((r6 + 12));
    0x0003b856 bl 0x3b6f0                                            |     r0 = fcn_0003b6f0 (r0, r1, r2);
    0x0003b85a mov fp, r0                                            |     
                                                                     | label_0:
    0x0003b85c ldrd r0, r5, [sp, 0x3c]                               |     __asm ("ldrd r0, r5, [var_3ch]");
                                                                     |     if (r0 == 0) {
    0x0003b860 cbz r0, 0x3b888                                       |         goto label_16;
                                                                     |     }
    0x0003b862 ldrb r7, [r4, 0x13]                                   |     r7 = *((r4 + 0x13));
    0x0003b864 cmp r7, 7                                             |     
                                                                     |     if (r7 > 7) {
    0x0003b866 bhi 0x3b8e0                                           |         goto label_4;
                                                                     |     }
    0x0003b868 add.w r3, r4, 0x74                                    |     r3 = r4 + 0x74;
    0x0003b86c add.w r1, r4, 0x13c                                   |     r1 = r4 + 0x13c;
                                                                     | label_17:
    0x0003b870 mov r2, r3                                            |     r2 = r3;
                                                                     |     do {
    0x0003b872 ldr r6, [r2, 0xc]                                     |         r6 = *((r2 + 0xc));
    0x0003b874 cmp r6, r0                                            |         
                                                                     |         if (r6 == r0) {
    0x0003b876 beq 0x3b8ee                                           |             goto label_31;
                                                                     |         }
    0x0003b878 adds r2, 0x14                                         |         r2 += 0x14;
    0x0003b87a cmp r2, r1                                            |         
    0x0003b87c bne 0x3b872                                           |         
                                                                     |     } while (r2 != r1);
    0x0003b87e adds r3, r7, 1                                        |     r3 = r7 + 1;
    0x0003b880 adds r7, 6                                            |     r7 += 6;
    0x0003b882 strb r3, [r4, 0x13]                                   |     *((r4 + 0x13)) = r3;
    0x0003b884 str.w r0, [r4, r7, lsl 2]                             |     __asm ("str.w r0, [r4, r7, lsl 2]");
                                                                     |     if (r5 == 0) {
                                                                     | label_16:
    0x0003b888 cbz r5, 0x3b8e0                                       |         goto label_4;
                                                                     |     }
    0x0003b88a ldrb r6, [r4, 0x13]                                   |     r6 = *((r4 + 0x13));
    0x0003b88c cmp r6, 7                                             |     
                                                                     |     if (r6 > 7) {
    0x0003b88e bhi 0x3b8e0                                           |         goto label_4;
                                                                     |     }
    0x0003b890 add.w r3, r4, 0x74                                    |     r3 = r4 + 0x74;
    0x0003b894 mov r0, fp                                            |     r0 = fp;
    0x0003b896 add.w r1, r4, 0x13c                                   |     r1 = r4 + 0x13c;
                                                                     |     do {
                                                                     | label_2:
    0x0003b89a ldr r2, [r3, 0xc]                                     |         r2 = *((r3 + 0xc));
    0x0003b89c cmp r2, r5                                            |         
                                                                     |         if (r2 == r5) {
    0x0003b89e beq 0x3b8e8                                           |             goto label_32;
                                                                     |         }
    0x0003b8a0 adds r3, 0x14                                         |         r3 += 0x14;
    0x0003b8a2 cmp r3, r1                                            |         
    0x0003b8a4 bne 0x3b89a                                           |         
                                                                     |     } while (r3 != r1);
    0x0003b8a6 adds r3, r6, 1                                        |     r3 = r6 + 1;
    0x0003b8a8 adds r6, 6                                            |     r6 += 6;
    0x0003b8aa strb r3, [r4, 0x13]                                   |     *((r4 + 0x13)) = r3;
    0x0003b8ac str.w r5, [r4, r6, lsl 2]                             |     __asm ("str.w r5, [r4, r6, lsl 2]");
                                                                     |     do {
                                                                     | label_1:
    0x0003b8b0 ldr.w r2, [pc, 0x99c]                                 |         
    0x0003b8b4 ldr.w r3, [pc, 0x994]                                 |         r3 = *(0x3c24c);
    0x0003b8b8 add r2, pc                                            |         r2 = 0x77b0c;
    0x0003b8ba ldr r3, [r2, r3]                                      |         r3 = *(0x77b0c);
    0x0003b8bc ldr r2, [r3]                                          |         r2 = *(0x77b0c);
    0x0003b8be ldr r3, [sp, 0xa4]                                    |         r3 = var_a4h;
    0x0003b8c0 eors r2, r3                                           |         r2 ^= r3;
    0x0003b8c2 mov.w r3, 0                                           |         r3 = 0;
                                                                     |         if (r2 != r3) {
    0x0003b8c6 bne.w 0x3c33e                                         |             goto label_33;
                                                                     |         }
    0x0003b8ca add sp, 0xac                                          |         
    0x0003b8cc pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |         
                                                                     | label_29:
    0x0003b8d0 movs r2, 0                                            |         r2 = 0;
    0x0003b8d2 mov r3, fp                                            |         r3 = fp;
    0x0003b8d4 mov r0, r5                                            |         r0 = r5;
    0x0003b8d6 movs r1, 0x1c                                         |         r1 = 0x1c;
    0x0003b8d8 str r2, [sp]                                          |         *(sp) = r2;
    0x0003b8da bl 0x18bf8                                            |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003b8de b 0x3b85c                                             |         goto label_0;
                                                                     | label_4:
    0x0003b8e0 mov r0, fp                                            |         r0 = fp;
    0x0003b8e2 b 0x3b8b0                                             |         
                                                                     |     } while (1);
                                                                     | label_28:
    0x0003b8e4 mov r0, r5                                            |     r0 = r5;
    0x0003b8e6 b 0x3b8b0                                             |     goto label_1;
                                                                     | label_32:
    0x0003b8e8 movs r2, 1                                            |     r2 = 1;
    0x0003b8ea strb r2, [r3, 6]                                      |     *((r3 + 6)) = r2;
    0x0003b8ec b 0x3b8b0                                             |     goto label_1;
                                                                     | label_31:
    0x0003b8ee movs r0, 1                                            |     r0 = 1;
    0x0003b8f0 strb r0, [r2, 6]                                      |     *((r2 + 6)) = r0;
    0x0003b8f2 mov r0, fp                                            |     r0 = fp;
    0x0003b8f4 cmp r5, 0                                             |     
                                                                     |     if (r5 == 0) {
    0x0003b8f6 beq 0x3b8b0                                           |         goto label_1;
                                                                     |     }
    0x0003b8f8 ldrb r6, [r4, 0x13]                                   |     r6 = *((r4 + 0x13));
    0x0003b8fa b 0x3b89a                                             |     goto label_2;
                                                                     | label_30:
    0x0003b8fc ldr r3, [r6, 0x14]                                    |     r3 = *((r6 + 0x14));
    0x0003b8fe ldr r0, [r5, 0x18]                                    |     r0 = *((r5 + 0x18));
    0x0003b900 str r3, [sp, 0x20]                                    |     var_20h = r3;
    0x0003b902 ldrd r3, r7, [r3]                                     |     __asm ("ldrd r3, r7, [r3]");
    0x0003b906 str r3, [sp, 0x1c]                                    |     var_1ch = r3;
    0x0003b908 bl 0x19ed0                                            |     fcn_00019ed0 (r0);
    0x0003b90c ldr r3, [r6, 0xc]                                     |     r3 = *((r6 + 0xc));
    0x0003b90e mov sb, r0                                            |     sb = r0;
    0x0003b910 str r3, [sp, 0x14]                                    |     var_14h = r3;
    0x0003b912 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0003b914 beq.w 0x3c04c                                         |         goto label_34;
                                                                     |     }
    0x0003b918 mov ip, r3                                            |     
    0x0003b91a mov lr, r3                                            |     lr = r3;
    0x0003b91c ldm.w ip!, {r0, r1, r2, r3}                           |     r0 = *(ip!);
                                                                     |     r1 = *((ip! + 4));
                                                                     |     r2 = *((ip! + 8));
                                                                     |     r3 = *((ip! + 12));
    0x0003b920 add r6, sp, 0x44                                      |     r6 += var_44h;
    0x0003b922 add.w sl, sp, 0x74                                    |     sl += var_74h;
    0x0003b926 stm r6!, {r0, r1, r2, r3}                             |     *(r6!) = r0;
                                                                     |     *((r6! + 4)) = r1;
                                                                     |     *((r6! + 8)) = r2;
                                                                     |     *((r6! + 12)) = r3;
    0x0003b928 ldm.w ip!, {r0, r1, r2, r3}                           |     r0 = *(ip!);
                                                                     |     r1 = *((ip! + 4));
                                                                     |     r2 = *((ip! + 8));
                                                                     |     r3 = *((ip! + 12));
    0x0003b92c stm r6!, {r0, r1, r2, r3}                             |     *(r6!) = r0;
                                                                     |     *((r6! + 4)) = r1;
                                                                     |     *((r6! + 8)) = r2;
                                                                     |     *((r6! + 12)) = r3;
    0x0003b92e ldm.w ip, {r0, r1, r2, r3}                            |     r0 = *(ip);
                                                                     |     r1 = *((ip + 4));
                                                                     |     r2 = *((ip + 8));
                                                                     |     r3 = *((ip + 12));
    0x0003b932 stm.w r6, {r0, r1, r2, r3}                            |     *(r6) = r0;
                                                                     |     *((r6 + 4)) = r1;
                                                                     |     *((r6 + 8)) = r2;
                                                                     |     *((r6 + 12)) = r3;
    0x0003b936 add r2, sp, 0x3c                                      |     r2 += var_3ch;
    0x0003b938 mov r1, lr                                            |     r1 = lr;
    0x0003b93a mov r0, r4                                            |     r0 = r4;
    0x0003b93c bl 0x3c858                                            |     fcn_0003c858 (r0, r1, r2);
    0x0003b940 ldr r3, [sp, 0x48]                                    |     r3 = var_48h;
    0x0003b942 str r0, [sp, 0x60]                                    |     var_60h = r0;
    0x0003b944 bic r3, r3, 0x1000                                    |     r3 = BIT_MASK (r3, 0x1000);
    0x0003b948 str r3, [sp, 0x48]                                    |     var_48h = r3;
    0x0003b94a ldrb.w r3, [sp, 0x44]                                 |     r3 = var_44h;
    0x0003b94e strb.w r3, [sp, 0x6a]                                 |     var_6ah = r3;
    0x0003b952 movs r3, 0x9f                                         |     r3 = 0x9f;
    0x0003b954 strb.w r3, [sp, 0x44]                                 |     var_44h = r3;
    0x0003b958 movs r3, 0x4f                                         |     r3 = 0x4f;
    0x0003b95a strb.w r3, [sp, 0x74]                                 |     var_74h = r3;
    0x0003b95e add r3, sp, 0x44                                      |     r3 += var_44h;
    0x0003b960 str r3, [sp, 0x80]                                    |     var_80h = r3;
    0x0003b962 movs r3, 0                                            |     r3 = 0;
    0x0003b964 str r3, [sp, 0x3c]                                    |     var_3ch = r3;
                                                                     | label_9:
    0x0003b966 ldr r3, [sp, 0x1c]                                    |     r3 = var_1ch;
    0x0003b968 subs r3, 1                                            |     r3--;
    0x0003b96a cmp r3, 0                                             |     
    0x0003b96c str r3, [sp, 0x18]                                    |     var_18h = r3;
                                                                     |     if (r3 <= 0) {
    0x0003b96e ble.w 0x3bfbc                                         |         goto label_35;
                                                                     |     }
    0x0003b972 ldr r0, [r5, 0x18]                                    |     r0 = *((r5 + 0x18));
    0x0003b974 adds r7, 0x14                                         |     r7 += 0x14;
    0x0003b976 mov.w r8, 0                                           |     r8 = 0;
    0x0003b97a b 0x3b9d4                                             |     
                                                                     |     while (r2 != 0) {
    0x0003b97c str r3, [sp, 0x84]                                    |         var_84h = r3;
                                                                     | label_3:
    0x0003b97e bl 0x19ed0                                            |         r0 = fcn_00019ed0 (r0);
    0x0003b982 mov r6, r0                                            |         r6 = r0;
    0x0003b984 movs r3, 8                                            |         r3 = 8;
    0x0003b986 mov r2, r6                                            |         r2 = r6;
    0x0003b988 mov r1, sl                                            |         r1 = sl;
    0x0003b98a mov r0, r4                                            |         r0 = r4;
    0x0003b98c bl 0x3cee8                                            |         fcn_0003cee8 (r0, r1, r2, r3, r4, r5);
    0x0003b990 ldr r1, [r7]                                          |         r1 = *(r7);
    0x0003b992 mov r2, fp                                            |         r2 = fp;
    0x0003b994 mov r0, r4                                            |         r0 = r4;
    0x0003b996 bl 0x3c4a8                                            |         fcn_0003c4a8 (r0, r1, r2);
    0x0003b99a movs r3, 0                                            |         r3 = 0;
    0x0003b99c movs r2, 0                                            |         r2 = 0;
    0x0003b99e movs r1, 0x10                                         |         r1 = 0x10;
    0x0003b9a0 str r3, [sp]                                          |         *(sp) = r3;
    0x0003b9a2 mov r0, r5                                            |         r0 = r5;
    0x0003b9a4 mov r3, sb                                            |         r3 = sb;
    0x0003b9a6 bl 0x18bf8                                            |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003b9aa mov r0, r4                                            |         r0 = r4;
    0x0003b9ac bl 0xa404                                             |         fcn_0000a404 (r0);
    0x0003b9b0 mvns r6, r6                                           |         r6 = ~r6;
    0x0003b9b2 ldr r0, [r5, 0x18]                                    |         r0 = *((r5 + 0x18));
                                                                     |         if (r6 >= r6) {
    0x0003b9b4 bmi 0x3b9c0                                           |             
    0x0003b9b6 ldr r3, [r0, 0x70]                                    |             r3 = *((r0 + 0x70));
                                                                     |             if (r3 == 0) {
    0x0003b9b8 cbz r3, 0x3b9c0                                       |                 goto label_36;
                                                                     |             }
    0x0003b9ba ldr r2, [r5, 0x20]                                    |             r2 = *((r5 + 0x20));
    0x0003b9bc str.w r2, [r3, r6, lsl 2]                             |             __asm ("str.w r2, [r3, r6, lsl 2]");
                                                                     |         }
                                                                     | label_36:
    0x0003b9c0 ldr r3, [r5, 0x20]                                    |         r3 = *((r5 + 0x20));
    0x0003b9c2 add.w r8, r8, 2                                       |         r8 += 2;
    0x0003b9c6 adds r7, 0x28                                         |         r7 += 0x28;
    0x0003b9c8 subs r3, 1                                            |         r3--;
    0x0003b9ca str r3, [r0, 0x58]                                    |         *((r0 + 0x58)) = r3;
    0x0003b9cc ldr r3, [sp, 0x18]                                    |         r3 = var_18h;
    0x0003b9ce cmp r8, r3                                            |         
                                                                     |         if (r8 >= r3) {
    0x0003b9d0 bge.w 0x3bfbc                                         |             goto label_35;
                                                                     |         }
    0x0003b9d4 ldr r3, [r4, 0x64]                                    |         r3 = *((r4 + 0x64));
    0x0003b9d6 ldr r2, [sp, 0x14]                                    |         r2 = var_14h;
    0x0003b9d8 adds r3, 1                                            |         r3++;
    0x0003b9da str r3, [r4, 0x64]                                    |         *((r4 + 0x64)) = r3;
    0x0003b9dc ldr r3, [r7, -0x14]                                   |         r3 = *((r7 - 0x14));
    0x0003b9e0 cmp r2, 0                                             |         
    0x0003b9e2 bne 0x3b97c                                           |         
                                                                     |     }
    0x0003b9e4 mov sl, r3                                            |     sl = r3;
    0x0003b9e6 b 0x3b97e                                             |     goto label_3;
    0x0003b9e8 ldr r1, [r6, 0xc]                                     |     r1 = *((r6 + 0xc));
    0x0003b9ea add r2, sp, 0x3c                                      |     r2 += var_3ch;
    0x0003b9ec bl 0x3c858                                            |     fcn_0003c858 (r0, r1, r2);
    0x0003b9f0 ldr r1, [r6, 0x10]                                    |     r1 = *((r6 + 0x10));
    0x0003b9f2 add r2, sp, 0x40                                      |     r2 += var_40h;
    0x0003b9f4 mov r6, r0                                            |     r6 = r0;
    0x0003b9f6 mov r0, r4                                            |     r0 = r4;
    0x0003b9f8 bl 0x3c858                                            |     fcn_0003c858 (r0, r1, r2);
    0x0003b9fc mov r3, r6                                            |     r3 = r6;
    0x0003b9fe mov r2, r0                                            |     r2 = r0;
    0x0003ba00 mov r1, r8                                            |     r1 = r8;
    0x0003ba02 mov r0, r5                                            |     r0 = r5;
    0x0003ba04 str.w fp, [sp]                                        |     __asm ("str.w fp, [sp]");
    0x0003ba08 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003ba0c b 0x3b85c                                             |     goto label_0;
    0x0003ba0e ldr r1, [r6, 0xc]                                     |     r1 = *((r6 + 0xc));
    0x0003ba10 add r2, sp, 0x3c                                      |     r2 += var_3ch;
    0x0003ba12 bl 0x3c858                                            |     fcn_0003c858 (r0, r1, r2);
    0x0003ba16 ldr r1, [r6, 0x10]                                    |     r1 = *((r6 + 0x10));
    0x0003ba18 mov r5, r0                                            |     r5 = r0;
    0x0003ba1a add r2, sp, 0x40                                      |     r2 += var_40h;
    0x0003ba1c mov r0, r4                                            |     r0 = r4;
    0x0003ba1e bl 0x3c858                                            |     fcn_0003c858 (r0, r1, r2);
    0x0003ba22 str r0, [sp, 4]                                       |     var_4h = r0;
    0x0003ba24 movs r0, 0x10                                         |     r0 = 0x10;
    0x0003ba26 str.w fp, [sp, 8]                                     |     __asm ("str.w fp, [var_8h]");
    0x0003ba2a mov r3, r8                                            |     r3 = r8;
    0x0003ba2c str r5, [sp]                                          |     *(sp) = r5;
    0x0003ba2e ldrd r1, r2, [r6, 0xc]                                |     __asm ("ldrd r1, r2, [r6, 0xc]");
    0x0003ba32 str r0, [sp, 0xc]                                     |     var_ch = r0;
    0x0003ba34 mov r0, r4                                            |     r0 = r4;
    0x0003ba36 bl 0x23f74                                            |     fcn_00023f74 (r0, r1, r2, r3, r4, r5, r6);
    0x0003ba3a b 0x3b85c                                             |     goto label_0;
    0x0003ba3c movs r7, 0                                            |     r7 = 0;
    0x0003ba3e mov r3, fp                                            |     r3 = fp;
    0x0003ba40 movs r2, 1                                            |     r2 = 1;
    0x0003ba42 movs r1, 0x19                                         |     r1 = 0x19;
    0x0003ba44 mov r0, r5                                            |     r0 = r5;
    0x0003ba46 str r7, [sp]                                          |     *(sp) = r7;
    0x0003ba48 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003ba4c ldr r1, [r6, 0xc]                                     |     r1 = *((r6 + 0xc));
    0x0003ba4e add r2, sp, 0x3c                                      |     r2 += var_3ch;
    0x0003ba50 mov r0, r4                                            |     r0 = r4;
    0x0003ba52 bl 0x3c858                                            |     fcn_0003c858 (r0, r1, r2);
    0x0003ba56 mov r1, r8                                            |     r1 = r8;
    0x0003ba58 mov r2, r0                                            |     r2 = r0;
    0x0003ba5a mov r3, r7                                            |     r3 = r7;
    0x0003ba5c mov r0, r5                                            |     r0 = r5;
    0x0003ba5e str r7, [sp]                                          |     *(sp) = r7;
    0x0003ba60 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003ba64 mov r2, r7                                            |     r2 = r7;
    0x0003ba66 mov r6, r0                                            |     r6 = r0;
    0x0003ba68 mov r3, fp                                            |     r3 = fp;
    0x0003ba6a movs r1, 0x19                                         |     r1 = 0x19;
    0x0003ba6c mov r0, r5                                            |     r0 = r5;
    0x0003ba6e str r7, [sp]                                          |     *(sp) = r7;
    0x0003ba70 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003ba74 ldr r3, [r5, 0x20]                                    |     r3 = *((r5 + 0x20));
    0x0003ba76 cmp r6, r3                                            |     
    0x0003ba78 itttt lo                                              |     
                                                                     |     if (r6 >= r3) {
    0x0003ba7a ldrlo r2, [r5, 4]                                     |         r2 = *((r5 + 4));
                                                                     |     }
                                                                     |     if (r6 >= r3) {
    0x0003ba7c addlo r6, r6, r6, lsl 2                               |         r6 += (r6 << 2);
                                                                     |     }
                                                                     |     if (r6 >= r3) {
    0x0003ba80 addlo r2, r2, r6, lsl 2                               |         r2 += (r6 << 2);
                                                                     |     }
                                                                     |     if (r6 < r3) {
    0x0003ba84 str r3, [r2, 8]                                       |         *((r2 + 8)) = r3;
                                                                     |     }
    0x0003ba86 subs r3, 1                                            |     r3--;
    0x0003ba88 ldr r2, [r5, 0x18]                                    |     r2 = *((r5 + 0x18));
    0x0003ba8a str r3, [r2, 0x58]                                    |     *((r2 + 0x58)) = r3;
    0x0003ba8c b 0x3b85c                                             |     goto label_0;
    0x0003ba8e movs r3, 0                                            |     r3 = 0;
    0x0003ba90 mov r1, r6                                            |     r1 = r6;
    0x0003ba92 mov r2, r3                                            |     r2 = r3;
    0x0003ba94 bl 0x3af24                                            |     r0 = fcn_0003af24 (r0, r1, r2, r3);
    0x0003ba98 mov fp, r0                                            |     
    0x0003ba9a b 0x3b85c                                             |     goto label_0;
    0x0003ba9c ldr r1, [r6, 0xc]                                     |     r1 = *((r6 + 0xc));
    0x0003ba9e add r2, sp, 0x3c                                      |     r2 += var_3ch;
    0x0003baa0 bl 0x3c858                                            |     fcn_0003c858 (r0, r1, r2);
    0x0003baa4 movs r3, 0                                            |     r3 = 0;
    0x0003baa6 mov r2, r0                                            |     r2 = r0;
    0x0003baa8 str r3, [sp]                                          |     *(sp) = r3;
    0x0003baaa mov r1, r8                                            |     r1 = r8;
    0x0003baac mov r0, r5                                            |     r0 = r5;
    0x0003baae mov r3, fp                                            |     r3 = fp;
    0x0003bab0 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003bab4 b 0x3b85c                                             |     goto label_0;
    0x0003bab6 ldr r1, [r6, 0xc]                                     |     r1 = *((r6 + 0xc));
    0x0003bab8 add r2, sp, 0x3c                                      |     r2 += var_3ch;
    0x0003baba bl 0x3c858                                            |     fcn_0003c858 (r0, r1, r2);
    0x0003babe ldr r1, [r6, 0x10]                                    |     r1 = *((r6 + 0x10));
    0x0003bac0 mov r5, r0                                            |     r5 = r0;
    0x0003bac2 add r2, sp, 0x40                                      |     r2 += var_40h;
    0x0003bac4 mov r0, r4                                            |     r0 = r4;
    0x0003bac6 bl 0x3c858                                            |     fcn_0003c858 (r0, r1, r2);
    0x0003baca cmp.w r8, 0x49                                        |     
    0x0003bace str r0, [sp, 4]                                       |     var_4h = r0;
    0x0003bad0 mov.w r0, 0x90                                        |     r0 = 0x90;
    0x0003bad4 ldrd r1, r2, [r6, 0xc]                                |     __asm ("ldrd r1, r2, [r6, 0xc]");
    0x0003bad8 it eq                                                 |     
                                                                     |     if (r8 != 0x49) {
    0x0003bada moveq r3, 0x4f                                        |         r3 = 0x4f;
                                                                     |     }
    0x0003badc str r0, [sp, 0xc]                                     |     var_ch = r0;
    0x0003bade it ne                                                 |     
                                                                     |     if (r8 == 0x49) {
    0x0003bae0 movne r3, 0x4e                                        |         r3 = 0x4e;
                                                                     |     }
    0x0003bae2 mov r0, r4                                            |     r0 = r4;
    0x0003bae4 str.w fp, [sp, 8]                                     |     __asm ("str.w fp, [var_8h]");
    0x0003bae8 str r5, [sp]                                          |     *(sp) = r5;
    0x0003baea bl 0x23f74                                            |     fcn_00023f74 (r0, r1, r2, r3, r4, r5, r6);
    0x0003baee b 0x3b85c                                             |     goto label_0;
                                                                     | label_7:
    0x0003baf0 ldr r3, [r6, 0x1c]                                    |     r3 = *((r6 + 0x1c));
    0x0003baf2 ldrsh.w r2, [r6, 0x20]                                |     r2 = *((r6 + 0x20));
    0x0003baf6 cmp r3, 0                                             |     
                                                                     |     if (r3 >= 0) {
    0x0003baf8 bge 0x3bb08                                           |         goto label_37;
                                                                     |     }
    0x0003bafa ldr r0, [r4, 0x5c]                                    |     r0 = *((r4 + 0x5c));
    0x0003bafc cmp r0, 0                                             |     
    0x0003bafe it gt                                                 |     
                                                                     |     if (r0 > 0) {
    0x0003bb00 addgt r0, r0, r2                                      |         r0 += r2;
                                                                     |         goto label_38;
                                                                     |     }
                                                                     |     if (r0 > 0) {
                                                                     | label_38:
    0x0003bb02 bgt.w 0x3b8b0                                         |         goto label_1;
                                                                     |     }
    0x0003bb06 ldr r3, [r4, 0x60]                                    |     r3 = *((r4 + 0x60));
                                                                     | label_37:
    0x0003bb08 str.w fp, [sp]                                        |     __asm ("str.w fp, [sp]");
    0x0003bb0c ldrb.w r0, [r6, 0x26]                                 |     r0 = *((r6 + 0x26));
    0x0003bb10 ldr r1, [r6, 0x2c]                                    |     r1 = *((r6 + 0x2c));
    0x0003bb12 str r0, [sp, 4]                                       |     var_4h = r0;
    0x0003bb14 mov r0, r4                                            |     r0 = r4;
    0x0003bb16 bl 0x26204                                            |     r0 = fcn_00026204 (r0, r1, r2, r3, r4, r5);
    0x0003bb1a mov fp, r0                                            |     
    0x0003bb1c b 0x3b85c                                             |     goto label_0;
    0x0003bb1e ldr r3, [r6, 0x14]                                    |     r3 = *((r6 + 0x14));
    0x0003bb20 add r2, sp, 0x3c                                      |     r2 += var_3ch;
    0x0003bb22 ldr.w sb, [r6, 0xc]                                   |     sb = *((r6 + 0xc));
    0x0003bb26 add.w sl, sp, 0x40                                    |     sl += var_40h;
    0x0003bb2a ldr r3, [r3, 4]                                       |     r3 = *((r3 + 4));
    0x0003bb2c mov r1, sb                                            |     r1 = sb;
    0x0003bb2e ldr.w r8, [r3]                                        |     r8 = *(r3);
    0x0003bb32 str r3, [sp, 0x18]                                    |     var_18h = r3;
    0x0003bb34 bl 0x3c858                                            |     fcn_0003c858 (r0, r1, r2);
    0x0003bb38 mov r2, sl                                            |     r2 = sl;
    0x0003bb3a str r0, [sp, 0x14]                                    |     var_14h = r0;
    0x0003bb3c mov r1, r8                                            |     r1 = r8;
    0x0003bb3e mov r0, r4                                            |     r0 = r4;
    0x0003bb40 bl 0x3c858                                            |     fcn_0003c858 (r0, r1, r2);
    0x0003bb44 ldrb r2, [r4, 0x13]                                   |     r2 = *((r4 + 0x13));
    0x0003bb46 cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0003bb48 beq.w 0x3c09a                                         |         goto label_39;
                                                                     |     }
    0x0003bb4c subs r1, r2, 1                                        |     r1 = r2 - 1;
    0x0003bb4e uxtb r1, r1                                           |     r1 = (int8_t) r1;
    0x0003bb50 adds r6, r1, 6                                        |     r6 = r1 + 6;
    0x0003bb52 strb r1, [r4, 0x13]                                   |     *((r4 + 0x13)) = r1;
    0x0003bb54 ldr.w r6, [r4, r6, lsl 2]                             |     offset_0 = r6 << 2;
                                                                     |     r6 = *((r4 + offset_0));
    0x0003bb58 cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x0003bb5a beq.w 0x3c348                                         |         goto label_40;
                                                                     |     }
    0x0003bb5e subs r2, 2                                            |     r2 -= 2;
    0x0003bb60 uxtb r2, r2                                           |     r2 = (int8_t) r2;
    0x0003bb62 strb r2, [r4, 0x13]                                   |     *((r4 + 0x13)) = r2;
    0x0003bb64 adds r2, 6                                            |     r2 += 6;
    0x0003bb66 ldr.w r7, [r4, r2, lsl 2]                             |     offset_1 = r2 << 2;
                                                                     |     r7 = *((r4 + offset_1));
                                                                     | label_10:
    0x0003bb6a ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0003bb6c mov r2, r8                                            |     r2 = r8;
    0x0003bb6e str r0, [sp, 4]                                       |     var_4h = r0;
    0x0003bb70 mov r1, sb                                            |     r1 = sb;
    0x0003bb72 mov r0, r4                                            |     r0 = r4;
    0x0003bb74 str r6, [sp, 8]                                       |     var_8h = r6;
    0x0003bb76 str r3, [sp]                                          |     *(sp) = r3;
    0x0003bb78 movs r3, 0x10                                         |     r3 = 0x10;
    0x0003bb7a str r3, [sp, 0xc]                                     |     var_ch = r3;
    0x0003bb7c movs r3, 0x53                                         |     r3 = 0x53;
    0x0003bb7e bl 0x23f74                                            |     fcn_00023f74 (r0, r1, r2, r3, r4, r5, r6);
    0x0003bb82 ldr r2, [sp, 0x40]                                    |     r2 = var_40h;
    0x0003bb84 ldr r3, [sp, 0x18]                                    |     r3 = var_18h;
    0x0003bb86 ldr.w r8, [r3, 0x14]                                  |     r8 = *((r3 + 0x14));
                                                                     |     if (r2 == 0) {
    0x0003bb8a cbz r2, 0x3bbba                                       |         goto label_20;
                                                                     |     }
    0x0003bb8c ldrb.w ip, [r4, 0x13]                                 |     ip = *((r4 + 0x13));
    0x0003bb90 cmp.w ip, 7                                           |     
                                                                     |     if (ip > 7) {
    0x0003bb94 bhi 0x3bbba                                           |         goto label_20;
                                                                     |     }
    0x0003bb96 add.w r3, r4, 0x74                                    |     r3 = r4 + 0x74;
    0x0003bb9a add.w r0, r4, 0x13c                                   |     r0 = r4 + 0x13c;
                                                                     |     do {
    0x0003bb9e ldr r1, [r3, 0xc]                                     |         r1 = *((r3 + 0xc));
    0x0003bba0 cmp r2, r1                                            |         
                                                                     |         if (r2 == r1) {
    0x0003bba2 beq.w 0x3c2dc                                         |             goto label_41;
                                                                     |         }
    0x0003bba6 adds r3, 0x14                                         |         r3 += 0x14;
    0x0003bba8 cmp r3, r0                                            |         
    0x0003bbaa bne 0x3bb9e                                           |         
                                                                     |     } while (r3 != r0);
    0x0003bbac add.w r3, ip, 1                                       |     r3 = ip + 1;
    0x0003bbb0 strb r3, [r4, 0x13]                                   |     *((r4 + 0x13)) = r3;
    0x0003bbb2 add.w r3, ip, 6                                       |     r3 = ip + 6;
    0x0003bbb6 str.w r2, [r4, r3, lsl 2]                             |     __asm ("str.w r2, [r4, r3, lsl 2]");
                                                                     | label_20:
    0x0003bbba mov r2, sl                                            |     r2 = sl;
    0x0003bbbc mov r1, r8                                            |     r1 = r8;
    0x0003bbbe mov r0, r4                                            |     r0 = r4;
    0x0003bbc0 bl 0x3c858                                            |     fcn_0003c858 (r0, r1, r2);
    0x0003bbc4 ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0003bbc6 mov r2, r8                                            |     r2 = r8;
    0x0003bbc8 mov r1, sb                                            |     r1 = sb;
    0x0003bbca str r0, [sp, 4]                                       |     var_4h = r0;
    0x0003bbcc str r7, [sp, 8]                                       |     var_8h = r7;
    0x0003bbce mov r0, r4                                            |     r0 = r4;
    0x0003bbd0 str r3, [sp]                                          |     *(sp) = r3;
    0x0003bbd2 movs r3, 0x10                                         |     r3 = 0x10;
    0x0003bbd4 str r3, [sp, 0xc]                                     |     var_ch = r3;
    0x0003bbd6 movs r3, 0x51                                         |     r3 = 0x51;
    0x0003bbd8 bl 0x23f74                                            |     fcn_00023f74 (r0, r1, r2, r3, r4, r5, r6);
    0x0003bbdc mov r0, r5                                            |     r0 = r5;
    0x0003bbde mov r3, r7                                            |     r3 = r7;
    0x0003bbe0 mov r2, r6                                            |     r2 = r6;
    0x0003bbe2 movs r1, 0x48                                         |     r1 = 0x48;
    0x0003bbe4 str.w fp, [sp]                                        |     __asm ("str.w fp, [sp]");
    0x0003bbe8 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
                                                                     |     if (r6 == 0) {
    0x0003bbec cbz r6, 0x3bc18                                       |         goto label_42;
                                                                     |     }
    0x0003bbee ldrb r5, [r4, 0x13]                                   |     r5 = *((r4 + 0x13));
    0x0003bbf0 cmp r5, 7                                             |     
                                                                     |     if (r5 > 7) {
    0x0003bbf2 bhi.w 0x3b85c                                         |         goto label_0;
                                                                     |     }
    0x0003bbf6 add.w r3, r4, 0x74                                    |     r3 = r4 + 0x74;
    0x0003bbfa add.w r0, r4, 0x13c                                   |     r0 = r4 + 0x13c;
    0x0003bbfe mov r2, r3                                            |     r2 = r3;
                                                                     |     do {
    0x0003bc00 ldr r1, [r2, 0xc]                                     |         r1 = *((r2 + 0xc));
    0x0003bc02 cmp r1, r6                                            |         
                                                                     |         if (r1 == r6) {
    0x0003bc04 beq.w 0x3c2ce                                         |             goto label_43;
                                                                     |         }
    0x0003bc08 adds r2, 0x14                                         |         r2 += 0x14;
    0x0003bc0a cmp r2, r0                                            |         
    0x0003bc0c bne 0x3bc00                                           |         
                                                                     |     } while (r2 != r0);
    0x0003bc0e adds r3, r5, 1                                        |     r3 = r5 + 1;
    0x0003bc10 adds r5, 6                                            |     r5 += 6;
    0x0003bc12 strb r3, [r4, 0x13]                                   |     *((r4 + 0x13)) = r3;
    0x0003bc14 str.w r6, [r4, r5, lsl 2]                             |     __asm ("str.w r6, [r4, r5, lsl 2]");
                                                                     | label_42:
    0x0003bc18 cmp r7, 0                                             |     
                                                                     |     if (r7 == 0) {
    0x0003bc1a beq.w 0x3b85c                                         |         goto label_0;
                                                                     |     }
    0x0003bc1e ldrb r5, [r4, 0x13]                                   |     r5 = *((r4 + 0x13));
    0x0003bc20 cmp r5, 7                                             |     
                                                                     |     if (r5 > 7) {
    0x0003bc22 bhi.w 0x3b85c                                         |         goto label_0;
                                                                     |     }
    0x0003bc26 add.w r3, r4, 0x74                                    |     r3 = r4 + 0x74;
                                                                     | label_19:
    0x0003bc2a add.w r1, r3, 0xc8                                    |     r1 = r3 + 0xc8;
    0x0003bc2e mov r2, r3                                            |     r2 = r3;
                                                                     |     do {
    0x0003bc30 ldr r0, [r2, 0xc]                                     |         r0 = *((r2 + 0xc));
    0x0003bc32 cmp r7, r0                                            |         
                                                                     |         if (r7 == r0) {
    0x0003bc34 beq.w 0x3c2b6                                         |             goto label_44;
                                                                     |         }
    0x0003bc38 adds r2, 0x14                                         |         r2 += 0x14;
    0x0003bc3a cmp r2, r1                                            |         
    0x0003bc3c bne 0x3bc30                                           |         
                                                                     |     } while (r2 != r1);
    0x0003bc3e adds r3, r5, 1                                        |     r3 = r5 + 1;
    0x0003bc40 adds r5, 6                                            |     r5 += 6;
    0x0003bc42 strb r3, [r4, 0x13]                                   |     *((r4 + 0x13)) = r3;
    0x0003bc44 str.w r7, [r4, r5, lsl 2]                             |     __asm ("str.w r7, [r4, r5, lsl 2]");
    0x0003bc48 b 0x3b85c                                             |     goto label_0;
    0x0003bc4a ldr r7, [r6, 0x2c]                                    |     r7 = *((r6 + 0x2c));
    0x0003bc4c mov.w r8, 0                                           |     r8 = 0;
    0x0003bc50 ldr r0, [r6, 0x1c]                                    |     r0 = *((r6 + 0x1c));
    0x0003bc52 mov r3, fp                                            |     r3 = fp;
    0x0003bc54 ldrsh.w r2, [r6, 0x20]                                |     r2 = *((r6 + 0x20));
    0x0003bc58 movs r1, 0x82                                         |     r1 = 0x82;
    0x0003bc5a ldrsh.w ip, [r7, 0x26]                                |     ip = *((r7 + 0x26));
    0x0003bc5e str.w r8, [sp]                                        |     __asm ("str.w r8, [sp]");
    0x0003bc62 mla r0, ip, r0, r0                                    |     __asm ("mla r0, ip, r0, r0");
    0x0003bc66 adds r0, 1                                            |     r0++;
    0x0003bc68 add r2, r0                                            |     r2 += r0;
    0x0003bc6a mov r0, r5                                            |     r0 = r5;
    0x0003bc6c bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003bc70 ldrsh.w r3, [r6, 0x20]                                |     r3 = *((r6 + 0x20));
    0x0003bc74 cmp r3, r8                                            |     
                                                                     |     if (r3 < r8) {
    0x0003bc76 blt.w 0x3b85c                                         |         goto label_0;
                                                                     |     }
    0x0003bc7a ldr r2, [r7, 4]                                       |     r2 = *((r7 + 4));
    0x0003bc7c add.w r3, r3, r3, lsl 1                               |     r3 += (r3 << 1);
    0x0003bc80 add.w r3, r2, r3, lsl 3                               |     r3 = r2 + (r3 << 3);
    0x0003bc84 ldrb r3, [r3, 0x15]                                   |     r3 = *((r3 + 0x15));
    0x0003bc86 cmp r3, 0x65                                          |     
                                                                     |     if (r3 != 0x65) {
    0x0003bc88 bne.w 0x3b85c                                         |         goto label_0;
                                                                     |     }
    0x0003bc8c mov r3, r8                                            |     r3 = r8;
    0x0003bc8e mov r0, r5                                            |     r0 = r5;
    0x0003bc90 mov r2, fp                                            |     r2 = fp;
    0x0003bc92 movs r1, 0x27                                         |     r1 = 0x27;
    0x0003bc94 str.w r8, [sp]                                        |     __asm ("str.w r8, [sp]");
    0x0003bc98 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003bc9c b 0x3b85c                                             |     goto label_0;
    0x0003bc9e ldr.w r7, [r0, 0x19c]                                 |     r7 = *((r0 + 0x19c));
    0x0003bca2 cmp r7, 0                                             |     
                                                                     |     if (r7 == 0) {
    0x0003bca4 beq.w 0x3c2a8                                         |         goto label_45;
                                                                     |     }
    0x0003bca8 ldrb r2, [r6, 1]                                      |     r2 = *((r6 + 1));
    0x0003bcaa ldr r3, [r6, 8]                                       |     r3 = *((r6 + 8));
    0x0003bcac cmp r2, 2                                             |     
                                                                     |     if (r2 == 2) {
    0x0003bcae beq.w 0x3c004                                         |         goto label_46;
                                                                     |     }
    0x0003bcb2 cmp r2, 4                                             |     
                                                                     |     if (r2 != 4) {
    0x0003bcb4 bne.w 0x3c012                                         |         goto label_47;
                                                                     |     }
    0x0003bcb8 str r3, [sp, 4]                                       |     var_4h = r3;
    0x0003bcba mov r3, r2                                            |     r3 = r2;
    0x0003bcbc movs r2, 0                                            |     r2 = 0;
    0x0003bcbe mov r0, r5                                            |     r0 = r5;
    0x0003bcc0 movs r1, 0x18                                         |     r1 = 0x18;
    0x0003bcc2 str r2, [sp, 8]                                       |     var_8h = r2;
    0x0003bcc4 str r2, [sp]                                          |     *(sp) = r2;
    0x0003bcc6 bl 0x1977c                                            |     fcn_0001977c (r0, r1, r2, r3, r4, r5);
    0x0003bcca b 0x3b85c                                             |     goto label_0;
    0x0003bccc ldr r3, [r6, 8]                                       |     r3 = *((r6 + 8));
    0x0003bcce ldrb r6, [r3, 2]                                      |     r6 = *((r3 + 2));
    0x0003bcd0 adds r1, r3, 2                                        |     r1 = r3 + 2;
    0x0003bcd2 cmp r6, 0                                             |     
                                                                     |     if (r6 == 0) {
    0x0003bcd4 beq.w 0x3c29e                                         |         goto label_48;
                                                                     |     }
    0x0003bcd8 mov r3, r1                                            |     r3 = r1;
                                                                     |     do {
    0x0003bcda ldrb r2, [r3, 1]!                                     |         r2 = *((r3 += 1));
    0x0003bcde cmp r2, 0                                             |         
    0x0003bce0 bne 0x3bcda                                           |         
                                                                     |     } while (r2 != 0);
    0x0003bce2 subs r2, r3, r1                                       |     r2 = r3 - r1;
    0x0003bce4 bic r2, r2, 0xc0000000                                |     r2 = BIT_MASK (r2, 0xc0000000);
    0x0003bce8 subs r2, 1                                            |     r2--;
    0x0003bcea add.w r6, r2, r2, lsr 31                              |     r6 = r2 + (r2 >> 31);
    0x0003bcee asrs r6, r6, 1                                        |     r6 >>= 1;
                                                                     | label_14:
    0x0003bcf0 ldr r0, [r5]                                          |     r0 = *(r5);
    0x0003bcf2 bl 0xd4ac                                             |     fcn_0000d4ac (r0, r1, r2);
    0x0003bcf6 movs r3, 0                                            |     r3 = 0;
    0x0003bcf8 mov.w r1, -1                                          |     r1 = -1;
    0x0003bcfc str r0, [sp, 4]                                       |     var_4h = r0;
    0x0003bcfe mov r2, r6                                            |     r2 = r6;
    0x0003bd00 str r3, [sp]                                          |     *(sp) = r3;
    0x0003bd02 mov r0, r5                                            |     r0 = r5;
    0x0003bd04 str r1, [sp, 8]                                       |     var_8h = r1;
    0x0003bd06 mov r3, fp                                            |     r3 = fp;
    0x0003bd08 movs r1, 0x1e                                         |     r1 = 0x1e;
    0x0003bd0a bl 0x1977c                                            |     fcn_0001977c (r0, r1, r2, r3, r4, r5);
    0x0003bd0e b 0x3b85c                                             |     goto label_0;
    0x0003bd10 ldr r1, [r6, 8]                                       |     r1 = *((r6 + 8));
    0x0003bd12 cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x0003bd14 beq.w 0x3b8e0                                         |         goto label_4;
                                                                     |     }
    0x0003bd18 mov r3, fp                                            |     r3 = fp;
    0x0003bd1a mov r0, r5                                            |     r0 = r5;
    0x0003bd1c movs r2, 0                                            |     r2 = 0;
    0x0003bd1e bl 0x19504                                            |     fcn_00019504 (r0, r1, r2, r3);
    0x0003bd22 b 0x3b85c                                             |     goto label_0;
    0x0003bd24 ldrd r1, r2, [r6, 4]                                  |     __asm ("ldrd r1, r2, [r6, 4]");
    0x0003bd28 movs r3, 0                                            |     r3 = 0;
    0x0003bd2a str.w fp, [sp]                                        |     __asm ("str.w fp, [sp]");
    0x0003bd2e bl 0x1f1c8                                            |     fcn_0001f1c8 (r0, r1, r2, r3, r4);
    0x0003bd32 b 0x3b85c                                             |     goto label_0;
    0x0003bd34 ldr r3, [r6, 8]                                       |     r3 = *((r6 + 8));
    0x0003bd36 movs r2, 0                                            |     r2 = 0;
    0x0003bd38 mov r0, r5                                            |     r0 = r5;
    0x0003bd3a movs r1, 0x61                                         |     r1 = 0x61;
    0x0003bd3c str r2, [sp, 8]                                       |     var_8h = r2;
    0x0003bd3e strd r2, r3, [sp]                                     |     __asm ("strd r2, r3, [sp]");
    0x0003bd42 mov r3, fp                                            |     r3 = fp;
    0x0003bd44 bl 0x1977c                                            |     fcn_0001977c (r0, r1, r2, r3, r4, r5);
    0x0003bd48 b 0x3b85c                                             |     goto label_0;
    0x0003bd4a movs r3, 0                                            |     r3 = 0;
    0x0003bd4c movs r1, 0x1f                                         |     r1 = 0x1f;
    0x0003bd4e str r3, [sp]                                          |     *(sp) = r3;
    0x0003bd50 mov r0, r5                                            |     r0 = r5;
    0x0003bd52 mov r3, fp                                            |     r3 = fp;
    0x0003bd54 ldrsh.w r2, [r6, 0x20]                                |     r2 = *((r6 + 0x20));
    0x0003bd58 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003bd5c ldr r3, [r6, 8]                                       |     r3 = *((r6 + 8));
    0x0003bd5e ldrb r3, [r3, 1]                                      |     r3 = *((r3 + 1));
    0x0003bd60 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0003bd62 beq.w 0x3b85c                                         |         goto label_0;
                                                                     |     }
    0x0003bd66 ldrsh.w r3, [r6, 0x20]                                |     r3 = *((r6 + 0x20));
    0x0003bd6a mov r0, r5                                            |     r0 = r5;
    0x0003bd6c ldr.w r2, [r4, 0x1d8]                                 |     r2 = *((r4 + 0x1d8));
    0x0003bd70 mov.w r1, -1                                          |     r1 = -1;
    0x0003bd74 add.w r3, r3, 0x40000000                              |     r3 += 0x40000000;
    0x0003bd78 subs r3, 1                                            |     r3--;
    0x0003bd7a ldr.w r2, [r2, r3, lsl 2]                             |     offset_2 = r3 << 2;
                                                                     |     r2 = *((r2 + offset_2));
    0x0003bd7e mvn r3, 1                                             |     r3 = ~1;
    0x0003bd82 bl 0x1021c                                            |     fcn_0001021c (r0, r1, r2, r3);
    0x0003bd86 b 0x3b85c                                             |     goto label_0;
    0x0003bd88 ldr r0, [r6, 0x1c]                                    |     r0 = *((r6 + 0x1c));
    0x0003bd8a b 0x3b8b0                                             |     goto label_1;
    0x0003bd8c ldr r1, [r6, 0xc]                                     |     r1 = *((r6 + 0xc));
    0x0003bd8e ldrb r3, [r1]                                         |     r3 = *(r1);
    0x0003bd90 cmp r3, 0x84                                          |     
                                                                     |     if (r3 == 0x84) {
    0x0003bd92 beq.w 0x3c19a                                         |         goto label_49;
                                                                     |     }
    0x0003bd96 cmp r3, 0x85                                          |     
                                                                     |     if (r3 != 0x85) {
    0x0003bd98 bne.w 0x3c062                                         |         goto label_50;
                                                                     |     }
    0x0003bd9c ldr r1, [r1, 8]                                       |     r1 = *((r1 + 8));
    0x0003bd9e cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x0003bda0 beq.w 0x3b8e0                                         |         goto label_4;
                                                                     |     }
    0x0003bda4 mov r3, fp                                            |     r3 = fp;
    0x0003bda6 mov r0, r5                                            |     r0 = r5;
    0x0003bda8 movs r2, 1                                            |     r2 = 1;
    0x0003bdaa bl 0x19504                                            |     fcn_00019504 (r0, r1, r2, r3);
    0x0003bdae b 0x3b85c                                             |     goto label_0;
    0x0003bdb0 ldr r2, [r6, 0x28]                                    |     r2 = *((r6 + 0x28));
    0x0003bdb2 ldrsh.w r3, [r6, 0x22]                                |     r3 = *((r6 + 0x22));
    0x0003bdb6 ldr r1, [r2, 0x1c]                                    |     r1 = *((r2 + 0x1c));
    0x0003bdb8 add.w r3, r3, r3, lsl 1                               |     r3 += (r3 << 1);
    0x0003bdbc add.w r1, r1, r3, lsl 3                               |     r1 += (r3 << 3);
    0x0003bdc0 ldrb r3, [r2]                                         |     r3 = *(r2);
    0x0003bdc2 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0003bdc4 bne.w 0x3c024                                         |         goto label_51;
                                                                     |     }
    0x0003bdc8 ldr r0, [r1, 0x10]                                    |     r0 = *((r1 + 0x10));
    0x0003bdca b 0x3b8b0                                             |     goto label_1;
    0x0003bdcc ldr r3, [r6, 0x28]                                    |     r3 = *((r6 + 0x28));
    0x0003bdce cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0003bdd0 beq.w 0x3c234                                         |         goto label_52;
                                                                     |     }
    0x0003bdd4 ldrsh.w r2, [r6, 0x22]                                |     r2 = *((r6 + 0x22));
    0x0003bdd8 ldr r3, [r3, 0x28]                                    |     r3 = *((r3 + 0x28));
    0x0003bdda add.w r3, r3, r2, lsl 4                               |     r3 += (r2 << 4);
    0x0003bdde ldr r0, [r3, 8]                                       |     r0 = *((r3 + 8));
    0x0003bde0 b 0x3b8b0                                             |     goto label_1;
    0x0003bde2 ldr r0, [r5, 0x18]                                    |     r0 = *((r5 + 0x18));
    0x0003bde4 mov.w sb, 0                                           |     sb = 0;
    0x0003bde8 bl 0x19ed0                                            |     r0 = fcn_00019ed0 (r0);
    0x0003bdec mov r8, r0                                            |     r8 = r0;
    0x0003bdee ldr r0, [r5, 0x18]                                    |     r0 = *((r5 + 0x18));
    0x0003bdf0 bl 0x19ed0                                            |     fcn_00019ed0 (r0);
    0x0003bdf4 mov r3, fp                                            |     r3 = fp;
    0x0003bdf6 mov r7, r0                                            |     r7 = r0;
    0x0003bdf8 mov r2, sb                                            |     r2 = sb;
    0x0003bdfa movs r1, 0x1c                                         |     r1 = 0x1c;
    0x0003bdfc mov r0, r5                                            |     r0 = r5;
    0x0003bdfe str.w sb, [sp]                                        |     __asm ("str.w sb, [sp]");
    0x0003be02 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003be06 mov r2, r8                                            |     r2 = r8;
    0x0003be08 mov r3, r7                                            |     r3 = r7;
    0x0003be0a mov r1, r6                                            |     r1 = r6;
    0x0003be0c mov r0, r4                                            |     r0 = r4;
    0x0003be0e bl 0x3c998                                            |     fcn_0003c998 (r0, r1, r2, r3);
    0x0003be12 movs r2, 1                                            |     r2 = 1;
    0x0003be14 mov r3, fp                                            |     r3 = fp;
    0x0003be16 movs r1, 0x19                                         |     r1 = 0x19;
    0x0003be18 mov r0, r5                                            |     r0 = r5;
    0x0003be1a str.w sb, [sp]                                        |     __asm ("str.w sb, [sp]");
    0x0003be1e bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003be22 mvns.w r8, r8                                         |     r8 = ~r8;
    0x0003be26 ldr r2, [r5, 0x18]                                    |     r2 = *((r5 + 0x18));
                                                                     |     if (r8 >= r8) {
    0x0003be28 bmi 0x3be34                                           |         
    0x0003be2a ldr r3, [r2, 0x70]                                    |         r3 = *((r2 + 0x70));
                                                                     |         if (r3 == 0) {
    0x0003be2c cbz r3, 0x3be34                                       |             goto label_53;
                                                                     |         }
    0x0003be2e ldr r1, [r5, 0x20]                                    |         r1 = *((r5 + 0x20));
    0x0003be30 str.w r1, [r3, r8, lsl 2]                             |         __asm ("str.w r1, [r3, r8, lsl 2]");
                                                                     |     }
                                                                     | label_53:
    0x0003be34 ldr r3, [r5, 0x20]                                    |     r3 = *((r5 + 0x20));
    0x0003be36 movs r1, 0x25                                         |     r1 = 0x25;
    0x0003be38 mov r0, r5                                            |     r0 = r5;
    0x0003be3a subs r3, 1                                            |     r3--;
    0x0003be3c str r3, [r2, 0x58]                                    |     *((r2 + 0x58)) = r3;
    0x0003be3e movs r3, 0                                            |     r3 = 0;
    0x0003be40 mov r2, fp                                            |     r2 = fp;
    0x0003be42 str r3, [sp]                                          |     *(sp) = r3;
    0x0003be44 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003be48 mvns r7, r7                                           |     r7 = ~r7;
    0x0003be4a ldr r2, [r5, 0x18]                                    |     r2 = *((r5 + 0x18));
                                                                     |     if (r7 >= r7) {
    0x0003be4c bmi 0x3be58                                           |         
    0x0003be4e ldr r3, [r2, 0x70]                                    |         r3 = *((r2 + 0x70));
                                                                     |         if (r3 == 0) {
    0x0003be50 cbz r3, 0x3be58                                       |             goto label_6;
                                                                     |         }
    0x0003be52 ldr r1, [r5, 0x20]                                    |         r1 = *((r5 + 0x20));
    0x0003be54 str.w r1, [r3, r7, lsl 2]                             |         __asm ("str.w r1, [r3, r7, lsl 2]");
                                                                     |     }
                                                                     | label_6:
    0x0003be58 ldr r3, [r5, 0x20]                                    |     r3 = *((r5 + 0x20));
    0x0003be5a subs r3, 1                                            |     r3--;
    0x0003be5c str r3, [r2, 0x58]                                    |     *((r2 + 0x58)) = r3;
    0x0003be5e b 0x3b85c                                             |     goto label_0;
    0x0003be60 ldr r3, [r7, 0x10]                                    |     r3 = *((r7 + 0x10));
    0x0003be62 ldr r3, [r3, 0xc]                                     |     r3 = *((r3 + 0xc));
    0x0003be64 ldrb.w r1, [r3, 0x4d]                                 |     r1 = *((r3 + 0x4d));
    0x0003be68 ldr r3, [r6, 4]                                       |     r3 = *((r6 + 4));
    0x0003be6a lsls r3, r3, 0x11                                     |     r3 <<= 0x11;
    0x0003be6c itt mi                                                |     
                                                                     |     if (r3 >= r3) {
    0x0003be6e movmi sb, 0                                           |         sb = 0;
                                                                     |     }
                                                                     |     if (r3 < r3) {
    0x0003be72 str.w sb, [sp, 0x14]                                  |         __asm ("str.w sb, [var_14h]");
                                                                     |     }
                                                                     |     if (r3 >= r3) {
    0x0003be76 bmi 0x3be8a                                           |         
    0x0003be78 ldr.w sb, [r6, 0x14]                                  |         sb = *((r6 + 0x14));
    0x0003be7c cmp.w sb, 0                                           |         
                                                                     |         if (sb == 0) {
    0x0003be80 beq.w 0x3c242                                         |             goto label_54;
                                                                     |         }
    0x0003be84 ldr.w r3, [sb]                                        |         r3 = *(sb);
    0x0003be88 str r3, [sp, 0x14]                                    |         var_14h = r3;
                                                                     |     }
                                                                     | label_12:
    0x0003be8a ldr.w r8, [r6, 8]                                     |     r8 = *((r6 + 8));
    0x0003be8e mov r2, r8                                            |     r2 = r8;
    0x0003be90 cmp.w r8, 0                                           |     
                                                                     |     if (r8 == 0) {
    0x0003be94 beq 0x3beb2                                           |         goto label_55;
                                                                     |     }
    0x0003be96 ldrb.w r3, [r8]                                       |     r3 = *(r8);
    0x0003be9a cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0003be9c beq.w 0x3c2ca                                         |         goto label_56;
                                                                     |     }
    0x0003bea0 mov r3, r8                                            |     r3 = r8;
                                                                     |     do {
    0x0003bea2 ldrb r2, [r3, 1]!                                     |         r2 = *((r3 += 1));
    0x0003bea6 cmp r2, 0                                             |         
    0x0003bea8 bne 0x3bea2                                           |         
                                                                     |     } while (r2 != 0);
                                                                     | label_18:
    0x0003beaa sub.w r3, r3, r8                                      |     r3 -= r8;
    0x0003beae bic r2, r3, 0xc0000000                                |     r2 = BIT_MASK (r3, 0xc0000000);
                                                                     | label_55:
    0x0003beb2 movs r3, 0                                            |     r3 = 0;
    0x0003beb4 str r1, [sp]                                          |     *(sp) = r1;
    0x0003beb6 str r3, [sp, 4]                                       |     var_4h = r3;
    0x0003beb8 mov r1, r8                                            |     r1 = r8;
    0x0003beba ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0003bebc mov r0, r7                                            |     r0 = r7;
    0x0003bebe str r2, [sp, 0x18]                                    |     var_18h = r2;
    0x0003bec0 bl 0x14be8                                            |     fcn_00014be8 (r0, r1, r2, r3, r4, r5);
    0x0003bec4 ldr r2, [sp, 0x18]                                    |     r2 = var_18h;
    0x0003bec6 mov sl, r0                                            |     sl = r0;
    0x0003bec8 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0003beca beq.w 0x3c052                                         |         goto label_57;
                                                                     |     }
    0x0003bece ldr r3, [r0, 0xc]                                     |     r3 = *((r0 + 0xc));
    0x0003bed0 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0003bed2 beq.w 0x3c052                                         |         goto label_57;
                                                                     |     }
    0x0003bed6 ldrh r1, [r0, 2]                                      |     r1 = *((r0 + 2));
    0x0003bed8 lsls r0, r1, 0x16                                     |     r0 = r1 << 0x16;
                                                                     |     if (r0 < r1) {
    0x0003beda bmi.w 0x3c1ac                                         |         goto label_58;
                                                                     |     }
    0x0003bede ands r3, r1, 0x400                                    |     r3 = r1 & 0x400;
                                                                     |     if (r3 != r1) {
    0x0003bee2 bne.w 0x3c28c                                         |         goto label_59;
                                                                     |     }
    0x0003bee6 ldr r2, [sp, 0x14]                                    |     r2 = var_14h;
    0x0003bee8 cmp r2, 0                                             |     
                                                                     |     if (r2 <= 0) {
    0x0003beea ble.w 0x3c334                                         |         goto label_60;
                                                                     |     }
    0x0003beee ldr r2, [pc, 0x364]                                   |     
    0x0003bef0 mov r8, r3                                            |     r8 = r3;
    0x0003bef2 strd r5, r7, [sp, 0x28]                               |     __asm ("strd r5, r7, [sp, 0x28]");
    0x0003bef6 mov r7, r3                                            |     r7 = r3;
    0x0003bef8 str r6, [sp, 0x30]                                    |     var_30h = r6;
    0x0003befa mov r5, r3                                            |     r5 = r3;
    0x0003befc add r2, pc                                            |     r2 = 0x78156;
    0x0003befe mov r6, r4                                            |     r6 = r4;
    0x0003bf00 str r2, [sp, 0x20]                                    |     var_20h = r2;
    0x0003bf02 ldr r2, [pc, 0x354]                                   |     
    0x0003bf04 ldr r4, [sp, 0x14]                                    |     r4 = var_14h;
    0x0003bf06 str r3, [sp, 0x18]                                    |     var_18h = r3;
    0x0003bf08 add r2, pc                                            |     r2 = 0x78166;
    0x0003bf0a str.w fp, [sp, 0x34]                                  |     __asm ("str.w fp, [var_34h]");
    0x0003bf0e str r2, [sp, 0x24]                                    |     var_24h = r2;
    0x0003bf10 add r2, sp, 0x74                                      |     r2 += var_74h;
    0x0003bf12 str r2, [sp, 0x1c]                                    |     var_1ch = r2;
    0x0003bf14 b 0x3bf34                                             |     
                                                                     |     while (r8 > 0x1f) {
                                                                     | label_5:
    0x0003bf16 ldrh.w r1, [sl, 2]                                    |         r1 = *((sl + 2));
    0x0003bf1a clz r3, r7                                            |         r3 &= r7;
    0x0003bf1e lsrs r3, r3, 5                                        |         r3 >>= 5;
    0x0003bf20 ands.w r3, r3, r1, lsr 5                              |         r3 &= (r1 >> 5);
                                                                     |         if (r3 != r3) {
    0x0003bf24 bne.w 0x3c224                                         |             goto label_61;
                                                                     |         }
                                                                     | label_11:
    0x0003bf28 add.w r8, r8, 1                                       |         r8++;
    0x0003bf2c adds r5, 0x14                                         |         r5 += 0x14;
    0x0003bf2e cmp r4, r8                                            |         
                                                                     |         if (r4 == r8) {
    0x0003bf30 beq.w 0x3c0a6                                         |             goto label_62;
                                                                     |         }
    0x0003bf34 cmp.w r8, 0x1f                                        |         
    0x0003bf38 bgt 0x3bf16                                           |         
                                                                     |     }
    0x0003bf3a ldr.w r3, [sb, 4]                                     |     r3 = *((sb + 4));
    0x0003bf3e mov.w fp, 1                                           |     
    0x0003bf42 ldr r0, [sp, 0x1c]                                    |     r0 = var_1ch;
    0x0003bf44 ldr r1, [r3, r5]                                      |     r1 = *((r3 + r5));
    0x0003bf46 ldr r3, [sp, 0x20]                                    |     r3 = var_20h;
    0x0003bf48 str.w fp, [sp, 0x88]                                  |     __asm ("str.w fp, [var_88h]");
    0x0003bf4c str r3, [sp, 0x74]                                    |     var_74h = r3;
    0x0003bf4e ldr r3, [sp, 0x24]                                    |     r3 = var_24h;
    0x0003bf50 str r3, [sp, 0x78]                                    |     var_78h = r3;
    0x0003bf52 movs r3, 0                                            |     r3 = 0;
    0x0003bf54 strd r3, r3, [sp, 0x7c]                               |     __asm ("strd r3, r3, [sp, 0x7c]");
    0x0003bf58 str r3, [sp, 0x84]                                    |     var_84h = r3;
    0x0003bf5a bl 0xc6b0                                             |     fcn_0000c6b0 (r0, r1);
    0x0003bf5e ldr r1, [sp, 0x88]                                    |     r1 = var_88h;
    0x0003bf60 cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x0003bf62 beq 0x3bf16                                           |         goto label_5;
                                                                     |     }
    0x0003bf64 ldr r2, [sp, 0x18]                                    |     r2 = var_18h;
    0x0003bf66 lsl.w r3, fp, r8                                      |     r3 = fp << r8;
    0x0003bf6a orrs r2, r3                                           |     r2 |= r3;
    0x0003bf6c str r2, [sp, 0x18]                                    |     var_18h = r2;
    0x0003bf6e b 0x3bf16                                             |     goto label_5;
    0x0003bf70 ldr r1, [r6, 0xc]                                     |     r1 = *((r6 + 0xc));
    0x0003bf72 mov r2, fp                                            |     r2 = fp;
    0x0003bf74 bl 0x3b6f0                                            |     fcn_0003b6f0 (r0, r1, r2);
    0x0003bf78 ldr r3, [r6, 8]                                       |     r3 = *((r6 + 8));
    0x0003bf7a mov r6, r0                                            |     r6 = r0;
    0x0003bf7c cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0003bf7e beq.w 0x3c2a4                                         |         goto label_63;
                                                                     |     }
    0x0003bf82 mov r0, r3                                            |     r0 = r3;
    0x0003bf84 movs r1, 0                                            |     r1 = 0;
    0x0003bf86 bl 0xa524                                             |     r0 = fcn_0000a524 (r0, r1);
    0x0003bf8a add.w r7, r0, 0x2e                                    |     r7 = r0 + 0x2e;
                                                                     | label_15:
    0x0003bf8e cmp fp, r6                                            |     
                                                                     |     if (fp != r6) {
    0x0003bf90 beq 0x3bfa2                                           |         
    0x0003bf92 movs r3, 0                                            |         r3 = 0;
    0x0003bf94 mov r2, r6                                            |         r2 = r6;
    0x0003bf96 str r3, [sp]                                          |         *(sp) = r3;
    0x0003bf98 movs r1, 0x22                                         |         r1 = 0x22;
    0x0003bf9a mov r3, fp                                            |         r3 = fp;
    0x0003bf9c mov r0, r5                                            |         r0 = r5;
    0x0003bf9e bl 0x18bf8                                            |         fcn_00018bf8 (r0, r1, r2, r3, r4);
                                                                     |     }
    0x0003bfa2 movs r3, 0                                            |     r3 = 0;
    0x0003bfa4 mov r1, r7                                            |     r1 = r7;
    0x0003bfa6 mov r2, fp                                            |     r2 = fp;
    0x0003bfa8 mov r0, r5                                            |     r0 = r5;
    0x0003bfaa str r3, [sp]                                          |     *(sp) = r3;
    0x0003bfac bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003bfb0 movs r2, 1                                            |     r2 = 1;
    0x0003bfb2 mov r1, fp                                            |     r1 = fp;
    0x0003bfb4 mov r0, r4                                            |     r0 = r4;
    0x0003bfb6 bl 0xaea0                                             |     fcn_0000aea0 (r0, r1, r2);
    0x0003bfba b 0x3b85c                                             |     goto label_0;
                                                                     | label_35:
    0x0003bfbc ldr r3, [sp, 0x1c]                                    |     r3 = var_1ch;
    0x0003bfbe ands r2, r3, 1                                        |     r2 = r3 & 1;
                                                                     |     if (r2 == r3) {
    0x0003bfc2 beq 0x3c03e                                           |         goto label_64;
                                                                     |     }
    0x0003bfc4 ldr r3, [sp, 0x20]                                    |     r3 = var_20h;
    0x0003bfc6 mov r0, r4                                            |     r0 = r4;
    0x0003bfc8 ldr r2, [r3, 4]                                       |     r2 = *((r3 + 4));
    0x0003bfca ldr r3, [sp, 0x1c]                                    |     r3 = var_1ch;
    0x0003bfcc add.w r3, r3, r3, lsl 2                               |     r3 += (r3 << 2);
    0x0003bfd0 add.w r3, r2, r3, lsl 2                               |     r3 = r2 + (r3 << 2);
    0x0003bfd4 mov r2, fp                                            |     r2 = fp;
    0x0003bfd6 ldr r1, [r3, -0x14]                                   |     r1 = *((r3 - 0x14));
    0x0003bfda ldr r3, [r4, 0x64]                                    |     r3 = *((r4 + 0x64));
    0x0003bfdc adds r3, 1                                            |     r3++;
    0x0003bfde str r3, [r4, 0x64]                                    |     *((r4 + 0x64)) = r3;
    0x0003bfe0 bl 0x3c4a8                                            |     fcn_0003c4a8 (r0, r1, r2);
    0x0003bfe4 mov r0, r4                                            |     r0 = r4;
    0x0003bfe6 bl 0xa404                                             |     fcn_0000a404 (r0);
                                                                     | label_8:
    0x0003bfea mvns.w sb, sb                                         |     sb = ~sb;
    0x0003bfee ldr r2, [r5, 0x18]                                    |     r2 = *((r5 + 0x18));
                                                                     |     if (sb < sb) {
    0x0003bff0 bmi.w 0x3be58                                         |         goto label_6;
                                                                     |     }
    0x0003bff4 ldr r3, [r2, 0x70]                                    |     r3 = *((r2 + 0x70));
    0x0003bff6 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0003bff8 beq.w 0x3be58                                         |         goto label_6;
                                                                     |     }
    0x0003bffc ldr r1, [r5, 0x20]                                    |     r1 = *((r5 + 0x20));
    0x0003bffe str.w r1, [r3, sb, lsl 2]                             |     __asm ("str.w r1, [r3, sb, lsl 2]");
    0x0003c002 b 0x3be58                                             |     goto label_6;
                                                                     | label_46:
    0x0003c004 ldr.w r1, [r0, 0x198]                                 |     r1 = *((r0 + 0x198));
    0x0003c008 cmp r1, 0                                             |     
    0x0003c00a it eq                                                 |     
                                                                     |     if (r1 != 0) {
    0x0003c00c moveq r1, r0                                          |         r1 = r0;
                                                                     |     }
    0x0003c00e movs r0, 1                                            |     r0 = 1;
    0x0003c010 strb r0, [r1, 0x15]                                   |     *((r1 + 0x15)) = r0;
                                                                     | label_47:
    0x0003c012 movs r1, 0                                            |     r1 = 0;
    0x0003c014 mov r0, r4                                            |     r0 = r4;
    0x0003c016 strd r1, r1, [sp]                                     |     __asm ("strd r1, r1, [sp]");
    0x0003c01a movw r1, 0x713                                        |     r1 = 0x713;
    0x0003c01e bl 0x19494                                            |     fcn_00019494 (r0, r1, r2, r3, r4, r5);
    0x0003c022 b 0x3b85c                                             |     goto label_0;
                                                                     | label_51:
    0x0003c024 ldrb r3, [r2, 1]                                      |     r3 = *((r2 + 1));
    0x0003c026 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0003c028 beq.w 0x3baf0                                         |         goto label_7;
                                                                     |     }
    0x0003c02c ldr r3, [r1, 0xc]                                     |     r3 = *((r1 + 0xc));
    0x0003c02e mov r0, r5                                            |     r0 = r5;
    0x0003c030 ldr r2, [r2, 8]                                       |     r2 = *((r2 + 8));
    0x0003c032 movs r1, 0x2e                                         |     r1 = 0x2e;
    0x0003c034 str.w fp, [sp]                                        |     __asm ("str.w fp, [sp]");
    0x0003c038 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003c03c b 0x3b85c                                             |     goto label_0;
                                                                     | label_64:
    0x0003c03e mov r3, fp                                            |     r3 = fp;
    0x0003c040 movs r1, 0x1c                                         |     r1 = 0x1c;
    0x0003c042 mov r0, r5                                            |     r0 = r5;
    0x0003c044 str r2, [sp]                                          |     *(sp) = r2;
    0x0003c046 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003c04a b 0x3bfea                                             |     goto label_8;
                                                                     | label_34:
    0x0003c04c ldr.w sl, [sp, 0x14]                                  |     sl = var_14h;
    0x0003c050 b 0x3b966                                             |     goto label_9;
                                                                     | label_57:
    0x0003c052 ldr r1, [pc, 0x208]                                   |     
    0x0003c054 mov r3, r8                                            |     r3 = r8;
    0x0003c056 mov r0, r4                                            |     r0 = r4;
    0x0003c058 add r1, pc                                            |     r1 = 0x782ba;
    0x0003c05a bl 0x1ca34                                            |     fcn_0001ca34 (r0);
    0x0003c05e b.w 0x3b85c                                           |     goto label_0;
                                                                     | label_50:
    0x0003c062 movs r3, 0x84                                         |     r3 = 0x84;
    0x0003c064 mov.w r2, 0x4400                                      |     r2 = 0x4400;
    0x0003c068 strb.w r3, [sp, 0x44]                                 |     var_44h = r3;
    0x0003c06c movs r3, 0                                            |     r3 = 0;
    0x0003c06e strd r2, r3, [sp, 0x48]                               |     __asm ("strd r2, r3, [sp, 0x48]");
    0x0003c072 add r1, sp, 0x44                                      |     r1 += var_44h;
    0x0003c074 add r2, sp, 0x3c                                      |     r2 += var_3ch;
    0x0003c076 bl 0x3c858                                            |     fcn_0003c858 (r0, r1, r2);
    0x0003c07a ldr r1, [r6, 0xc]                                     |     r1 = *((r6 + 0xc));
    0x0003c07c add r2, sp, 0x40                                      |     r2 += var_40h;
    0x0003c07e mov r6, r0                                            |     r6 = r0;
    0x0003c080 mov r0, r4                                            |     r0 = r4;
    0x0003c082 bl 0x3c858                                            |     fcn_0003c858 (r0, r1, r2);
    0x0003c086 mov r3, r6                                            |     r3 = r6;
    0x0003c088 mov r2, r0                                            |     r2 = r0;
    0x0003c08a movs r1, 0x5a                                         |     r1 = 0x5a;
    0x0003c08c mov r0, r5                                            |     r0 = r5;
    0x0003c08e str.w fp, [sp]                                        |     __asm ("str.w fp, [sp]");
    0x0003c092 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003c096 b.w 0x3b85c                                           |     goto label_0;
                                                                     | label_39:
    0x0003c09a ldr r6, [r4, 0x48]                                    |     r6 = *((r4 + 0x48));
    0x0003c09c adds r6, 1                                            |     r6++;
    0x0003c09e mov r7, r6                                            |     r7 = r6;
                                                                     | label_27:
    0x0003c0a0 adds r7, 1                                            |     r7++;
    0x0003c0a2 str r7, [r4, 0x48]                                    |     *((r4 + 0x48)) = r7;
    0x0003c0a4 b 0x3bb6a                                             |     goto label_10;
                                                                     | label_62:
    0x0003c0a6 mov r4, r6                                            |     r4 = r6;
    0x0003c0a8 str r7, [sp, 0x1c]                                    |     var_1ch = r7;
    0x0003c0aa ldrd r6, fp, [sp, 0x30]                               |     __asm ("ldrd r6, fp, [var_30h]");
    0x0003c0ae ldrd r5, r7, [sp, 0x28]                               |     __asm ("ldrd r5, r7, [var_28h]");
    0x0003c0b2 cmp.w sb, 0                                           |     
                                                                     |     if (sb == 0) {
    0x0003c0b6 beq.w 0x3c264                                         |         goto label_65;
                                                                     |     }
    0x0003c0ba ldr r3, [sp, 0x18]                                    |     r3 = var_18h;
    0x0003c0bc cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0003c0be beq.w 0x3c2e2                                         |         goto label_66;
                                                                     |     }
    0x0003c0c2 ldr r3, [r4, 0x48]                                    |     r3 = *((r4 + 0x48));
    0x0003c0c4 ldr r2, [sp, 0x14]                                    |     r2 = var_14h;
    0x0003c0c6 ldrh.w r1, [sl, 2]                                    |     r1 = *((sl + 2));
    0x0003c0ca add.w r8, r3, 1                                       |     r8 = r3 + 1;
    0x0003c0ce adds r2, r3, r2                                       |     r2 = r3 + r2;
    0x0003c0d0 str r2, [r4, 0x48]                                    |     *((r4 + 0x48)) = r2;
                                                                     | label_21:
    0x0003c0d2 tst.w r1, 0xc0                                        |     
    0x0003c0d6 ldr.w r2, [sb, 4]                                     |     r2 = *((sb + 4));
                                                                     |     if ((r1 & 0xc0) != 0) {
    0x0003c0da beq 0x3c0f0                                           |         
    0x0003c0dc ldr r0, [r2]                                          |         r0 = *(r2);
    0x0003c0de ldrb r3, [r0]                                         |         r3 = *(r0);
    0x0003c0e0 adds r3, 0x66                                         |         r3 += 0x66;
    0x0003c0e2 tst.w r3, 0xfd                                        |         
    0x0003c0e6 itt eq                                                |         
                                                                     |         if ((r3 & 0xfd) == 0) {
    0x0003c0e8 biceq r3, r1, 0x3f                                    |             __asm ("biceq r3, r1, 0x3f");
                                                                     |         }
                                                                     |         if ((r3 & 0xfd) != 0) {
    0x0003c0ec strb.w r3, [r0, 0x26]                                 |             *((r0 + 0x26)) = r3;
                                                                     |             goto label_67;
                                                                     |         }
                                                                     |     }
                                                                     | label_67:
    0x0003c0f0 ldr r3, [r4, 0x64]                                    |     r3 = *((r4 + 0x64));
    0x0003c0f2 mov r0, r4                                            |     r0 = r4;
    0x0003c0f4 adds r3, 1                                            |     r3++;
    0x0003c0f6 str r3, [r4, 0x64]                                    |     *((r4 + 0x64)) = r3;
    0x0003c0f8 movs r3, 3                                            |     r3 = 3;
    0x0003c0fa ldr.w r1, [sb]                                        |     r1 = *(sb);
    0x0003c0fe str r3, [sp]                                          |     *(sp) = r3;
    0x0003c100 mov r3, r8                                            |     r3 = r8;
    0x0003c102 bl 0x415b0                                            |     fcn_000415b0 (r0, r1, r2, r3, r4, r5);
    0x0003c106 mov r0, r4                                            |     r0 = r4;
    0x0003c108 bl 0xa404                                             |     fcn_0000a404 (r0);
    0x0003c10c ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0003c10e cmp r3, 1                                             |     
                                                                     |     if (r3 > 1) {
    0x0003c110 bgt.w 0x3c272                                         |         goto label_68;
                                                                     |     }
                                                                     |     if (r3 == 1) {
    0x0003c114 beq.w 0x3c342                                         |         goto label_69;
                                                                     |     }
                                                                     | label_13:
    0x0003c118 ldrh.w r3, [sl, 2]                                    |     r3 = *((sl + 2));
    0x0003c11c lsls r3, r3, 0x1a                                     |     r3 <<= 0x1a;
                                                                     |     if (r3 < r3) {
    0x0003c11e bpl 0x3c140                                           |         
    0x0003c120 ldr r3, [sp, 0x1c]                                    |         r3 = var_1ch;
    0x0003c122 cmp r3, 0                                             |         
                                                                     |         if (r3 == 0) {
    0x0003c124 beq.w 0x3c32e                                         |             goto label_70;
                                                                     |         }
                                                                     | label_23:
    0x0003c128 ldr r3, [sp, 0x1c]                                    |         r3 = var_1ch;
    0x0003c12a mvn r2, 3                                             |         r2 = ~3;
    0x0003c12e str r2, [sp, 8]                                       |         var_8h = r2;
    0x0003c130 movs r1, 0x24                                         |         r1 = 0x24;
    0x0003c132 mov r0, r5                                            |         r0 = r5;
    0x0003c134 str r3, [sp, 4]                                       |         var_4h = r3;
    0x0003c136 movs r3, 0                                            |         r3 = 0;
    0x0003c138 mov r2, r3                                            |         r2 = r3;
    0x0003c13a str r3, [sp]                                          |         *(sp) = r3;
    0x0003c13c bl 0x1977c                                            |         fcn_0001977c (r0, r1, r2, r3, r4, r5);
                                                                     |     }
                                                                     | label_22:
    0x0003c140 mvn r3, 4                                             |     r3 = ~4;
    0x0003c144 ldr r2, [sp, 0x18]                                    |     r2 = var_18h;
    0x0003c146 str r3, [sp, 8]                                       |     var_8h = r3;
    0x0003c148 movs r1, 1                                            |     r1 = 1;
    0x0003c14a mov r3, r8                                            |     r3 = r8;
    0x0003c14c mov r0, r5                                            |     r0 = r5;
    0x0003c14e strd fp, sl, [sp]                                     |     __asm ("strd fp, sl, [sp]");
    0x0003c152 bl 0x1977c                                            |     fcn_0001977c (r0, r1, r2, r3, r4, r5);
    0x0003c156 ldr r3, [r5, 4]                                       |     r3 = *((r5 + 4));
                                                                     |     if (r3 != 0) {
    0x0003c158 cbz r3, 0x3c16a                                       |         
    0x0003c15a ldr r2, [r5, 0x20]                                    |         r2 = *((r5 + 0x20));
    0x0003c15c add.w r2, r2, r2, lsl 2                               |         r2 += (r2 << 2);
    0x0003c160 add.w r3, r3, r2, lsl 2                               |         r3 += (r2 << 2);
    0x0003c164 ldr r2, [sp, 0x14]                                    |         r2 = var_14h;
    0x0003c166 strb r2, [r3, -0x11]                                  |         *((r3 - 0x11)) = r2;
                                                                     |     }
    0x0003c16a ldrd r3, r2, [sp, 0x14]                               |     __asm ("ldrd r3, r2, [var_14h]");
    0x0003c16e subs r3, 0                                            |     
    0x0003c170 it ne                                                 |     
                                                                     |     if (r3 == 0) {
    0x0003c172 movne r3, 1                                           |         r3 = 1;
                                                                     |     }
    0x0003c174 cmp r2, 0                                             |     
    0x0003c176 it ne                                                 |     
                                                                     |     if (r2 == 0) {
    0x0003c178 movne r3, 0                                           |         r3 = 0;
                                                                     |     }
    0x0003c17a cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0003c17c beq.w 0x3b85c                                         |         goto label_0;
                                                                     |     }
    0x0003c180 ldr r5, [sp, 0x14]                                    |     r5 = var_14h;
    0x0003c182 mov r1, r8                                            |     r1 = r8;
    0x0003c184 mov r0, r4                                            |     r0 = r4;
    0x0003c186 mov r2, r5                                            |     r2 = r5;
    0x0003c188 bl 0xaea0                                             |     fcn_0000aea0 (r0, r1, r2);
    0x0003c18c ldr r3, [r4, 0x38]                                    |     r3 = *((r4 + 0x38));
    0x0003c18e cmp r5, r3                                            |     
    0x0003c190 it gt                                                 |     
                                                                     |     if (r5 > r3) {
    0x0003c192 strdgt r5, r8, [r4, 0x38]                             |         __asm ("strdgt r5, r8, [r4, 0x38]");
                                                                     |     }
    0x0003c196 b.w 0x3b85c                                           |     goto label_0;
                                                                     | label_49:
    0x0003c19a ldrd r1, r2, [r1, 4]                                  |     __asm ("ldrd r1, r2, [r1, 4]");
    0x0003c19e movs r3, 1                                            |     r3 = 1;
    0x0003c1a0 str.w fp, [sp]                                        |     __asm ("str.w fp, [sp]");
    0x0003c1a4 bl 0x1f1c8                                            |     fcn_0001f1c8 (r0, r1, r2, r3, r4);
    0x0003c1a8 b.w 0x3b85c                                           |     goto label_0;
                                                                     | label_58:
    0x0003c1ac ldr r0, [r5, 0x18]                                    |     r0 = *((r5 + 0x18));
    0x0003c1ae bl 0x19ed0                                            |     fcn_00019ed0 (r0);
    0x0003c1b2 ldr.w r3, [sb, 4]                                     |     r3 = *((sb + 4));
    0x0003c1b6 mov r8, r0                                            |     r8 = r0;
    0x0003c1b8 mov r2, fp                                            |     r2 = fp;
    0x0003c1ba mov r0, r4                                            |     r0 = r4;
    0x0003c1bc ldr r1, [r3]                                          |     r1 = *(r3);
    0x0003c1be bl 0x3c4a8                                            |     fcn_0003c4a8 (r0, r1, r2);
    0x0003c1c2 ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0003c1c4 cmp r3, 1                                             |     
                                                                     |     if (r3 <= 1) {
    0x0003c1c6 ble 0x3c20a                                           |         goto label_71;
                                                                     |     }
    0x0003c1c8 ldr.w sl, [sp, 0x14]                                  |     sl = var_14h;
    0x0003c1cc movs r7, 0x14                                         |     r7 = 0x14;
    0x0003c1ce movs r6, 1                                            |     r6 = 1;
                                                                     |     do {
    0x0003c1d0 movs r3, 0                                            |         r3 = 0;
    0x0003c1d2 mov r2, fp                                            |         r2 = fp;
    0x0003c1d4 movs r1, 0x4d                                         |         r1 = 0x4d;
    0x0003c1d6 str r3, [sp]                                          |         *(sp) = r3;
    0x0003c1d8 mov r0, r5                                            |         r0 = r5;
    0x0003c1da mov r3, r8                                            |         r3 = r8;
    0x0003c1dc bl 0x18bf8                                            |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003c1e0 mov r0, r4                                            |         r0 = r4;
    0x0003c1e2 movs r2, 1                                            |         r2 = 1;
    0x0003c1e4 mov r1, fp                                            |         r1 = fp;
    0x0003c1e6 adds r6, 1                                            |         r6++;
    0x0003c1e8 bl 0xaea0                                             |         fcn_0000aea0 (r0, r1, r2);
    0x0003c1ec ldr r2, [r4, 0x64]                                    |         r2 = *((r4 + 0x64));
    0x0003c1ee ldr.w r3, [sb, 4]                                     |         r3 = *((sb + 4));
    0x0003c1f2 adds r2, 1                                            |         r2++;
    0x0003c1f4 ldr r1, [r3, r7]                                      |         r1 = *((r3 + r7));
    0x0003c1f6 adds r7, 0x14                                         |         r7 += 0x14;
    0x0003c1f8 str r2, [r4, 0x64]                                    |         *((r4 + 0x64)) = r2;
    0x0003c1fa mov r2, fp                                            |         r2 = fp;
    0x0003c1fc bl 0x3c4a8                                            |         fcn_0003c4a8 (r0, r1, r2);
    0x0003c200 mov r0, r4                                            |         r0 = r4;
    0x0003c202 bl 0xa404                                             |         fcn_0000a404 (r0);
    0x0003c206 cmp sl, r6                                            |         
    0x0003c208 bne 0x3c1d0                                           |         
                                                                     |     } while (sl != r6);
                                                                     | label_71:
    0x0003c20a mvns.w r8, r8                                         |     r8 = ~r8;
    0x0003c20e ldr r2, [r5, 0x18]                                    |     r2 = *((r5 + 0x18));
                                                                     |     if (r8 < r8) {
    0x0003c210 bmi.w 0x3be58                                         |         goto label_6;
                                                                     |     }
    0x0003c214 ldr r3, [r2, 0x70]                                    |     r3 = *((r2 + 0x70));
    0x0003c216 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0003c218 beq.w 0x3be58                                         |         goto label_6;
                                                                     |     }
    0x0003c21c ldr r1, [r5, 0x20]                                    |     r1 = *((r5 + 0x20));
    0x0003c21e str.w r1, [r3, r8, lsl 2]                             |     __asm ("str.w r1, [r3, r8, lsl 2]");
    0x0003c222 b 0x3be58                                             |     goto label_6;
                                                                     | label_61:
    0x0003c224 ldr.w r3, [sb, 4]                                     |     r3 = *((sb + 4));
    0x0003c228 mov r0, r6                                            |     r0 = r6;
    0x0003c22a ldr r1, [r3, r5]                                      |     r1 = *((r3 + r5));
    0x0003c22c bl 0x22e78                                            |     r0 = fcn_00022e78 (r0, r1);
    0x0003c230 mov r7, r0                                            |     r7 = r0;
    0x0003c232 b 0x3bf28                                             |     goto label_11;
                                                                     | label_52:
    0x0003c234 ldr r1, [pc, 0x28]                                    |     
    0x0003c236 ldr r2, [r6, 8]                                       |     r2 = *((r6 + 8));
    0x0003c238 add r1, pc                                            |     r1 = 0x7849c;
    0x0003c23a bl 0x1ca34                                            |     fcn_0001ca34 (r0);
    0x0003c23e b.w 0x3b85c                                           |     goto label_0;
                                                                     | label_54:
    0x0003c242 str.w sb, [sp, 0x14]                                  |     __asm ("str.w sb, [var_14h]");
    0x0003c246 b 0x3be8a                                             |     goto label_12;
                                                                     | label_65:
    0x0003c264 ldr r3, [sp, 0x14]                                    |     r3 = var_14h;
    0x0003c266 mov r8, sb                                            |     r8 = sb;
    0x0003c268 cmp r3, 1                                             |     
    0x0003c26a it eq                                                 |     
                                                                     |     if (r3 != 1) {
    0x0003c26c ldreq r3, [sb, 4]                                     |         r3 = *((sb + 4));
                                                                     |     }
                                                                     |     if (r3 != 1) {
    0x0003c270 beq 0x3c27c                                           |         
                                                                     | label_68:
    0x0003c272 ldr r2, [r6, 4]                                       |         r2 = *((r6 + 4));
    0x0003c274 ldr.w r3, [sb, 4]                                     |         r3 = *((sb + 4));
    0x0003c278 lsls r2, r2, 0x18                                     |         r2 <<= 0x18;
                                                                     |         if (r2 < r2) {
    0x0003c27a bmi 0x3c300                                           |             goto label_72;
                                                                     |         }
                                                                     |     }
                                                                     | label_26:
    0x0003c27c mov r1, sl                                            |     r1 = sl;
    0x0003c27e ldr r3, [r3]                                          |     r3 = *(r3);
    0x0003c280 ldr r2, [sp, 0x14]                                    |     r2 = var_14h;
    0x0003c282 mov r0, r7                                            |     r0 = r7;
    0x0003c284 bl 0xe9b4                                             |     r0 = fcn_0000e9b4 (r0, r1, r2, r3);
    0x0003c288 mov sl, r0                                            |     sl = r0;
    0x0003c28a b 0x3c118                                             |     goto label_13;
                                                                     | label_59:
    0x0003c28c ldr.w r3, [sb, 4]                                     |     r3 = *((sb + 4));
    0x0003c290 mov r2, fp                                            |     r2 = fp;
    0x0003c292 mov r0, r4                                            |     r0 = r4;
    0x0003c294 ldr r1, [r3]                                          |     r1 = *(r3);
    0x0003c296 bl 0x3c4a8                                            |     fcn_0003c4a8 (r0, r1, r2);
    0x0003c29a b.w 0x3b85c                                           |     goto label_0;
                                                                     | label_48:
    0x0003c29e mov.w r2, -1                                          |     r2 = -1;
    0x0003c2a2 b 0x3bcf0                                             |     goto label_14;
                                                                     | label_63:
    0x0003c2a4 movs r7, 0x91                                         |     r7 = 0x91;
    0x0003c2a6 b 0x3bf8e                                             |     goto label_15;
                                                                     | label_45:
    0x0003c2a8 ldr r1, [pc, 0xa0]                                    |     
    0x0003c2aa add r1, pc                                            |     r1 = 0x785fa;
    0x0003c2ac bl 0x1ca34                                            |     fcn_0001ca34 (r0);
    0x0003c2b0 mov r0, r7                                            |     r0 = r7;
    0x0003c2b2 b.w 0x3b8b0                                           |     goto label_1;
                                                                     | label_44:
    0x0003c2b6 ldr r0, [sp, 0x3c]                                    |     r0 = var_3ch;
    0x0003c2b8 movs r5, 1                                            |     r5 = 1;
    0x0003c2ba strb r5, [r2, 6]                                      |     *((r2 + 6)) = r5;
    0x0003c2bc ldr r5, [sp, 0x40]                                    |     r5 = var_40h;
    0x0003c2be cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0003c2c0 beq.w 0x3b888                                         |         goto label_16;
                                                                     |     }
    0x0003c2c4 ldrb r7, [r4, 0x13]                                   |     r7 = *((r4 + 0x13));
    0x0003c2c6 b.w 0x3b870                                           |     goto label_17;
                                                                     | label_56:
    0x0003c2ca mov r3, r8                                            |     r3 = r8;
    0x0003c2cc b 0x3beaa                                             |     goto label_18;
                                                                     | label_43:
    0x0003c2ce movs r1, 1                                            |     r1 = 1;
    0x0003c2d0 strb r1, [r2, 6]                                      |     *((r2 + 6)) = r1;
    0x0003c2d2 cmp r7, 0                                             |     
                                                                     |     if (r7 != 0) {
    0x0003c2d4 bne.w 0x3bc2a                                         |         goto label_19;
                                                                     |     }
    0x0003c2d8 b.w 0x3b85c                                           |     goto label_0;
                                                                     | label_41:
    0x0003c2dc movs r2, 1                                            |     r2 = 1;
    0x0003c2de strb r2, [r3, 6]                                      |     *((r3 + 6)) = r2;
    0x0003c2e0 b 0x3bbba                                             |     goto label_20;
                                                                     | label_66:
    0x0003c2e2 ldrh.w r1, [sl, 2]                                    |     r1 = *((sl + 2));
                                                                     | label_25:
    0x0003c2e6 ldrd r3, r8, [r4, 0x38]                               |     __asm ("ldrd r3, r8, [r4, 0x38]");
    0x0003c2ea ldr r2, [sp, 0x14]                                    |     r2 = var_14h;
    0x0003c2ec cmp r2, r3                                            |     
                                                                     |     if (r2 <= r3) {
    0x0003c2ee bgt 0x3c310                                           |         
    0x0003c2f0 subs r3, r3, r2                                       |         r3 -= r2;
    0x0003c2f2 str r3, [r4, 0x38]                                    |         *((r4 + 0x38)) = r3;
    0x0003c2f4 add.w r3, r2, r8                                      |         r3 = r2 + r8;
    0x0003c2f8 str r3, [r4, 0x3c]                                    |         *((r4 + 0x3c)) = r3;
    0x0003c2fa movs r3, 0                                            |         r3 = 0;
    0x0003c2fc str r3, [sp, 0x18]                                    |         var_18h = r3;
    0x0003c2fe b 0x3c0d2                                             |         goto label_21;
                                                                     | label_72:
    0x0003c300 mov r1, sl                                            |         r1 = sl;
    0x0003c302 ldr r3, [r3, 0x14]                                    |         r3 = *((r3 + 0x14));
    0x0003c304 ldr r2, [sp, 0x14]                                    |         r2 = var_14h;
    0x0003c306 mov r0, r7                                            |         r0 = r7;
    0x0003c308 bl 0xe9b4                                             |         r0 = fcn_0000e9b4 (r0, r1, r2, r3);
    0x0003c30c mov sl, r0                                            |         sl = r0;
    0x0003c30e b 0x3c118                                             |         goto label_13;
                                                                     |     }
    0x0003c310 movs r2, 0                                            |     r2 = 0;
    0x0003c312 ldr r3, [r4, 0x48]                                    |     r3 = *((r4 + 0x48));
    0x0003c314 str r2, [sp, 0x18]                                    |     var_18h = r2;
    0x0003c316 ldr r2, [sp, 0x14]                                    |     r2 = var_14h;
    0x0003c318 add.w r8, r3, 1                                       |     r8 = r3 + 1;
    0x0003c31c add r3, r2                                            |     r3 += r2;
    0x0003c31e str r3, [r4, 0x48]                                    |     *((r4 + 0x48)) = r3;
    0x0003c320 b 0x3c0d2                                             |     goto label_21;
                                                                     | label_24:
    0x0003c322 lsls r1, r1, 0x1a                                     |     r1 <<= 0x1a;
    0x0003c324 mov r8, sb                                            |     r8 = sb;
    0x0003c326 str.w sb, [sp, 0x18]                                  |     __asm ("str.w sb, [var_18h]");
                                                                     |     if (r1 >= r1) {
    0x0003c32a bpl.w 0x3c140                                         |         goto label_22;
                                                                     |     }
                                                                     | label_70:
    0x0003c32e ldr r3, [r7, 8]                                       |     r3 = *((r7 + 8));
    0x0003c330 str r3, [sp, 0x1c]                                    |     var_1ch = r3;
    0x0003c332 b 0x3c128                                             |     goto label_23;
                                                                     | label_60:
    0x0003c334 cmp.w sb, 0                                           |     
                                                                     |     if (sb == 0) {
    0x0003c338 beq 0x3c322                                           |         goto label_24;
                                                                     |     }
    0x0003c33a str r3, [sp, 0x1c]                                    |     var_1ch = r3;
    0x0003c33c b 0x3c2e6                                             |     goto label_25;
                                                                     | label_33:
    0x0003c33e blx 0x6498                                            |     fcn_00006498 ();
                                                                     | label_69:
    0x0003c342 ldr.w r3, [sb, 4]                                     |     r3 = *((sb + 4));
    0x0003c346 b 0x3c27c                                             |     goto label_26;
                                                                     | label_40:
    0x0003c348 ldr r7, [r4, 0x48]                                    |     r7 = *((r4 + 0x48));
    0x0003c34a b 0x3c0a0                                             |     goto label_27;
                                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x3c4f0 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.0003c4f0 ()                                      | void fcn_0003c4f0 (int16_t arg1, int16_t arg2, int16_t arg3) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
    0x0003c4f0 push.w {r4, r5, r6, r7, r8, sb, sl, lr}           |     
    0x0003c4f4 mov sl, r2                                        |     sl = r2;
    0x0003c4f6 ldr r2, [pc, 0x190]                               |     
    0x0003c4f8 sub sp, 0x10                                      |     
    0x0003c4fa mov r6, r1                                        |     r6 = r1;
    0x0003c4fc ldr r3, [pc, 0x18c]                               |     r3 = *(0x3c68c);
    0x0003c4fe add r2, pc                                        |     r2 = 0x78b8c;
    0x0003c500 ldr r3, [r2, r3]                                  |     
    0x0003c502 ldr r3, [r3]                                      |     r3 = imp.mkdir;
    0x0003c504 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x0003c506 mov.w r3, 0                                       |     r3 = 0;
    0x0003c50a bl 0xae68                                         |     fcn_0000ae68 (r0);
    0x0003c50e ldr.w sb, [r6, 0x3c]                              |     sb = *((r6 + 0x3c));
    0x0003c512 cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x0003c516 beq 0x3c618                                       |         goto label_2;
                                                                 |     }
    0x0003c518 ldr r7, [r0, 0x48]                                |     r7 = *((r0 + 0x48));
    0x0003c51a mov r5, r0                                        |     r5 = r0;
    0x0003c51c ldr r4, [r0, 8]                                   |     r4 = *((r0 + 8));
    0x0003c51e adds r7, 1                                        |     r7++;
    0x0003c520 str r7, [r0, 0x48]                                |     *((r0 + 0x48)) = r7;
    0x0003c522 str r7, [r6, 8]                                   |     *((r6 + 8)) = r7;
    0x0003c524 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0003c526 beq.w 0x3c664                                     |         goto label_3;
                                                                 |     }
                                                                 | label_1:
    0x0003c52a add r1, sp, 8                                     |     r1 += var_8h;
    0x0003c52c mov r0, sb                                        |     r0 = sb;
    0x0003c52e bl 0x7efc                                         |     r0 = fcn_00007efc (r0, r1);
    0x0003c532 mov r8, r0                                        |     r8 = r0;
    0x0003c534 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0003c536 bne 0x3c632                                       |         goto label_4;
                                                                 |     }
    0x0003c538 mov r1, sb                                        |     r1 = sb;
    0x0003c53a mov r2, r7                                        |     r2 = r7;
    0x0003c53c mov r0, r5                                        |     r0 = r5;
    0x0003c53e bl 0x3c4a8                                        |     fcn_0003c4a8 (r0, r1, r2);
    0x0003c542 mov r3, r8                                        |     r3 = r8;
    0x0003c544 mov r2, r7                                        |     r2 = r7;
    0x0003c546 movs r1, 0x26                                     |     r1 = 0x26;
    0x0003c548 mov r0, r4                                        |     r0 = r4;
    0x0003c54a str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x0003c54e bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003c552 mov r3, sl                                        |     r3 = sl;
    0x0003c554 mov r2, r7                                        |     r2 = r7;
    0x0003c556 movs r1, 0x89                                     |     r1 = 0x89;
    0x0003c558 mov r0, r4                                        |     r0 = r4;
    0x0003c55a str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x0003c55e bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
                                                                 |     do {
                                                                 | label_0:
    0x0003c562 ldr r1, [r6, 0x40]                                |         r1 = *((r6 + 0x40));
    0x0003c564 cmp r1, 0                                         |         
                                                                 |         if (r1 != 0) {
    0x0003c566 beq 0x3c618                                       |             
    0x0003c568 ldr r3, [r5, 0x48]                                |             r3 = *((r5 + 0x48));
    0x0003c56a mov.w sb, 0                                       |             sb = 0;
    0x0003c56e mov r0, r5                                        |             r0 = r5;
    0x0003c570 add.w r8, r3, 1                                   |             r8 = r3 + 1;
    0x0003c574 str.w r8, [r6, 0xc]                               |             __asm ("str.w r8, [r6, 0xc]");
    0x0003c578 adds r6, r3, 2                                    |             r6 = r3 + 2;
    0x0003c57a mov r2, r8                                        |             r2 = r8;
    0x0003c57c str r6, [r5, 0x48]                                |             *((r5 + 0x48)) = r6;
    0x0003c57e bl 0x3c4a8                                        |             fcn_0003c4a8 (r0, r1, r2);
    0x0003c582 mov r3, sb                                        |             r3 = sb;
    0x0003c584 mov r2, r8                                        |             r2 = r8;
    0x0003c586 movs r1, 0x26                                     |             r1 = 0x26;
    0x0003c588 mov r0, r4                                        |             r0 = r4;
    0x0003c58a str.w sb, [sp]                                    |             __asm ("str.w sb, [sp]");
    0x0003c58e bl 0x18bf8                                        |             fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003c592 mov r3, sb                                        |             r3 = sb;
    0x0003c594 mov r2, r8                                        |             r2 = r8;
    0x0003c596 movs r1, 0x87                                     |             r1 = 0x87;
    0x0003c598 mov r0, r4                                        |             r0 = r4;
    0x0003c59a str.w sb, [sp]                                    |             __asm ("str.w sb, [sp]");
    0x0003c59e bl 0x18bf8                                        |             fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003c5a2 mov r2, sb                                        |             r2 = sb;
    0x0003c5a4 mov r5, r0                                        |             r5 = r0;
    0x0003c5a6 mov r3, r8                                        |             r3 = r8;
    0x0003c5a8 movs r1, 0x19                                     |             r1 = 0x19;
    0x0003c5aa mov r0, r4                                        |             r0 = r4;
    0x0003c5ac str.w sb, [sp]                                    |             __asm ("str.w sb, [sp]");
    0x0003c5b0 bl 0x18bf8                                        |             fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003c5b4 ldr r3, [r4, 0x20]                                |             r3 = *((r4 + 0x20));
    0x0003c5b6 mov r0, r4                                        |             r0 = r4;
    0x0003c5b8 ldr r1, [r4, 0x18]                                |             r1 = *((r4 + 0x18));
    0x0003c5ba cmp r5, r3                                        |             
    0x0003c5bc ittt lo                                           |             
                                                                 |             if (r5 >= r3) {
    0x0003c5be ldrlo r2, [r4, 4]                                 |                 r2 = *((r4 + 4));
                                                                 |             }
                                                                 |             if (r5 >= r3) {
    0x0003c5c0 addlo r5, r5, r5, lsl 2                           |                 r5 += (r5 << 2);
                                                                 |             }
                                                                 |             if (r5 < r3) {
    0x0003c5c4 add.w r2, r2, r5, lsl 2                           |                 r2 += (r5 << 2);
                                                                 |             }
    0x0003c5c8 mov.w r5, 0                                       |             r5 = 0;
    0x0003c5cc it lo                                             |             
                                                                 |             if (r5 >= r3) {
    0x0003c5ce strlo r3, [r2, 8]                                 |                 *((r2 + 8)) = r3;
                                                                 |             }
    0x0003c5d0 subs r2, r3, 1                                    |             r2 = r3 - 1;
    0x0003c5d2 str r2, [r1, 0x58]                                |             *((r1 + 0x58)) = r2;
    0x0003c5d4 mov r3, r8                                        |             r3 = r8;
    0x0003c5d6 mov r2, r7                                        |             r2 = r7;
    0x0003c5d8 movs r1, 0x59                                     |             r1 = 0x59;
    0x0003c5da str r6, [sp]                                      |             *(sp) = r6;
    0x0003c5dc bl 0x18bf8                                        |             fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003c5e0 mov r3, r5                                        |             r3 = r5;
    0x0003c5e2 mov r2, r7                                        |             r2 = r7;
    0x0003c5e4 movs r1, 0x87                                     |             r1 = 0x87;
    0x0003c5e6 str r5, [sp]                                      |             *(sp) = r5;
    0x0003c5e8 mov r0, r4                                        |             r0 = r4;
    0x0003c5ea bl 0x18bf8                                        |             fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003c5ee mov.w r2, -1                                      |             r2 = -1;
    0x0003c5f2 mov r3, r6                                        |             r3 = r6;
    0x0003c5f4 str r5, [sp]                                      |             *(sp) = r5;
    0x0003c5f6 movs r1, 0x19                                     |             r1 = 0x19;
    0x0003c5f8 mov r5, r0                                        |             r5 = r0;
    0x0003c5fa mov r0, r4                                        |             r0 = r4;
    0x0003c5fc bl 0x18bf8                                        |             fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003c600 ldr r3, [r4, 0x20]                                |             r3 = *((r4 + 0x20));
    0x0003c602 cmp r5, r3                                        |             
    0x0003c604 itttt lo                                          |             
                                                                 |             if (r5 >= r3) {
    0x0003c606 ldrlo r2, [r4, 4]                                 |                 r2 = *((r4 + 4));
                                                                 |             }
                                                                 |             if (r5 >= r3) {
    0x0003c608 addlo r5, r5, r5, lsl 2                           |                 r5 += (r5 << 2);
                                                                 |             }
                                                                 |             if (r5 >= r3) {
    0x0003c60c addlo r2, r2, r5, lsl 2                           |                 r2 += (r5 << 2);
                                                                 |             }
                                                                 |             if (r5 < r3) {
    0x0003c610 str r3, [r2, 8]                                   |                 *((r2 + 8)) = r3;
                                                                 |             }
    0x0003c612 subs r3, 1                                        |             r3--;
    0x0003c614 ldr r2, [r4, 0x18]                                |             r2 = *((r4 + 0x18));
    0x0003c616 str r3, [r2, 0x58]                                |             *((r2 + 0x58)) = r3;
                                                                 |         }
                                                                 | label_2:
    0x0003c618 ldr r2, [pc, 0x74]                                |         
    0x0003c61a ldr r3, [pc, 0x70]                                |         r3 = *(0x3c68e);
    0x0003c61c add r2, pc                                        |         r2 = 0x78cb0;
    0x0003c61e ldr r3, [r2, r3]                                  |         r3 = imp.mkdir;
    0x0003c620 ldr r2, [r3]                                      |         r2 = imp.mkdir;
    0x0003c622 ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x0003c624 eors r2, r3                                       |         r2 ^= r3;
    0x0003c626 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0003c62a bne 0x3c682                                       |             goto label_5;
                                                                 |         }
    0x0003c62c add sp, 0x10                                      |         
    0x0003c62e pop.w {r4, r5, r6, r7, r8, sb, sl, pc}            |         
                                                                 | label_4:
    0x0003c632 ldr.w r8, [sp, 8]                                 |         r8 = var_8h;
    0x0003c636 movs r3, 0                                        |         r3 = 0;
    0x0003c638 str r3, [sp]                                      |         *(sp) = r3;
    0x0003c63a movs r1, 0x19                                     |         r1 = 0x19;
    0x0003c63c mov r3, r7                                        |         r3 = r7;
    0x0003c63e mov r0, r4                                        |         r0 = r4;
    0x0003c640 mov r2, r8                                        |         r2 = r8;
    0x0003c642 bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003c646 cmp.w r8, 0                                       |         
                                                                 |         if (r8 == 0) {
    0x0003c64a beq 0x3c670                                       |             goto label_6;
                                                                 |         }
    0x0003c64c blt 0x3c562                                       |         
                                                                 |     } while (r8 < 0);
    0x0003c64e ldrd r1, r3, [r6, 0x18]                           |     __asm ("ldrd r1, r3, [r6, 0x18]");
    0x0003c652 asr.w r2, r8, 0x1f                                |     r2 = r8 >> 0x1f;
    0x0003c656 cmp r8, r1                                        |     
    0x0003c658 sbcs.w r3, r2, r3                                 |     __asm ("sbcs.w r3, r2, r3");
    0x0003c65c it lo                                             |     
                                                                 |     if (r8 < r1) {
    0x0003c65e strdlo r8, r2, [r6, 0x18]                         |         __asm ("strdlo r8, r2, [r6, 0x18]");
                                                                 |     }
    0x0003c662 b 0x3c562                                         |     goto label_0;
                                                                 | label_3:
    0x0003c664 bl 0x192c8                                        |     fcn_000192c8 (r0);
    0x0003c668 ldr.w sb, [r6, 0x3c]                              |     sb = *((r6 + 0x3c));
    0x0003c66c mov r4, r0                                        |     r4 = r0;
    0x0003c66e b 0x3c52a                                         |     goto label_1;
                                                                 | label_6:
    0x0003c670 mov r3, sl                                        |     r3 = sl;
    0x0003c672 mov r2, r8                                        |     r2 = r8;
    0x0003c674 movs r1, 0x10                                     |     r1 = 0x10;
    0x0003c676 mov r0, r4                                        |     r0 = r4;
    0x0003c678 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x0003c67c bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003c680 b 0x3c562                                         |     goto label_0;
                                                                 | label_5:
    0x0003c682 blx 0x6498                                        |     fcn_00006498 ();
    0x0003c686 nop                                               |     
    0x0003c688 invalid                                           |     
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x3c694 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.0003c694 ()                                      | void fcn_0003c694 (int16_t arg_8h, int16_t arg_20h, int16_t arg_60h, int16_t arg_64h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_14h;
                                                                 |     int32_t var_18h;
                                                                 |     int32_t var_18h_2;
                                                                 |     int32_t var_20h;
                                                                 |     int32_t var_20h_2;
                                                                 |     int32_t var_28h;
                                                                 |     int32_t var_28h_2;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x0003c694 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x0003c698 mov sl, r2                                        |     sl = r2;
    0x0003c69a ldr r2, [pc, 0x1b0]                               |     
    0x0003c69c mov fp, r3                                        |     
    0x0003c69e sub sp, 0x3c                                      |     
    0x0003c6a0 movs r4, 0                                        |     r4 = 0;
    0x0003c6a2 ldr r3, [pc, 0x1ac]                               |     r3 = *(0x3c852);
    0x0003c6a4 mov r5, r0                                        |     r5 = r0;
    0x0003c6a6 add r2, pc                                        |     r2 = 0x78ef8;
    0x0003c6a8 ldr r6, [sp, 0x60]                                |     r6 = *(arg_60h);
    0x0003c6aa ldrd r7, sb, [sp, 0x64]                           |     __asm ("ldrd r7, sb, [arg_64h]");
    0x0003c6ae mov r8, r1                                        |     r8 = r1;
    0x0003c6b0 ldr r3, [r2, r3]                                  |     
    0x0003c6b2 ldr r3, [r3]                                      |     r3 = imp.mkdir;
    0x0003c6b4 str r3, [sp, 0x34]                                |     var_34h = r3;
    0x0003c6b6 mov.w r3, 0                                       |     r3 = 0;
    0x0003c6ba strd r4, r4, [sp, 0x18]                           |     __asm ("strd r4, r4, [var_18h]");
    0x0003c6be strd r4, r4, [sp, 0x20]                           |     __asm ("strd r4, r4, [var_20h]");
    0x0003c6c2 add r3, sp, 0x14                                  |     r3 += var_14h;
    0x0003c6c4 strd r4, r4, [sp, 0x28]                           |     __asm ("strd r4, r4, [var_28h]");
    0x0003c6c8 str r4, [sp, 0x30]                                |     var_30h = r4;
    0x0003c6ca str r0, [sp, 0x14]                                |     var_14h = r0;
    0x0003c6cc ldr r4, [r0]                                      |     r4 = *(r0);
                                                                 |     if (r6 == 0) {
    0x0003c6ce cbz r6, 0x3c6dc                                   |         goto label_3;
                                                                 |     }
    0x0003c6d0 ldrb r2, [r6]                                     |     r2 = *(r6);
    0x0003c6d2 cmp r2, 0x1b                                      |     
    0x0003c6d4 itt eq                                            |     
                                                                 |     if (r2 != 0x1b) {
    0x0003c6d6 moveq r2, 0x61                                    |         r2 = 0x61;
                                                                 |     }
                                                                 |     if (r2 != 0x1b) {
    0x0003c6d8 strbeq r2, [r6]                                   |         *(r6) = r2;
                                                                 |     }
    0x0003c6da bne 0x3c7da                                       |     
                                                                 |     if (r7 != 0) {
                                                                 |         while (r0 == 0) {
                                                                 | label_3:
    0x0003c6dc cbz r7, 0x3c6ec                                   |             
    0x0003c6de ldrb r2, [r7]                                     |             r2 = *(r7);
    0x0003c6e0 cmp r2, 0x1b                                      |             
    0x0003c6e2 itt eq                                            |             
                                                                 |             if (r2 != 0x1b) {
    0x0003c6e4 moveq r2, 0x61                                    |                 r2 = 0x61;
                                                                 |             }
                                                                 |             if (r2 != 0x1b) {
    0x0003c6e6 strbeq r2, [r7]                                   |                 *(r7) = r2;
                                                                 |             }
                                                                 |             if (r2 != 0x1b) {
    0x0003c6e8 bne.w 0x3c824                                     |                 goto label_4;
                                                                 |             }
                                                                 |         }
    0x0003c6ec cmp.w sb, 0                                       |         
                                                                 |         if (sb != 0) {
    0x0003c6f0 beq 0x3c70e                                       |             
                                                                 | label_0:
    0x0003c6f2 ldrb.w r2, [sb]                                   |             r2 = *(sb);
    0x0003c6f6 cmp r2, 0x1b                                      |             
    0x0003c6f8 itt eq                                            |             
                                                                 |             if (r2 != 0x1b) {
    0x0003c6fa moveq r3, 0x61                                    |                 r3 = 0x61;
                                                                 |             }
                                                                 |             if (r2 != 0x1b) {
    0x0003c6fc strbeq r3, [sb]                                   |                 *(sb) = r3;
                                                                 |             }
                                                                 |             if (r2 == 0x1b) {
    0x0003c700 beq 0x3c70e                                       |                 goto label_1;
                                                                 |             }
    0x0003c702 mov r0, r3                                        |             r0 = r3;
    0x0003c704 mov r1, sb                                        |             r1 = sb;
    0x0003c706 bl 0x1f318                                        |             r0 = fcn_0001f318 (r0, r1);
    0x0003c70a cmp r0, 0                                         |             
                                                                 |             if (r0 != 0) {
    0x0003c70c bne 0x3c7ec                                       |                 goto label_5;
                                                                 |             }
                                                                 |         }
                                                                 | label_1:
    0x0003c70e cmp.w fp, 0                                       |         
                                                                 |         if (fp != 0) {
    0x0003c712 beq 0x3c734                                       |             
    0x0003c714 ldrb.w r3, [fp]                                   |             r3 = *(fp);
    0x0003c718 mov r1, r8                                        |             r1 = r8;
    0x0003c71a mov r0, r5                                        |             r0 = r5;
    0x0003c71c cmp r3, 0x61                                      |             
    0x0003c71e mov.w r3, 0                                       |             r3 = 0;
    0x0003c722 ite eq                                            |             
                                                                 |             if (r3 != 0x61) {
    0x0003c724 ldreq r2, [fp, 8]                                 |                 r2 = *(arg_8h);
                                                                 |             }
                                                                 |             if (r3 != 0x61) {
    0x0003c728 movs r2, 0                                        |                 r2 = 0;
                                                                 |             }
    0x0003c72a str r3, [sp]                                      |             *(sp) = r3;
    0x0003c72c bl 0x1cab0                                        |             r0 = fcn_0001cab0 (r0);
    0x0003c730 cmp r0, 0                                         |             
                                                                 |             if (r0 != 0) {
    0x0003c732 bne 0x3c7f2                                       |                 goto label_6;
                                                                 |             }
                                                                 |         }
    0x0003c734 ldr.w fp, [r5, 8]                                 |         fp = *((r5 + 8));
    0x0003c738 cmp.w fp, 0                                       |         
                                                                 |         if (fp == 0) {
    0x0003c73c beq 0x3c83e                                       |             goto label_7;
                                                                 |         }
                                                                 | label_2:
    0x0003c73e ldrd r2, r3, [r5, 0x38]                           |         __asm ("ldrd r2, r3, [r5, 0x38]");
    0x0003c742 mov r1, r6                                        |         r1 = r6;
    0x0003c744 mov r0, r5                                        |         r0 = r5;
    0x0003c746 cmp r2, 3                                         |         
    0x0003c748 iteee le                                          |         
                                                                 |         if (r2 > 3) {
    0x0003c74a ldrle r2, [r5, 0x48]                              |             r2 = *((r5 + 0x48));
                                                                 |         }
                                                                 |         if (r2 <= 3) {
    0x0003c74c subgt r2, 4                                       |             r2 -= 4;
                                                                 |         }
                                                                 |         if (r2 <= 3) {
    0x0003c74e strgt r2, [r5, 0x38]                              |             *((r5 + 0x38)) = r2;
                                                                 |         }
                                                                 |         if (r2 <= 3) {
    0x0003c750 addgt r2, r3, 4                                   |             r2 = r3 + 4;
                                                                 |         }
    0x0003c752 iteee gt                                          |         
                                                                 |         if (r2 <= 3) {
    0x0003c754 strgt r2, [r5, 0x3c]                              |             *((r5 + 0x3c)) = r2;
                                                                 |         }
                                                                 |         if (r2 > 3) {
    0x0003c756 addle r3, r2, 1                                   |             r3 = r2 + 1;
                                                                 |         }
                                                                 |         if (r2 > 3) {
    0x0003c758 addle r2, 4                                       |             r2 += 4;
                                                                 |         }
                                                                 |         if (r2 > 3) {
    0x0003c75a strle r2, [r5, 0x48]                              |             *((r5 + 0x48)) = r2;
                                                                 |         }
    0x0003c75c mov r2, r3                                        |         r2 = r3;
    0x0003c75e str r3, [sp, 0xc]                                 |         var_ch = r3;
    0x0003c760 bl 0x3c4a8                                        |         fcn_0003c4a8 (r0, r1, r2);
    0x0003c764 ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x0003c766 mov r1, r7                                        |         r1 = r7;
    0x0003c768 mov r0, r5                                        |         r0 = r5;
    0x0003c76a adds r2, r3, 1                                    |         r2 = r3 + 1;
    0x0003c76c bl 0x3c4a8                                        |         fcn_0003c4a8 (r0, r1, r2);
    0x0003c770 ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x0003c772 mov r0, r5                                        |         r0 = r5;
    0x0003c774 mov r1, sb                                        |         r1 = sb;
    0x0003c776 adds r2, r3, 2                                    |         r2 = r3 + 2;
    0x0003c778 bl 0x3c4a8                                        |         fcn_0003c4a8 (r0, r1, r2);
    0x0003c77c cmp.w fp, 0                                       |         
                                                                 |         if (fp == 0) {
    0x0003c780 beq 0x3c7f2                                       |             goto label_6;
                                                                 |         }
    0x0003c782 ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x0003c784 movs r1, 1                                        |         r1 = 1;
    0x0003c786 mov r0, fp                                        |         r0 = fp;
    0x0003c788 adds r3, 3                                        |         r3 += 3;
    0x0003c78a str r3, [sp]                                      |         *(sp) = r3;
    0x0003c78c ldrsh.w r2, [sl]                                  |         r2 = *(sl);
    0x0003c790 subs r3, r3, r2                                   |         r3 -= r2;
    0x0003c792 movs r2, 0                                        |         r2 = 0;
    0x0003c794 bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003c798 ldr.w r3, [fp, 4]                                 |         r3 = *(arg_64h);
                                                                 |         if (r3 != 0) {
    0x0003c79c cbz r3, 0x3c7b2                                   |             
    0x0003c79e ldr.w r2, [fp, 0x20]                              |             r2 = *(arg_20h);
    0x0003c7a2 add.w r2, r2, r2, lsl 2                           |             r2 += (r2 << 2);
    0x0003c7a6 add.w r3, r3, r2, lsl 2                           |             r3 += (r2 << 2);
    0x0003c7aa ldrh.w r2, [sl]                                   |             r2 = *(sl);
    0x0003c7ae strb r2, [r3, -0x11]                              |             *((r3 - 0x11)) = r2;
                                                                 |         }
    0x0003c7b2 mov r2, sl                                        |         r2 = sl;
    0x0003c7b4 mov r0, fp                                        |         r0 = fp;
    0x0003c7b6 mvn r3, 4                                         |         r3 = ~4;
    0x0003c7ba mov.w r1, -1                                      |         r1 = -1;
    0x0003c7be bl 0x1021c                                        |         fcn_0001021c (r0, r1, r2, r3);
    0x0003c7c2 sub.w r2, r8, 0x18                                |         r2 = r8 - 0x18;
    0x0003c7c6 movs r3, 0                                        |         r3 = 0;
    0x0003c7c8 clz r2, r2                                        |         r2 &= r2;
    0x0003c7cc mov r0, fp                                        |         r0 = fp;
    0x0003c7ce lsrs r2, r2, 5                                    |         r2 >>= 5;
    0x0003c7d0 movs r1, 0x8c                                     |         r1 = 0x8c;
    0x0003c7d2 str r3, [sp]                                      |         *(sp) = r3;
    0x0003c7d4 bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003c7d8 b 0x3c7f2                                         |         goto label_6;
    0x0003c7da mov r0, r3                                        |         r0 = r3;
    0x0003c7dc mov r1, r6                                        |         r1 = r6;
    0x0003c7de str r3, [sp, 0xc]                                 |         var_ch = r3;
    0x0003c7e0 bl 0x1f318                                        |         fcn_0001f318 (r0, r1);
    0x0003c7e4 ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x0003c7e6 cmp r0, 0                                         |         
    0x0003c7e8 beq.w 0x3c6dc                                     |         
                                                                 |     }
                                                                 |     do {
                                                                 | label_5:
    0x0003c7ec ldr r3, [r5, 0x40]                                |         r3 = *((r5 + 0x40));
    0x0003c7ee adds r3, 1                                        |         r3++;
    0x0003c7f0 str r3, [r5, 0x40]                                |         *((r5 + 0x40)) = r3;
                                                                 | label_6:
    0x0003c7f2 mov r1, r6                                        |         r1 = r6;
    0x0003c7f4 mov r0, r4                                        |         r0 = r4;
    0x0003c7f6 bl 0x12e68                                        |         fcn_00012e68 (r0);
    0x0003c7fa mov r1, r7                                        |         r1 = r7;
    0x0003c7fc mov r0, r4                                        |         r0 = r4;
    0x0003c7fe bl 0x12e68                                        |         fcn_00012e68 (r0);
    0x0003c802 mov r1, sb                                        |         r1 = sb;
    0x0003c804 mov r0, r4                                        |         r0 = r4;
    0x0003c806 bl 0x12e68                                        |         fcn_00012e68 (r0);
    0x0003c80a ldr r2, [pc, 0x48]                                |         
    0x0003c80c ldr r3, [pc, 0x40]                                |         r3 = *(0x3c850);
    0x0003c80e add r2, pc                                        |         r2 = 0x79068;
    0x0003c810 ldr r3, [r2, r3]                                  |         r3 = imp.mkdir;
    0x0003c812 ldr r2, [r3]                                      |         r2 = imp.mkdir;
    0x0003c814 ldr r3, [sp, 0x34]                                |         r3 = var_34h;
    0x0003c816 eors r2, r3                                       |         r2 ^= r3;
    0x0003c818 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0003c81c bne 0x3c848                                       |             goto label_8;
                                                                 |         }
    0x0003c81e add sp, 0x3c                                      |         
    0x0003c820 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_4:
    0x0003c824 mov r0, r3                                        |         r0 = r3;
    0x0003c826 mov r1, r7                                        |         r1 = r7;
    0x0003c828 str r3, [sp, 0xc]                                 |         var_ch = r3;
    0x0003c82a bl 0x1f318                                        |         fcn_0001f318 (r0, r1);
    0x0003c82e ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x0003c830 cmp r0, 0                                         |         
    0x0003c832 bne 0x3c7ec                                       |         
                                                                 |     } while (r0 != 0);
    0x0003c834 cmp.w sb, 0                                       |     
                                                                 |     if (sb != 0) {
    0x0003c838 bne.w 0x3c6f2                                     |         goto label_0;
                                                                 |     }
    0x0003c83c b 0x3c70e                                         |     goto label_1;
                                                                 | label_7:
    0x0003c83e mov r0, r5                                        |     r0 = r5;
    0x0003c840 bl 0x192c8                                        |     r0 = fcn_000192c8 (r0);
    0x0003c844 mov fp, r0                                        |     
    0x0003c846 b 0x3c73e                                         |     goto label_2;
                                                                 | label_8:
    0x0003c848 blx 0x6498                                        |     fcn_00006498 ();
    0x0003c84c push {r1, r4, r5, r7, lr}                         |     
    0x0003c84e movs r3, r0                                       |     r3 = r0;
    0x0003c850 lsls r0, r1, 0xe                                  |     r0 = r1 << 0xe;
    0x0003c852 movs r0, r0                                       |     
    0x0003c854 push {r1, r3, r6}                                 |     
    0x0003c856 movs r3, r0                                       |     r3 = r0;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x3c858 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.0003c858 ()                                      | void fcn_0003c858 (int16_t arg1, int16_t arg2, int16_t arg3) {
                                                                 |     int16_t var_1ch_2;
                                                                 |     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_2bh;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
    0x0003c858 ssub8mi fp, r7, r0                                |     __asm ("ssub8mi fp, r7, r0");
    0x0003c85c ldr r2, [pc, 0x124]                               |     
    0x0003c85e sub sp, 0x24                                      |     
    0x0003c860 mov r5, r0                                        |     r5 = r0;
    0x0003c862 mov r4, r1                                        |     r4 = r1;
    0x0003c864 ldr r3, [pc, 0x120]                               |     r3 = *(0x3c988);
    0x0003c866 add r2, pc                                        |     r2 = 0x791ee;
    0x0003c868 ldr r3, [r2, r3]                                  |     
    0x0003c86a ldr r3, [r3]                                      |     r3 = imp.mkdir;
    0x0003c86c str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x0003c86e mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r1 != 0) {
    0x0003c872 cbnz r1, 0x3c884                                  |         goto label_19;
                                                                 |     }
    0x0003c874 b 0x3c88a                                         |     goto label_20;
                                                                 |     do {
    0x0003c876 lsls r1, r3, 0xd                                  |         r1 = r3 << 0xd;
    0x0003c878 itett mi                                          |         
                                                                 |         if (r1 >= r3) {
    0x0003c87a ldrmi r3, [r4, 0x14]                              |             r3 = *((r4 + 0x14));
                                                                 |         }
                                                                 |         if (r1 < r3) {
    0x0003c87c ldrpl r4, [r4, 0xc]                               |             r4 = *((r4 + 0xc));
                                                                 |         }
                                                                 |         if (r1 >= r3) {
    0x0003c87e ldrmi r3, [r3, 4]                                 |             r3 = *((r3 + 4));
                                                                 |         }
                                                                 |         if (r1 >= r3) {
    0x0003c880 ldrmi r4, [r3]                                    |             r4 = *(r3);
                                                                 |         }
                                                                 |         if (r4 == 0) {
    0x0003c882 cbz r4, 0x3c88a                                   |             goto label_20;
                                                                 |         }
                                                                 | label_19:
    0x0003c884 ldr r3, [r4, 4]                                   |         r3 = *((r4 + 4));
    0x0003c886 lsls r2, r3, 0x13                                 |         r2 = r3 << 0x13;
    0x0003c888 bmi 0x3c876                                       |         
                                                                 |     } while (r2 < r3);
                                                                 | label_20:
    0x0003c88a ldrb r3, [r5, 0x17]                               |     r3 = *((r5 + 0x17));
                                                                 |     if (r3 != 0) {
    0x0003c88c cbz r3, 0x3c894                                   |         
    0x0003c88e ldrb r3, [r4]                                     |         r3 = *(r4);
    0x0003c890 cmp r3, 0x9f                                      |         
                                                                 |         if (r3 != 0x9f) {
    0x0003c892 bne 0x3c900                                       |             goto label_21;
                                                                 |         }
                                                                 |     }
                                                                 | label_1:
    0x0003c894 ldrb r3, [r5, 0x13]                               |     r3 = *((r5 + 0x13));
    0x0003c896 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0003c898 beq 0x3c95e                                       |         goto label_22;
                                                                 |     }
    0x0003c89a subs r3, 1                                        |     r3--;
    0x0003c89c uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x0003c89e adds r2, r3, 6                                    |     r2 = r3 + 6;
    0x0003c8a0 strb r3, [r5, 0x13]                               |     *((r5 + 0x13)) = r3;
    0x0003c8a2 ldr.w r6, [r5, r2, lsl 2]                         |     offset_0 = r2 << 2;
                                                                 |     r6 = *((r5 + offset_0));
                                                                 | label_4:
    0x0003c8a6 mov r1, r4                                        |     r1 = r4;
    0x0003c8a8 mov r2, r6                                        |     r2 = r6;
    0x0003c8aa mov r0, r5                                        |     r0 = r5;
    0x0003c8ac bl 0x3b6f0                                        |     r0 = fcn_0003b6f0 (r0, r1, r2);
    0x0003c8b0 cmp r0, r6                                        |     
    0x0003c8b2 mov r4, r0                                        |     r4 = r0;
    0x0003c8b4 it eq                                             |     
                                                                 |     if (r0 != r6) {
    0x0003c8b6 streq r6, [r7]                                    |         *(r7) = r6;
                                                                 |     }
                                                                 |     if (r0 == r6) {
    0x0003c8b8 beq 0x3c8c0                                       |         goto label_3;
                                                                 |     }
    0x0003c8ba cbnz r6, 0x3c8da                                  |     
                                                                 |     while (r0 > 7) {
                                                                 | label_0:
    0x0003c8bc movs r3, 0                                        |         r3 = 0;
    0x0003c8be str r3, [r7]                                      |         *(r7) = r3;
                                                                 | label_3:
    0x0003c8c0 ldr r2, [pc, 0xc8]                                |         
    0x0003c8c2 ldr r3, [pc, 0xc4]                                |         r3 = *(0x3c98a);
    0x0003c8c4 add r2, pc                                        |         r2 = 0x79254;
    0x0003c8c6 ldr r3, [r2, r3]                                  |         r3 = imp.mkdir;
    0x0003c8c8 ldr r2, [r3]                                      |         r2 = imp.mkdir;
    0x0003c8ca ldr r3, [sp, 0x1c]                                |         r3 = var_1ch;
    0x0003c8cc eors r2, r3                                       |         r2 ^= r3;
    0x0003c8ce mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0003c8d2 bne 0x3c980                                       |             goto label_23;
                                                                 |         }
    0x0003c8d4 mov r0, r4                                        |         r0 = r4;
    0x0003c8d6 add sp, 0x24                                      |         
    0x0003c8d8 pop {r4, r5, r6, r7, pc}                          |         
    0x0003c8da ldrb r0, [r5, 0x13]                               |         r0 = *((r5 + 0x13));
    0x0003c8dc cmp r0, 7                                         |         
    0x0003c8de bhi 0x3c8bc                                       |         
                                                                 |     }
    0x0003c8e0 add.w r3, r5, 0x74                                |     r3 = r5 + 0x74;
    0x0003c8e4 add.w r1, r5, 0x13c                               |     r1 = r5 + 0x13c;
                                                                 |     do {
    0x0003c8e8 ldr r2, [r3, 0xc]                                 |         r2 = *((r3 + 0xc));
    0x0003c8ea cmp r6, r2                                        |         
                                                                 |         if (r6 == r2) {
    0x0003c8ec beq 0x3c97a                                       |             goto label_24;
                                                                 |         }
    0x0003c8ee adds r3, 0x14                                     |         r3 += 0x14;
    0x0003c8f0 cmp r1, r3                                        |         
    0x0003c8f2 bne 0x3c8e8                                       |         
                                                                 |     } while (r1 != r3);
    0x0003c8f4 adds r3, r0, 1                                    |     r3 = r0 + 1;
    0x0003c8f6 adds r0, 6                                        |     r0 += 6;
    0x0003c8f8 strb r3, [r5, 0x13]                               |     *((r5 + 0x13)) = r3;
    0x0003c8fa str.w r6, [r5, r0, lsl 2]                         |     __asm ("str.w r6, [r5, r0, lsl 2]");
    0x0003c8fe b 0x3c8bc                                         |     goto label_0;
                                                                 | label_21:
    0x0003c900 movs r3, 3                                        |     r3 = 3;
    0x0003c902 movs r6, 0                                        |     r6 = 0;
    0x0003c904 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x0003c906 mov r1, r4                                        |     r1 = r4;
    0x0003c908 ldr r3, [pc, 0x84]                                |     
    0x0003c90a add r0, sp, 4                                     |     r0 += var_4h;
    0x0003c90c str r6, [sp, 0xc]                                 |     var_ch = r6;
    0x0003c90e strd r6, r6, [sp, 0x10]                           |     __asm ("strd r6, r6, [var_14h]");
    0x0003c912 add r3, pc                                        |     r3 = 0x792a6;
    0x0003c914 str r3, [sp, 4]                                   |     var_4h = r3;
    0x0003c916 ldr r3, [pc, 0x7c]                                |     
    0x0003c918 add r3, pc                                        |     r3 = 0x792b2;
    0x0003c91a str r3, [sp, 8]                                   |     var_8h = r3;
    0x0003c91c bl 0xc6b0                                         |     fcn_0000c6b0 (r0, r1);
    0x0003c920 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0003c922 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0003c924 beq 0x3c894                                       |         goto label_1;
                                                                 |     }
    0x0003c926 ldr.w r3, [r5, 0x13c]                             |     r3 = *((r5 + 0x13c));
    0x0003c92a str r6, [r7]                                      |     *(r7) = r6;
                                                                 |     if (r3 == 0) {
    0x0003c92c cbz r3, 0x3c966                                   |         goto label_25;
                                                                 |     }
    0x0003c92e ldrd r7, r6, [r3]                                 |     __asm ("ldrd r7, r6, [r3]");
    0x0003c932 cmp r7, 0                                         |     
                                                                 |     if (r7 > 0) {
    0x0003c934 bgt 0x3c940                                       |         goto label_26;
                                                                 |     }
    0x0003c936 b 0x3c966                                         |     goto label_25;
                                                                 |     do {
                                                                 | label_2:
    0x0003c938 subs r7, 1                                        |         r7--;
    0x0003c93a add.w r6, r6, 0x14                                |         r6 += 0x14;
                                                                 |         if (r7 == 1) {
    0x0003c93e beq 0x3c966                                       |             goto label_25;
                                                                 |         }
                                                                 | label_26:
    0x0003c940 ldrb r3, [r6, 0xd]                                |         r3 = *((r6 + 0xd));
    0x0003c942 lsls r3, r3, 0x1d                                 |         r3 <<= 0x1d;
    0x0003c944 bpl 0x3c938                                       |         
                                                                 |     } while (r3 >= r3);
    0x0003c946 ldr r0, [r6]                                      |     r0 = *(r6);
    0x0003c948 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0003c94a beq 0x3c938                                       |         goto label_2;
                                                                 |     }
    0x0003c94c mov.w r2, -1                                      |     r2 = -1;
    0x0003c950 mov r1, r4                                        |     r1 = r4;
    0x0003c952 bl 0xca2c                                         |     r0 = fcn_0000ca2c (r0, r1, r2);
    0x0003c956 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0003c958 bne 0x3c938                                       |         goto label_2;
                                                                 |     }
    0x0003c95a ldr r4, [r6, 0x10]                                |     r4 = *((r6 + 0x10));
    0x0003c95c b 0x3c8c0                                         |     goto label_3;
                                                                 | label_22:
    0x0003c95e ldr r6, [r5, 0x48]                                |     r6 = *((r5 + 0x48));
    0x0003c960 adds r6, 1                                        |     r6++;
    0x0003c962 str r6, [r5, 0x48]                                |     *((r5 + 0x48)) = r6;
    0x0003c964 b 0x3c8a6                                         |     goto label_4;
                                                                 | label_25:
    0x0003c966 ldr r2, [r5, 0x48]                                |     r2 = *((r5 + 0x48));
    0x0003c968 movs r3, 1                                        |     r3 = 1;
    0x0003c96a mov r1, r4                                        |     r1 = r4;
    0x0003c96c mov r0, r5                                        |     r0 = r5;
    0x0003c96e adds r4, r2, r3                                   |     r4 = r2 + r3;
    0x0003c970 mov r2, r4                                        |     r2 = r4;
    0x0003c972 str r4, [r5, 0x48]                                |     *((r5 + 0x48)) = r4;
    0x0003c974 bl 0x19d94                                        |     fcn_00019d94 (r0, r1, r2, r3);
    0x0003c978 b 0x3c8c0                                         |     goto label_3;
                                                                 | label_24:
    0x0003c97a movs r2, 1                                        |     r2 = 1;
    0x0003c97c strb r2, [r3, 6]                                  |     *((r3 + 6)) = r2;
    0x0003c97e b 0x3c8bc                                         |     goto label_0;
                                                                 | label_23:
    0x0003c980 blx 0x6498                                        |     fcn_00006498 ();
                                                                 |     if (r2 != 0) {
    0x0003c984 cbz r2, 0x3ca04                                   |         
    0x0003c986 movs r3, r0                                       |         r3 = r0;
    0x0003c988 lsls r0, r1, 0xe                                  |         r0 = r1 << 0xe;
    0x0003c98a movs r0, r0                                       |         
                                                                 |         if (r4 != 0) {
    0x0003c98c cbz r4, 0x3c9f4                                   |             
    0x0003c98e movs r3, r0                                       |             r3 = r0;
    0x0003c990 push {r0, r1, r3, r5, r6, lr}                     |             
    0x0003c992 invalid                                           |             
                                                                 |         }
    0x0003c9f4 cmp.w r8, 0                                       |         
                                                                 |         if (r8 != 0) {
    0x0003c9f8 bne.w 0x3cb2c                                     |             goto label_27;
                                                                 |         }
    0x0003c9fc orr.w r3, r8, r0                                  |         r3 = r8 | r0;
    0x0003ca00 uxtb r3, r3                                       |         r3 = (int8_t) r3;
    0x0003ca02 cmp r3, 0                                         |         
                                                                 |     }
                                                                 |     if (r3 == 0) {
    0x0003ca04 beq.w 0x3cb50                                     |         goto label_28;
                                                                 |     }
    0x0003ca08 add r0, r8                                        |     r0 += r8;
    0x0003ca0a uxtb.w r8, r0                                     |     r8 = (int8_t) r0;
                                                                 | label_5:
    0x0003ca0e ldr r3, [r4, 0x64]                                |     r3 = *((r4 + 0x64));
    0x0003ca10 strb.w r8, [sp, 0x2b]                             |     var_2bh = r8;
    0x0003ca14 adds r3, 1                                        |     r3++;
    0x0003ca16 str r3, [r4, 0x64]                                |     *((r4 + 0x64)) = r3;
    0x0003ca18 ldrb r3, [r4, 0x13]                               |     r3 = *((r4 + 0x13));
    0x0003ca1a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0003ca1c beq.w 0x3cc70                                     |         goto label_29;
                                                                 |     }
    0x0003ca20 subs r3, 1                                        |     r3--;
    0x0003ca22 uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x0003ca24 strb r3, [r4, 0x13]                               |     *((r4 + 0x13)) = r3;
    0x0003ca26 adds r3, 6                                        |     r3 += 6;
    0x0003ca28 ldr.w r8, [r4, r3, lsl 2]                         |     offset_1 = r3 << 2;
                                                                 |     r8 = *((r4 + offset_1));
                                                                 | label_8:
    0x0003ca2c mov r1, sb                                        |     r1 = sb;
    0x0003ca2e mov r2, r8                                        |     r2 = r8;
    0x0003ca30 mov r0, r4                                        |     r0 = r4;
    0x0003ca32 bl 0x3c4a8                                        |     fcn_0003c4a8 (r0, r1, r2);
    0x0003ca36 cmp r7, 5                                         |     
                                                                 |     if (r7 == 5) {
    0x0003ca38 beq.w 0x3cb56                                     |         goto label_30;
                                                                 |     }
    0x0003ca3c ldr r0, [r5, 0xc]                                 |     r0 = *((r5 + 0xc));
    0x0003ca3e bl 0x7f74                                         |     r0 = fcn_00007f74 (r0);
                                                                 |     if (r0 != 0) {
    0x0003ca42 cbz r0, 0x3ca9a                                   |         
    0x0003ca44 ldr r3, [sp, 0x20]                                |         r3 = var_20h;
    0x0003ca46 cmp sl, r3                                        |         
                                                                 |         if (sl == r3) {
    0x0003ca48 beq.w 0x3cdb2                                     |             goto label_31;
                                                                 |         }
    0x0003ca4c mov.w fp, 0                                       |         
    0x0003ca50 mov r2, r8                                        |         r2 = r8;
    0x0003ca52 mov r3, fp                                        |         r3 = fp;
    0x0003ca54 movs r1, 0x4d                                     |         r1 = 0x4d;
    0x0003ca56 mov r0, r6                                        |         r0 = r6;
    0x0003ca58 str.w fp, [sp]                                    |         __asm ("str.w fp, [sp]");
    0x0003ca5c bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003ca60 mov r3, sl                                        |         r3 = sl;
    0x0003ca62 mov sb, r0                                        |         sb = r0;
    0x0003ca64 movs r1, 0x6a                                     |         r1 = 0x6a;
    0x0003ca66 str.w fp, [sp]                                    |         __asm ("str.w fp, [sp]");
    0x0003ca6a mov r0, r6                                        |         r0 = r6;
    0x0003ca6c ldr r2, [r5, 0x1c]                                |         r2 = *((r5 + 0x1c));
    0x0003ca6e bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003ca72 mov r2, fp                                        |         r2 = fp;
    0x0003ca74 ldr r3, [sp, 0x20]                                |         r3 = var_20h;
    0x0003ca76 movs r1, 0x10                                     |         r1 = 0x10;
    0x0003ca78 mov r0, r6                                        |         r0 = r6;
    0x0003ca7a str.w fp, [sp]                                    |         __asm ("str.w fp, [sp]");
    0x0003ca7e bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003ca82 ldr r3, [r6, 0x20]                                |         r3 = *((r6 + 0x20));
    0x0003ca84 cmp sb, r3                                        |         
    0x0003ca86 itttt lo                                          |         
                                                                 |         if (sb >= r3) {
    0x0003ca88 ldrlo r2, [r6, 4]                                 |             r2 = *((r6 + 4));
                                                                 |         }
                                                                 |         if (sb >= r3) {
    0x0003ca8a addlo sb, sb, sb, lsl 2                           |             sb += (sb << 2);
                                                                 |         }
                                                                 |         if (sb >= r3) {
    0x0003ca8e addlo r2, r2, sb, lsl 2                           |             r2 += (sb << 2);
                                                                 |         }
                                                                 |         if (sb < r3) {
    0x0003ca92 str r3, [r2, 8]                                   |             *((r2 + 8)) = r3;
                                                                 |         }
    0x0003ca94 subs r3, 1                                        |         r3--;
    0x0003ca96 ldr r2, [r6, 0x18]                                |         r2 = *((r6 + 0x18));
    0x0003ca98 str r3, [r2, 0x58]                                |         *((r2 + 0x58)) = r3;
                                                                 |     }
                                                                 | label_16:
    0x0003ca9a cmp r7, 1                                         |     
                                                                 |     if (r7 == 1) {
    0x0003ca9c beq.w 0x3cc7c                                     |         goto label_32;
                                                                 |     }
    0x0003caa0 mov.w fp, 1                                       |     
    0x0003caa4 add.w r3, sp, 0x2b                                |     r3 += var_2bh;
    0x0003caa8 movs r7, 0                                        |     r7 = 0;
    0x0003caaa mov r2, r8                                        |     r2 = r8;
    0x0003caac str r3, [sp, 4]                                   |     var_4h = r3;
    0x0003caae movs r1, 0x2f                                     |     r1 = 0x2f;
    0x0003cab0 mov r3, fp                                        |     r3 = fp;
    0x0003cab2 mov r0, r6                                        |     r0 = r6;
    0x0003cab4 str.w fp, [sp, 8]                                 |     __asm ("str.w fp, [var_8h]");
    0x0003cab8 str r7, [sp]                                      |     *(sp) = r7;
    0x0003caba bl 0x1977c                                        |     fcn_0001977c (r0, r1, r2, r3, r4, r5);
    0x0003cabe ldr.w sb, [sp, 0x2c]                              |     sb = var_2ch;
    0x0003cac2 str.w fp, [sp, 4]                                 |     __asm ("str.w fp, [var_4h]");
    0x0003cac6 ldr r2, [r5, 0x1c]                                |     r2 = *((r5 + 0x1c));
    0x0003cac8 cmp.w sb, 0                                       |     
                                                                 |     if (sb != 0) {
    0x0003cacc bne.w 0x3cc9e                                     |         goto label_33;
                                                                 |     }
    0x0003cad0 mov r3, sl                                        |     r3 = sl;
    0x0003cad2 mov r0, r6                                        |     r0 = r6;
    0x0003cad4 movs r1, 0x42                                     |     r1 = 0x42;
    0x0003cad6 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x0003cada bl 0x19a3c                                        |     fcn_00019a3c (r0, r1, r2, r3, r4, r5);
                                                                 | label_7:
    0x0003cade cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x0003cae2 beq 0x3cb0a                                       |         goto label_17;
                                                                 |     }
    0x0003cae4 ldrb r0, [r4, 0x13]                               |     r0 = *((r4 + 0x13));
    0x0003cae6 cmp r0, 7                                         |     
                                                                 |     if (r0 > 7) {
    0x0003cae8 bhi 0x3cb0a                                       |         goto label_17;
                                                                 |     }
    0x0003caea add.w r3, r4, 0x74                                |     r3 = r4 + 0x74;
    0x0003caee add.w r1, r4, 0x13c                               |     r1 = r4 + 0x13c;
                                                                 |     do {
    0x0003caf2 ldr r2, [r3, 0xc]                                 |         r2 = *((r3 + 0xc));
    0x0003caf4 cmp r8, r2                                        |         
                                                                 |         if (r8 == r2) {
    0x0003caf6 beq.w 0x3cdc4                                     |             goto label_34;
                                                                 |         }
    0x0003cafa adds r3, 0x14                                     |         r3 += 0x14;
    0x0003cafc cmp r3, r1                                        |         
    0x0003cafe bne 0x3caf2                                       |         
                                                                 |     } while (r3 != r1);
    0x0003cb00 adds r3, r0, 1                                    |     r3 = r0 + 1;
    0x0003cb02 adds r0, 6                                        |     r0 += 6;
    0x0003cb04 strb r3, [r4, 0x13]                               |     *((r4 + 0x13)) = r3;
    0x0003cb06 str.w r8, [r4, r0, lsl 2]                         |     __asm ("str.w r8, [r4, r0, lsl 2]");
                                                                 | label_17:
    0x0003cb0a mov r0, r4                                        |     r0 = r4;
    0x0003cb0c bl 0xa404                                         |     fcn_0000a404 (r0);
    0x0003cb10 ldr r2, [pc, 0x2d0]                               |     
    0x0003cb12 ldr r3, [pc, 0x2cc]                               |     r3 = *(0x3cde2);
    0x0003cb14 add r2, pc                                        |     r2 = 0x798fc;
    0x0003cb16 ldr r3, [r2, r3]                                  |     r3 = imp.mkdir;
    0x0003cb18 ldr r2, [r3]                                      |     r2 = imp.mkdir;
    0x0003cb1a ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0003cb1c eors r2, r3                                       |     r2 ^= r3;
    0x0003cb1e mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x0003cb22 bne.w 0x3cdd8                                     |         goto label_35;
                                                                 |     }
    0x0003cb26 add sp, 0x3c                                      |     
    0x0003cb28 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_27:
    0x0003cb2c cmp.w r8, 0x62                                    |     
    0x0003cb30 it ls                                             |     
                                                                 |     if (r8 <= 0x62) {
    0x0003cb32 cmpls r0, 0x62                                    |         __asm ("cmpls r0, 0x62");
                                                                 |     }
    0x0003cb34 ite hi                                            |     
                                                                 |     if (r8 <= 0x62) {
    0x0003cb36 movhi r0, 1                                       |         r0 = 1;
                                                                 |     }
                                                                 |     if (r8 > 0x62) {
    0x0003cb38 movls r0, 0                                       |         r0 = 0;
                                                                 |     }
    0x0003cb3a add.w r8, r0, 0x62                                |     r8 = r0 + 0x62;
    0x0003cb3e b 0x3ca0e                                         |     goto label_5;
                                                                 | label_28:
    0x0003cb50 mov.w r8, 0x62                                    |     r8 = 0x62;
    0x0003cb54 b 0x3ca0e                                         |     goto label_5;
                                                                 | label_30:
    0x0003cb56 ldr r1, [r5, 0xc]                                 |     r1 = *((r5 + 0xc));
    0x0003cb58 mov r0, r4                                        |     r0 = r4;
    0x0003cb5a ldr.w sb, [r5, 0x14]                              |     sb = *((r5 + 0x14));
    0x0003cb5e bl 0x22e78                                        |     fcn_00022e78 (r0, r1);
    0x0003cb62 str r0, [sp, 0x14]                                |     var_14h = r0;
    0x0003cb64 ldr r0, [r6, 0x18]                                |     r0 = *((r6 + 0x18));
    0x0003cb66 bl 0x19ed0                                        |     fcn_00019ed0 (r0);
    0x0003cb6a ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0003cb6c str r0, [sp, 0x18]                                |     var_18h = r0;
    0x0003cb6e cmp sl, r3                                        |     
                                                                 |     if (sl == r3) {
    0x0003cb70 beq.w 0x3cd3e                                     |         goto label_36;
                                                                 |     }
    0x0003cb74 ldrb r3, [r4, 0x13]                               |     r3 = *((r4 + 0x13));
    0x0003cb76 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0003cb78 beq.w 0x3cce4                                     |         goto label_37;
                                                                 |     }
    0x0003cb7c subs r3, 1                                        |     r3--;
    0x0003cb7e uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x0003cb80 strb r3, [r4, 0x13]                               |     *((r4 + 0x13)) = r3;
    0x0003cb82 adds r3, 6                                        |     r3 += 6;
    0x0003cb84 ldr.w r3, [r4, r3, lsl 2]                         |     offset_2 = r3 << 2;
                                                                 |     r3 = *((r4 + offset_2));
    0x0003cb88 str r3, [sp, 0x10]                                |     var_10h = r3;
                                                                 | label_9:
    0x0003cb8a ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0003cb8c mov r2, r8                                        |     r2 = r8;
    0x0003cb8e movs r1, 0x55                                     |     r1 = 0x55;
    0x0003cb90 mov r0, r6                                        |     r0 = r6;
    0x0003cb92 str r3, [sp]                                      |     *(sp) = r3;
    0x0003cb94 mov r3, r8                                        |     r3 = r8;
    0x0003cb96 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003cb9a ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x0003cb9e cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x0003cba0 ble 0x3cc50                                       |         goto label_38;
                                                                 |     }
                                                                 | label_14:
    0x0003cba2 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0003cba4 movs r5, 0                                        |     r5 = 0;
    0x0003cba6 str.w sl, [sp, 0x24]                              |     __asm ("str.w sl, [var_24h]");
    0x0003cbaa subs.w r3, sl, r3                                 |     r3 = sl - r3;
    0x0003cbae it ne                                             |     
                                                                 |     if (r3 == sl) {
    0x0003cbb0 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x0003cbb2 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x0003cbb4 add r3, sp, 0x30                                  |     r3 += var_30h;
    0x0003cbb6 mov sl, r3                                        |     sl = r3;
                                                                 | label_6:
    0x0003cbb8 ldr.w r2, [sb, 4]                                 |     r2 = *((sb + 4));
    0x0003cbbc add.w fp, r5, r5, lsl 2                           |     
    0x0003cbc0 mov r0, r4                                        |     r0 = r4;
    0x0003cbc2 ldr.w r1, [r2, fp, lsl 2]                         |     offset_3 = fp << 2;
                                                                 |     r1 = *((r2 + offset_3));
    0x0003cbc6 mov r2, sl                                        |     r2 = sl;
    0x0003cbc8 bl 0x3c858                                        |     fcn_0003c858 (r0, r1, r2);
    0x0003cbcc ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0003cbce mov r7, r0                                        |     r7 = r0;
    0x0003cbd0 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003cbd2 bne.w 0x3ccee                                     |         goto label_39;
                                                                 |     }
                                                                 | label_10:
    0x0003cbd6 ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x0003cbda ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x0003cbdc str r7, [sp]                                      |     *(sp) = r7;
    0x0003cbde subs r3, 1                                        |     r3--;
    0x0003cbe0 cmp r3, r5                                        |     
    0x0003cbe2 it gt                                             |     
                                                                 |     if (r3 <= r5) {
    0x0003cbe4 orrgt r2, r2, 1                                   |         r2 |= 1;
                                                                 |     }
    0x0003cbe8 mvn r3, 3                                         |     r3 = ~3;
    0x0003cbec str r3, [sp, 8]                                   |     var_8h = r3;
    0x0003cbee ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0003cbf0 str r3, [sp, 4]                                   |     var_4h = r3;
    0x0003cbf2 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0003cbf4 beq.w 0x3cd10                                     |         goto label_40;
                                                                 |     }
    0x0003cbf8 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0003cbfa movs r1, 0x4f                                     |     r1 = 0x4f;
    0x0003cbfc mov r2, r8                                        |     r2 = r8;
    0x0003cbfe mov r0, r6                                        |     r0 = r6;
    0x0003cc00 bl 0x1977c                                        |     fcn_0001977c (r0, r1, r2, r3, r4, r5);
    0x0003cc04 ldr r3, [r6, 4]                                   |     r3 = *((r6 + 4));
    0x0003cc06 ldrb.w r1, [sp, 0x2b]                             |     r1 = var_2bh;
                                                                 |     if (r3 != 0) {
    0x0003cc0a cbz r3, 0x3cc1a                                   |         
                                                                 | label_12:
    0x0003cc0c ldr r2, [r6, 0x20]                                |         r2 = *((r6 + 0x20));
    0x0003cc0e add.w r2, r2, r2, lsl 2                           |         r2 += (r2 << 2);
    0x0003cc12 add.w r3, r3, r2, lsl 2                           |         r3 += (r2 << 2);
    0x0003cc16 strb r1, [r3, -0x11]                              |         *((r3 - 0x11)) = r1;
                                                                 |     }
                                                                 | label_11:
    0x0003cc1a ldr r2, [sp, 0x30]                                |     r2 = var_30h;
                                                                 |     if (r2 == 0) {
    0x0003cc1c cbz r2, 0x3cc42                                   |         goto label_13;
                                                                 |     }
    0x0003cc1e ldrb r7, [r4, 0x13]                               |     r7 = *((r4 + 0x13));
    0x0003cc20 cmp r7, 7                                         |     
                                                                 |     if (r7 > 7) {
    0x0003cc22 bhi 0x3cc42                                       |         goto label_13;
                                                                 |     }
    0x0003cc24 add.w r3, r4, 0x74                                |     r3 = r4 + 0x74;
    0x0003cc28 add.w r0, r4, 0x13c                               |     r0 = r4 + 0x13c;
                                                                 |     do {
    0x0003cc2c ldr r1, [r3, 0xc]                                 |         r1 = *((r3 + 0xc));
    0x0003cc2e cmp r2, r1                                        |         
                                                                 |         if (r2 == r1) {
    0x0003cc30 beq 0x3cd2e                                       |             goto label_41;
                                                                 |         }
    0x0003cc32 adds r3, 0x14                                     |         r3 += 0x14;
    0x0003cc34 cmp r3, r0                                        |         
    0x0003cc36 bne 0x3cc2c                                       |         
                                                                 |     } while (r3 != r0);
    0x0003cc38 adds r3, r7, 1                                    |     r3 = r7 + 1;
    0x0003cc3a adds r7, 6                                        |     r7 += 6;
    0x0003cc3c strb r3, [r4, 0x13]                               |     *((r4 + 0x13)) = r3;
    0x0003cc3e str.w r2, [r4, r7, lsl 2]                         |     __asm ("str.w r2, [r4, r7, lsl 2]");
                                                                 | label_13:
    0x0003cc42 ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x0003cc46 adds r5, 1                                        |     r5++;
    0x0003cc48 cmp r3, r5                                        |     
                                                                 |     if (r3 > r5) {
    0x0003cc4a bgt 0x3cbb8                                       |         goto label_6;
                                                                 |     }
    0x0003cc4c ldr.w sl, [sp, 0x24]                              |     sl = var_24h;
                                                                 | label_38:
    0x0003cc50 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0003cc52 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003cc54 bne 0x3cd50                                       |         goto label_42;
                                                                 |     }
                                                                 | label_15:
    0x0003cc56 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0003cc58 ldr r1, [r6, 0x20]                                |     r1 = *((r6 + 0x20));
    0x0003cc5a ldr r2, [r6, 0x18]                                |     r2 = *((r6 + 0x18));
    0x0003cc5c mvns r3, r3                                       |     r3 = ~r3;
    0x0003cc5e add.w r0, r1, -1                                  |     r0 = r1 + -1;
                                                                 |     if (r3 >= r3) {
    0x0003cc62 bmi 0x3cc6c                                       |         
    0x0003cc64 ldr r5, [r2, 0x70]                                |         r5 = *((r2 + 0x70));
                                                                 |         if (r5 == 0) {
    0x0003cc66 cbz r5, 0x3cc6c                                   |             goto label_43;
                                                                 |         }
    0x0003cc68 str.w r1, [r5, r3, lsl 2]                         |         __asm ("str.w r1, [r5, r3, lsl 2]");
                                                                 |     }
                                                                 | label_43:
    0x0003cc6c str r0, [r2, 0x58]                                |     *((r2 + 0x58)) = r0;
    0x0003cc6e b 0x3cade                                         |     goto label_7;
                                                                 | label_29:
    0x0003cc70 ldr r3, [r4, 0x48]                                |     r3 = *((r4 + 0x48));
    0x0003cc72 add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x0003cc76 str.w r8, [r4, 0x48]                              |     __asm ("str.w r8, [r4, 0x48]");
    0x0003cc7a b 0x3ca2c                                         |     goto label_8;
                                                                 | label_32:
    0x0003cc7c movs r3, 0                                        |     r3 = 0;
    0x0003cc7e mov r2, r8                                        |     r2 = r8;
    0x0003cc80 str r3, [sp]                                      |     *(sp) = r3;
    0x0003cc82 movs r1, 0x26                                     |     r1 = 0x26;
    0x0003cc84 mov r3, sl                                        |     r3 = sl;
    0x0003cc86 mov r0, r6                                        |     r0 = r6;
    0x0003cc88 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003cc8c ldr r2, [r5, 0x1c]                                |     r2 = *((r5 + 0x1c));
    0x0003cc8e mov r3, sl                                        |     r3 = sl;
    0x0003cc90 mov r0, r6                                        |     r0 = r6;
    0x0003cc92 movs r1, 0x44                                     |     r1 = 0x44;
    0x0003cc94 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x0003cc98 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003cc9c b 0x3cade                                         |     goto label_7;
                                                                 | label_33:
    0x0003cc9e mov r3, r7                                        |     r3 = r7;
    0x0003cca0 movs r1, 0x43                                     |     r1 = 0x43;
    0x0003cca2 mov r0, r6                                        |     r0 = r6;
    0x0003cca4 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x0003cca8 bl 0x19a3c                                        |     fcn_00019a3c (r0, r1, r2, r3, r4, r5);
    0x0003ccac ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0003ccae mov r5, r0                                        |     r5 = r0;
    0x0003ccb0 mov r2, sb                                        |     r2 = sb;
    0x0003ccb2 movs r1, 0x4c                                     |     r1 = 0x4c;
    0x0003ccb4 mov r0, r6                                        |     r0 = r6;
    0x0003ccb6 str r7, [sp]                                      |     *(sp) = r7;
    0x0003ccb8 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003ccbc mov r2, r7                                        |     r2 = r7;
    0x0003ccbe mov r3, sl                                        |     r3 = sl;
    0x0003ccc0 movs r1, 0x10                                     |     r1 = 0x10;
    0x0003ccc2 mov r0, r6                                        |     r0 = r6;
    0x0003ccc4 str r7, [sp]                                      |     *(sp) = r7;
    0x0003ccc6 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003ccca ldr r3, [r6, 0x20]                                |     r3 = *((r6 + 0x20));
    0x0003cccc cmp r5, r3                                        |     
    0x0003ccce itttt lo                                          |     
                                                                 |     if (r5 >= r3) {
    0x0003ccd0 ldrlo r2, [r6, 4]                                 |         r2 = *((r6 + 4));
                                                                 |     }
                                                                 |     if (r5 >= r3) {
    0x0003ccd2 addlo r5, r5, r5, lsl 2                           |         r5 += (r5 << 2);
                                                                 |     }
                                                                 |     if (r5 >= r3) {
    0x0003ccd6 addlo r2, r2, r5, lsl 2                           |         r2 += (r5 << 2);
                                                                 |     }
                                                                 |     if (r5 < r3) {
    0x0003ccda str r3, [r2, 8]                                   |         *((r2 + 8)) = r3;
                                                                 |     }
    0x0003ccdc subs r3, 1                                        |     r3--;
    0x0003ccde ldr r2, [r6, 0x18]                                |     r2 = *((r6 + 0x18));
    0x0003cce0 str r3, [r2, 0x58]                                |     *((r2 + 0x58)) = r3;
    0x0003cce2 b 0x3cade                                         |     goto label_7;
                                                                 | label_37:
    0x0003cce4 ldr r3, [r4, 0x48]                                |     r3 = *((r4 + 0x48));
    0x0003cce6 adds r3, 1                                        |     r3++;
    0x0003cce8 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x0003ccea str r3, [r4, 0x48]                                |     *((r4 + 0x48)) = r3;
    0x0003ccec b 0x3cb8a                                         |     goto label_9;
                                                                 | label_39:
    0x0003ccee ldr.w r2, [sb, 4]                                 |     r2 = *((sb + 4));
    0x0003ccf2 ldr.w r0, [r2, fp, lsl 2]                         |     offset_4 = fp << 2;
                                                                 |     r0 = *((r2 + offset_4));
    0x0003ccf6 bl 0x7f74                                         |     r0 = fcn_00007f74 (r0);
    0x0003ccfa cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0003ccfc beq.w 0x3cbd6                                     |         goto label_10;
                                                                 |     }
    0x0003cd00 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0003cd02 mov r3, r7                                        |     r3 = r7;
    0x0003cd04 movs r1, 0x55                                     |     r1 = 0x55;
    0x0003cd06 mov r0, r6                                        |     r0 = r6;
    0x0003cd08 str r2, [sp]                                      |     *(sp) = r2;
    0x0003cd0a bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003cd0e b 0x3cbd6                                         |     goto label_10;
                                                                 | label_40:
    0x0003cd10 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x0003cd12 mov r2, r8                                        |     r2 = r8;
    0x0003cd14 movs r1, 0x4e                                     |     r1 = 0x4e;
    0x0003cd16 mov r0, r6                                        |     r0 = r6;
    0x0003cd18 bl 0x1977c                                        |     fcn_0001977c (r0, r1, r2, r3, r4, r5);
    0x0003cd1c ldr r3, [r6, 4]                                   |     r3 = *((r6 + 4));
    0x0003cd1e ldrb.w r2, [sp, 0x2b]                             |     r2 = var_2bh;
    0x0003cd22 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0003cd24 beq.w 0x3cc1a                                     |         goto label_11;
                                                                 |     }
    0x0003cd28 orr r1, r2, 8                                     |     r1 = r2 | 8;
    0x0003cd2c b 0x3cc0c                                         |     goto label_12;
                                                                 | label_41:
    0x0003cd2e movs r2, 1                                        |     r2 = 1;
    0x0003cd30 strb r2, [r3, 6]                                  |     *((r3 + 6)) = r2;
    0x0003cd32 b 0x3cc42                                         |     goto label_13;
                                                                 | label_36:
    0x0003cd3e ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x0003cd42 cmp r3, 0                                         |     
    0x0003cd44 itt gt                                            |     
                                                                 |     if (r3 <= 0) {
    0x0003cd46 movgt r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r3 > 0) {
    0x0003cd48 strgt r3, [sp, 0x10]                              |         var_10h = r3;
                                                                 |         goto label_44;
                                                                 |     }
                                                                 |     if (r3 > 0) {
                                                                 | label_44:
    0x0003cd4a bgt.w 0x3cba2                                     |         goto label_14;
                                                                 |     }
    0x0003cd4e b 0x3cc56                                         |     goto label_15;
                                                                 | label_42:
    0x0003cd50 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x0003cd52 movs r5, 0                                        |     r5 = 0;
    0x0003cd54 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0003cd56 movs r1, 0x4c                                     |     r1 = 0x4c;
    0x0003cd58 mov r0, r6                                        |     r0 = r6;
    0x0003cd5a str r5, [sp]                                      |     *(sp) = r5;
    0x0003cd5c mvns r7, r2                                       |     r7 = ~r2;
    0x0003cd5e ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0003cd60 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003cd64 mov r2, r5                                        |     r2 = r5;
    0x0003cd66 mov r3, sl                                        |     r3 = sl;
    0x0003cd68 movs r1, 0x10                                     |     r1 = 0x10;
    0x0003cd6a mov r0, r6                                        |     r0 = r6;
    0x0003cd6c str r5, [sp]                                      |     *(sp) = r5;
    0x0003cd6e bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003cd72 cmp r7, r5                                        |     
    0x0003cd74 ldr r2, [r6, 0x18]                                |     r2 = *((r6 + 0x18));
                                                                 |     if (r7 < r5) {
    0x0003cd76 blt 0x3cdca                                       |         goto label_45;
                                                                 |     }
    0x0003cd78 ldr r1, [r2, 0x70]                                |     r1 = *((r2 + 0x70));
    0x0003cd7a ldr r3, [r6, 0x20]                                |     r3 = *((r6 + 0x20));
                                                                 |     if (r1 != 0) {
    0x0003cd7c cbz r1, 0x3cd82                                   |         
    0x0003cd7e str.w r3, [r1, r7, lsl 2]                         |         __asm ("str.w r3, [r1, r7, lsl 2]");
                                                                 |     }
    0x0003cd82 subs r3, 1                                        |     r3--;
    0x0003cd84 str r3, [r2, 0x58]                                |     *((r2 + 0x58)) = r3;
                                                                 | label_18:
    0x0003cd86 ldrb r0, [r4, 0x13]                               |     r0 = *((r4 + 0x13));
    0x0003cd88 cmp r0, 7                                         |     
                                                                 |     if (r0 > 7) {
    0x0003cd8a bhi.w 0x3cade                                     |         goto label_7;
                                                                 |     }
    0x0003cd8e ldr r5, [sp, 0x10]                                |     r5 = var_10h;
    0x0003cd90 add.w r3, r4, 0x74                                |     r3 = r4 + 0x74;
    0x0003cd94 add.w r1, r4, 0x13c                               |     r1 = r4 + 0x13c;
                                                                 |     do {
    0x0003cd98 ldr r2, [r3, 0xc]                                 |         r2 = *((r3 + 0xc));
    0x0003cd9a cmp r2, r5                                        |         
                                                                 |         if (r2 == r5) {
    0x0003cd9c beq 0x3cdd2                                       |             goto label_46;
                                                                 |         }
    0x0003cd9e adds r3, 0x14                                     |         r3 += 0x14;
    0x0003cda0 cmp r3, r1                                        |         
    0x0003cda2 bne 0x3cd98                                       |         
                                                                 |     } while (r3 != r1);
    0x0003cda4 adds r3, r0, 1                                    |     r3 = r0 + 1;
    0x0003cda6 adds r0, 6                                        |     r0 += 6;
    0x0003cda8 strb r3, [r4, 0x13]                               |     *((r4 + 0x13)) = r3;
    0x0003cdaa ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0003cdac str.w r3, [r4, r0, lsl 2]                         |     __asm ("str.w r3, [r4, r0, lsl 2]");
    0x0003cdb0 b 0x3cade                                         |     goto label_7;
                                                                 | label_31:
    0x0003cdb2 movs r3, 0                                        |     r3 = 0;
    0x0003cdb4 mov r2, r8                                        |     r2 = r8;
    0x0003cdb6 str r3, [sp]                                      |     *(sp) = r3;
    0x0003cdb8 movs r1, 0x4c                                     |     r1 = 0x4c;
    0x0003cdba mov r3, sl                                        |     r3 = sl;
    0x0003cdbc mov r0, r6                                        |     r0 = r6;
    0x0003cdbe bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003cdc2 b 0x3ca9a                                         |     goto label_16;
                                                                 | label_34:
    0x0003cdc4 movs r2, 1                                        |     r2 = 1;
    0x0003cdc6 strb r2, [r3, 6]                                  |     *((r3 + 6)) = r2;
    0x0003cdc8 b 0x3cb0a                                         |     goto label_17;
                                                                 | label_45:
    0x0003cdca ldr r3, [r6, 0x20]                                |     r3 = *((r6 + 0x20));
    0x0003cdcc subs r3, 1                                        |     r3--;
    0x0003cdce str r3, [r2, 0x58]                                |     *((r2 + 0x58)) = r3;
    0x0003cdd0 b 0x3cd86                                         |     goto label_18;
                                                                 | label_46:
    0x0003cdd2 movs r2, 1                                        |     r2 = 1;
    0x0003cdd4 strb r2, [r3, 6]                                  |     *((r3 + 6)) = r2;
    0x0003cdd6 b 0x3cade                                         |     goto label_7;
                                                                 | label_35:
    0x0003cdd8 blx 0x6498                                        |     fcn_00006498 ();
    0x0003cddc uxth r0, r5                                       |     r0 = (int16_t) r5;
    0x0003cdde movs r3, r0                                       |     r3 = r0;
    0x0003cde0 lsls r0, r1, 0xe                                  |     r0 = r1 << 0xe;
    0x0003cde2 movs r0, r0                                       |     
                                                                 |     if (r4 == 0) {
    0x0003cde4 cbz r4, 0x3cdf8                                   |         void (*0x3cdf8)() ();
                                                                 |     }
    0x0003cde6 movs r3, r0                                       |     r3 = r0;
                                                                 | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x3d550 */
                                                                     | #include <stdint.h>
                                                                     |  
    ; (fcn) fcn.0003d550 ()                                          | void fcn_0003d550 (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_3;
                                                                     |     int16_t var_48h;
                                                                     |     int16_t var_4ch;
                                                                     |     int16_t var_54h;
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
                                                                     |     r2 = arg3;
                                                                     |     r3 = arg4;
    0x0003d550 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0003d554 sub sp, 0x24                                          |     
    0x0003d556 ldrd r6, r7, [sp, 0x4c]                               |     __asm ("ldrd r6, r7, [var_4ch]");
    0x0003d55a mov sb, r0                                            |     sb = r0;
    0x0003d55c mov r8, r1                                            |     r8 = r1;
    0x0003d55e mov sl, r2                                            |     sl = r2;
    0x0003d560 ldr r4, [sp, 0x48]                                    |     r4 = var_48h;
    0x0003d562 ldr r5, [r0, 8]                                       |     r5 = *((r0 + 8));
    0x0003d564 ldr.w fp, [r1, 0xc]                                   |     fp = *((r1 + 0xc));
    0x0003d568 str r3, [sp, 0x18]                                    |     var_18h = r3;
                                                                     |     if (r6 != 0) {
    0x0003d56a cbz r6, 0x3d598                                       |         
    0x0003d56c ldr r3, [r1, 0x24]                                    |         r3 = *((r1 + 0x24));
    0x0003d56e cmp r3, 0                                             |         
                                                                     |         if (r3 == 0) {
    0x0003d570 beq.w 0x3d67c                                         |             goto label_5;
                                                                     |         }
    0x0003d574 ldr r0, [r5, 0x18]                                    |         r0 = *((r5 + 0x18));
    0x0003d576 bl 0x19ed0                                            |         fcn_00019ed0 (r0);
    0x0003d57a str r0, [r6]                                          |         *(r6) = r0;
    0x0003d57c mov r0, sb                                            |         r0 = sb;
    0x0003d57e ldr.w r3, [sb, 0x64]                                  |         r3 = *((sb + 0x64));
    0x0003d582 str.w sl, [sb, 0x60]                                  |         __asm ("str.w sl, [sb, 0x60]");
    0x0003d584 adr r0, 0x180                                         |         r0 = 0x180;
    0x0003d586 ldr.w r1, [r8, 0x24]                                  |         r1 = *((r8 + 0x24));
    0x0003d58a adds r3, 1                                            |         r3++;
    0x0003d58c str.w r3, [sb, 0x64]                                  |         __asm ("str.w r3, [sb, 0x64]");
    0x0003d590 movs r3, 8                                            |         r3 = 8;
    0x0003d592 ldr r2, [r6]                                          |         r2 = *(r6);
    0x0003d594 bl 0x3cee8                                            |         fcn_0003cee8 (r0, r1, r2, r3, r4, r5);
                                                                     |     }
                                                                     |     if (r4 != 0) {
                                                                     | label_2:
    0x0003d598 cbz r4, 0x3d5a2                                       |         
    0x0003d59a ldrb.w r3, [r8, 0x37]                                 |         r3 = *((r8 + 0x37));
    0x0003d59e lsls r3, r3, 0x1c                                     |         r3 <<= 0x1c;
                                                                     |         if (r3 < r3) {
    0x0003d5a0 bmi 0x3d680                                           |             goto label_6;
                                                                     |         }
                                                                     |     }
    0x0003d5a2 ldrh.w r3, [r8, 0x34]                                 |     r3 = *((r8 + 0x34));
    0x0003d5a6 str r3, [sp, 0x10]                                    |     var_10h = r3;
                                                                     | label_3:
    0x0003d5a8 ldrd r3, r1, [sb, 0x38]                               |     __asm ("ldrd r3, r1, [sb, 0x38]");
    0x0003d5ac ldr r2, [sp, 0x10]                                    |     r2 = var_10h;
    0x0003d5ae str r1, [sp, 0x14]                                    |     var_14h = r1;
    0x0003d5b0 cmp r2, r3                                            |     
                                                                     |     if (r2 > r3) {
    0x0003d5b2 bgt 0x3d66a                                           |         goto label_7;
                                                                     |     }
    0x0003d5b4 subs r3, r3, r2                                       |     r3 -= r2;
    0x0003d5b6 str.w r3, [sb, 0x38]                                  |     __asm ("str.w r3, [sb, 0x38]");
    0x0003d5ba mov r3, r2                                            |     r3 = r2;
    0x0003d5bc add r3, r1                                            |     r3 += r1;
    0x0003d5be str.w r3, [sb, 0x3c]                                  |     __asm ("str.w r3, [sb, 0x3c]");
                                                                     |     if (r7 != 0) {
                                                                     | label_1:
    0x0003d5c2 cbz r7, 0x3d5d0                                       |         
    0x0003d5c4 ldr r3, [sp, 0x54]                                    |         r3 = var_54h;
    0x0003d5c6 ldr r2, [sp, 0x14]                                    |         r2 = var_14h;
    0x0003d5c8 cmp r3, r2                                            |         
    0x0003d5ca it ne                                                 |         
                                                                     |         if (r3 == r2) {
    0x0003d5cc movne r7, 0                                           |             r7 = 0;
                                                                     |         }
                                                                     |         if (r3 == r2) {
    0x0003d5ce beq 0x3d688                                           |             goto label_8;
                                                                     |         }
                                                                     |     }
                                                                     | label_4:
    0x0003d5d0 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x0003d5d2 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0003d5d4 beq 0x3d640                                           |         goto label_9;
                                                                     |     }
    0x0003d5d6 ldr r3, [sp, 0x10]                                    |     r3 = var_10h;
    0x0003d5d8 movs r4, 0                                            |     r4 = 0;
    0x0003d5da ldr r6, [sp, 0x14]                                    |     r6 = var_14h;
    0x0003d5dc str.w sb, [sp, 0x1c]                                  |     __asm ("str.w sb, [var_1ch_3]");
    0x0003d5e0 lsls r3, r3, 1                                        |     r3 <<= 1;
    0x0003d5e2 str r6, [sp, 0xc]                                     |     var_ch = r6;
    0x0003d5e4 mov sb, r3                                            |     sb = r3;
    0x0003d5e6 b 0x3d5f6                                             |     
                                                                     |     while (ip == r3) {
                                                                     | label_0:
    0x0003d5e8 ldr r3, [sp, 0xc]                                     |         r3 = var_ch;
    0x0003d5ea adds r4, 2                                            |         r4 += 2;
    0x0003d5ec cmp sb, r4                                            |         
    0x0003d5ee add.w r3, r3, 1                                       |         r3++;
    0x0003d5f2 str r3, [sp, 0xc]                                     |         var_ch = r3;
                                                                     |         if (sb == r4) {
    0x0003d5f4 beq 0x3d63c                                           |             goto label_10;
                                                                     |         }
    0x0003d5f6 ldr.w r3, [r8, 4]                                     |         r3 = *((r8 + 4));
    0x0003d5fa mov r2, sl                                            |         r2 = sl;
    0x0003d5fc mov r1, fp                                            |         r1 = fp;
    0x0003d5fe mov r0, r5                                            |         r0 = r5;
    0x0003d600 ldrsh r3, [r3, r4]                                    |         r3 = *((r3 + r4));
                                                                     |         if (r7 == 0) {
    0x0003d602 cbz r7, 0x3d60e                                       |             goto label_11;
                                                                     |         }
    0x0003d604 ldr r6, [r7, 4]                                       |         r6 = *((r7 + 4));
    0x0003d606 ldrsh.w ip, [r6, r4]                                  |         ip = *((r6 + r4));
    0x0003d60a cmp ip, r3                                            |         
    0x0003d60c beq 0x3d5e8                                           |         
                                                                     |     }
                                                                     | label_11:
    0x0003d60e ldr r6, [sp, 0xc]                                     |     r6 = var_ch;
    0x0003d610 str r6, [sp]                                          |     *(sp) = r6;
    0x0003d612 bl 0x26140                                            |     fcn_00026140 (r0, r1, r2, r3, r4);
    0x0003d616 ldr r2, [r5, 0x18]                                    |     r2 = *((r5 + 0x18));
    0x0003d618 ldr r3, [r5, 0x20]                                    |     r3 = *((r5 + 0x20));
    0x0003d61a ldr r2, [r2, 0x58]                                    |     r2 = *((r2 + 0x58));
    0x0003d61c subs r1, r3, 1                                        |     r1 = r3 - 1;
    0x0003d61e add.w r3, r3, r3, lsl 2                               |     r3 += (r3 << 2);
    0x0003d622 cmp r1, r2                                            |     
                                                                     |     if (r1 <= r2) {
    0x0003d624 ble 0x3d5e8                                           |         goto label_0;
                                                                     |     }
    0x0003d626 ldr r2, [r5, 4]                                       |     r2 = *((r5 + 4));
    0x0003d628 add.w r2, r2, r3, lsl 2                               |     r2 += (r3 << 2);
    0x0003d62c ldrb r3, [r2, -0x14]                                  |     r3 = *((r2 - 0x14));
    0x0003d630 cmp r3, 0x27                                          |     
                                                                     |     if (r3 != 0x27) {
    0x0003d632 bne 0x3d5e8                                           |         goto label_0;
                                                                     |     }
    0x0003d634 mov r0, r5                                            |     r0 = r5;
    0x0003d636 bl 0x102bc                                            |     fcn_000102bc (r0, r1);
    0x0003d63a b 0x3d5e8                                             |     goto label_0;
                                                                     | label_10:
    0x0003d63c ldr.w sb, [sp, 0x1c]                                  |     sb = var_1ch_3;
                                                                     | label_9:
    0x0003d640 ldr r3, [sp, 0x18]                                    |     r3 = var_18h;
    0x0003d642 cbnz r3, 0x3d692                                      |     
                                                                     |     while (1) {
    0x0003d644 ldr r4, [sp, 0x10]                                    |         r4 = var_10h;
    0x0003d646 mov r0, sb                                            |         r0 = sb;
    0x0003d648 ldr r1, [sp, 0x14]                                    |         r1 = var_14h;
    0x0003d64a mov r2, r4                                            |         r2 = r4;
    0x0003d64c bl 0xaea0                                             |         fcn_0000aea0 (r0, r1, r2);
    0x0003d650 ldr.w r3, [sb, 0x38]                                  |         r3 = *((sb + 0x38));
    0x0003d654 ldr r0, [sp, 0x14]                                    |         r0 = var_14h;
    0x0003d656 cmp r4, r3                                            |         
    0x0003d658 ittt gt                                               |         
                                                                     |         if (r4 <= r3) {
    0x0003d65a movgt r3, r1                                          |             r3 = r1;
                                                                     |         }
                                                                     |         if (r4 <= r3) {
    0x0003d65c strgt r4, [sb, 0x38]                                  |             *((sb + 0x38)) = r4;
                                                                     |         }
                                                                     |         if (r4 > r3) {
    0x0003d660 str.w r3, [sb, 0x3c]                                  |             __asm ("str.w r3, [sb, 0x3c]");
                                                                     |         }
    0x0003d664 add sp, 0x24                                          |         
    0x0003d666 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |         
                                                                     | label_7:
    0x0003d66a ldr.w r3, [sb, 0x48]                                  |         r3 = *((sb + 0x48));
    0x0003d66e adds r2, r3, 1                                        |         r2 = r3 + 1;
    0x0003d670 str r2, [sp, 0x14]                                    |         var_14h = r2;
    0x0003d672 ldr r2, [sp, 0x10]                                    |         r2 = var_10h;
    0x0003d674 add r3, r2                                            |         r3 += r2;
    0x0003d676 str.w r3, [sb, 0x48]                                  |         __asm ("str.w r3, [sb, 0x48]");
    0x0003d67a b 0x3d5c2                                             |         goto label_1;
                                                                     | label_5:
    0x0003d67c str r3, [r6]                                          |         *(r6) = r3;
    0x0003d67e b 0x3d598                                             |         goto label_2;
                                                                     | label_6:
    0x0003d680 ldrh.w r3, [r8, 0x32]                                 |         r3 = *((r8 + 0x32));
    0x0003d684 str r3, [sp, 0x10]                                    |         var_10h = r3;
    0x0003d686 b 0x3d5a8                                             |         goto label_3;
                                                                     | label_8:
    0x0003d688 ldr r3, [r7, 0x24]                                    |         r3 = *((r7 + 0x24));
    0x0003d68a cmp r3, 0                                             |         
    0x0003d68c it ne                                                 |         
                                                                     |         if (r3 == 0) {
    0x0003d68e movne r7, 0                                           |             r7 = 0;
                                                                     |         }
    0x0003d690 b 0x3d5d0                                             |         goto label_4;
    0x0003d692 ldr r3, [sp, 0x18]                                    |         r3 = var_18h;
    0x0003d694 mov r0, r5                                            |         r0 = r5;
    0x0003d696 movs r1, 0x30                                         |         r1 = 0x30;
    0x0003d698 str r3, [sp]                                          |         *(sp) = r3;
    0x0003d69a ldrd r3, r2, [sp, 0x10]                               |         __asm ("ldrd r3, r2, [var_10h]");
    0x0003d69e bl 0x18bf8                                            |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003d6a2 b 0x3d644                                             |         
                                                                     |     }
                                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x3db1c */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.0003db1c ()                                      | void fcn_0003db1c (int16_t arg_4h, int16_t arg_8h, int16_t arg_ch, int16_t arg_10h, int16_t arg_14h, int16_t arg_24h, 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;
                                                                 |     int16_t var_34h;
                                                                 |     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;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x0003db1c ldr.w r2, [pc, 0xb7c]                             |     r2 = *(0x0003e69c);
    0x0003db20 ldr.w r3, [pc, 0xb7c]                             |     
    0x0003db24 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x0003db28 sub sp, 0x5c                                      |     
    0x0003db2a add r2, pc                                        |     r2 += pc;
    0x0003db2c str r0, [sp, 0xc]                                 |     var_ch = r0;
    0x0003db2e str r1, [sp, 0x18]                                |     var_18h = r1;
    0x0003db30 ldr r5, [r0]                                      |     r5 = *(r0);
    0x0003db32 ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x0003db34 ldr r3, [r3]                                      |     r3 = *(0x3e6a0);
    0x0003db36 str r3, [sp, 0x54]                                |     var_54h = r3;
    0x0003db38 mov.w r3, 0                                       |     r3 = 0;
    0x0003db3c ldr r3, [r5]                                      |     r3 = *(r5);
    0x0003db3e str r3, [sp, 0x14]                                |     var_14h = r3;
    0x0003db40 ldr r3, [r3]                                      |     r3 = *(r3);
    0x0003db42 ldrb.w r6, [r3, 0x40]                             |     r6 = *((r3 + 0x40));
    0x0003db46 str r3, [sp, 0x10]                                |     var_10h = r3;
                                                                 |     if (r6 != 0) {
    0x0003db48 cbz r6, 0x3db6a                                   |         
                                                                 | label_2:
    0x0003db4a ldr.w r2, [pc, 0xb58]                             |         r2 = *(0x0003e6a4);
    0x0003db4e ldr.w r3, [pc, 0xb50]                             |         r3 = *(0x3e6a2);
    0x0003db52 add r2, pc                                        |         r2 += pc;
    0x0003db54 ldr r3, [r2, r3]                                  |         r3 = *((r2 + r3));
    0x0003db56 ldr r2, [r3]                                      |         r2 = *(0x3e6a2);
    0x0003db58 ldr r3, [sp, 0x54]                                |         r3 = var_54h;
    0x0003db5a eors r2, r3                                       |         r2 ^= r3;
    0x0003db5c mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0003db60 bne.w 0x3ea0a                                     |             goto label_49;
                                                                 |         }
    0x0003db64 add sp, 0x5c                                      |         
    0x0003db66 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 |     }
    0x0003db6a add.w r3, r1, r1, lsl 1                           |     r3 = r1 + (r1 << 1);
    0x0003db6e ldr r4, [r0, 0x14]                                |     r4 = *((r0 + 0x14));
    0x0003db70 add.w sl, r5, 0x44                                |     sl = r5 + 0x44;
    0x0003db74 lsls r3, r3, 4                                    |     r3 <<= 4;
    0x0003db76 mov r0, sl                                        |     r0 = sl;
    0x0003db78 ldr.w fp, [r4, r3]                                |     fp = *((r4 + r3));
    0x0003db7c add r4, r3                                        |     r4 += r3;
    0x0003db7e str r3, [sp, 0x24]                                |     var_24h = r3;
    0x0003db80 ldr.w r8, [fp, 0xc]                               |     r8 = *(arg_ch);
    0x0003db84 mov r1, r8                                        |     r1 = r8;
    0x0003db86 bl 0xbc08                                         |     fcn_0000bc08 (r0, r1);
    0x0003db8a ldrb.w sb, [fp]                                   |     sb = *(fp);
    0x0003db8e strd r0, r1, [sp, 0x28]                           |     __asm ("strd r0, r1, [var_28h]");
    0x0003db92 cmp.w sb, 0x4b                                    |     
                                                                 |     if (sb == 0x4b) {
    0x0003db96 beq.w 0x3ddec                                     |         goto label_50;
                                                                 |     }
    0x0003db9a cmp.w sb, 0x4c                                    |     
    0x0003db9e it eq                                             |     
                                                                 |     if (sb != 0x4c) {
    0x0003dba0 moveq r3, r6                                      |         r3 = r6;
                                                                 |     }
                                                                 |     if (sb != 0x4c) {
    0x0003dba2 bne.w 0x3dd46                                     |         goto label_51;
                                                                 |     }
                                                                 | label_5:
    0x0003dba6 strd r6, r3, [r4, 0x20]                           |     __asm ("strd r6, r3, [r4, 0x20]");
    0x0003dbaa mov r1, fp                                        |     r1 = fp;
    0x0003dbac mov r0, sl                                        |     r0 = sl;
    0x0003dbae bl 0xbc08                                         |     fcn_0000bc08 (r0, r1);
    0x0003dbb2 ldr.w r3, [fp, 4]                                 |     r3 = *(arg_4h);
    0x0003dbb6 mov r6, r0                                        |     r6 = r0;
    0x0003dbb8 mov r7, r1                                        |     r7 = r1;
    0x0003dbba ands r3, r3, 1                                    |     r3 &= 1;
                                                                 |     if (r3 == r3) {
    0x0003dbbe beq 0x3dc0c                                       |         goto label_52;
                                                                 |     }
                                                                 | label_0:
    0x0003dbc0 ldr r0, [r5, 0x44]                                |     r0 = *((r5 + 0x44));
    0x0003dbc2 ldrsh.w ip, [fp, 0x24]                            |     ip = *(arg_24h);
    0x0003dbc6 cmp r0, 0                                         |     
                                                                 |     if (r0 <= 0) {
    0x0003dbc8 ble.w 0x3de4c                                     |         goto label_53;
                                                                 |     }
    0x0003dbcc mov r2, sl                                        |     r2 = sl;
    0x0003dbce movs r3, 0                                        |     r3 = 0;
    0x0003dbd0 b 0x3dbda                                         |     
                                                                 |     while (ip != r1) {
    0x0003dbd2 adds r3, 1                                        |         r3++;
    0x0003dbd4 cmp r3, r0                                        |         
                                                                 |         if (r3 == r0) {
    0x0003dbd6 beq.w 0x3de4c                                     |             goto label_53;
                                                                 |         }
    0x0003dbda ldr r1, [r2, 4]!                                  |         r1 = *((r2 += 4));
    0x0003dbde cmp ip, r1                                        |         
    0x0003dbe0 bne 0x3dbd2                                       |         
                                                                 |     }
    0x0003dbe2 movs r0, 1                                        |     r0 = 1;
    0x0003dbe4 sub.w r2, r3, 0x20                                |     r2 = r3 - 0x20;
    0x0003dbe8 rsb.w r1, r3, 0x20                                |     r1 = 0x20 - r3;
    0x0003dbec lsl.w r2, r0, r2                                  |     r2 = r0 << r2;
    0x0003dbf0 lsl.w r3, r0, r3                                  |     r3 = r0 << r3;
    0x0003dbf4 lsr.w r1, r0, r1                                  |     r1 = r0 >> r1;
    0x0003dbf8 orrs r6, r3                                       |     r6 |= r3;
    0x0003dbfa orrs r2, r1                                       |     r2 |= r1;
    0x0003dbfc subs r3, 1                                        |     r3--;
    0x0003dbfe orr.w r7, r7, r2                                  |     r7 |= r2;
    0x0003dc02 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x0003dc04 adc r3, r2, -1                                    |     __asm ("adc r3, r2, -1");
    0x0003dc08 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x0003dc0a b 0x3dd72                                         |     goto label_6;
                                                                 | label_52:
    0x0003dc0c mov r2, r3                                        |     r2 = r3;
    0x0003dc0e strh r3, [r4, 0x12]                               |     *((r4 + 0x12)) = r3;
    0x0003dc10 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x0003dc12 mov.w r3, -1                                      |     r3 = -1;
    0x0003dc16 strd r6, r7, [r4, 0x28]                           |     __asm ("strd r6, r7, [r4, 0x28]");
    0x0003dc1a strd r3, r3, [r4, 4]                              |     __asm ("strd r3, r3, [r4, 4]");
    0x0003dc1e str r2, [sp, 0x20]                                |     var_20h = r2;
                                                                 | label_1:
    0x0003dc20 mov r3, r8                                        |     r3 = r8;
    0x0003dc22 cmp.w r8, 0                                       |     
                                                                 |     if (r8 != 0) {
    0x0003dc26 bne 0x3dc38                                       |         goto label_54;
                                                                 |     }
    0x0003dc28 b 0x3dc3e                                         |     goto label_55;
                                                                 |     do {
    0x0003dc2a lsls r5, r2, 0xd                                  |         r5 = r2 << 0xd;
    0x0003dc2c itett mi                                          |         
                                                                 |         if (r5 >= r2) {
    0x0003dc2e ldrmi r3, [r3, 0x14]                              |             r3 = *((r3 + 0x14));
                                                                 |         }
                                                                 |         if (r5 < r2) {
    0x0003dc30 ldrpl r3, [r3, 0xc]                               |             r3 = *((r3 + 0xc));
                                                                 |         }
                                                                 |         if (r5 >= r2) {
    0x0003dc32 ldrmi r3, [r3, 4]                                 |             r3 = *((r3 + 4));
                                                                 |         }
                                                                 |         if (r5 >= r2) {
    0x0003dc34 ldrmi r3, [r3]                                    |             r3 = *(r3);
                                                                 |         }
                                                                 |         if (r3 == 0) {
    0x0003dc36 cbz r3, 0x3dc3e                                   |             goto label_55;
                                                                 |         }
                                                                 | label_54:
    0x0003dc38 ldr r2, [r3, 4]                                   |         r2 = *((r3 + 4));
    0x0003dc3a lsls r0, r2, 0x13                                 |         r0 = r2 << 0x13;
    0x0003dc3c bmi 0x3dc2a                                       |         
                                                                 |     } while (r0 < r2);
                                                                 | label_55:
    0x0003dc3e ldr.w r2, [fp, 0x10]                              |     r2 = *(arg_10h);
    0x0003dc42 mov r0, r2                                        |     r0 = r2;
                                                                 |     if (r2 != 0) {
    0x0003dc44 cbnz r2, 0x3dc56                                  |         goto label_56;
                                                                 |     }
    0x0003dc46 b 0x3dc5c                                         |     goto label_57;
                                                                 |     do {
    0x0003dc48 lsls r1, r1, 0xd                                  |         r1 <<= 0xd;
    0x0003dc4a itett mi                                          |         
                                                                 |         if (r1 >= r1) {
    0x0003dc4c ldrmi r1, [r0, 0x14]                              |             r1 = *((r0 + 0x14));
                                                                 |         }
                                                                 |         if (r1 < r1) {
    0x0003dc4e ldrpl r0, [r0, 0xc]                               |             r0 = *((r0 + 0xc));
                                                                 |         }
                                                                 |         if (r1 >= r1) {
    0x0003dc50 ldrmi r1, [r1, 4]                                 |             r1 = *((r1 + 4));
                                                                 |         }
                                                                 |         if (r1 >= r1) {
    0x0003dc52 ldrmi r0, [r1]                                    |             r0 = *(r1);
                                                                 |         }
                                                                 |         if (r0 == 0) {
    0x0003dc54 cbz r0, 0x3dc5c                                   |             goto label_57;
                                                                 |         }
                                                                 | label_56:
    0x0003dc56 ldr r1, [r0, 4]                                   |         r1 = *((r0 + 4));
    0x0003dc58 lsls r5, r1, 0x13                                 |         r5 = r1 << 0x13;
    0x0003dc5a bmi 0x3dc48                                       |         
                                                                 |     } while (r5 < r1);
                                                                 | label_57:
    0x0003dc5c ldr r1, [r4, 0x20]                                |     r1 = *((r4 + 0x20));
    0x0003dc5e ldr r5, [sp, 0x28]                                |     r5 = var_28h;
    0x0003dc60 and.w ip, r5, r1                                  |     
    0x0003dc64 ldr r5, [sp, 0x2c]                                |     r5 = var_2ch;
    0x0003dc66 ldr r1, [r4, 0x24]                                |     r1 = *((r4 + 0x24));
    0x0003dc68 ands r1, r5                                       |     r1 &= r5;
    0x0003dc6a orrs.w r1, r1, ip                                 |     r1 |= ip;
    0x0003dc6e ldrb r1, [r3]                                     |     r1 = *(r3);
    0x0003dc70 ite eq                                            |     
                                                                 |     if (r1 == r1) {
    0x0003dc72 movweq r5, 0xfff                                  |         __asm ("movweq r5, aav.0x000000ff");
                                                                 |     }
                                                                 |     if (r1 != r1) {
    0x0003dc76 mov.w r5, 0x400                                   |         r5 = 0x400;
                                                                 |     }
    0x0003dc7a cmp r1, 0x9a                                      |     
                                                                 |     if (r1 == 0x9a) {
    0x0003dc7c beq.w 0x3ddb2                                     |         goto label_58;
                                                                 |     }
                                                                 |     if (r0 != 0) {
                                                                 | label_3:
    0x0003dc80 cbz r0, 0x3dc8a                                   |         
    0x0003dc82 ldrb r3, [r0]                                     |         r3 = *(r0);
    0x0003dc84 cmp r3, 0x9a                                      |         
                                                                 |         if (r3 == 0x9a) {
    0x0003dc86 beq.w 0x3e0f8                                     |             goto label_59;
                                                                 |         }
                                                                 |     }
                                                                 | label_4:
    0x0003dc8a ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x0003dc8c ldrb r3, [r3, 8]                                  |     r3 = *((r3 + 8));
    0x0003dc8e cmp r3, 0x48                                      |     
                                                                 |     if (r3 == 0x48) {
    0x0003dc90 beq.w 0x3de56                                     |         goto label_60;
                                                                 |     }
                                                                 | label_9:
    0x0003dc94 cmp.w sb, 0x99                                    |     
                                                                 |     if (sb != 0x99) {
    0x0003dc98 bne.w 0x3dda0                                     |         goto label_7;
                                                                 |     }
    0x0003dc9c ldr.w r0, [fp, 8]                                 |     r0 = *(arg_8h);
                                                                 | label_8:
    0x0003dca0 ldr.w r1, [pc, 0xa04]                             |     
    0x0003dca4 add r1, pc                                        |     r1 = 0x7c350;
    0x0003dca6 blx 0x6164                                        |     r0 = fcn_00006164 ();
    0x0003dcaa mov r8, r0                                        |     r8 = r0;
    0x0003dcac cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0003dcae bne 0x3dda0                                       |         goto label_7;
                                                                 |     }
    0x0003dcb0 ldr.w r3, [fp, 0x14]                              |     r3 = *(arg_14h);
    0x0003dcb4 ldr r2, [r3]                                      |     r2 = *(r3);
    0x0003dcb6 cmp r2, 2                                         |     
                                                                 |     if (r2 != 2) {
    0x0003dcb8 bne 0x3dda0                                       |         goto label_7;
                                                                 |     }
    0x0003dcba ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0003dcbc ldr r6, [r3, 0x14]                                |     r6 = *((r3 + 0x14));
    0x0003dcbe ldrb r2, [r6]                                     |     r2 = *(r6);
    0x0003dcc0 cmp r2, 0x9a                                      |     
                                                                 |     if (r2 != 0x9a) {
    0x0003dcc2 bne 0x3dda0                                       |         goto label_7;
                                                                 |     }
    0x0003dcc4 ldr.w sb, [r3]                                    |     sb = *(r3);
    0x0003dcc8 mov r0, sl                                        |     r0 = sl;
    0x0003dcca mov r1, sb                                        |     r1 = sb;
    0x0003dccc bl 0xbc08                                         |     r0 = fcn_0000bc08 (r0, r1);
    0x0003dcd0 mov r7, r0                                        |     r7 = r0;
    0x0003dcd2 mov r5, r1                                        |     r5 = r1;
    0x0003dcd4 mov r0, sl                                        |     r0 = sl;
    0x0003dcd6 mov r1, r6                                        |     r1 = r6;
    0x0003dcd8 bl 0xbc08                                         |     fcn_0000bc08 (r0, r1);
    0x0003dcdc ands r0, r7                                       |     r0 &= r7;
    0x0003dcde ands r1, r5                                       |     r1 &= r5;
    0x0003dce0 orrs r0, r1                                       |     r0 |= r1;
                                                                 |     if (r0 != r1) {
    0x0003dce2 bne 0x3dda0                                       |         goto label_7;
                                                                 |     }
    0x0003dce4 mov r1, sb                                        |     r1 = sb;
    0x0003dce6 mov r3, r8                                        |     r3 = r8;
    0x0003dce8 mov r2, r8                                        |     r2 = r8;
    0x0003dcea ldr r0, [sp, 0x10]                                |     r0 = var_10h;
    0x0003dcec bl 0xe5fc                                         |     fcn_0000e5fc (r0, r1, r2, r3, r4, r5);
    0x0003dcf0 mov r2, r8                                        |     r2 = r8;
    0x0003dcf2 mov r3, r0                                        |     r3 = r0;
    0x0003dcf4 movs r1, 0x33                                     |     r1 = 0x33;
    0x0003dcf6 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x0003dcf8 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x0003dcfc bl 0x1cd60                                        |     fcn_0001cd60 (r0, r1, r2, r3, r4);
    0x0003dd00 ldr r4, [sp, 0xc]                                 |     r4 = var_ch;
    0x0003dd02 mov r1, r0                                        |     r1 = r0;
    0x0003dd04 movs r2, 3                                        |     r2 = 3;
    0x0003dd06 mov r0, r4                                        |     r0 = r4;
    0x0003dd08 bl 0x132ec                                        |     fcn_000132ec (r0, r1, r2, r3);
    0x0003dd0c ldr r3, [r4, 0x14]                                |     r3 = *((r4 + 0x14));
    0x0003dd0e add.w r0, r0, r0, lsl 1                           |     r0 += (r0 << 1);
    0x0003dd12 ldr r4, [sp, 0x24]                                |     r4 = var_24h;
    0x0003dd14 ldr r2, [r6, 0x1c]                                |     r2 = *((r6 + 0x1c));
    0x0003dd16 ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x0003dd18 add r4, r3                                        |     r4 += r3;
    0x0003dd1a add.w r3, r3, r0, lsl 4                           |     r3 += (r0 << 4);
    0x0003dd1e str r2, [r3, 8]                                   |     *((r3 + 8)) = r2;
    0x0003dd20 ldrsh.w r2, [r6, 0x20]                            |     r2 = *((r6 + 0x20));
    0x0003dd24 strd r7, r5, [r3, 0x20]                           |     __asm ("strd r7, r5, [r3, 0x20]");
    0x0003dd28 str r1, [r3, 4]                                   |     *((r3 + 4)) = r1;
    0x0003dd2a str r2, [r3, 0xc]                                 |     *((r3 + 0xc)) = r2;
    0x0003dd2c movs r2, 0x40                                     |     r2 = 0x40;
    0x0003dd2e strh r2, [r3, 0x12]                               |     *((r3 + 0x12)) = r2;
    0x0003dd30 movs r2, 1                                        |     r2 = 1;
    0x0003dd32 strb r2, [r4, 0x15]                               |     *((r4 + 0x15)) = r2;
    0x0003dd34 ldrb r2, [r4, 0x14]                               |     r2 = *((r4 + 0x14));
    0x0003dd36 ldrd r0, r1, [r4, 0x28]                           |     __asm ("ldrd r0, r1, [r4, 0x28]");
    0x0003dd3a orr r2, r2, 8                                     |     r2 |= 8;
    0x0003dd3e strb r2, [r4, 0x14]                               |     *((r4 + 0x14)) = r2;
    0x0003dd40 strd r0, r1, [r3, 0x28]                           |     __asm ("strd r0, r1, [r3, 0x28]");
    0x0003dd44 b 0x3dda0                                         |     goto label_7;
                                                                 | label_51:
    0x0003dd46 ldr.w r1, [fp, 0x10]                              |     r1 = *(arg_10h);
    0x0003dd4a mov r0, sl                                        |     r0 = sl;
    0x0003dd4c bl 0xbc08                                         |     fcn_0000bc08 (r0, r1);
    0x0003dd50 strd r0, r1, [r4, 0x20]                           |     __asm ("strd r0, r1, [r4, 0x20]");
    0x0003dd54 mov r1, fp                                        |     r1 = fp;
    0x0003dd56 mov r0, sl                                        |     r0 = sl;
    0x0003dd58 bl 0xbc08                                         |     fcn_0000bc08 (r0, r1);
    0x0003dd5c ldr.w r3, [fp, 4]                                 |     r3 = *(arg_4h);
    0x0003dd60 mov r6, r0                                        |     r6 = r0;
    0x0003dd62 mov r7, r1                                        |     r7 = r1;
    0x0003dd64 ands r3, r3, 1                                    |     r3 &= 1;
    0x0003dd68 it eq                                             |     
                                                                 |     if (r3 != r3) {
    0x0003dd6a strdeq r3, r3, [sp, 0x1c]                         |         __asm ("strdeq r3, r3, [var_1ch]");
                                                                 |         goto label_61;
                                                                 |     }
                                                                 |     if (r3 != r3) {
                                                                 | label_61:
    0x0003dd6e bne.w 0x3dbc0                                     |         goto label_0;
                                                                 |     }
                                                                 | label_6:
    0x0003dd72 cmp.w sb, 0x4c                                    |     
    0x0003dd76 mov.w r3, -1                                      |     r3 = -1;
    0x0003dd7a mov.w r2, 0                                       |     r2 = 0;
    0x0003dd7e strd r6, r7, [r4, 0x28]                           |     __asm ("strd r6, r7, [r4, 0x28]");
    0x0003dd82 strd r3, r3, [r4, 4]                              |     __asm ("strd r3, r3, [r4, 4]");
    0x0003dd86 strh r2, [r4, 0x12]                               |     *((r4 + 0x12)) = r2;
                                                                 |     if (sb > 0x4c) {
    0x0003dd88 bhi 0x3dde0                                       |         goto label_62;
                                                                 |     }
    0x0003dd8a cmp.w sb, 0x4a                                    |     
                                                                 |     if (sb > 0x4a) {
    0x0003dd8e bhi.w 0x3dc20                                     |         goto label_1;
                                                                 |     }
                                                                 |     if (sb != 0x4a) {
    0x0003dd92 bne.w 0x3dec8                                     |         goto label_63;
                                                                 |     }
    0x0003dd96 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x0003dd98 ldrb r3, [r3, 8]                                  |     r3 = *((r3 + 8));
    0x0003dd9a cmp r3, 0x48                                      |     
                                                                 |     if (r3 == 0x48) {
    0x0003dd9c beq.w 0x3e1a8                                     |         goto label_64;
                                                                 |     }
                                                                 | label_7:
    0x0003dda0 ldrd r2, r3, [r4, 0x20]                           |     __asm ("ldrd r2, r3, [r4, 0x20]");
    0x0003dda4 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x0003dda6 orrs r2, r1                                       |     r2 |= r1;
    0x0003dda8 ldr r1, [sp, 0x20]                                |     r1 = var_20h;
    0x0003ddaa orrs r3, r1                                       |     r3 |= r1;
    0x0003ddac strd r2, r3, [r4, 0x20]                           |     __asm ("strd r2, r3, [r4, 0x20]");
    0x0003ddb0 b 0x3db4a                                         |     goto label_2;
                                                                 | label_58:
    0x0003ddb2 ldr r1, [r3, 0x1c]                                |     r1 = *((r3 + 0x1c));
    0x0003ddb4 cmp.w sb, 0x4b                                    |     
    0x0003ddb8 ldrsh.w r3, [r3, 0x20]                            |     r3 = *((r3 + 0x20));
    0x0003ddbc str r1, [r4, 8]                                   |     *((r4 + 8)) = r1;
    0x0003ddbe str r3, [r4, 0xc]                                 |     *((r4 + 0xc)) = r3;
    0x0003ddc0 it eq                                             |     
                                                                 |     if (sb != 0x4b) {
    0x0003ddc2 moveq r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (sb != 0x4b) {
    0x0003ddc4 beq 0x3ddda                                       |         
    0x0003ddc6 cmp.w sb, 0x4c                                    |         
    0x0003ddca ittte ne                                          |         
                                                                 |         if (sb == 0x4c) {
    0x0003ddcc movne r3, 2                                       |             r3 = 2;
                                                                 |         }
                                                                 |         if (sb == 0x4c) {
    0x0003ddce subne r1, sb, 0x4f                                |             r1 = sb - 0x4f;
                                                                 |         }
                                                                 |         if (sb != 0x4c) {
    0x0003ddd2 lsleq r3, r1                                      |             r3 <<= r1;
                                                                 |         }
                                                                 |         if (sb == 0x4c) {
    0x0003ddd4 movs r3, 0x80                                     |             r3 = 0x80;
                                                                 |         }
    0x0003ddd6 it ne                                             |         
                                                                 |         if (r3 == 0x80) {
    0x0003ddd8 uxthne r3, r3                                     |             __asm ("uxthne r3, r3");
                                                                 |             goto label_65;
                                                                 |         }
                                                                 |     }
                                                                 | label_65:
    0x0003ddda ands r3, r5                                       |     r3 &= r5;
    0x0003dddc strh r3, [r4, 0x12]                               |     *((r4 + 0x12)) = r3;
    0x0003ddde b 0x3dc80                                         |     goto label_3;
                                                                 | label_62:
    0x0003dde0 sub.w r3, sb, 0x4f                                |     r3 = sb - 0x4f;
    0x0003dde4 cmp r3, 4                                         |     
                                                                 |     if (r3 > 4) {
    0x0003dde6 bhi.w 0x3dc8a                                     |         goto label_4;
                                                                 |     }
    0x0003ddea b 0x3dc20                                         |     goto label_1;
                                                                 | label_50:
    0x0003ddec ldr.w r7, [fp, 4]                                 |     r7 = *(arg_4h);
    0x0003ddf0 ldr.w r1, [fp, 0x14]                              |     r1 = *(arg_14h);
    0x0003ddf4 ands r7, r7, 0x800                                |     r7 &= 0x800;
                                                                 |     if (r7 != r7) {
    0x0003ddf8 bne.w 0x3e066                                     |         goto label_66;
                                                                 |     }
    0x0003ddfc cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0003ddfe beq.w 0x3e240                                     |         goto label_67;
                                                                 |     }
    0x0003de02 ldr r3, [r1]                                      |     r3 = *(r1);
    0x0003de04 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x0003de06 ble.w 0x3e604                                     |         goto label_68;
                                                                 |     }
    0x0003de0a ldr r2, [r1, 4]                                   |     r2 = *((r1 + 4));
    0x0003de0c add.w r1, r3, r3, lsl 2                           |     r1 = r3 + (r3 << 2);
    0x0003de10 strd r5, r4, [sp, 0x1c]                           |     __asm ("strd r5, r4, [var_1ch]");
    0x0003de14 mov r6, r7                                        |     r6 = r7;
    0x0003de16 str.w sb, [sp, 0x30]                              |     __asm ("str.w sb, [var_30h]");
    0x0003de1a mov r4, r1                                        |     r4 = r1;
    0x0003de1c mov sb, sl                                        |     sb = sl;
    0x0003de1e mov r5, r2                                        |     r5 = r2;
    0x0003de20 mov sl, r8                                        |     sl = r8;
    0x0003de22 mov r8, r7                                        |     r8 = r7;
                                                                 |     do {
    0x0003de24 ldr.w r1, [r5, r7, lsl 2]                         |         offset_0 = r7 << 2;
                                                                 |         r1 = *((r5 + offset_0));
    0x0003de28 mov r0, sb                                        |         r0 = sb;
    0x0003de2a adds r7, 5                                        |         r7 += 5;
    0x0003de2c bl 0xbc08                                         |         fcn_0000bc08 (r0, r1);
    0x0003de30 cmp r4, r7                                        |         
    0x0003de32 orr.w r6, r6, r0                                  |         r6 |= r0;
    0x0003de36 orr.w r8, r1, r8                                  |         r8 = r1 | r8;
    0x0003de3a bne 0x3de24                                       |         
                                                                 |     } while (r4 != r7);
    0x0003de3c mov r3, r8                                        |     r3 = r8;
    0x0003de3e ldrd r5, r4, [sp, 0x1c]                           |     __asm ("ldrd r5, r4, [var_1ch]");
    0x0003de42 mov r8, sl                                        |     r8 = sl;
    0x0003de44 mov sl, sb                                        |     sl = sb;
    0x0003de46 ldr.w sb, [sp, 0x30]                              |     sb = var_30h;
    0x0003de4a b 0x3dba6                                         |     goto label_5;
                                                                 | label_53:
    0x0003de4c mov.w r3, -1                                      |     r3 = -1;
    0x0003de50 strd r3, r3, [sp, 0x1c]                           |     __asm ("strd r3, r3, [var_1ch]");
    0x0003de54 b 0x3dd72                                         |     goto label_6;
                                                                 | label_60:
    0x0003de56 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0003de58 cmp.w sb, 0x99                                    |     
    0x0003de5c ldr r6, [r3]                                      |     r6 = *(r3);
                                                                 |     if (sb != 0x99) {
    0x0003de5e bne 0x3dda0                                       |         goto label_7;
                                                                 |     }
    0x0003de60 ldr.w r3, [fp, 0x14]                              |     r3 = *(arg_14h);
    0x0003de64 ldr.w r0, [fp, 8]                                 |     r0 = *(arg_8h);
    0x0003de68 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0003de6a beq.w 0x3dca0                                     |         goto label_8;
                                                                 |     }
    0x0003de6e ldr r3, [r3]                                      |     r3 = *(r3);
    0x0003de70 cmp r3, 2                                         |     
                                                                 |     if (r3 != 2) {
    0x0003de72 bne.w 0x3dca0                                     |         goto label_8;
                                                                 |     }
    0x0003de76 mov r2, r0                                        |     r2 = r0;
                                                                 |     if (r0 == 0) {
    0x0003de78 cbz r0, 0x3de8e                                   |         goto label_69;
                                                                 |     }
    0x0003de7a ldrb r2, [r0]                                     |     r2 = *(r0);
                                                                 |     if (r2 == 0) {
    0x0003de7c cbz r2, 0x3de8e                                   |         goto label_69;
                                                                 |     }
    0x0003de7e mov r3, r0                                        |     r3 = r0;
                                                                 |     do {
    0x0003de80 ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x0003de84 cmp r2, 0                                         |         
    0x0003de86 bne 0x3de80                                       |         
                                                                 |     } while (r2 != 0);
    0x0003de88 subs r3, r3, r0                                   |     r3 -= r0;
    0x0003de8a bic r2, r3, 0xc0000000                            |     r2 = BIT_MASK (r3, 0xc0000000);
                                                                 | label_69:
    0x0003de8e movs r3, 1                                        |     r3 = 1;
    0x0003de90 mov.w ip, 0                                       |     
    0x0003de94 mov r1, r0                                        |     r1 = r0;
    0x0003de96 strd r3, ip, [sp]                                 |     __asm ("strd r3, ip, [sp]");
    0x0003de9a mov r0, r6                                        |     r0 = r6;
    0x0003de9c movs r3, 2                                        |     r3 = 2;
    0x0003de9e bl 0x14be8                                        |     r0 = fcn_00014be8 (r0, r1, r2, r3, r4, r5);
                                                                 |     if (r0 != 0) {
    0x0003dea2 cbz r0, 0x3dec2                                   |         
    0x0003dea4 ldrh r3, [r0, 2]                                  |         r3 = *((r0 + 2));
    0x0003dea6 lsls r7, r3, 0x1d                                 |         r7 = r3 << 0x1d;
    0x0003dea8 str r3, [sp, 0x28]                                |         var_28h = r3;
                                                                 |         if (r7 >= r3) {
    0x0003deaa bpl 0x3dec2                                       |             goto label_11;
                                                                 |         }
    0x0003deac ldr.w r2, [fp, 0x14]                              |         r2 = *(arg_14h);
    0x0003deb0 ldr r3, [r0, 4]                                   |         r3 = *((r0 + 4));
    0x0003deb2 ldr.w r8, [r2, 4]                                 |         r8 = *((r2 + 4));
    0x0003deb6 ldr.w r5, [r8, 0x14]                              |         r5 = *((r8 + 0x14));
    0x0003deba ldrb r2, [r5]                                     |         r2 = *(r5);
    0x0003debc cmp r2, 0x9a                                      |         
                                                                 |         if (r2 == 0x9a) {
    0x0003debe beq.w 0x3e25e                                     |             goto label_70;
                                                                 |         }
                                                                 |     }
                                                                 | label_11:
    0x0003dec2 ldrb.w sb, [fp]                                   |     sb = *(fp);
    0x0003dec6 b 0x3dc94                                         |     goto label_9;
                                                                 | label_63:
    0x0003dec8 cmp.w sb, 0x47                                    |     
                                                                 |     if (sb != 0x47) {
    0x0003decc bne.w 0x3ebae                                     |         goto label_71;
                                                                 |     }
    0x0003ded0 ldr r0, [sp, 0x10]                                |     r0 = var_10h;
    0x0003ded2 mov.w r1, 0x1a0                                   |     r1 = 0x1a0;
    0x0003ded6 bl 0xdb58                                         |     fcn_0000db58 (r0, r1);
    0x0003deda str r0, [sp, 0x30]                                |     var_30h = r0;
    0x0003dedc str r0, [r4, 0xc]                                 |     *((r4 + 0xc)) = r0;
    0x0003dede cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0003dee0 beq.w 0x3e058                                     |         goto label_23;
                                                                 |     }
    0x0003dee4 ldrb r3, [r4, 0x14]                               |     r3 = *((r4 + 0x14));
    0x0003dee6 mov r6, fp                                        |     r6 = fp;
    0x0003dee8 mov r8, r0                                        |     r8 = r0;
    0x0003deea movs r2, 0                                        |     r2 = 0;
    0x0003deec orr r3, r3, 0x10                                  |     r3 |= 0x10;
    0x0003def0 strb r3, [r4, 0x14]                               |     *((r4 + 0x14)) = r3;
    0x0003def2 movs r3, 8                                        |     r3 = 8;
    0x0003def4 str r3, [r0, 0x10]                                |     *((r0 + 0x10)) = r3;
    0x0003def6 add.w r3, r0, 0x18                                |     r3 = r0 + 0x18;
    0x0003defa strb.w sb, [r0, 8]                                |     *((r0 + 8)) = sb;
    0x0003defe str r5, [r0]                                      |     *(r0) = r5;
    0x0003df00 str r2, [r0, 4]                                   |     *((r0 + 4)) = r2;
    0x0003df02 str r2, [r0, 0xc]                                 |     *((r0 + 0xc)) = r2;
    0x0003df04 str r3, [r0, 0x14]                                |     *((r0 + 0x14)) = r3;
                                                                 |     do {
    0x0003df06 ldrb r7, [r6]                                     |         r7 = *(r6);
    0x0003df08 cmp r7, 0x47                                      |         
                                                                 |         if (r7 != 0x47) {
    0x0003df0a bne.w 0x3e47e                                     |             goto label_72;
                                                                 |         }
    0x0003df0e ldr r1, [r6, 0xc]                                 |         r1 = *((r6 + 0xc));
    0x0003df10 mov r2, r7                                        |         r2 = r7;
    0x0003df12 mov r0, r8                                        |         r0 = r8;
    0x0003df14 bl 0x133ec                                        |         fcn_000133ec (r0, r1, r2, r3, r4);
    0x0003df18 ldr r6, [r6, 0x10]                                |         r6 = *((r6 + 0x10));
    0x0003df1a strb.w r7, [r8, 8]                                |         *((r8 + 8)) = r7;
    0x0003df1e cmp r6, 0                                         |         
    0x0003df20 bne 0x3df06                                       |         
                                                                 |     } while (r6 != 0);
                                                                 | label_12:
    0x0003df22 ldr r7, [sp, 0x30]                                |     r7 = var_30h;
    0x0003df24 ldr r6, [r7, 0xc]                                 |     r6 = *((r7 + 0xc));
    0x0003df26 subs r6, 1                                        |     r6--;
                                                                 |     if (r6 < 1) {
    0x0003df28 bmi.w 0x3e8c6                                     |         goto label_73;
                                                                 |     }
                                                                 |     do {
    0x0003df2c mov r1, r6                                        |         r1 = r6;
    0x0003df2e mov r0, r7                                        |         r0 = r7;
    0x0003df30 subs r6, 1                                        |         r6--;
    0x0003df32 bl 0x3db1c                                        |         fcn_0003db1c (r0, r1, r2, r3, r4, r5, r6);
    0x0003df36 adds r2, r6, 1                                    |         r2 = r6 + 1;
    0x0003df38 bne 0x3df2c                                       |         
                                                                 |     } while (r2 != r6);
    0x0003df3a ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0003df3c ldrb.w r3, [r3, 0x40]                             |     r3 = *((r3 + 0x40));
    0x0003df40 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003df42 bne.w 0x3e058                                     |         goto label_23;
                                                                 |     }
    0x0003df46 ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x0003df48 ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x0003df4a ldr r7, [r2, 0x14]                                |     r7 = *((r2 + 0x14));
    0x0003df4c subs r3, 1                                        |     r3--;
                                                                 |     if (r3 < 1) {
    0x0003df4e bmi.w 0x3e8d2                                     |         goto label_74;
                                                                 |     }
    0x0003df52 strd fp, r4, [sp, 0x3c]                           |     __asm ("strd fp, r4, [var_3ch]");
    0x0003df56 adds r7, 0x30                                     |     r7 += 0x30;
    0x0003df58 mov r8, r6                                        |     r8 = r6;
    0x0003df5a mov r4, r3                                        |     r4 = r3;
    0x0003df5c strd r6, r6, [sp, 0x28]                           |     __asm ("strd r6, r6, [var_28h]");
    0x0003df60 str r5, [sp, 0x34]                                |     var_34h = r5;
    0x0003df62 str r6, [sp, 0x44]                                |     var_44h = r6;
    0x0003df64 str.w sl, [sp, 0x38]                              |     __asm ("str.w sl, [var_38h]");
    0x0003df68 b 0x3df8c                                         |     
                                                                 |     while (r3 != r1) {
    0x0003df6a ldrb r2, [r7, -0x1c]                              |         r2 = *((r7 - 0x1c));
    0x0003df6e ands r3, r2, 8                                    |         r3 = r2 & 8;
                                                                 |         if (r3 == r2) {
    0x0003df72 beq 0x3e072                                       |             goto label_75;
                                                                 |         }
    0x0003df74 orrs.w r3, r6, r8                                 |         r3 = r6 | r8;
    0x0003df78 and r5, r5, 1                                     |         r5 &= 1;
    0x0003df7c itee ne                                           |         
                                                                 |         if (r3 == r6) {
    0x0003df7e movne r0, 1                                       |             r0 = 1;
                                                                 |         }
                                                                 |         if (r3 != r6) {
    0x0003df80 moveq r5, 0                                       |             r5 = 0;
                                                                 |         }
                                                                 |         if (r3 != r6) {
    0x0003df82 moveq r0, 0                                       |             r0 = 0;
                                                                 |         }
                                                                 | label_10:
    0x0003df84 adds r7, 0x30                                     |         r7 += 0x30;
    0x0003df86 cmp r5, 0                                         |         
                                                                 |         if (r5 == 0) {
    0x0003df88 beq.w 0x3e63e                                     |             goto label_76;
                                                                 |         }
    0x0003df8c ldrh r1, [r7, -0x1e]                              |         r1 = *((r7 - 0x1e));
    0x0003df90 subs r4, 1                                        |         r4--;
    0x0003df92 mvns r5, r4                                       |         r5 = ~r4;
    0x0003df94 lsrs r5, r5, 0x1f                                 |         r5 >>= 0x1f;
    0x0003df96 ands r3, r1, 0xff                                 |         r3 = r1 & 0xff;
    0x0003df9a bne 0x3df6a                                       |         
                                                                 |     }
    0x0003df9c ldr r0, [sp, 0x10]                                |     r0 = var_10h;
    0x0003df9e mov.w r1, 0x198                                   |     r1 = 0x198;
    0x0003dfa2 str r3, [sp, 0x28]                                |     var_28h = r3;
    0x0003dfa4 bl 0xd3a0                                         |     fcn_0000d3a0 (r0, r1);
    0x0003dfa8 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x0003dfaa mov sb, r0                                        |     sb = r0;
    0x0003dfac cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0003dfae beq.w 0x3e246                                     |         goto label_77;
                                                                 |     }
    0x0003dfb2 ldrb r2, [r7, -0x1c]                              |     r2 = *((r7 - 0x1c));
    0x0003dfb6 mov.w r1, 0x200                                   |     r1 = 0x200;
    0x0003dfba ldr fp, [r7, -0x30]                               |     fp = *((r7 - 0x30));
    0x0003dfbe str r0, [r7, -0x24]                               |     *((r7 - 0x24)) = r0;
    0x0003dfc2 orr r2, r2, 0x20                                  |     r2 |= 0x20;
    0x0003dfc6 strb r2, [r7, -0x1c]                              |     *((r7 - 0x1c)) = r2;
    0x0003dfca ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x0003dfcc ldr r2, [r2]                                      |     r2 = *(r2);
    0x0003dfce strh r1, [r7, -0x1e]                              |     *((r7 - 0x1e)) = r1;
    0x0003dfd2 str r3, [r0, 0xc]                                 |     *((r0 + 0xc)) = r3;
    0x0003dfd4 strd r2, r3, [r0]                                 |     __asm ("strd r2, r3, [r0]");
    0x0003dfd8 movs r3, 8                                        |     r3 = 8;
    0x0003dfda str r3, [r0, 0x10]                                |     *((r0 + 0x10)) = r3;
    0x0003dfdc add.w r3, r0, 0x18                                |     r3 = r0 + 0x18;
    0x0003dfe0 str r3, [r0, 0x14]                                |     *((r0 + 0x14)) = r3;
    0x0003dfe2 movs r3, 0x48                                     |     r3 = 0x48;
    0x0003dfe4 strb r3, [r0, 8]                                  |     *((r0 + 8)) = r3;
    0x0003dfe6 cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x0003dfea beq 0x3e030                                       |         goto label_78;
                                                                 |     }
    0x0003dfec mov r3, fp                                        |     r3 = fp;
    0x0003dfee mov fp, r4                                        |     
    0x0003dff0 mov r4, r3                                        |     r4 = r3;
                                                                 |     do {
    0x0003dff2 ldrb.w sl, [r4]                                   |         sl = *(r4);
    0x0003dff6 cmp.w sl, 0x48                                    |         
                                                                 |         if (sl != 0x48) {
    0x0003dffa bne.w 0x3e48a                                     |             goto label_79;
                                                                 |         }
    0x0003dffe ldr r1, [r4, 0xc]                                 |         r1 = *((r4 + 0xc));
    0x0003e000 mov r2, sl                                        |         r2 = sl;
    0x0003e002 mov r0, sb                                        |         r0 = sb;
    0x0003e004 bl 0x133ec                                        |         fcn_000133ec (r0, r1, r2, r3, r4);
    0x0003e008 ldr r4, [r4, 0x10]                                |         r4 = *((r4 + 0x10));
    0x0003e00a strb.w sl, [sb, 8]                                |         *((sb + 8)) = sl;
    0x0003e00e cmp r4, 0                                         |         
    0x0003e010 bne 0x3dff2                                       |         
                                                                 |     } while (r4 != 0);
    0x0003e012 mov r4, fp                                        |     r4 = fp;
                                                                 | label_13:
    0x0003e014 ldr.w r3, [sb, 0xc]                               |     r3 = *((sb + 0xc));
    0x0003e018 subs.w fp, r3, 1                                  |     
                                                                 |     if (fp < r3) {
    0x0003e01c bmi 0x3e030                                       |         goto label_78;
                                                                 |     }
                                                                 |     do {
    0x0003e01e mov r1, fp                                        |         r1 = fp;
    0x0003e020 mov r0, sb                                        |         r0 = sb;
    0x0003e022 add.w fp, fp, -1                                  |         
    0x0003e026 bl 0x3db1c                                        |         fcn_0003db1c (r0, r1, r2, r3, r4, r5, r6);
    0x0003e02a cmp.w fp, -1                                      |         
    0x0003e02e bne 0x3e01e                                       |         
                                                                 |     } while (fp != -1);
                                                                 | label_78:
    0x0003e030 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x0003e032 str.w r3, [sb, 4]                                 |     __asm ("str.w r3, [sb, 4]");
    0x0003e036 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0003e038 ldrb.w r0, [r3, 0x40]                             |     r0 = *((r3 + 0x40));
    0x0003e03c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0003e03e beq.w 0x3e558                                     |         goto label_80;
                                                                 |     }
                                                                 | label_19:
    0x0003e042 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x0003e044 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x0003e048 ldrd fp, r4, [sp, 0x3c]                           |     __asm ("ldrd fp, r4, [var_3ch]");
    0x0003e04c ldr.w sl, [sp, 0x38]                              |     sl = var_38h;
    0x0003e050 vstr d16, [r3, 0x198]                             |     __asm ("vstr d16, aav.0x000000ff");
    0x0003e054 movs r3, 0                                        |     r3 = 0;
    0x0003e056 strh r3, [r4, 0x12]                               |     *((r4 + 0x12)) = r3;
                                                                 | label_23:
    0x0003e058 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x0003e05a ldrb.w sb, [fp]                                   |     sb = *(fp);
    0x0003e05e ldr r4, [r3, 0x14]                                |     r4 = *((r3 + 0x14));
    0x0003e060 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x0003e062 add r4, r3                                        |     r4 += r3;
    0x0003e064 b 0x3dc8a                                         |     goto label_4;
                                                                 | label_66:
    0x0003e066 mov r0, sl                                        |     r0 = sl;
    0x0003e068 bl 0xbcd4                                         |     r0 = fcn_0000bcd4 (r0, r1);
    0x0003e06c mov r6, r0                                        |     r6 = r0;
    0x0003e06e mov r3, r1                                        |     r3 = r1;
    0x0003e070 b 0x3dba6                                         |     goto label_5;
                                                                 | label_75:
    0x0003e072 ldr r0, [sp, 0x34]                                |     r0 = var_34h;
    0x0003e074 and r2, r2, 2                                     |     r2 &= 2;
    0x0003e078 ldr fp, [r7, -0x28]                               |     fp = *((r7 - 0x28));
    0x0003e07c ldr.w ip, [r0, 0x44]                              |     ip = *((r0 + 0x44));
    0x0003e080 cmp.w ip, 0                                       |     
                                                                 |     if (ip <= 0) {
    0x0003e084 ble.w 0x3e940                                     |         goto label_81;
                                                                 |     }
    0x0003e088 ldr r0, [sp, 0x38]                                |     r0 = var_38h;
    0x0003e08a mov sb, r2                                        |     sb = r2;
    0x0003e08c mov lr, r0                                        |     lr = r0;
    0x0003e08e b 0x3e098                                         |     
                                                                 |     while (fp != r2) {
    0x0003e090 adds r3, 1                                        |         r3++;
    0x0003e092 cmp r3, ip                                        |         
                                                                 |         if (r3 == ip) {
    0x0003e094 beq.w 0x3e49a                                     |             goto label_82;
                                                                 |         }
    0x0003e098 ldr r2, [r0, 4]!                                  |         r2 = *((r0 += 4));
    0x0003e09c cmp fp, r2                                        |         
    0x0003e09e bne 0x3e090                                       |         
                                                                 |     }
    0x0003e0a0 mov.w sl, 1                                       |     sl = 1;
    0x0003e0a4 rsb.w r0, r3, 0x20                                |     r0 = 0x20 - r3;
    0x0003e0a8 mov r2, sb                                        |     r2 = sb;
    0x0003e0aa sub.w sb, r3, 0x20                                |     sb = r3 - 0x20;
    0x0003e0ae lsl.w sb, sl, sb                                  |     sb = sl << sb;
    0x0003e0b2 lsr.w r0, sl, r0                                  |     r0 = sl >> r0;
    0x0003e0b6 lsl.w r3, sl, r3                                  |     r3 = sl << r3;
    0x0003e0ba orr.w sb, sb, r0                                  |     sb |= r0;
    0x0003e0be cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0003e0c0 bne.w 0x3e846                                     |         goto label_83;
                                                                 |     }
    0x0003e0c4 ands r6, r3                                       |     r6 &= r3;
    0x0003e0c6 and.w r8, sb, r8                                  |     r8 = sb & r8;
    0x0003e0ca orrs.w r2, r6, r8                                 |     r2 = r6 | r8;
    0x0003e0ce and r5, r5, 1                                     |     r5 &= 1;
    0x0003e0d2 itee ne                                           |     
                                                                 |     if (r2 == r6) {
    0x0003e0d4 movne r0, sl                                      |         r0 = sl;
                                                                 |     }
                                                                 |     if (r2 != r6) {
    0x0003e0d6 moveq r5, 0                                       |         r5 = 0;
                                                                 |     }
                                                                 |     if (r2 != r6) {
    0x0003e0d8 moveq r0, 0                                       |         r0 = 0;
                                                                 |     }
                                                                 | label_14:
    0x0003e0da ands r1, r1, 2                                    |     r1 &= 2;
    0x0003e0de iteet ne                                          |     
                                                                 |     if (r1 == r1) {
    0x0003e0e0 ldrne r2, [sp, 0x28]                              |         r2 = var_28h;
                                                                 |     }
                                                                 |     if (r1 != r1) {
    0x0003e0e2 moveq r3, r1                                      |         r3 = r1;
                                                                 |     }
                                                                 |     if (r1 == r1) {
    0x0003e0e4 strdeq r3, r3, [sp, 0x28]                         |         __asm ("strdeq r3, r3, [var_28h]");
                                                                 |     }
                                                                 |     if (r1 != r1) {
    0x0003e0e8 ands r2, r3                                       |         r2 &= r3;
                                                                 |     }
    0x0003e0ea itttt ne                                          |     
                                                                 |     if (r2 == r3) {
    0x0003e0ec ldrne r3, [sp, 0x2c]                              |         r3 = var_2ch;
                                                                 |     }
                                                                 |     if (r2 == r3) {
    0x0003e0ee strne r2, [sp, 0x28]                              |         var_28h = r2;
                                                                 |     }
                                                                 |     if (r2 == r3) {
    0x0003e0f0 andne r3, r3, sb                                  |         r3 &= sb;
                                                                 |     }
                                                                 |     if (r2 != r3) {
    0x0003e0f4 str r3, [sp, 0x2c]                                |         var_2ch = r3;
                                                                 |     }
    0x0003e0f6 b 0x3df84                                         |     goto label_10;
                                                                 | label_59:
    0x0003e0f8 ldr r3, [r4, 8]                                   |     r3 = *((r4 + 8));
    0x0003e0fa cmp r3, 0                                         |     
                                                                 |     if (r3 < 0) {
    0x0003e0fc blt.w 0x3e4b6                                     |         goto label_84;
                                                                 |     }
    0x0003e100 ldr r4, [sp, 0x10]                                |     r4 = var_10h;
    0x0003e102 movs r3, 0                                        |     r3 = 0;
    0x0003e104 mov r1, fp                                        |     r1 = fp;
    0x0003e106 mov r2, r3                                        |     r2 = r3;
    0x0003e108 mov r0, r4                                        |     r0 = r4;
    0x0003e10a bl 0xe5fc                                         |     fcn_0000e5fc (r0, r1, r2, r3, r4, r5);
    0x0003e10e ldrb.w r8, [r4, 0x40]                             |     r8 = *((r4 + 0x40));
    0x0003e112 mov sb, r0                                        |     sb = r0;
    0x0003e114 cmp.w r8, 0                                       |     
                                                                 |     if (r8 != 0) {
    0x0003e118 bne.w 0x3e61a                                     |         goto label_85;
                                                                 |     }
    0x0003e11c ldr r4, [sp, 0xc]                                 |     r4 = var_ch;
    0x0003e11e mov r1, r0                                        |     r1 = r0;
    0x0003e120 movs r2, 3                                        |     r2 = 3;
    0x0003e122 mov r0, r4                                        |     r0 = r4;
    0x0003e124 bl 0x132ec                                        |     r0 = fcn_000132ec (r0, r1, r2, r3);
    0x0003e128 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0003e12a beq.w 0x3db4a                                     |         goto label_2;
                                                                 |     }
    0x0003e12e ldr r4, [r4, 0x14]                                |     r4 = *((r4 + 0x14));
    0x0003e130 add.w r0, r0, r0, lsl 1                           |     r0 += (r0 << 1);
    0x0003e134 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x0003e136 add.w r3, r4, r0, lsl 4                           |     r3 = r4 + (r0 << 4);
    0x0003e13a add r4, r2                                        |     r4 += r2;
    0x0003e13c ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x0003e13e str r3, [sp, 0x30]                                |     var_30h = r3;
    0x0003e140 str r2, [r3, 4]                                   |     *((r3 + 4)) = r2;
    0x0003e142 ldrb r3, [r4, 0x14]                               |     r3 = *((r4 + 0x14));
    0x0003e144 orr r3, r3, 8                                     |     r3 |= 8;
    0x0003e148 strb r3, [r4, 0x14]                               |     *((r4 + 0x14)) = r3;
    0x0003e14a movs r3, 1                                        |     r3 = 1;
    0x0003e14c strb r3, [r4, 0x15]                               |     *((r4 + 0x15)) = r3;
    0x0003e14e ldrb.w r3, [fp]                                   |     r3 = *(fp);
    0x0003e152 cmp r3, 0x4f                                      |     
                                                                 |     if (r3 == 0x4f) {
    0x0003e154 beq.w 0x3e8e6                                     |         goto label_86;
                                                                 |     }
                                                                 | label_30:
    0x0003e158 str.w r8, [sp, 0x34]                              |     __asm ("str.w r8, [var_34h]");
    0x0003e15c ldrd r8, r2, [sb, 0xc]                            |     __asm ("ldrd r8, r2, [sb, 0xc]");
                                                                 | label_16:
    0x0003e160 ldr r1, [r2, 4]                                   |     r1 = *((r2 + 4));
    0x0003e162 ldr.w r3, [r8, 4]                                 |     r3 = *((r8 + 4));
    0x0003e166 and r0, r1, 0x100                                 |     r0 = r1 & 0x100;
    0x0003e16a and r3, r3, 0x100                                 |     r3 &= 0x100;
    0x0003e16e cmp r0, r3                                        |     
                                                                 |     if (r0 == r3) {
    0x0003e170 beq.w 0x3e60c                                     |         goto label_87;
                                                                 |     }
                                                                 | label_22:
    0x0003e174 ldrb.w r3, [sb]                                   |     r3 = *(sb);
    0x0003e178 strd r2, r8, [sb, 0xc]                            |     __asm ("strd r2, r8, [sb, 0xc]");
    0x0003e17c cmp r3, 0x4f                                      |     
                                                                 |     if (r3 < 0x4f) {
    0x0003e17e bls 0x3e192                                       |         goto label_88;
                                                                 |     }
                                                                 | label_32:
    0x0003e180 subs r3, 0x50                                     |     r3 -= 0x50;
    0x0003e182 eor r3, r3, 2                                     |     r3 ^= 2;
    0x0003e186 adds r3, 0x50                                     |     r3 += 0x50;
    0x0003e188 strb.w r3, [sb]                                   |     *(sb) = r3;
                                                                 |     do {
                                                                 | label_31:
    0x0003e18c cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x0003e18e beq.w 0x3ebfc                                     |             goto label_89;
                                                                 |         }
                                                                 | label_88:
    0x0003e192 ldr r3, [r2, 4]                                   |         r3 = *((r2 + 4));
    0x0003e194 lsls r1, r3, 0x13                                 |         r1 = r3 << 0x13;
                                                                 |         if (r1 >= r3) {
    0x0003e196 bpl.w 0x3e4c0                                     |             goto label_90;
                                                                 |         }
    0x0003e19a lsls r0, r3, 0xd                                  |         r0 = r3 << 0xd;
    0x0003e19c itett mi                                          |         
                                                                 |         if (r0 >= r3) {
    0x0003e19e ldrmi r3, [r2, 0x14]                              |             r3 = *((r2 + 0x14));
                                                                 |         }
                                                                 |         if (r0 < r3) {
    0x0003e1a0 ldrpl r2, [r2, 0xc]                               |             r2 = *((r2 + 0xc));
                                                                 |         }
                                                                 |         if (r0 >= r3) {
    0x0003e1a2 ldrmi r3, [r3, 4]                                 |             r3 = *((r3 + 4));
                                                                 |         }
                                                                 |         if (r0 >= r3) {
    0x0003e1a4 ldrmi r2, [r3]                                    |             r2 = *(r3);
                                                                 |         }
    0x0003e1a6 b 0x3e18c                                         |         
                                                                 |     } while (1);
                                                                 | label_64:
    0x0003e1a8 str.w sl, [sp, 0x28]                              |     __asm ("str.w sl, [var_28h]");
    0x0003e1ac mov r5, r2                                        |     r5 = r2;
    0x0003e1ae ldr.w r7, [fp, 0x14]                              |     r7 = *(arg_14h);
    0x0003e1b2 movs r4, 0x53                                     |     r4 = 0x53;
    0x0003e1b4 ldr.w sb, [sp, 0xc]                               |     sb = var_ch;
    0x0003e1b8 mov r6, r2                                        |     r6 = r2;
    0x0003e1ba ldr.w sl, [sp, 0x10]                              |     sl = var_10h;
    0x0003e1bc adr r0, 0x40                                      |     r0 = 0x40;
    0x0003e1be mov r1, r8                                        |     r1 = r8;
                                                                 |     do {
    0x0003e1c0 movs r3, 0                                        |         r3 = 0;
    0x0003e1c2 mov r0, sl                                        |         r0 = sl;
    0x0003e1c4 mov r2, r3                                        |         r2 = r3;
    0x0003e1c6 bl 0xe5fc                                         |         fcn_0000e5fc (r0, r1, r2, r3, r4, r5);
    0x0003e1ca ldr r3, [r7, 4]                                   |         r3 = *((r7 + 4));
    0x0003e1cc mov r8, r0                                        |         r8 = r0;
    0x0003e1ce mov r0, sl                                        |         r0 = sl;
    0x0003e1d0 ldr r1, [r3, r5]                                  |         r1 = *((r3 + r5));
    0x0003e1d2 movs r3, 0                                        |         r3 = 0;
    0x0003e1d4 mov r2, r3                                        |         r2 = r3;
    0x0003e1d6 bl 0xe5fc                                         |         fcn_0000e5fc (r0, r1, r2, r3, r4, r5);
    0x0003e1da mov r1, r4                                        |         r1 = r4;
    0x0003e1dc mov r3, r0                                        |         r3 = r0;
    0x0003e1de mov r2, r8                                        |         r2 = r8;
    0x0003e1e0 ldr r0, [sp, 0x14]                                |         r0 = var_14h;
    0x0003e1e2 str r6, [sp]                                      |         *(sp) = r6;
    0x0003e1e4 bl 0x1cd60                                        |         r0 = fcn_0001cd60 (r0, r1, r2, r3, r4);
    0x0003e1e8 mov r1, r0                                        |         r1 = r0;
                                                                 |         if (r0 != 0) {
    0x0003e1ea cbz r0, 0x3e200                                   |             
    0x0003e1ec ldr.w r3, [fp, 4]                                 |             r3 = *(arg_4h);
    0x0003e1f0 and r2, r3, 1                                     |             r2 = r3 & 1;
    0x0003e1f4 ldr r3, [r0, 4]                                   |             r3 = *((r0 + 4));
    0x0003e1f6 orrs r3, r2                                       |             r3 |= r2;
    0x0003e1f8 str r3, [r0, 4]                                   |             *((r0 + 4)) = r3;
    0x0003e1fa ldrsh.w r3, [fp, 0x24]                            |             r3 = *(arg_24h);
    0x0003e1fe strh r3, [r0, 0x24]                               |             *((r0 + 0x24)) = r3;
                                                                 |         }
    0x0003e200 movs r2, 3                                        |         r2 = 3;
    0x0003e202 mov r0, sb                                        |         r0 = sb;
    0x0003e204 bl 0x132ec                                        |         r0 = fcn_000132ec (r0, r1, r2, r3);
    0x0003e208 mov r4, r0                                        |         r4 = r0;
    0x0003e20a mov r0, sb                                        |         r0 = sb;
    0x0003e20c mov r1, r4                                        |         r1 = r4;
    0x0003e20e add.w r4, r4, r4, lsl 1                           |         r4 += (r4 << 1);
    0x0003e212 adds r5, 0x14                                     |         r5 += 0x14;
    0x0003e214 bl 0x3db1c                                        |         fcn_0003db1c (r0, r1, r2, r3, r4, r5, r6);
    0x0003e218 ldr.w r2, [sb, 0x14]                              |         r2 = *((sb + 0x14));
    0x0003e21c cmp r5, 0x28                                      |         
    0x0003e21e ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x0003e220 add.w r4, r2, r4, lsl 4                           |         r4 = r2 + (r4 << 4);
    0x0003e224 str r3, [r4, 4]                                   |         *((r4 + 4)) = r3;
                                                                 |         if (r5 == 0x28) {
    0x0003e226 beq 0x3e230                                       |             goto label_91;
                                                                 |         }
    0x0003e228 ldr.w r1, [fp, 0xc]                               |         r1 = *(arg_ch);
    0x0003e22c movs r4, 0x51                                     |         r4 = 0x51;
    0x0003e22e b 0x3e1c0                                         |         
                                                                 |     } while (1);
                                                                 | label_91:
    0x0003e230 ldrd r3, sl, [sp, 0x24]                           |     __asm ("ldrd r3, sl, [var_24h]");
    0x0003e234 adds r4, r2, r3                                   |     r4 = r2 + r3;
    0x0003e236 movs r3, 2                                        |     r3 = 2;
    0x0003e238 strb r3, [r4, 0x15]                               |     *((r4 + 0x15)) = r3;
    0x0003e23a ldrb.w sb, [fp]                                   |     sb = *(fp);
    0x0003e23e b 0x3dc8a                                         |     goto label_4;
                                                                 | label_67:
    0x0003e240 mov r6, r1                                        |     r6 = r1;
    0x0003e242 mov r3, r1                                        |     r3 = r1;
    0x0003e244 b 0x3dba6                                         |     goto label_5;
                                                                 | label_77:
    0x0003e246 orrs.w r3, r6, r8                                 |     r3 = r6 | r8;
    0x0003e24a str r0, [sp, 0x28]                                |     var_28h = r0;
    0x0003e24c and r5, r5, 1                                     |     r5 &= 1;
    0x0003e250 itee ne                                           |     
                                                                 |     if (r3 == r6) {
    0x0003e252 movne r0, 1                                       |         r0 = 1;
                                                                 |     }
                                                                 |     if (r3 != r6) {
    0x0003e254 moveq r5, 0                                       |         r5 = 0;
                                                                 |     }
                                                                 |     if (r3 != r6) {
    0x0003e256 moveq r0, 0                                       |         r0 = 0;
                                                                 |     }
    0x0003e258 str.w sb, [sp, 0x2c]                              |     __asm ("str.w sb, [var_2ch]");
    0x0003e25c b 0x3df84                                         |     goto label_10;
                                                                 | label_70:
    0x0003e25e ldrb r2, [r3, 1]                                  |     r2 = *((r3 + 1));
    0x0003e260 mov r0, r5                                        |     r0 = r5;
    0x0003e262 ldrb r7, [r3]                                     |     r7 = *(r3);
    0x0003e264 ldrb.w sb, [r3, 2]                                |     sb = *((r3 + 2));
    0x0003e268 str r2, [sp, 0x34]                                |     var_34h = r2;
    0x0003e26a bl 0xb8a4                                         |     r0 = fcn_0000b8a4 (r0);
    0x0003e26e cmp r0, 0x61                                      |     
                                                                 |     if (r0 != 0x61) {
    0x0003e270 bne.w 0x3dec2                                     |         goto label_11;
                                                                 |     }
    0x0003e274 ldr r3, [r5, 0x2c]                                |     r3 = *((r5 + 0x2c));
    0x0003e276 ldrb.w r3, [r3, 0x2c]                             |     r3 = *((r3 + 0x2c));
    0x0003e27a lsls r5, r3, 0x1b                                 |     r5 = r3 << 0x1b;
                                                                 |     if (r5 < r3) {
    0x0003e27c bmi.w 0x3dec2                                     |         goto label_11;
                                                                 |     }
    0x0003e280 ldr.w r5, [r8]                                    |     r5 = *(r8);
                                                                 |     if (r5 != 0) {
    0x0003e284 cbnz r5, 0x3e29c                                  |         goto label_92;
                                                                 |     }
    0x0003e286 b.w 0x3ebf6                                       |     goto label_93;
                                                                 |     do {
    0x0003e28a lsls r0, r3, 0xd                                  |         r0 = r3 << 0xd;
    0x0003e28c itett mi                                          |         
                                                                 |         if (r0 >= r3) {
    0x0003e28e ldrmi r3, [r5, 0x14]                              |             r3 = *((r5 + 0x14));
                                                                 |         }
                                                                 |         if (r0 < r3) {
    0x0003e290 ldrpl r5, [r5, 0xc]                               |             r5 = *((r5 + 0xc));
                                                                 |         }
                                                                 |         if (r0 >= r3) {
    0x0003e292 ldrmi r3, [r3, 4]                                 |             r3 = *((r3 + 4));
                                                                 |         }
                                                                 |         if (r0 >= r3) {
    0x0003e294 ldrmi r5, [r3]                                    |             r5 = *(r3);
                                                                 |         }
    0x0003e296 cmp r5, 0                                         |         
                                                                 |         if (r5 == 0) {
    0x0003e298 beq.w 0x3ebf6                                     |             goto label_93;
                                                                 |         }
                                                                 | label_92:
    0x0003e29c ldr r3, [r5, 4]                                   |         r3 = *((r5 + 4));
    0x0003e29e ands r2, r3, 0x1000                               |         r2 = r3 & 0x1000;
    0x0003e2a2 bne 0x3e28a                                       |         
                                                                 |     } while (r2 != r3);
    0x0003e2a4 ldrb r3, [r5]                                     |     r3 = *(r5);
    0x0003e2a6 cmp r3, 0x87                                      |     
    0x0003e2a8 str r3, [sp, 0x38]                                |     var_38h = r3;
                                                                 |     if (r3 == 0x87) {
    0x0003e2aa beq.w 0x3e95c                                     |         goto label_94;
                                                                 |     }
    0x0003e2ae ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x0003e2b0 cmp r3, 0x61                                      |     
                                                                 |     if (r3 != 0x61) {
    0x0003e2b2 bne.w 0x3dec2                                     |         goto label_11;
                                                                 |     }
    0x0003e2b6 ldr r3, [r5, 8]                                   |     r3 = *((r5 + 8));
    0x0003e2b8 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x0003e2ba cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0003e2bc beq.w 0x3dec2                                     |         goto label_11;
                                                                 |     }
    0x0003e2c0 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0003e2c2 ldrb r3, [r3]                                     |     r3 = *(r3);
    0x0003e2c4 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0003e2c6 beq.w 0x3dec2                                     |         goto label_11;
                                                                 |     }
    0x0003e2ca str r2, [sp, 0x30]                                |     var_30h = r2;
                                                                 | label_43:
    0x0003e2cc ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x0003e2ce mov.w r8, 0                                       |     r8 = 0;
    0x0003e2d2 ldr r1, [sp, 0x34]                                |     r1 = var_34h;
    0x0003e2d4 b 0x3e2ec                                         |     
                                                                 |     while (r7 != r3) {
    0x0003e2d6 cmp r1, r3                                        |         
                                                                 |         if (r1 == r3) {
    0x0003e2d8 beq 0x3e2f0                                       |             goto label_95;
                                                                 |         }
    0x0003e2da cmp sb, r3                                        |         
                                                                 |         if (sb == r3) {
    0x0003e2dc beq 0x3e2f0                                       |             goto label_95;
                                                                 |         }
    0x0003e2de ldrb r3, [r2, 1]!                                 |         r3 = *((r2 += 1));
    0x0003e2e2 add.w r8, r8, 1                                   |         r8++;
    0x0003e2e6 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0003e2e8 beq.w 0x3e99e                                     |             goto label_96;
                                                                 |         }
    0x0003e2ec cmp r7, r3                                        |         
    0x0003e2ee bne 0x3e2d6                                       |         
                                                                 |     }
                                                                 | label_95:
    0x0003e2f0 cmp.w r8, 0                                       |     
                                                                 |     if (r8 != 0) {
    0x0003e2f4 bne.w 0x3e99e                                     |         goto label_96;
                                                                 |     }
                                                                 | label_37:
    0x0003e2f8 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x0003e2fa cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0003e2fc beq.w 0x3dec2                                     |         goto label_11;
                                                                 |     }
                                                                 | label_41:
    0x0003e300 mov.w sb, 0                                       |     sb = 0;
    0x0003e304 mov r7, sb                                        |     r7 = sb;
    0x0003e306 str.w sb, [sp, 0x2c]                              |     __asm ("str.w sb, [var_2ch]");
                                                                 | label_38:
    0x0003e30a ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x0003e30c movw r2, 0x2460                                   |     r2 = 0x2460;
    0x0003e310 ldrh r3, [r3, 0x1c]                               |     r3 = *((r3 + 0x1c));
    0x0003e312 tst r2, r3                                        |     
                                                                 |     if ((r2 & r3) != 0) {
    0x0003e314 bne.w 0x3e954                                     |         goto label_97;
                                                                 |     }
                                                                 | label_36:
    0x0003e318 ldr r5, [sp, 0x30]                                |     r5 = var_30h;
    0x0003e31a ldr r1, [r5, 0x24]                                |     r1 = *((r5 + 0x24));
                                                                 |     if (r1 != 0) {
    0x0003e31c cbz r1, 0x3e328                                   |         
    0x0003e31e ldr r0, [r5]                                      |         r0 = *(r5);
    0x0003e320 bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
    0x0003e324 movs r3, 0                                        |         r3 = 0;
    0x0003e326 str r3, [r5, 0x24]                                |         *((r5 + 0x24)) = r3;
                                                                 |     }
    0x0003e328 ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x0003e32a movs r3, 0                                        |     r3 = 0;
    0x0003e32c str r3, [r2, 4]                                   |     *((r2 + 4)) = r3;
    0x0003e32e mov r1, r2                                        |     r1 = r2;
    0x0003e330 ldr r0, [r2]                                      |     r0 = *(r2);
    0x0003e332 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x0003e336 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0003e338 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0003e33a beq.w 0x3dec2                                     |         goto label_11;
                                                                 |     }
                                                                 | label_39:
    0x0003e33e ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x0003e340 mov r1, r7                                        |     r1 = r7;
    0x0003e342 ldr.w r8, [sp, 0x10]                              |     r8 = var_10h;
    0x0003e346 and r5, r3, 8                                     |     r5 = r3 & 8;
    0x0003e34a ldr.w r3, [fp, 0x14]                              |     r3 = *(arg_14h);
    0x0003e34e mov r0, r8                                        |     r0 = r8;
    0x0003e350 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0003e352 ldr r4, [r3, 0x14]                                |     r4 = *((r3 + 0x14));
    0x0003e354 movs r3, 0                                        |     r3 = 0;
    0x0003e356 mov r2, r3                                        |     r2 = r3;
    0x0003e358 bl 0xe5fc                                         |     fcn_0000e5fc (r0, r1, r2, r3, r4, r5);
    0x0003e35c ldrb.w r3, [r8, 0x40]                             |     r3 = *((r8 + 0x40));
    0x0003e360 mov r6, r0                                        |     r6 = r0;
                                                                 |     if (r3 != 0) {
    0x0003e362 cbnz r3, 0x3e3a2                                  |         goto label_98;
                                                                 |     }
    0x0003e364 ldr r1, [r0, 8]                                   |     r1 = *((r0 + 8));
    0x0003e366 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0003e368 beq.w 0x3e8c0                                     |         goto label_99;
                                                                 |     }
    0x0003e36c ldrb r3, [r1]                                     |     r3 = *(r1);
    0x0003e36e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0003e370 beq.w 0x3e8c0                                     |         goto label_99;
                                                                 |     }
    0x0003e374 mov r3, r1                                        |     r3 = r1;
                                                                 |     do {
    0x0003e376 ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x0003e37a cmp r2, 0                                         |         
    0x0003e37c bne 0x3e376                                       |         
                                                                 |     } while (r2 != 0);
    0x0003e37e subs r3, r3, r1                                   |     r3 -= r1;
    0x0003e380 bic r3, r3, 0xc0000000                            |     r3 = BIT_MASK (r3, 0xc0000000);
    0x0003e384 subs r3, 1                                        |     r3--;
                                                                 | label_29:
    0x0003e386 ldrb r2, [r1, r3]                                 |     r2 = *((r1 + r3));
    0x0003e388 add r1, r3                                        |     r1 += r3;
                                                                 |     if (r5 == 0) {
    0x0003e38a cbnz r5, 0x3e39e                                  |         
    0x0003e38c ldr r3, [pc, 0x31c]                               |         
    0x0003e38e cmp r2, 0x40                                      |         
    0x0003e390 it eq                                             |         
                                                                 |         if (r2 != 0x40) {
    0x0003e392 moveq sb, 0                                       |             sb = 0;
                                                                 |         }
    0x0003e396 add r3, pc                                        |         r3 = 0x7ca46;
    0x0003e398 add r3, r2                                        |         r3 += r2;
    0x0003e39a ldrb.w r2, [r3, 0x150]                            |         r2 = *((r3 + 0x150));
                                                                 |     }
    0x0003e39e adds r2, 1                                        |     r2++;
    0x0003e3a0 strb r2, [r1]                                     |     *(r1) = r2;
                                                                 | label_98:
    0x0003e3a2 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x0003e3a4 beq.w 0x3e4b0                                     |         goto label_100;
                                                                 |     }
    0x0003e3a8 ldr r3, [pc, 0x304]                               |     
    0x0003e3aa add r3, pc                                        |     r3 = 0x7ca5e;
                                                                 | label_15:
    0x0003e3ac movs r2, 6                                        |     r2 = 6;
    0x0003e3ae str r3, [sp, 0x4c]                                |     var_4ch = r3;
    0x0003e3b0 movs r3, 0                                        |     r3 = 0;
    0x0003e3b2 str r2, [sp, 0x50]                                |     var_50h = r2;
    0x0003e3b4 ldr r0, [sp, 0x10]                                |     r0 = var_10h;
    0x0003e3b6 mov r2, r3                                        |     r2 = r3;
    0x0003e3b8 mov r1, r4                                        |     r1 = r4;
    0x0003e3ba bl 0xe5fc                                         |     fcn_0000e5fc (r0, r1, r2, r3, r4, r5);
    0x0003e3be ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x0003e3c0 mov r5, r0                                        |     r5 = r0;
    0x0003e3c2 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003e3c4 bne.w 0x3e536                                     |         goto label_101;
                                                                 |     }
                                                                 | label_18:
    0x0003e3c8 movs r1, 0                                        |     r1 = 0;
    0x0003e3ca ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x0003e3cc str r1, [sp]                                      |     *(sp) = r1;
    0x0003e3ce mov r3, r7                                        |     r3 = r7;
    0x0003e3d0 movs r1, 0x53                                     |     r1 = 0x53;
    0x0003e3d2 mov r2, r5                                        |     r2 = r5;
    0x0003e3d4 bl 0x1cd60                                        |     r0 = fcn_0001cd60 (r0, r1, r2, r3, r4);
    0x0003e3d8 mov r1, r0                                        |     r1 = r0;
                                                                 |     if (r0 != 0) {
    0x0003e3da cbz r0, 0x3e3f0                                   |         
    0x0003e3dc ldr.w r3, [fp, 4]                                 |         r3 = *(arg_4h);
    0x0003e3e0 and r2, r3, 1                                     |         r2 = r3 & 1;
    0x0003e3e4 ldr r3, [r0, 4]                                   |         r3 = *((r0 + 4));
    0x0003e3e6 orrs r3, r2                                       |         r3 |= r2;
    0x0003e3e8 str r3, [r0, 4]                                   |         *((r0 + 4)) = r3;
    0x0003e3ea ldrsh.w r3, [fp, 0x24]                            |         r3 = *(arg_24h);
    0x0003e3ee strh r3, [r0, 0x24]                               |         *((r0 + 0x24)) = r3;
                                                                 |     }
    0x0003e3f0 ldr r7, [sp, 0xc]                                 |     r7 = var_ch;
    0x0003e3f2 movs r2, 3                                        |     r2 = 3;
    0x0003e3f4 mov r0, r7                                        |     r0 = r7;
    0x0003e3f6 bl 0x132ec                                        |     r0 = fcn_000132ec (r0, r1, r2, r3);
    0x0003e3fa mov r5, r0                                        |     r5 = r0;
    0x0003e3fc mov r0, r7                                        |     r0 = r7;
    0x0003e3fe mov r1, r5                                        |     r1 = r5;
    0x0003e400 bl 0x3db1c                                        |     fcn_0003db1c (r0, r1, r2, r3, r4, r5, r6);
    0x0003e404 movs r3, 0                                        |     r3 = 0;
    0x0003e406 mov r1, r4                                        |     r1 = r4;
    0x0003e408 mov r2, r3                                        |     r2 = r3;
    0x0003e40a ldr r0, [sp, 0x10]                                |     r0 = var_10h;
    0x0003e40c bl 0xe5fc                                         |     fcn_0000e5fc (r0, r1, r2, r3, r4, r5);
    0x0003e410 ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x0003e412 mov r4, r0                                        |     r4 = r0;
    0x0003e414 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003e416 bne 0x3e514                                       |         goto label_102;
                                                                 |     }
                                                                 | label_17:
    0x0003e418 movs r1, 0                                        |     r1 = 0;
    0x0003e41a ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x0003e41c str r1, [sp]                                      |     *(sp) = r1;
    0x0003e41e mov r3, r6                                        |     r3 = r6;
    0x0003e420 movs r1, 0x52                                     |     r1 = 0x52;
    0x0003e422 mov r2, r4                                        |     r2 = r4;
    0x0003e424 bl 0x1cd60                                        |     r0 = fcn_0001cd60 (r0, r1, r2, r3, r4);
    0x0003e428 mov r1, r0                                        |     r1 = r0;
                                                                 |     if (r0 != 0) {
    0x0003e42a cbz r0, 0x3e440                                   |         
    0x0003e42c ldr.w r3, [fp, 4]                                 |         r3 = *(arg_4h);
    0x0003e430 and r2, r3, 1                                     |         r2 = r3 & 1;
    0x0003e434 ldr r3, [r0, 4]                                   |         r3 = *((r0 + 4));
    0x0003e436 orrs r3, r2                                       |         r3 |= r2;
    0x0003e438 str r3, [r0, 4]                                   |         *((r0 + 4)) = r3;
    0x0003e43a ldrsh.w r3, [fp, 0x24]                            |         r3 = *(arg_24h);
    0x0003e43e strh r3, [r0, 0x24]                               |         *((r0 + 0x24)) = r3;
                                                                 |     }
    0x0003e440 ldr r4, [sp, 0xc]                                 |     r4 = var_ch;
    0x0003e442 movs r2, 3                                        |     r2 = 3;
    0x0003e444 mov r0, r4                                        |     r0 = r4;
    0x0003e446 bl 0x132ec                                        |     r0 = fcn_000132ec (r0, r1, r2, r3);
    0x0003e44a mov r6, r0                                        |     r6 = r0;
    0x0003e44c mov r0, r4                                        |     r0 = r4;
    0x0003e44e mov r1, r6                                        |     r1 = r6;
    0x0003e450 bl 0x3db1c                                        |     fcn_0003db1c (r0, r1, r2, r3, r4, r5, r6);
    0x0003e454 ldr r3, [r4, 0x14]                                |     r3 = *((r4 + 0x14));
    0x0003e456 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x0003e458 adds r4, r3, r2                                   |     r4 = r3 + r2;
    0x0003e45a cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x0003e45e beq.w 0x3dec2                                     |         goto label_11;
                                                                 |     }
    0x0003e462 add.w r5, r5, r5, lsl 1                           |     r5 += (r5 << 1);
    0x0003e466 add.w r6, r6, r6, lsl 1                           |     r6 += (r6 << 1);
    0x0003e468 lsls r6, r0, 0x19                                 |     r6 = r0 << 0x19;
    0x0003e46a ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x0003e46c add.w r5, r3, r5, lsl 4                           |     r5 = r3 + (r5 << 4);
    0x0003e470 add.w r3, r3, r6, lsl 4                           |     r3 += (r6 << 4);
    0x0003e474 str r2, [r5, 4]                                   |     *((r5 + 4)) = r2;
    0x0003e476 str r2, [r3, 4]                                   |     *((r3 + 4)) = r2;
    0x0003e478 movs r3, 2                                        |     r3 = 2;
    0x0003e47a strb r3, [r4, 0x15]                               |     *((r4 + 0x15)) = r3;
    0x0003e47c b 0x3dec2                                         |     goto label_11;
                                                                 | label_72:
    0x0003e47e ldr r0, [sp, 0x30]                                |     r0 = var_30h;
    0x0003e480 mov r1, r6                                        |     r1 = r6;
    0x0003e482 movs r2, 0                                        |     r2 = 0;
    0x0003e484 bl 0x132ec                                        |     fcn_000132ec (r0, r1, r2, r3);
    0x0003e488 b 0x3df22                                         |     goto label_12;
                                                                 | label_79:
    0x0003e48a mov r3, r4                                        |     r3 = r4;
    0x0003e48c movs r2, 0                                        |     r2 = 0;
    0x0003e48e mov r1, r3                                        |     r1 = r3;
    0x0003e490 mov r0, sb                                        |     r0 = sb;
    0x0003e492 mov r4, fp                                        |     r4 = fp;
    0x0003e494 bl 0x132ec                                        |     fcn_000132ec (r0, r1, r2, r3);
    0x0003e498 b 0x3e014                                         |     goto label_13;
                                                                 | label_82:
    0x0003e49a mov r2, sb                                        |     r2 = sb;
    0x0003e49c cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0003e49e bne.w 0x3e8a6                                     |         goto label_103;
                                                                 |     }
                                                                 | label_33:
    0x0003e4a2 mov r5, r2                                        |     r5 = r2;
    0x0003e4a4 mov r6, r2                                        |     r6 = r2;
    0x0003e4a6 mov r0, r2                                        |     r0 = r2;
    0x0003e4a8 mov r8, r2                                        |     r8 = r2;
    0x0003e4aa mov r3, r2                                        |     r3 = r2;
    0x0003e4ac mov sb, r2                                        |     sb = r2;
    0x0003e4ae b 0x3e0da                                         |     goto label_14;
                                                                 | label_100:
    0x0003e4b0 ldr r3, [pc, 0x200]                               |     
    0x0003e4b2 add r3, pc                                        |     r3 = 0x7cb6a;
    0x0003e4b4 b 0x3e3ac                                         |     goto label_15;
                                                                 | label_84:
    0x0003e4b6 movs r3, 0                                        |     r3 = 0;
    0x0003e4b8 mov sb, fp                                        |     sb = fp;
    0x0003e4ba str r4, [sp, 0x30]                                |     var_30h = r4;
    0x0003e4bc str r3, [sp, 0x34]                                |     var_34h = r3;
    0x0003e4be b 0x3e160                                         |     goto label_16;
                                                                 | label_90:
    0x0003e4c0 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0003e4c2 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x0003e4c4 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x0003e4c6 orrs r0, r3                                       |     r0 |= r3;
    0x0003e4c8 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0003e4ca orrs r1, r3                                       |     r1 |= r3;
    0x0003e4cc ldr r3, [r2, 0x1c]                                |     r3 = *((r2 + 0x1c));
    0x0003e4ce mov ip, r1                                        |     
    0x0003e4d0 ldr r1, [sp, 0x30]                                |     r1 = var_30h;
    0x0003e4d2 str r3, [r1, 8]                                   |     *((r1 + 8)) = r3;
    0x0003e4d4 ldrsh.w r3, [r2, 0x20]                            |     r3 = *((r2 + 0x20));
    0x0003e4d8 strd r0, ip, [r1, 0x20]                           |     __asm ("strd r0, ip, [r1, 0x20]");
    0x0003e4dc strd r6, r7, [r1, 0x28]                           |     __asm ("strd r6, r7, [r1, 0x28]");
    0x0003e4e0 str r3, [r1, 0xc]                                 |     *((r1 + 0xc)) = r3;
    0x0003e4e2 ldrb.w r3, [sb]                                   |     r3 = *(sb);
    0x0003e4e6 cmp r3, 0x4b                                      |     
    0x0003e4e8 it eq                                             |     
                                                                 |     if (r3 != 0x4b) {
    0x0003e4ea moveq r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r3 != 0x4b) {
    0x0003e4ec beq 0x3e500                                       |         
    0x0003e4ee cmp r3, 0x4c                                      |         
    0x0003e4f0 ittte ne                                          |         
                                                                 |         if (r3 == 0x4c) {
    0x0003e4f2 subne r2, r3, 0x4f                                |             r2 = r3 - 0x4f;
                                                                 |         }
                                                                 |         if (r3 == 0x4c) {
    0x0003e4f6 movne r3, 2                                       |             r3 = 2;
                                                                 |         }
                                                                 |         if (r3 != 0x4c) {
    0x0003e4f8 lsleq r3, r2                                      |             r3 <<= r2;
                                                                 |         }
                                                                 |         if (r3 == 0x4c) {
    0x0003e4fa movs r3, 0x80                                     |             r3 = 0x80;
                                                                 |         }
    0x0003e4fc it ne                                             |         
                                                                 |         if (r3 == 0x80) {
    0x0003e4fe uxthne r3, r3                                     |             __asm ("uxthne r3, r3");
                                                                 |             goto label_104;
                                                                 |         }
                                                                 |     }
                                                                 | label_104:
    0x0003e500 ldr r2, [sp, 0x34]                                |     r2 = var_34h;
    0x0003e502 add r2, r3                                        |     r2 += r3;
    0x0003e504 mov r3, r2                                        |     r3 = r2;
    0x0003e506 ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x0003e508 ands r3, r5                                       |     r3 &= r5;
    0x0003e50a strh r3, [r2, 0x12]                               |     *((r2 + 0x12)) = r3;
    0x0003e50c ldrb.w sb, [fp]                                   |     sb = *(fp);
    0x0003e510 b.w 0x3dc8a                                       |     goto label_4;
                                                                 | label_102:
    0x0003e514 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0003e516 add r2, sp, 0x4c                                  |     r2 += var_4ch;
    0x0003e518 movs r1, 0x5f                                     |     r1 = 0x5f;
    0x0003e51a ldr r0, [r3]                                      |     r0 = *(r3);
    0x0003e51c movs r3, 1                                        |     r3 = 1;
    0x0003e51e bl 0xd7ac                                         |     r0 = fcn_0000d7ac (r0, r1, r2, r3);
    0x0003e522 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0003e524 beq.w 0x3e418                                     |         goto label_17;
                                                                 |     }
    0x0003e528 ldr r3, [r0, 4]                                   |     r3 = *((r0 + 4));
    0x0003e52a str r4, [r0, 0xc]                                 |     *((r0 + 0xc)) = r4;
    0x0003e52c mov r4, r0                                        |     r4 = r0;
    0x0003e52e orr r3, r3, 0x1100                                |     r3 |= 0x1100;
    0x0003e532 str r3, [r0, 4]                                   |     *((r0 + 4)) = r3;
    0x0003e534 b 0x3e418                                         |     goto label_17;
                                                                 | label_101:
    0x0003e536 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0003e538 add r2, sp, 0x4c                                  |     r2 += var_4ch;
    0x0003e53a movs r1, 0x5f                                     |     r1 = 0x5f;
    0x0003e53c ldr r0, [r3]                                      |     r0 = *(r3);
    0x0003e53e movs r3, 1                                        |     r3 = 1;
    0x0003e540 bl 0xd7ac                                         |     r0 = fcn_0000d7ac (r0, r1, r2, r3);
    0x0003e544 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0003e546 beq.w 0x3e3c8                                     |         goto label_18;
                                                                 |     }
    0x0003e54a ldr r3, [r0, 4]                                   |     r3 = *((r0 + 4));
    0x0003e54c str r5, [r0, 0xc]                                 |     *((r0 + 0xc)) = r5;
    0x0003e54e mov r5, r0                                        |     r5 = r0;
    0x0003e550 orr r3, r3, 0x1100                                |     r3 |= 0x1100;
    0x0003e554 str r3, [r0, 4]                                   |     *((r0 + 4)) = r3;
    0x0003e556 b 0x3e3c8                                         |     goto label_18;
                                                                 | label_80:
    0x0003e558 ldr.w fp, [sb, 0xc]                               |     fp = *((sb + 0xc));
    0x0003e55c ldr.w r3, [sb, 0x14]                              |     r3 = *((sb + 0x14));
    0x0003e560 cmp.w fp, 0                                       |     
                                                                 |     if (fp <= 0) {
    0x0003e564 ble.w 0x3e042                                     |         goto label_19;
                                                                 |     }
    0x0003e568 ldr.w lr, [sp, 0x38]                              |     lr = var_38h;
    0x0003e56c add.w ip, r3, 0x30                                |     
    0x0003e570 mov sb, r4                                        |     sb = r4;
    0x0003e572 strd r0, r0, [sp, 0x28]                           |     __asm ("strd r0, r0, [var_28h]");
    0x0003e576 b 0x3e586                                         |     
                                                                 |     while (r3 < 0x4c) {
    0x0003e578 cmp r3, 0x4a                                      |         
                                                                 |         if (r3 > 0x4a) {
    0x0003e57a bhi 0x3e596                                       |             goto label_105;
                                                                 |         }
                                                                 | label_20:
    0x0003e57c adds r0, 1                                        |         r0++;
    0x0003e57e add.w ip, ip, 0x30                                |         
    0x0003e582 cmp fp, r0                                        |         
                                                                 |         if (fp == r0) {
    0x0003e584 beq 0x3e5dc                                       |             goto label_106;
                                                                 |         }
    0x0003e586 ldr r3, [ip, -0x30]                               |         r3 = *((ip - 0x30));
    0x0003e58a ldrb r3, [r3]                                     |         r3 = *(r3);
    0x0003e58c cmp r3, 0x4c                                      |         
    0x0003e58e bls 0x3e578                                       |         
                                                                 |     }
    0x0003e590 subs r3, 0x4f                                     |     r3 -= 0x4f;
    0x0003e592 cmp r3, 4                                         |     
                                                                 |     if (r3 > 4) {
    0x0003e594 bhi 0x3e57c                                       |         goto label_20;
                                                                 |     }
                                                                 | label_105:
    0x0003e596 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0003e598 ldr sl, [ip, -0x28]                               |     sl = *((ip - 0x28));
    0x0003e59c ldr r4, [r3, 0x44]                                |     r4 = *((r3 + 0x44));
    0x0003e59e cmp r4, 0                                         |     
                                                                 |     if (r4 <= 0) {
    0x0003e5a0 ble 0x3e57c                                       |         goto label_20;
                                                                 |     }
    0x0003e5a2 mov r2, lr                                        |     r2 = lr;
    0x0003e5a4 movs r3, 0                                        |     r3 = 0;
    0x0003e5a6 b 0x3e5ae                                         |     goto label_107;
                                                                 | label_21:
    0x0003e5a8 adds r3, 1                                        |     r3++;
    0x0003e5aa cmp r4, r3                                        |     
                                                                 |     if (r4 == r3) {
    0x0003e5ac beq 0x3e57c                                       |         goto label_20;
                                                                 |     }
                                                                 | label_107:
    0x0003e5ae ldr r1, [r2, 4]!                                  |     r1 = *((r2 += 4));
    0x0003e5b2 cmp sl, r1                                        |     
                                                                 |     if (sl != r1) {
    0x0003e5b4 bne 0x3e5a8                                       |         goto label_21;
                                                                 |     }
    0x0003e5b6 movs r4, 1                                        |     r4 = 1;
    0x0003e5b8 sub.w r2, r3, 0x20                                |     r2 = r3 - 0x20;
    0x0003e5bc rsb.w r1, r3, 0x20                                |     r1 = 0x20 - r3;
    0x0003e5c0 lsl.w r2, r4, r2                                  |     r2 = r4 << r2;
    0x0003e5c4 lsr.w r1, r4, r1                                  |     r1 = r4 >> r1;
    0x0003e5c8 lsl.w r3, r4, r3                                  |     r3 = r4 << r3;
    0x0003e5cc orrs r2, r1                                       |     r2 |= r1;
    0x0003e5ce ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x0003e5d0 orrs r1, r2                                       |     r1 |= r2;
    0x0003e5d2 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x0003e5d4 str r1, [sp, 0x2c]                                |     var_2ch = r1;
    0x0003e5d6 orrs r2, r3                                       |     r2 |= r3;
    0x0003e5d8 str r2, [sp, 0x28]                                |     var_28h = r2;
    0x0003e5da b 0x3e57c                                         |     goto label_20;
                                                                 | label_106:
    0x0003e5dc ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x0003e5de and r5, r5, 1                                     |     r5 &= 1;
    0x0003e5e2 mov r4, sb                                        |     r4 = sb;
    0x0003e5e4 ands r3, r6                                       |     r3 &= r6;
    0x0003e5e6 mov r6, r3                                        |     r6 = r3;
    0x0003e5e8 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0003e5ea and.w r8, r3, r8                                  |     r8 = r3 & r8;
    0x0003e5ee orrs.w r3, r6, r8                                 |     r3 = r6 | r8;
    0x0003e5f2 mov.w r3, 0                                       |     r3 = 0;
    0x0003e5f6 itet eq                                           |     
                                                                 |     if (r3 != r6) {
    0x0003e5f8 moveq r5, 0                                       |         r5 = 0;
                                                                 |     }
                                                                 |     if (r3 == r6) {
    0x0003e5fa movne r0, 1                                       |         r0 = 1;
                                                                 |     }
                                                                 |     if (r3 != r6) {
    0x0003e5fc moveq r0, r3                                      |         r0 = r3;
                                                                 |     }
    0x0003e5fe str r3, [sp, 0x28]                                |     var_28h = r3;
    0x0003e600 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x0003e602 b 0x3df84                                         |     goto label_10;
                                                                 | label_68:
    0x0003e604 mov r6, r7                                        |     r6 = r7;
    0x0003e606 mov r3, r7                                        |     r3 = r7;
    0x0003e608 b.w 0x3dba6                                       |     goto label_5;
                                                                 | label_87:
    0x0003e60c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0003e60e beq.w 0x3e916                                     |         goto label_108;
                                                                 |     }
    0x0003e612 bic r1, r1, 0x100                                 |     r1 = BIT_MASK (r1, 0x100);
    0x0003e616 str r1, [r2, 4]                                   |     *((r2 + 4)) = r1;
    0x0003e618 b 0x3e174                                         |     goto label_22;
                                                                 | label_85:
    0x0003e61a ldr r2, [pc, 0x9c]                                |     
    0x0003e61c ldr r3, [pc, 0x80]                                |     r3 = *(0x3e6a0);
    0x0003e61e add r2, pc                                        |     r2 = 0x7ccdc;
    0x0003e620 ldr r3, [r2, r3]                                  |     r3 = *(0x7ccdc);
    0x0003e622 ldr r2, [r3]                                      |     r2 = *(0x7ccdc);
    0x0003e624 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x0003e626 eors r2, r3                                       |     r2 ^= r3;
    0x0003e628 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x0003e62c bne.w 0x3ea0a                                     |         goto label_49;
                                                                 |     }
    0x0003e630 mov r1, r0                                        |     r1 = r0;
    0x0003e632 ldr r0, [sp, 0x10]                                |     r0 = var_10h;
    0x0003e634 add sp, 0x5c                                      |     
    0x0003e636 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |     
    0x0003e63a b.w 0x12e68                                       |     void (*0x12e68)() ();
                                                                 | label_76:
    0x0003e63e ldr r1, [sp, 0x30]                                |     r1 = var_30h;
    0x0003e640 mov r3, r6                                        |     r3 = r6;
    0x0003e642 ldrd fp, r4, [sp, 0x3c]                           |     __asm ("ldrd fp, r4, [var_3ch]");
    0x0003e646 lsls r0, r0, 8                                    |     r0 <<= 8;
    0x0003e648 ldr r5, [sp, 0x34]                                |     r5 = var_34h;
    0x0003e64a str.w r3, [r1, 0x198]                             |     __asm ("str.w r3, aav.0x000000ff");
    0x0003e64e ldrd r3, r2, [sp, 0x28]                           |     __asm ("ldrd r3, r2, [var_28h]");
    0x0003e652 str.w r8, [r1, 0x19c]                             |     __asm ("str.w r8, aav.0x000000ff");
    0x0003e656 ldr r6, [sp, 0x44]                                |     r6 = var_44h;
    0x0003e658 orrs r3, r2                                       |     r3 |= r2;
    0x0003e65a ldr.w sl, [sp, 0x38]                              |     sl = var_38h;
    0x0003e65e strh r0, [r4, 0x12]                               |     *((r4 + 0x12)) = r0;
                                                                 |     if (r3 == r2) {
    0x0003e660 beq.w 0x3e058                                     |         goto label_23;
                                                                 |     }
    0x0003e664 mov r2, sl                                        |     r2 = sl;
    0x0003e666 mov.w sb, 2                                       |     sb = 2;
    0x0003e66a mov sl, r5                                        |     sl = r5;
    0x0003e66c mov lr, r6                                        |     lr = r6;
    0x0003e66e mov r5, r1                                        |     r5 = r1;
                                                                 | label_24:
    0x0003e670 ldr r3, [r5, 0xc]                                 |     r3 = *((r5 + 0xc));
    0x0003e672 ldr r6, [r5, 0x14]                                |     r6 = *((r5 + 0x14));
    0x0003e674 subs.w fp, r3, 1                                  |     
                                                                 |     if (fp < r3) {
    0x0003e678 bmi 0x3e754                                       |         goto label_109;
                                                                 |     }
    0x0003e67a mov r8, fp                                        |     r8 = fp;
    0x0003e67c mov r4, r6                                        |     r4 = r6;
                                                                 | label_25:
    0x0003e67e ldr r7, [r4, 8]                                   |     r7 = *((r4 + 8));
    0x0003e680 ldrb r3, [r4, 0x14]                               |     r3 = *((r4 + 0x14));
    0x0003e682 cmp lr, r7                                        |     
    0x0003e684 bic r3, r3, 0x40                                  |     r3 = BIT_MASK (r3, 0x40);
    0x0003e688 strb r3, [r4, 0x14]                               |     *((r4 + 0x14)) = r3;
                                                                 |     if (lr == r7) {
    0x0003e68a beq 0x3e748                                       |         goto label_110;
                                                                 |     }
    0x0003e68c ldr.w ip, [sl, 0x44]                              |     ip = *((sl + 0x44));
    0x0003e690 cmp.w ip, 0                                       |     
                                                                 |     if (ip <= 0) {
    0x0003e694 ble 0x3e748                                       |         goto label_110;
                                                                 |     }
    0x0003e696 mov r1, r2                                        |     r1 = r2;
    0x0003e698 movs r3, 0                                        |     r3 = 0;
    0x0003e69a b 0x3e6c2                                         |     
                                                                 |     while (r7 != r0) {
    0x0003e6bc adds r3, 1                                        |         r3++;
    0x0003e6be cmp ip, r3                                        |         
                                                                 |         if (ip == r3) {
    0x0003e6c0 beq 0x3e748                                       |             goto label_110;
                                                                 |         }
    0x0003e6c2 ldr r0, [r1, 4]!                                  |         r0 = *((r1 += 4));
    0x0003e6c6 cmp r7, r0                                        |         
    0x0003e6c8 bne 0x3e6bc                                       |         
                                                                 |     }
    0x0003e6ca mov.w ip, 1                                       |     
    0x0003e6ce sub.w r1, r3, 0x20                                |     r1 = r3 - 0x20;
    0x0003e6d2 rsb.w r0, r3, 0x20                                |     r0 = 0x20 - r3;
    0x0003e6d6 lsl.w r1, ip, r1                                  |     r1 = ip << r1;
    0x0003e6da lsr.w r0, ip, r0                                  |     r0 = ip >> r0;
    0x0003e6de lsl.w r3, ip, r3                                  |     r3 = ip << r3;
    0x0003e6e2 orrs r1, r0                                       |     r1 |= r0;
    0x0003e6e4 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0003e6e6 ands r1, r0                                       |     r1 &= r0;
    0x0003e6e8 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x0003e6ea ands r3, r0                                       |     r3 &= r0;
    0x0003e6ec orrs r3, r1                                       |     r3 |= r1;
                                                                 |     if (r3 == r1) {
    0x0003e6ee beq 0x3e748                                       |         goto label_110;
                                                                 |     }
    0x0003e6f0 ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
    0x0003e6f2 mov r1, r7                                        |     r1 = r7;
    0x0003e6f4 cmp r7, r1                                        |     
    0x0003e6f6 str r6, [sp, 0x34]                                |     var_34h = r6;
    0x0003e6f8 str.w fp, [sp, 0x38]                              |     __asm ("str.w fp, [var_38h]");
    0x0003e6fc add.w r4, r4, 0x30                                |     r4 += 0x30;
    0x0003e700 mov r6, r3                                        |     r6 = r3;
    0x0003e702 mov r3, sb                                        |     r3 = sb;
    0x0003e704 mov fp, r2                                        |     
    0x0003e706 mov sb, r5                                        |     sb = r5;
    0x0003e708 mov r5, r3                                        |     r5 = r3;
                                                                 |     if (r7 == r1) {
    0x0003e70a beq 0x3e72e                                       |         goto label_111;
                                                                 |     }
                                                                 |     do {
    0x0003e70c ldrb r1, [r4, -0x1c]                              |         r1 = *((r4 - 0x1c));
    0x0003e710 and r1, r1, 0xbf                                  |         r1 &= 0xbf;
                                                                 | label_27:
    0x0003e714 add.w r8, r8, -1                                  |         r8 += -1;
    0x0003e718 strb r1, [r4, -0x1c]                              |         *((r4 - 0x1c)) = r1;
    0x0003e71c cmp.w r8, -1                                      |         
    0x0003e720 add.w r4, r4, 0x30                                |         r4 += 0x30;
                                                                 |         if (r8 == -1) {
    0x0003e724 beq 0x3e78a                                       |             goto label_112;
                                                                 |         }
    0x0003e726 ldr r1, [r4, -0x28]                               |         r1 = *((r4 - 0x28));
    0x0003e72a cmp r7, r1                                        |         
    0x0003e72c bne 0x3e70c                                       |         
                                                                 |     } while (r7 != r1);
                                                                 | label_111:
    0x0003e72e ldr r1, [r4, -0x24]                               |     r1 = *((r4 - 0x24));
    0x0003e732 cmp r6, r1                                        |     
                                                                 |     if (r6 == r1) {
    0x0003e734 beq 0x3e75c                                       |         goto label_113;
                                                                 |     }
                                                                 | label_26:
    0x0003e736 mov r3, r5                                        |     r3 = r5;
    0x0003e738 mov r2, fp                                        |     r2 = fp;
    0x0003e73a cmp r3, 1                                         |     
    0x0003e73c mov r5, sb                                        |     r5 = sb;
                                                                 |     if (r3 == 1) {
    0x0003e73e beq 0x3e754                                       |         goto label_109;
                                                                 |     }
    0x0003e740 mov lr, r7                                        |     lr = r7;
    0x0003e742 mov.w sb, 1                                       |     sb = 1;
    0x0003e746 b 0x3e670                                         |     goto label_24;
                                                                 | label_110:
    0x0003e748 add.w r8, r8, -1                                  |     r8 += -1;
    0x0003e74c adds r4, 0x30                                     |     r4 += 0x30;
    0x0003e74e cmp.w r8, -1                                      |     
                                                                 |     if (r8 != -1) {
    0x0003e752 bne 0x3e67e                                       |         goto label_25;
                                                                 |     }
                                                                 | label_109:
    0x0003e754 ldr.w fp, [sp, 0x3c]                              |     fp = var_3ch;
    0x0003e758 mov sl, r2                                        |     sl = r2;
    0x0003e75a b 0x3e058                                         |     goto label_23;
                                                                 | label_113:
    0x0003e75c ldr r1, [r4, -0x30]                               |     r1 = *((r4 - 0x30));
    0x0003e760 ldr r0, [r1, 0x10]                                |     r0 = *((r1 + 0x10));
    0x0003e762 str r1, [sp, 0x30]                                |     var_30h = r1;
    0x0003e764 bl 0xb8a4                                         |     fcn_0000b8a4 (r0);
    0x0003e768 ldr r1, [sp, 0x30]                                |     r1 = var_30h;
    0x0003e76a mov ip, r0                                        |     
    0x0003e76c str.w ip, [sp, 0x30]                              |     __asm ("str.w ip, [var_30h]");
    0x0003e770 ldr r0, [r1, 0xc]                                 |     r0 = *((r1 + 0xc));
    0x0003e772 bl 0xb8a4                                         |     fcn_0000b8a4 (r0);
    0x0003e776 ldr r1, [sp, 0x30]                                |     r1 = var_30h;
    0x0003e778 cmp r1, 0                                         |     
    0x0003e77a it ne                                             |     
                                                                 |     if (r1 == 0) {
    0x0003e77c cmpne r0, r1                                      |         __asm ("cmpne r0, r1");
                                                                 |         goto label_114;
                                                                 |     }
                                                                 |     if (r1 != 0) {
                                                                 | label_114:
    0x0003e77e bne 0x3e736                                       |         goto label_26;
                                                                 |     }
    0x0003e780 ldrb r1, [r4, -0x1c]                              |     r1 = *((r4 - 0x1c));
    0x0003e784 orr r1, r1, 0x40                                  |     r1 |= 0x40;
    0x0003e788 b 0x3e714                                         |     goto label_27;
                                                                 | label_112:
    0x0003e78a ldrd r3, r2, [sp, 0x34]                           |     __asm ("ldrd r3, r2, [var_34h]");
    0x0003e78e mov r5, sl                                        |     r5 = sl;
    0x0003e790 ldr r4, [sp, 0x40]                                |     r4 = var_40h;
    0x0003e792 mov sl, fp                                        |     sl = fp;
    0x0003e794 ldr.w sb, [sp, 0x10]                              |     sb = var_10h;
    0x0003e798 movs r1, 0                                        |     r1 = 0;
    0x0003e79a ldr.w fp, [sp, 0x3c]                              |     fp = var_3ch;
    0x0003e79e add.w r6, r3, 0x30                                |     r6 = r3 + 0x30;
    0x0003e7a2 mov r7, r1                                        |     r7 = r1;
    0x0003e7a4 mov r8, r2                                        |     r8 = r2;
                                                                 |     do {
    0x0003e7a6 ldrb r3, [r6, -0x1c]                              |         r3 = *((r6 - 0x1c));
    0x0003e7aa lsls r3, r3, 0x19                                 |         r3 <<= 0x19;
                                                                 |         if (r3 < r3) {
    0x0003e7ac bpl 0x3e7d2                                       |             
    0x0003e7ae ldr r3, [r6, -0x30]                               |             r3 = *((r6 - 0x30));
    0x0003e7b2 mov r0, sb                                        |             r0 = sb;
    0x0003e7b4 ldr r1, [r3, 0x10]                                |             r1 = *((r3 + 0x10));
    0x0003e7b6 movs r3, 0                                        |             r3 = 0;
    0x0003e7b8 mov r2, r3                                        |             r2 = r3;
    0x0003e7ba bl 0xe5fc                                         |             fcn_0000e5fc (r0, r1, r2, r3, r4, r5);
    0x0003e7be ldr r3, [r5]                                      |             r3 = *(r5);
    0x0003e7c0 mov r1, r7                                        |             r1 = r7;
    0x0003e7c2 mov r2, r0                                        |             r2 = r0;
    0x0003e7c4 ldr r0, [r3]                                      |             r0 = *(r3);
    0x0003e7c6 bl 0x19ba4                                        |             fcn_00019ba4 (r0, r1, r2);
    0x0003e7ca ldr r3, [r6, -0x30]                               |             r3 = *((r6 - 0x30));
    0x0003e7ce mov r7, r0                                        |             r7 = r0;
    0x0003e7d0 ldr r1, [r3, 0xc]                                 |             r1 = *((r3 + 0xc));
                                                                 |         }
    0x0003e7d2 add.w r8, r8, -1                                  |         r8 += -1;
    0x0003e7d6 adds r6, 0x30                                     |         r6 += 0x30;
    0x0003e7d8 cmp.w r8, -1                                      |         
    0x0003e7dc bne 0x3e7a6                                       |         
                                                                 |     } while (r8 != -1);
    0x0003e7de movs r3, 0                                        |     r3 = 0;
    0x0003e7e0 ldr r0, [sp, 0x10]                                |     r0 = var_10h;
    0x0003e7e2 mov r2, r3                                        |     r2 = r3;
    0x0003e7e4 bl 0xe5fc                                         |     fcn_0000e5fc (r0, r1, r2, r3, r4, r5);
    0x0003e7e8 movs r3, 0                                        |     r3 = 0;
    0x0003e7ea mov r2, r0                                        |     r2 = r0;
    0x0003e7ec movs r1, 0x4b                                     |     r1 = 0x4b;
    0x0003e7ee ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x0003e7f0 str r3, [sp]                                      |     *(sp) = r3;
    0x0003e7f2 bl 0x1cd60                                        |     r0 = fcn_0001cd60 (r0, r1, r2, r3, r4);
    0x0003e7f6 mov r1, r0                                        |     r1 = r0;
    0x0003e7f8 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0003e7fa beq.w 0x3e94a                                     |         goto label_115;
                                                                 |     }
    0x0003e7fe ldr.w r3, [fp, 4]                                 |     r3 = *(arg_4h);
    0x0003e802 ldr r5, [sp, 0xc]                                 |     r5 = var_ch;
    0x0003e804 and r2, r3, 1                                     |     r2 = r3 & 1;
    0x0003e808 ldr r3, [r0, 4]                                   |     r3 = *((r0 + 4));
    0x0003e80a orrs r3, r2                                       |     r3 |= r2;
    0x0003e80c movs r2, 3                                        |     r2 = 3;
    0x0003e80e str r3, [r0, 4]                                   |     *((r0 + 4)) = r3;
    0x0003e810 ldrsh.w r3, [fp, 0x24]                            |     r3 = *(arg_24h);
    0x0003e814 str r7, [r0, 0x14]                                |     *((r0 + 0x14)) = r7;
    0x0003e816 strh r3, [r0, 0x24]                               |     *((r0 + 0x24)) = r3;
    0x0003e818 mov r0, r5                                        |     r0 = r5;
    0x0003e81a bl 0x132ec                                        |     r0 = fcn_000132ec (r0, r1, r2, r3);
    0x0003e81e mov r4, r0                                        |     r4 = r0;
    0x0003e820 mov r0, r5                                        |     r0 = r5;
    0x0003e822 mov r1, r4                                        |     r1 = r4;
    0x0003e824 bl 0x3db1c                                        |     fcn_0003db1c (r0, r1, r2, r3, r4, r5, r6);
    0x0003e828 add.w r3, r4, r4, lsl 1                           |     r3 = r4 + (r4 << 1);
    0x0003e82c ldr r4, [r5, 0x14]                                |     r4 = *((r5 + 0x14));
    0x0003e82e ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x0003e830 add.w r3, r4, r3, lsl 4                           |     r3 = r4 + (r3 << 4);
    0x0003e834 str r2, [r3, 4]                                   |     *((r3 + 4)) = r2;
    0x0003e836 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x0003e838 add r4, r3                                        |     r4 += r3;
    0x0003e83a movs r3, 1                                        |     r3 = 1;
    0x0003e83c strb r3, [r4, 0x15]                               |     *((r4 + 0x15)) = r3;
                                                                 | label_35:
    0x0003e83e mov.w r3, 0x800                                   |     r3 = 0x800;
    0x0003e842 strh r3, [r4, 0x12]                               |     *((r4 + 0x12)) = r3;
    0x0003e844 b 0x3e058                                         |     goto label_23;
                                                                 | label_83:
    0x0003e846 ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x0003e848 ldr r0, [r7, -0x2c]                               |     r0 = *((r7 - 0x2c));
    0x0003e84c ldr r2, [r2, 0x14]                                |     r2 = *((r2 + 0x14));
    0x0003e84e add.w r0, r0, r0, lsl 1                           |     r0 += (r0 << 1);
    0x0003e852 add.w r2, r2, r0, lsl 4                           |     r2 += (r0 << 4);
    0x0003e856 ldr.w fp, [r2, 8]                                 |     fp = *((r2 + 8));
                                                                 | label_28:
    0x0003e85a movs r2, 0                                        |     r2 = 0;
    0x0003e85c b 0x3e864                                         |     
                                                                 |     while (r0 != fp) {
    0x0003e85e adds r2, 1                                        |         r2++;
    0x0003e860 cmp r2, ip                                        |         
                                                                 |         if (r2 == ip) {
    0x0003e862 beq 0x3e88e                                       |             goto label_34;
                                                                 |         }
    0x0003e864 ldr r0, [lr, 4]!                                  |         r0 = *((lr += 4));
    0x0003e868 cmp r0, fp                                        |         
    0x0003e86a bne 0x3e85e                                       |         
                                                                 |     }
    0x0003e86c mov.w lr, 1                                       |     lr = 1;
    0x0003e870 sub.w r0, r2, 0x20                                |     r0 = r2 - 0x20;
    0x0003e874 rsb.w ip, r2, 0x20                                |     
    0x0003e878 lsl.w r0, lr, r0                                  |     r0 = lr << r0;
    0x0003e87c lsr.w ip, lr, ip                                  |     
    0x0003e880 lsl.w r2, lr, r2                                  |     r2 = lr << r2;
    0x0003e884 orr.w r0, r0, ip                                  |     r0 |= ip;
    0x0003e888 orrs r3, r2                                       |     r3 |= r2;
    0x0003e88a orr.w sb, r0, sb                                  |     sb = r0 | sb;
                                                                 | label_34:
    0x0003e88e ands r6, r3                                       |     r6 &= r3;
    0x0003e890 and.w r8, sb, r8                                  |     r8 = sb & r8;
    0x0003e894 orrs.w r2, r6, r8                                 |     r2 = r6 | r8;
    0x0003e898 and r5, r5, 1                                     |     r5 &= 1;
    0x0003e89c itee ne                                           |     
                                                                 |     if (r2 == r6) {
    0x0003e89e movne r0, 1                                       |         r0 = 1;
                                                                 |     }
                                                                 |     if (r2 != r6) {
    0x0003e8a0 moveq r5, 0                                       |         r5 = 0;
                                                                 |     }
                                                                 |     if (r2 != r6) {
    0x0003e8a2 moveq r0, 0                                       |         r0 = 0;
                                                                 |     }
    0x0003e8a4 b 0x3e0da                                         |     goto label_14;
                                                                 | label_103:
    0x0003e8a6 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x0003e8a8 ldr r2, [r7, -0x2c]                               |     r2 = *((r7 - 0x2c));
    0x0003e8ac ldr r3, [r3, 0x14]                                |     r3 = *((r3 + 0x14));
    0x0003e8ae add.w r2, r2, r2, lsl 1                           |     r2 += (r2 << 1);
    0x0003e8b2 add.w r3, r3, r2, lsl 4                           |     r3 += (r2 << 4);
    0x0003e8b6 ldr.w fp, [r3, 8]                                 |     fp = *((r3 + 8));
    0x0003e8ba movs r3, 0                                        |     r3 = 0;
    0x0003e8bc mov sb, r3                                        |     sb = r3;
    0x0003e8be b 0x3e85a                                         |     goto label_28;
                                                                 | label_99:
    0x0003e8c0 mov.w r3, -1                                      |     r3 = -1;
    0x0003e8c4 b 0x3e386                                         |     goto label_29;
                                                                 | label_73:
    0x0003e8c6 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0003e8c8 ldrb.w r3, [r3, 0x40]                             |     r3 = *((r3 + 0x40));
    0x0003e8cc cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003e8ce bne.w 0x3e058                                     |         goto label_23;
                                                                 |     }
                                                                 | label_74:
    0x0003e8d2 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x0003e8d4 vmov.i8 d16, 0xff                                 |     __asm ("vmov.i8 d16, 0xff");
    0x0003e8d8 vstr d16, [r3, 0x198]                             |     __asm ("vstr d16, aav.0x000000ff");
    0x0003e8dc mov.w r3, 0x100                                   |     r3 = 0x100;
    0x0003e8e0 strh r3, [r4, 0x12]                               |     *((r4 + 0x12)) = r3;
    0x0003e8e2 b.w 0x3e058                                       |     goto label_23;
                                                                 | label_86:
    0x0003e8e6 ldr.w r3, [fp, 4]                                 |     r3 = *(arg_4h);
    0x0003e8ea ands r3, r3, 1                                    |     r3 &= 1;
                                                                 |     if (r3 != r3) {
    0x0003e8ee bne.w 0x3e158                                     |         goto label_30;
                                                                 |     }
    0x0003e8f2 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0003e8f4 ldrh r2, [r2, 0x3c]                               |     r2 = *((r2 + 0x3c));
    0x0003e8f6 lsls r2, r2, 0x16                                 |     r2 <<= 0x16;
    0x0003e8f8 itett pl                                          |     
                                                                 |     if (r2 >= r2) {
    0x0003e8fa ldrhpl r3, [r4, 0x12]                             |         __asm ("ldrhpl r3, [r4, 0x12]");
                                                                 |     }
                                                                 |     if (r2 < r2) {
    0x0003e8fc ldrdmi r8, r2, [sb, 0xc]                          |         __asm ("ldrdmi r8, r2, [sb, 0xc]");
                                                                 |     }
                                                                 |     if (r2 >= r2) {
    0x0003e900 ldrdpl r8, r2, [sb, 0xc]                          |         __asm ("ldrdpl r8, r2, [sb, 0xc]");
                                                                 |     }
                                                                 |     if (r2 >= r2) {
    0x0003e904 orr r3, r3, 0x400                                 |         r3 |= 0x400;
                                                                 |     }
    0x0003e908 iteee mi                                          |     
                                                                 |     if (r2 >= r2) {
    0x0003e90a strmi r3, [sp, 0x34]                              |         var_34h = r3;
                                                                 |     }
                                                                 |     if (r2 >= r2) {
    0x0003e90c strhpl r3, [r4, 0x12]                             |         __asm ("strhpl r3, [r4, 0x12]");
                                                                 |     }
                                                                 |     if (r2 < r2) {
    0x0003e90e movpl r3, 0x400                                   |         r3 = 0x400;
                                                                 |     }
                                                                 |     if (r2 >= r2) {
    0x0003e912 str r3, [sp, 0x34]                                |         var_34h = r3;
                                                                 |     }
    0x0003e914 b 0x3e160                                         |     goto label_16;
                                                                 | label_108:
    0x0003e916 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x0003e918 mov r1, r8                                        |     r1 = r8;
    0x0003e91a bl 0x22e78                                        |     fcn_00022e78 (r0, r1);
    0x0003e91e ldr.w r3, [sb, 0xc]                               |     r3 = *((sb + 0xc));
                                                                 |     if (r0 != 0) {
    0x0003e922 cbz r0, 0x3e92c                                   |         
    0x0003e924 ldr r2, [r3, 4]                                   |         r2 = *((r3 + 4));
    0x0003e926 orr r2, r2, 0x100                                 |         r2 |= 0x100;
    0x0003e92a str r2, [r3, 4]                                   |         *((r3 + 4)) = r2;
                                                                 |     }
    0x0003e92c ldr.w r2, [sb, 0x10]                              |     r2 = *((sb + 0x10));
    0x0003e930 strd r2, r3, [sb, 0xc]                            |     __asm ("strd r2, r3, [sb, 0xc]");
    0x0003e934 ldrb.w r3, [sb]                                   |     r3 = *(sb);
    0x0003e938 cmp r3, 0x4f                                      |     
                                                                 |     if (r3 < 0x4f) {
    0x0003e93a bls.w 0x3e18c                                     |         goto label_31;
                                                                 |     }
    0x0003e93e b 0x3e180                                         |     goto label_32;
                                                                 | label_81:
    0x0003e940 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0003e942 beq.w 0x3e4a2                                     |         goto label_33;
                                                                 |     }
    0x0003e946 mov sb, r3                                        |     sb = r3;
    0x0003e948 b 0x3e88e                                         |     goto label_34;
                                                                 | label_115:
    0x0003e94a ldr r0, [sp, 0x10]                                |     r0 = var_10h;
    0x0003e94c mov r1, r7                                        |     r1 = r7;
    0x0003e94e bl 0x12ec8                                        |     fcn_00012ec8 (r0);
    0x0003e952 b 0x3e83e                                         |     goto label_35;
                                                                 | label_97:
    0x0003e954 ldr r0, [sp, 0x30]                                |     r0 = var_30h;
    0x0003e956 bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x0003e95a b 0x3e318                                         |     goto label_36;
                                                                 | label_94:
    0x0003e95c ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0003e95e ldr.w r2, [r3, 0x1dc]                             |     r2 = *((r3 + 0x1dc));
    0x0003e962 ldrsh.w r3, [r5, 0x20]                            |     r3 = *((r5 + 0x20));
    0x0003e964 adds r0, 0x20                                     |     r0 += 0x20;
                                                                 |     if (r2 != 0) {
    0x0003e966 cbz r2, 0x3e980                                   |         
    0x0003e968 mov.w ip, 0x28                                    |         
    0x0003e96c mvn r1, 0x27                                      |         r1 = ~0x27;
    0x0003e970 ldr r0, [r2, 0x3c]                                |         r0 = *((r2 + 0x3c));
    0x0003e972 smlabb r1, r3, ip, r1                             |         __asm ("smlabb r1, r3, ip, r1");
    0x0003e976 adds r1, r0, r1                                   |         r1 = r0 + r1;
    0x0003e978 str r1, [sp, 0x2c]                                |         var_2ch = r1;
    0x0003e97a ldrh r1, [r1, 0x1c]                               |         r1 = *((r1 + 0x1c));
    0x0003e97c lsls r1, r1, 0x1f                                 |         r1 <<= 0x1f;
                                                                 |         if (r1 >= r1) {
    0x0003e97e bpl 0x3ea0e                                       |             goto label_116;
                                                                 |         }
                                                                 |     }
                                                                 | label_40:
    0x0003e980 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x0003e982 cmp r3, 0x20                                      |     
    0x0003e984 ldr r2, [r2, 8]                                   |     r2 = *((r2 + 8));
                                                                 |     if (r3 > 0x20) {
    0x0003e986 bgt.w 0x3eaaa                                     |         goto label_117;
                                                                 |     }
    0x0003e98a subs r0, r3, 1                                    |     r0 = r3 - 1;
    0x0003e98c movs r1, 1                                        |     r1 = 1;
    0x0003e98e ldr.w r3, [r2, 0xbc]                              |     r3 = *((r2 + 0xbc));
    0x0003e992 lsls r1, r0                                       |     r1 <<= r0;
    0x0003e994 orrs r3, r1                                       |     r3 |= r1;
    0x0003e996 str.w r3, [r2, 0xbc]                              |     __asm ("str.w r3, [r2, 0xbc]");
    0x0003e998 adds r0, 0xbc                                     |     r0 += 0xbc;
    0x0003e99a b.w 0x3dec2                                       |     goto label_11;
                                                                 | label_96:
    0x0003e99e ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x0003e9a0 add r2, r8                                        |     r2 += r8;
    0x0003e9a2 ldrb r1, [r2, -0x1]                               |     r1 = *((r2 - 0x1));
    0x0003e9a6 cmp r1, 0xff                                      |     
                                                                 |     if (r1 == 0xff) {
    0x0003e9a8 beq.w 0x3e2f8                                     |         goto label_37;
                                                                 |     }
    0x0003e9ac cmp r7, r3                                        |     
    0x0003e9ae ite eq                                            |     
                                                                 |     if (r7 != r3) {
    0x0003e9b0 ldrbeq r3, [r2, 1]                                |         r3 = *((r2 + 1));
                                                                 |     }
                                                                 |     if (r7 == r3) {
    0x0003e9b2 movne sb, 0                                       |         sb = 0;
                                                                 |     }
    0x0003e9b6 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x0003e9b8 it eq                                             |     
                                                                 |     if (r7 == r3) {
    0x0003e9ba clzeq sb, r3                                      |         __asm ("clzeq sb, r3");
                                                                 |     }
    0x0003e9be str r2, [sp, 0x4c]                                |     var_4ch = r2;
    0x0003e9c0 it eq                                             |     
                                                                 |     if (r7 != r3) {
    0x0003e9c2 lsreq sb, sb, 5                                   |         sb >>= 5;
                                                                 |     }
    0x0003e9c6 ldrb r3, [r2]                                     |     r3 = *(r2);
    0x0003e9c8 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0003e9ca beq.w 0x3ebaa                                     |         goto label_118;
                                                                 |     }
    0x0003e9ce mov r3, r2                                        |     r3 = r2;
                                                                 |     do {
    0x0003e9d0 ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x0003e9d4 cmp r2, 0                                         |         
    0x0003e9d6 bne 0x3e9d0                                       |         
                                                                 |     } while (r2 != 0);
                                                                 | label_45:
    0x0003e9d8 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x0003e9da mov r0, r6                                        |     r0 = r6;
    0x0003e9dc movs r1, 0x61                                     |     r1 = 0x61;
    0x0003e9de subs r3, r3, r2                                   |     r3 -= r2;
    0x0003e9e0 add r2, sp, 0x4c                                  |     r2 += var_4ch;
    0x0003e9e2 bic r3, r3, 0xc0000000                            |     r3 = BIT_MASK (r3, 0xc0000000);
    0x0003e9e6 str r3, [sp, 0x50]                                |     var_50h = r3;
    0x0003e9e8 movs r3, 0                                        |     r3 = 0;
    0x0003e9ea bl 0xd7ac                                         |     r0 = fcn_0000d7ac (r0, r1, r2, r3);
    0x0003e9ee mov r7, r0                                        |     r7 = r0;
                                                                 |     if (r0 != 0) {
    0x0003e9f0 cbz r0, 0x3e9fa                                   |         
    0x0003e9f2 ldr r3, [r0, 8]                                   |         r3 = *((r0 + 8));
    0x0003e9f4 movs r2, 0                                        |         r2 = 0;
    0x0003e9f6 strb.w r2, [r3, r8]                               |         *((r3 + r8)) = r2;
                                                                 |     }
    0x0003e9fa ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x0003e9fc cmp r3, 0x87                                      |     
                                                                 |     if (r3 == 0x87) {
    0x0003e9fe beq 0x3eaba                                       |         goto label_119;
                                                                 |     }
                                                                 | label_42:
    0x0003ea00 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x0003ea02 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003ea04 bne.w 0x3e30a                                     |         goto label_38;
                                                                 |     }
    0x0003ea08 b 0x3e33e                                         |     goto label_39;
                                                                 | label_49:
    0x0003ea0a blx 0x6498                                        |     fcn_00006498 ();
                                                                 | label_116:
    0x0003ea0e ldr.w r8, [r2]                                    |     r8 = *(r2);
    0x0003ea12 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x0003ea16 beq 0x3ea50                                       |         goto label_120;
                                                                 |     }
    0x0003ea18 ldrb.w r2, [r8, 0x40]                             |     r2 = *((r8 + 0x40));
    0x0003ea1c cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0003ea1e bne 0x3e980                                       |         goto label_40;
                                                                 |     }
    0x0003ea20 ldrb.w r2, [r8, 0xf2]                             |     r2 = *((r8 + 0xf2));
                                                                 |     if (r2 != 0) {
    0x0003ea24 cbz r2, 0x3ea3a                                   |         
    0x0003ea26 ldrh.w r2, [r8, 0xf0]                             |         r2 = *((r8 + 0xf0));
    0x0003ea2a cmp r2, 0x27                                      |         
                                                                 |         if (r2 > 0x27) {
    0x0003ea2c bhi.w 0x3eb76                                     |             goto label_121;
                                                                 |         }
    0x0003ea30 ldr.w r2, [r8, 0x100]                             |         r2 = *((r8 + 0x100));
    0x0003ea34 adds r2, 1                                        |         r2++;
    0x0003ea36 str.w r2, [r8, 0x100]                             |         __asm ("str.w r2, aav.0x000000ff");
                                                                 |     }
                                                                 | label_48:
    0x0003ea3a movs r0, 0x28                                     |     r0 = 0x28;
    0x0003ea3c str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x0003ea3e bl 0xd300                                         |     fcn_0000d300 (r0, r1, r2, r3, r4);
    0x0003ea40 invalid                                           |     
    0x0003ea44 str r0, [sp, 0x30]                                |     var_30h = r0;
                                                                 |     if (r0 != 0) {
    0x0003ea46 cbnz r0, 0x3ea60                                  |         goto label_44;
                                                                 |     }
    0x0003ea48 movs r2, 1                                        |     r2 = 1;
    0x0003ea4a strb.w r2, [r8, 0x40]                             |     *((r8 + 0x40)) = r2;
    0x0003ea4e b 0x3e980                                         |     goto label_40;
                                                                 | label_120:
    0x0003ea50 mov r0, ip                                        |     r0 = ip;
    0x0003ea52 str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x0003ea54 bl 0xd300                                         |     fcn_0000d300 (r0, r1, r2, r3, r4);
    0x0003ea58 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x0003ea5a str r0, [sp, 0x30]                                |     var_30h = r0;
    0x0003ea5c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0003ea5e beq 0x3e980                                       |         goto label_40;
                                                                 |     }
                                                                 | label_44:
    0x0003ea60 str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x0003ea62 movs r2, 0x24                                     |     r2 = 0x24;
    0x0003ea64 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x0003ea66 movs r1, 0                                        |     r1 = 0;
    0x0003ea68 adds r0, r3, 4                                    |     r0 = r3 + 4;
    0x0003ea6a blx 0x5fcc                                        |     fcn_00005fcc ();
    0x0003ea6e ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x0003ea70 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x0003ea72 str.w r8, [r3]                                    |     __asm ("str.w r8, [r3]");
    0x0003ea76 mov.w r8, 1                                       |     r8 = 1;
    0x0003ea7a mov r0, r3                                        |     r0 = r3;
    0x0003ea7c strh.w r8, [r3, 0x1c]                             |     *((r3 + 0x1c)) = r8;
    0x0003ea80 bl 0x17888                                        |     fcn_00017888 (r0, r1);
    0x0003ea84 ldr r0, [sp, 0x30]                                |     r0 = var_30h;
    0x0003ea86 blx 0x661c                                        |     r0 = fcn_0000661c ();
    0x0003ea8a cmp r0, 3                                         |     
    0x0003ea8c ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
                                                                 |     if (r0 == 3) {
    0x0003ea8e beq 0x3eb46                                       |         goto label_122;
                                                                 |     }
    0x0003ea90 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x0003ea92 cmp r3, 0x20                                      |     
    0x0003ea94 ldr r2, [r2, 8]                                   |     r2 = *((r2 + 8));
                                                                 |     if (r3 > 0x20) {
    0x0003ea96 bgt 0x3eb30                                       |         goto label_123;
                                                                 |     }
    0x0003ea98 subs r1, r3, 1                                    |     r1 = r3 - 1;
    0x0003ea9a ldr.w r3, [r2, 0xbc]                              |     r3 = *((r2 + 0xbc));
    0x0003ea9e lsl.w r1, r8, r1                                  |     r1 = r8 << r1;
    0x0003eaa2 orrs r3, r1                                       |     r3 |= r1;
    0x0003eaa4 str.w r3, [r2, 0xbc]                              |     __asm ("str.w r3, [r2, 0xbc]");
    0x0003eaa8 b 0x3e300                                         |     goto label_41;
                                                                 | label_117:
    0x0003eaaa mov.w r3, -1                                      |     r3 = -1;
    0x0003eaae str.w r3, [r2, 0xbc]                              |     __asm ("str.w r3, [r2, 0xbc]");
    0x0003eab2 ldrb.w sb, [fp]                                   |     sb = *(fp);
    0x0003eab6 b.w 0x3dc94                                       |     goto label_9;
                                                                 | label_119:
    0x0003eaba ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x0003eabc ldrsh.w r3, [r5, 0x20]                            |     r3 = *((r5 + 0x20));
    0x0003eac0 ldr r6, [r2, 8]                                   |     r6 = *((r2 + 8));
    0x0003eac2 cmp r3, 0x20                                      |     
    0x0003eac4 itttt le                                          |     
                                                                 |     if (r3 > 0x20) {
    0x0003eac6 addle r1, r3, -1                                  |         r1 = r3 + -1;
                                                                 |     }
                                                                 |     if (r3 > 0x20) {
    0x0003eaca movle r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r3 > 0x20) {
    0x0003eacc ldrle r2, [r6, 0xbc]                              |         r2 = *((r6 + 0xbc));
                                                                 |     }
                                                                 |     if (r3 <= 0x20) {
    0x0003ead0 lsls r3, r1                                       |         r3 <<= r1;
                                                                 |     }
    0x0003ead2 ite gt                                            |     
                                                                 |     if (r3 <= r1) {
    0x0003ead4 movgt r3, -1                                      |         r3 = -1;
                                                                 |     }
                                                                 |     if (r3 <= r1) {
    0x0003ead8 orrs r3, r2                                       |         r3 |= r2;
                                                                 |     }
    0x0003eada str.w r3, [r6, 0xbc]                              |     __asm ("str.w r3, [r6, 0xbc]");
    0x0003eade cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x0003eae2 beq 0x3ea00                                       |         goto label_42;
                                                                 |     }
    0x0003eae4 ldr r3, [r5, 8]                                   |     r3 = *((r5 + 8));
    0x0003eae6 ldrb r3, [r3, 1]                                  |     r3 = *((r3 + 1));
    0x0003eae8 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0003eaea beq 0x3ea00                                       |         goto label_42;
                                                                 |     }
    0x0003eaec ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0003eaee ldrb r3, [r3, 0x13]                               |     r3 = *((r3 + 0x13));
    0x0003eaf0 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0003eaf2 beq 0x3ebdc                                       |         goto label_124;
                                                                 |     }
    0x0003eaf4 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x0003eaf6 subs r3, 1                                        |     r3--;
    0x0003eaf8 uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x0003eafa strb r3, [r2, 0x13]                               |     *((r2 + 0x13)) = r3;
    0x0003eafc adds r3, 6                                        |     r3 += 6;
    0x0003eafe ldr.w r8, [r2, r3, lsl 2]                         |     offset_1 = r3 << 2;
                                                                 |     r8 = *((r2 + offset_1));
                                                                 | label_47:
    0x0003eb02 mov r2, r8                                        |     r2 = r8;
    0x0003eb04 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x0003eb06 mov r1, r5                                        |     r1 = r5;
    0x0003eb08 bl 0x3b6f0                                        |     fcn_0003b6f0 (r0, r1, r2);
    0x0003eb0c ldr r3, [r6, 0x20]                                |     r3 = *((r6 + 0x20));
    0x0003eb0e subs r2, r3, 1                                    |     r2 = r3 - 1;
                                                                 |     if (r3 != 0) {
    0x0003eb10 cbz r3, 0x3eb1e                                   |         
    0x0003eb12 ldr r3, [r6, 4]                                   |         r3 = *((r6 + 4));
    0x0003eb14 movs r1, 0x14                                     |         r1 = 0x14;
    0x0003eb16 mla r3, r1, r2, r3                                |         __asm ("mla r3, r1, r2, r3");
    0x0003eb1a movs r2, 0                                        |         r2 = 0;
    0x0003eb1c str r2, [r3, 0xc]                                 |         *((r3 + 0xc)) = r2;
                                                                 |     }
    0x0003eb1e cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x0003eb22 beq.w 0x3ea00                                     |         goto label_42;
                                                                 |     }
    0x0003eb26 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x0003eb28 mov r1, r8                                        |     r1 = r8;
    0x0003eb2a bl 0xa4e8                                         |     fcn_0000a4e8 (r0, r1);
    0x0003eb2e b 0x3ea00                                         |     goto label_42;
                                                                 | label_123:
    0x0003eb30 mov.w sb, 0                                       |     sb = 0;
    0x0003eb34 mov.w r3, -1                                      |     r3 = -1;
    0x0003eb38 mov r7, sb                                        |     r7 = sb;
    0x0003eb3a str.w r3, [r2, 0xbc]                              |     __asm ("str.w r3, [r2, 0xbc]");
    0x0003eb3e str.w sb, [sp, 0x2c]                              |     __asm ("str.w sb, [var_2ch]");
    0x0003eb42 b.w 0x3e30a                                       |     goto label_38;
                                                                 | label_122:
    0x0003eb46 ldr r0, [sp, 0x30]                                |     r0 = var_30h;
    0x0003eb48 str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x0003eb4a blx 0x5f0c                                        |     fcn_00005f0c ();
    0x0003eb4e ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0003eb50 str r0, [sp, 0x2c]                                |     var_2ch = r0;
    0x0003eb52 ldr r2, [r3, 8]                                   |     r2 = *((r3 + 8));
    0x0003eb54 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x0003eb56 cmp r3, 0x20                                      |     
                                                                 |     if (r3 <= 0x20) {
    0x0003eb58 ble 0x3ebbc                                       |         goto label_125;
                                                                 |     }
    0x0003eb5a mov.w r3, -1                                      |     r3 = -1;
    0x0003eb5e str.w r3, [r2, 0xbc]                              |     __asm ("str.w r3, [r2, 0xbc]");
    0x0003eb62 mov r3, r0                                        |     r3 = r0;
    0x0003eb64 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0003eb66 beq 0x3ebd4                                       |         goto label_126;
                                                                 |     }
                                                                 | label_46:
    0x0003eb68 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0003eb6a ldrb r3, [r3]                                     |     r3 = *(r3);
    0x0003eb6c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003eb6e bne.w 0x3e2cc                                     |         goto label_43;
                                                                 |     }
    0x0003eb72 b.w 0x3e300                                       |     goto label_41;
                                                                 | label_121:
    0x0003eb76 ldr.w r2, [r8, 0x108]                             |     r2 = *((r8 + 0x108));
    0x0003eb7a str r2, [sp, 0x30]                                |     var_30h = r2;
                                                                 |     if (r2 == 0) {
    0x0003eb7c cbz r2, 0x3ebea                                   |         goto label_127;
                                                                 |     }
    0x0003eb7e ldr.w r1, [r8, 0xfc]                              |     r1 = *((r8 + 0xfc));
    0x0003eb82 ldr r0, [sp, 0x30]                                |     r0 = var_30h;
    0x0003eb84 ldr.w r2, [r8, 0xf4]                              |     r2 = *((r8 + 0xf4));
    0x0003eb88 adds r1, 1                                        |     r1++;
    0x0003eb8a ldr r0, [r0]                                      |     r0 = *(r0);
    0x0003eb8c str.w r1, [r8, 0xfc]                              |     __asm ("str.w r1, [r8, 0xfc]");
    0x0003eb90 adds r2, 1                                        |     r2++;
    0x0003eb92 ldr.w r1, [r8, 0xf8]                              |     r1 = *((r8 + 0xf8));
    0x0003eb96 str.w r0, [r8, 0x108]                             |     __asm ("str.w r0, aav.0x000000ff");
    0x0003eb9a str.w r2, [r8, 0xf4]                              |     __asm ("str.w r2, [r8, 0xf4]");
    0x0003eb9e cmp r2, r1                                        |     
                                                                 |     if (r2 <= r1) {
    0x0003eba0 ble.w 0x3ea60                                     |         goto label_44;
                                                                 |     }
    0x0003eba4 str.w r2, [r8, 0xf8]                              |     __asm ("str.w r2, [r8, 0xf8]");
    0x0003eba8 b 0x3ea60                                         |     goto label_44;
                                                                 | label_118:
    0x0003ebaa ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0003ebac b 0x3e9d8                                         |     goto label_45;
                                                                 | label_71:
    0x0003ebae ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x0003ebb0 ldrb r3, [r3, 8]                                  |     r3 = *((r3 + 8));
    0x0003ebb2 cmp r3, 0x48                                      |     
                                                                 |     if (r3 != 0x48) {
    0x0003ebb4 bne.w 0x3dc94                                     |         goto label_9;
                                                                 |     }
    0x0003ebb8 b.w 0x3dda0                                       |     goto label_7;
                                                                 | label_125:
    0x0003ebbc subs r3, 1                                        |     r3--;
    0x0003ebbe lsl.w r8, r8, r3                                  |     r8 <<= r3;
    0x0003ebc2 ldr.w r3, [r2, 0xbc]                              |     r3 = *((r2 + 0xbc));
    0x0003ebc6 orr.w r3, r3, r8                                  |     r3 |= r8;
    0x0003ebca str.w r3, [r2, 0xbc]                              |     __asm ("str.w r3, [r2, 0xbc]");
    0x0003ebce ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0003ebd0 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003ebd2 bne 0x3eb68                                       |         goto label_46;
                                                                 |     }
                                                                 | label_126:
    0x0003ebd4 mov sb, r3                                        |     sb = r3;
    0x0003ebd6 mov r7, r3                                        |     r7 = r3;
    0x0003ebd8 b.w 0x3e30a                                       |     goto label_38;
                                                                 | label_124:
    0x0003ebdc ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x0003ebde ldr r3, [r2, 0x48]                                |     r3 = *((r2 + 0x48));
    0x0003ebe0 add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x0003ebe4 str.w r8, [r2, 0x48]                              |     __asm ("str.w r8, [r2, 0x48]");
    0x0003ebe8 b 0x3eb02                                         |     goto label_47;
                                                                 | label_127:
    0x0003ebea ldr.w r2, [r8, 0x104]                             |     r2 = *((r8 + 0x104));
    0x0003ebee adds r2, 1                                        |     r2++;
    0x0003ebf0 str.w r2, [r8, 0x104]                             |     __asm ("str.w r2, aav.0x000000ff");
    0x0003ebf4 b 0x3ea3a                                         |     goto label_48;
                                                                 | label_93:
    0x0003ebf6 movs r3, 0                                        |     r3 = 0;
    0x0003ebf8 ldrb r3, [r3]                                     |     r3 = *(r3);
    0x0003ebfa udf 0xff                                          |     __asm ("udf 0xff");
                                                                 | label_89:
    0x0003ebfc movs r3, 0                                        |     r3 = 0;
    0x0003ebfe ldr r3, [r3, 0x1c]                                |     r3 = *((r3 + 0x1c));
    0x0003ec00 udf 0xff                                          |     __asm ("udf 0xff");
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x3ec04 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.0003ec04 ()                                      | void fcn_0003ec04 (int16_t arg_0h, int16_t arg_4h, int16_t arg_14h, int16_t arg_20h, int16_t arg_22h, int16_t arg_24h, int16_t arg_27h, int16_t arg_28h, int16_t arg_29h, int16_t arg_44h, int16_t arg_148h, int16_t arg_2e4h, int16_t arg_318h, 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_3eh;
                                                                 |     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;
                                                                 |     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_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;
                                                                 |     int32_t var_c8h;
                                                                 |     int32_t var_c8h_2;
                                                                 |     int16_t var_d0h;
                                                                 |     int16_t var_d4h;
                                                                 |     int16_t var_d8h;
                                                                 |     int16_t var_dch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x0003ec04 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x0003ec08 mov r6, r2                                        |     r6 = r2;
    0x0003ec0a vpush {d8}                                        |     __asm ("vpush {d8}");
    0x0003ec0e sub sp, 0xe4                                      |     
    0x0003ec10 str r1, [sp, 0x2c]                                |     var_2ch = r1;
    0x0003ec12 ldr.w r1, [pc, 0xa3c]                             |     
    0x0003ec16 ldr.w r2, [pc, 0xa3c]                             |     r2 = *(0x3f656);
    0x0003ec1a str r0, [sp, 0x14]                                |     var_14h = r0;
    0x0003ec1c add r1, pc                                        |     r1 = 0x7e272;
    0x0003ec1e ldr.w sb, [sp, 0x110]                             |     sb = *(arg_110h);
    0x0003ec22 ldr r2, [r1, r2]                                  |     
    0x0003ec24 add r1, sp, 0xac                                  |     r1 += var_ach;
    0x0003ec26 ldr r2, [r2]                                      |     r2 = *(0x7e272);
    0x0003ec28 str r2, [sp, 0xdc]                                |     var_dch = r2;
    0x0003ec2a mov.w r2, 0                                       |     r2 = 0;
    0x0003ec2e str r1, [sp, 0x30]                                |     var_30h = r1;
    0x0003ec30 ldrh.w r1, [sp, 0x114]                            |     r1 = *(arg_114h);
    0x0003ec34 movs r2, 0                                        |     r2 = 0;
    0x0003ec36 strd r2, r2, [sp, 0xac]                           |     __asm ("strd r2, r2, [var_ach]");
    0x0003ec3a strd r2, r2, [sp, 0xb4]                           |     __asm ("strd r2, r2, [var_b4h]");
    0x0003ec3e str r2, [sp, 0xbc]                                |     var_bch = r2;
    0x0003ec40 str r1, [sp, 0x4c]                                |     var_4ch = r1;
    0x0003ec42 ldr r2, [r0]                                      |     r2 = *(r0);
    0x0003ec44 ldr r1, [r0, 8]                                   |     r1 = *((r0 + 8));
    0x0003ec46 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x0003ec48 str r2, [sp, 0x40]                                |     var_40h = r2;
    0x0003ec4a str r1, [sp, 0x48]                                |     var_48h = r1;
                                                                 |     if (r3 != 0) {
    0x0003ec4c cbz r3, 0x3ec5c                                   |         
    0x0003ec4e mov r2, r3                                        |         r2 = r3;
    0x0003ec50 ldr r3, [r3]                                      |         r3 = *(r3);
    0x0003ec52 cmp r3, 0x40                                      |         
    0x0003ec54 ite lt                                            |         
                                                                 |         if (r3 >= 0x40) {
    0x0003ec56 movlt r3, r2                                      |             r3 = r2;
                                                                 |         }
                                                                 |         if (r3 < 0x40) {
    0x0003ec58 movge r3, 0                                       |             r3 = 0;
                                                                 |         }
    0x0003ec5a str r3, [sp, 0x18]                                |         var_18h = r3;
                                                                 |     }
    0x0003ec5c ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0003ec5e str r3, [sp, 0xb4]                                |     var_b4h = r3;
    0x0003ec60 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0003ec62 ldrh r3, [r3, 0x3c]                               |     r3 = *((r3 + 0x3c));
    0x0003ec64 lsls r2, r3, 0x1a                                 |     r2 = r3 << 0x1a;
                                                                 |     if (r2 < r3) {
    0x0003ec66 bpl 0x3ec74                                       |         
    0x0003ec68 ldr r3, [sp, 0x4c]                                |         r3 = var_4ch;
    0x0003ec6a bic r3, r3, 0x400                                 |         r3 = BIT_MASK (r3, 0x400);
    0x0003ec6e lsls r3, r3, 0x10                                 |         r3 <<= 0x10;
    0x0003ec70 lsrs r3, r3, 0x10                                 |         r3 >>= 0x10;
    0x0003ec72 str r3, [sp, 0x4c]                                |         var_4ch = r3;
                                                                 |     }
    0x0003ec74 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0003ec76 ldr r3, [r3]                                      |     r3 = *(r3);
    0x0003ec78 cmp r3, 0x40                                      |     
    0x0003ec7a str r3, [sp, 0x3c]                                |     var_3ch = r3;
                                                                 |     if (r3 > 0x40) {
    0x0003ec7c bgt.w 0x4070a                                     |         goto label_110;
                                                                 |     }
    0x0003ec80 ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x0003ec82 ands r3, r3, 0x40                                 |     r3 &= 0x40;
    0x0003ec86 str r3, [sp, 0x38]                                |     var_38h = r3;
                                                                 |     if (r3 == r3) {
    0x0003ec88 beq.w 0x3ef40                                     |         goto label_111;
                                                                 |     }
    0x0003ec8c mov.w r1, 0x370                                   |     r1 = 0x370;
    0x0003ec90 mov.w r5, 0x328                                   |     r5 = 0x328;
    0x0003ec94 movs r3, 1                                        |     r3 = 1;
    0x0003ec96 str r3, [sp, 0x3c]                                |     var_3ch = r3;
                                                                 | label_0:
    0x0003ec98 ldr r4, [sp, 0x40]                                |     r4 = var_40h;
    0x0003ec9a mov r0, r4                                        |     r0 = r4;
    0x0003ec9c bl 0xdb58                                         |     fcn_0000db58 (r0, r1);
    0x0003eca0 ldrb.w r4, [r4, 0x40]                             |     r4 = *((r4 + 0x40));
    0x0003eca4 str r0, [sp, 0x10]                                |     var_10h = r0;
    0x0003eca6 cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x0003eca8 bne.w 0x405c4                                     |         goto label_112;
                                                                 |     }
    0x0003ecac ldr r7, [sp, 0x10]                                |     r7 = var_10h;
    0x0003ecae ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x0003ecb0 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x0003ecb2 ldr r2, [sp, 0x48]                                |     r2 = var_48h;
    0x0003ecb4 add r5, r7                                        |     r5 += r7;
    0x0003ecb6 strb.w r3, [r7, 0x29]                             |     *((r7 + 0x29)) = r3;
    0x0003ecba ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0003ecbc str r1, [r7, 4]                                   |     *((r7 + 4)) = r1;
    0x0003ecbe ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x0003ecc0 str r3, [r7]                                      |     *(r7) = r3;
    0x0003ecc2 mov.w r3, -1                                      |     r3 = -1;
    0x0003ecc6 ldr r0, [r2, 0x18]                                |     r0 = *((r2 + 0x18));
    0x0003ecc8 strd r1, sb, [r7, 8]                              |     __asm ("strd r1, sb, [r7, 8]");
    0x0003eccc strd r3, r3, [r7, 0x3c]                           |     __asm ("strd r3, r3, [r7, 0x3c]");
    0x0003ecd0 bl 0x19ed0                                        |     fcn_00019ed0 (r0);
    0x0003ecd4 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0003ecd6 movs r2, 0x48                                     |     r2 = 0x48;
    0x0003ecd8 ldr r1, [sp, 0x4c]                                |     r1 = var_4ch;
    0x0003ecda strd r0, r0, [r7, 0x30]                           |     __asm ("strd r0, r0, [r7, 0x30]");
    0x0003ecde add.w r0, r7, 0x148                               |     r0 = r7 + 0x148;
    0x0003ece2 ldr.w r3, [r3, 0x1a8]                             |     r3 = *((r3 + 0x1a8));
    0x0003ece6 strh r1, [r7, 0x22]                               |     *((r7 + 0x22)) = r1;
    0x0003ece8 mov r1, r6                                        |     r1 = r6;
    0x0003ecea str r7, [sp, 0xac]                                |     var_ach = r7;
    0x0003ecec str r3, [r7, 0x38]                                |     *((r7 + 0x38)) = r3;
    0x0003ecee add.w r3, r5, 0x34                                |     r3 = r5 + 0x34;
    0x0003ecf2 str r3, [r5, 0x2c]                                |     *((r5 + 0x2c)) = r3;
    0x0003ecf4 mov.w r3, 0x40000                                 |     r3 = 0x40000;
    0x0003ecf8 str r3, [r5, 0x28]                                |     *((r5 + 0x28)) = r3;
    0x0003ecfa movs r3, 8                                        |     r3 = 8;
    0x0003ecfc str r4, [r5, 0x24]                                |     *((r5 + 0x24)) = r4;
    0x0003ecfe str.w r3, [r7, 0x158]                             |     __asm ("str.w r3, aav.0x000000ff");
    0x0003ed02 add.w r3, r7, 0x160                               |     r3 = r7 + 0x160;
    0x0003ed06 str.w r3, [r7, 0x15c]                             |     __asm ("str.w r3, aav.0x000000ff");
    0x0003ed0a str r4, [r7, 0x44]                                |     *((r7 + 0x44)) = r4;
    0x0003ed0c strd r7, r4, [r7, 0x148]                          |     __asm ("strd r7, r4, aav.0x000000ff");
    0x0003ed10 str.w r4, [r7, 0x154]                             |     __asm ("str.w r4, aav.0x000000ff");
    0x0003ed14 str r5, [sp, 0xb8]                                |     var_b8h = r5;
    0x0003ed16 str r0, [sp, 0x58]                                |     var_58h = r0;
    0x0003ed18 str r0, [sp, 0xb0]                                |     var_b0h = r0;
    0x0003ed1a bl 0x133ec                                        |     fcn_000133ec (r0, r1, r2, r3, r4);
    0x0003ed1e ldr r3, [sp, 0xb0]                                |     r3 = var_b0h;
    0x0003ed20 ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
    0x0003ed22 cmp r2, 0                                         |     
                                                                 |     if (r2 <= 0) {
    0x0003ed24 ble 0x3ed8a                                       |         goto label_113;
                                                                 |     }
    0x0003ed26 ldr.w r6, [pc, 0x930]                             |     r6 = *(0x0003f658);
    0x0003ed2a mov r5, r4                                        |     r5 = r4;
    0x0003ed2c ldr.w r7, [pc, 0x92c]                             |     r7 = *(0x0003f65c);
    0x0003ed30 ldrd r8, sl, [sp, 0x10]                           |     __asm ("ldrd r8, sl, [var_14h]");
    0x0003ed34 add r6, pc                                        |     r6 += pc;
    0x0003ed36 mov fp, r6                                        |     
    0x0003ed38 ldr r6, [sp, 0x3c]                                |     r6 = var_3ch;
    0x0003ed3a add r7, pc                                        |     r7 += pc;
                                                                 |     do {
                                                                 |         if (r6 != 0) {
    0x0003ed3c cbz r6, 0x3ed62                                   |             
    0x0003ed3e ldr r3, [r3, 0x14]                                |             r3 = *((r3 + 0x14));
    0x0003ed40 add r0, sp, 0xc0                                  |             r0 += var_c0h;
    0x0003ed42 ldr r1, [r3, r4]                                  |             r1 = *((r3 + r4));
    0x0003ed44 movs r3, 0                                        |             r3 = 0;
    0x0003ed46 strd r3, r3, [sp, 0xc8]                           |             __asm ("strd r3, r3, [var_c8h]");
    0x0003ed4a str r3, [sp, 0xd0]                                |             var_d0h = r3;
    0x0003ed4c movs r3, 3                                        |             r3 = 3;
    0x0003ed4e str r3, [sp, 0xd4]                                |             var_d4h = r3;
    0x0003ed50 strd r7, fp, [sp, 0xc0]                           |             __asm ("strd r7, fp, [var_0hxc0]");
    0x0003ed54 bl 0xc6b0                                         |             fcn_0000c6b0 (r0, r1);
    0x0003ed58 ldr r3, [sp, 0xd4]                                |             r3 = var_d4h;
    0x0003ed5a cmp r3, 0                                         |             
                                                                 |             if (r3 == 0) {
    0x0003ed5c beq.w 0x3ef96                                     |                 goto label_114;
                                                                 |             }
    0x0003ed60 ldr r3, [sp, 0xb0]                                |             r3 = var_b0h;
                                                                 |         }
    0x0003ed62 ldr r3, [r3, 0x14]                                |         r3 = *((r3 + 0x14));
    0x0003ed64 mov r0, sl                                        |         r0 = sl;
    0x0003ed66 ldr.w r2, [r8, 0x34]                              |         r2 = *((r8 + 0x34));
    0x0003ed68 movs r0, 0x34                                     |         r0 = 0x34;
    0x0003ed6a ldr r1, [r3, r4]                                  |         r1 = *((r3 + r4));
    0x0003ed6c movs r3, 8                                        |         r3 = 8;
    0x0003ed6e bl 0x3cee8                                        |         fcn_0003cee8 (r0, r1, r2, r3, r4, r5);
    0x0003ed72 ldr r3, [sp, 0xb0]                                |         r3 = var_b0h;
    0x0003ed74 ldr r2, [r3, 0x14]                                |         r2 = *((r3 + 0x14));
    0x0003ed76 add r2, r4                                        |         r2 += r4;
    0x0003ed78 ldrb r1, [r2, 0x14]                               |         r1 = *((r2 + 0x14));
    0x0003ed7a orr r1, r1, 4                                     |         r1 |= 4;
    0x0003ed7e strb r1, [r2, 0x14]                               |         *((r2 + 0x14)) = r1;
                                                                 | label_4:
    0x0003ed80 ldr r2, [r3, 0xc]                                 |         r2 = *((r3 + 0xc));
    0x0003ed82 adds r5, 1                                        |         r5++;
    0x0003ed84 adds r4, 0x30                                     |         r4 += 0x30;
    0x0003ed86 cmp r2, r5                                        |         
    0x0003ed88 bgt 0x3ed3c                                       |         
                                                                 |     } while (r2 > r5);
                                                                 | label_113:
    0x0003ed8a ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
                                                                 |     if (r3 == 0) {
    0x0003ed8c cbnz r3, 0x3eda2                                  |         
    0x0003ed8e ldr r3, [sp, 0x18]                                |         r3 = var_18h;
                                                                 |         if (r3 != 0) {
    0x0003ed90 cbz r3, 0x3ed9a                                   |             
    0x0003ed92 ldr r3, [r3]                                      |             r3 = *(r3);
    0x0003ed94 ldr r2, [sp, 0x10]                                |             r2 = var_10h;
    0x0003ed96 strb.w r3, [r2, 0x24]                             |             *((r2 + 0x24)) = r3;
                                                                 |         }
    0x0003ed9a ldr r3, [sp, 0x4c]                                |         r3 = var_4ch;
    0x0003ed9c lsls r3, r3, 0x15                                 |         r3 <<= 0x15;
                                                                 |         if (r3 < r3) {
    0x0003ed9e bmi.w 0x3f5c4                                     |             goto label_115;
                                                                 |         }
                                                                 |     }
                                                                 | label_15:
    0x0003eda2 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0003eda4 ldr r4, [r3]                                      |     r4 = *(r3);
    0x0003eda6 cmp r4, 0                                         |     
                                                                 |     if (r4 <= 0) {
    0x0003eda8 ble 0x3edd4                                       |         goto label_116;
                                                                 |     }
    0x0003edaa ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0003edac add.w r1, r4, r4, lsl 3                           |     r1 = r4 + (r4 << 3);
    0x0003edb0 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0003edb2 movs r3, 0                                        |     r3 = 0;
    0x0003edb4 lsls r1, r1, 1                                    |     r1 <<= 1;
    0x0003edb6 ldr r5, [r2, 0x44]                                |     r5 = *((r2 + 0x44));
    0x0003edb8 adds r0, 0x30                                     |     r0 += 0x30;
    0x0003edba add.w r2, r2, r5, lsl 2                           |     r2 += (r5 << 2);
    0x0003edbe adds r2, 0x44                                     |     r2 += 0x44;
                                                                 |     do {
    0x0003edc0 ldr.w r6, [r0, r3, lsl 2]                         |         offset_0 = r3 << 2;
                                                                 |         r6 = *((r0 + offset_0));
    0x0003edc4 adds r3, 0x12                                     |         r3 += 0x12;
    0x0003edc6 cmp r1, r3                                        |         
    0x0003edc8 str r6, [r2, 4]!                                  |         *((r2 += 4)) = r6;
    0x0003edcc bne 0x3edc0                                       |         
                                                                 |     } while (r1 != r3);
    0x0003edce ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0003edd0 add r5, r4                                        |     r5 += r4;
    0x0003edd2 str r5, [r3, 0x44]                                |     *((r3 + 0x44)) = r5;
                                                                 | label_116:
    0x0003edd4 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0003edd6 ldr.w r4, [r3, 0x154]                             |     r4 = *((r3 + 0x154));
    0x0003edda subs r4, 1                                        |     r4--;
    0x0003eddc it pl                                             |     
                                                                 |     if (r4 < 1) {
    0x0003edde ldrpl r5, [sp, 0x58]                              |         r5 = var_58h;
                                                                 |     }
                                                                 |     if (r4 < 1) {
    0x0003ede0 bmi 0x3edf0                                       |         goto label_117;
                                                                 |     }
                                                                 |     do {
    0x0003ede2 mov r1, r4                                        |         r1 = r4;
    0x0003ede4 mov r0, r5                                        |         r0 = r5;
    0x0003ede6 subs r4, 1                                        |         r4--;
    0x0003ede8 bl 0x3db1c                                        |         fcn_0003db1c (r0, r1, r2, r3, r4, r5, r6);
    0x0003edec adds r7, r4, 1                                    |         r7 = r4 + 1;
    0x0003edee bne 0x3ede2                                       |         
                                                                 |     } while (r7 != r4);
                                                                 | label_117:
    0x0003edf0 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0003edf2 ldrb.w r3, [r3, 0x40]                             |     r3 = *((r3 + 0x40));
    0x0003edf6 str r3, [sp, 0x28]                                |     var_28h = r3;
    0x0003edf8 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003edfa bne.w 0x3ef06                                     |         goto label_5;
                                                                 |     }
    0x0003edfe ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x0003ee00 ands r3, r3, 0x400                                |     r3 &= 0x400;
    0x0003ee04 str r3, [sp, 0x44]                                |     var_44h = r3;
                                                                 |     if (r3 != r3) {
    0x0003ee06 bne.w 0x3f4b0                                     |         goto label_118;
                                                                 |     }
                                                                 | label_14:
    0x0003ee0a ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x0003ee0c ldr.w fp, [sp, 0xac]                              |     fp = var_ach;
    0x0003ee10 ldr r4, [sp, 0xb8]                                |     r4 = var_b8h;
    0x0003ee12 cmp r3, 1                                         |     
    0x0003ee14 ldr.w r6, [fp, 4]                                 |     r6 = *(arg_4h);
                                                                 |     if (r3 == 1) {
    0x0003ee18 beq.w 0x3f40e                                     |         goto label_119;
                                                                 |     }
                                                                 | label_10:
    0x0003ee1c ldr.w r3, [fp]                                    |     r3 = *(fp);
    0x0003ee20 add.w r5, r6, 8                                   |     r5 = r6 + 8;
    0x0003ee24 ldrb.w r2, [fp, 0x29]                             |     r2 = *(arg_29h);
    0x0003ee28 movs r7, 0                                        |     r7 = 0;
    0x0003ee2a mov.w r6, 0x40000                                 |     r6 = 0x40000;
    0x0003ee2e ldr r3, [r3]                                      |     r3 = *(r3);
    0x0003ee30 str r2, [sp, 0x24]                                |     var_24h = r2;
    0x0003ee32 strd r7, r6, [r4, 0x24]                           |     __asm ("strd r7, r6, [r4, 0x24]");
    0x0003ee36 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x0003ee38 add.w r3, r4, 0x34                                |     r3 = r4 + 0x34;
    0x0003ee3c str r3, [sp, 0x34]                                |     var_34h = r3;
    0x0003ee3e str r3, [r4, 0x2c]                                |     *((r4 + 0x2c)) = r3;
    0x0003ee40 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0003ee42 beq.w 0x40c14                                     |         goto label_120;
                                                                 |     }
    0x0003ee46 ldr.w ip, [sp, 0x28]                              |     ip = var_28h;
    0x0003ee4a mov r8, r7                                        |     r8 = r7;
    0x0003ee4c str.w fp, [sp, 0x28]                              |     __asm ("str.w fp, [var_28h]");
    0x0003ee50 mov r6, r7                                        |     r6 = r7;
    0x0003ee52 ldr.w fp, [sp, 0x30]                              |     fp = var_30h;
    0x0003ee56 strd r7, r7, [sp, 0x18]                           |     __asm ("strd r7, r7, [var_18h]");
    0x0003ee5a str.w sb, [sp, 0x50]                              |     __asm ("str.w sb, [var_50h]");
                                                                 | label_1:
    0x0003ee5e ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x0003ee60 strb r6, [r4, 0x10]                               |     *((r4 + 0x10)) = r6;
    0x0003ee62 ldr.w lr, [r5, 0x28]                              |     
    0x0003ee66 ldr r0, [r3, 0x44]                                |     r0 = *((r3 + 0x44));
    0x0003ee68 cmp r0, 0                                         |     
                                                                 |     if (r0 <= 0) {
    0x0003ee6a ble.w 0x3ef88                                     |         goto label_121;
                                                                 |     }
    0x0003ee6e add.w r2, r3, 0x44                                |     r2 = r3 + 0x44;
    0x0003ee72 movs r3, 0                                        |     r3 = 0;
    0x0003ee74 b 0x3ee7e                                         |     
                                                                 |     while (lr != r1) {
    0x0003ee76 adds r3, 1                                        |         r3++;
    0x0003ee78 cmp r0, r3                                        |         
                                                                 |         if (r0 == r3) {
    0x0003ee7a beq.w 0x3ef88                                     |             goto label_121;
                                                                 |         }
    0x0003ee7e ldr r1, [r2, 4]!                                  |         r1 = *((r2 += 4));
    0x0003ee82 cmp lr, r1                                        |         
    0x0003ee84 bne 0x3ee76                                       |         
                                                                 |     }
    0x0003ee86 movs r0, 1                                        |     r0 = 1;
    0x0003ee88 sub.w r2, r3, 0x20                                |     r2 = r3 - 0x20;
    0x0003ee8c rsb.w r1, r3, 0x20                                |     r1 = 0x20 - r3;
    0x0003ee90 lsl.w r2, r0, r2                                  |     r2 = r0 << r2;
    0x0003ee94 lsr.w r1, r0, r1                                  |     r1 = r0 >> r1;
    0x0003ee98 lsl.w r3, r0, r3                                  |     r3 = r0 << r3;
    0x0003ee9c orrs r2, r1                                       |     r2 |= r1;
                                                                 | label_2:
    0x0003ee9e strd r3, r2, [r4, 8]                              |     __asm ("strd r3, r2, [r4, 8]");
    0x0003eea2 mov r0, fp                                        |     r0 = fp;
    0x0003eea4 ldrb.w sl, [r5, 0x24]                             |     sl = *((r5 + 0x24));
    0x0003eea8 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0003eeaa orr.w ip, sl, ip                                  |     
    0x0003eeae and ip, ip, 0xa                                   |     
    0x0003eeb2 cmp.w ip, 0                                       |     
    0x0003eeb6 it ne                                             |     
                                                                 |     if (ip == 0) {
    0x0003eeb8 movne r1, r3                                      |         r1 = r3;
                                                                 |     }
    0x0003eeba ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0003eebc itt eq                                            |     
                                                                 |     if (ip != 0) {
    0x0003eebe moveq r1, r7                                      |         r1 = r7;
                                                                 |     }
                                                                 |     if (ip != 0) {
    0x0003eec0 moveq sb, r8                                      |         sb = r8;
                                                                 |     }
    0x0003eec2 mov r7, r1                                        |     r7 = r1;
    0x0003eec4 mov r2, r1                                        |     r2 = r1;
    0x0003eec6 it ne                                             |     
                                                                 |     if (ip == 0) {
    0x0003eec8 movne sb, r3                                      |         sb = r3;
                                                                 |     }
    0x0003eeca ldr r3, [r5, 0x10]                                |     r3 = *((r5 + 0x10));
    0x0003eecc mov r8, sb                                        |     r8 = sb;
    0x0003eece str r1, [sp, 0x30]                                |     var_30h = r1;
    0x0003eed0 ldrb.w r3, [r3, 0x2c]                             |     r3 = *((r3 + 0x2c));
    0x0003eed4 tst.w r3, 0x10                                    |     
    0x0003eed8 mov r3, sb                                        |     r3 = sb;
                                                                 |     if ((r3 & 0x10) == 0) {
    0x0003eeda beq 0x3ef8e                                       |         goto label_122;
                                                                 |     }
    0x0003eedc bl 0x1eaac                                        |     fcn_0001eaac (r0, r1, r2, r3, r4);
    0x0003eee0 ldr r1, [sp, 0x30]                                |     r1 = var_30h;
                                                                 | label_3:
    0x0003eee2 cmp r0, 0                                         |     
    0x0003eee4 beq 0x3ef54                                       |     
                                                                 |     while (r0 != 0) {
    0x0003eee6 ldr r1, [r4, 0x2c]                                |         r1 = *((r4 + 0x2c));
    0x0003eee8 ldr r3, [sp, 0x34]                                |         r3 = var_34h;
    0x0003eeea cmp r3, r1                                        |         
                                                                 |         if (r3 != r1) {
    0x0003eeec bne.w 0x3f5ee                                     |             goto label_123;
                                                                 |         }
    0x0003eef0 ldr r0, [sp, 0x20]                                |         r0 = var_20h;
    0x0003eef2 mov r1, r4                                        |         r1 = r4;
                                                                 | label_17:
    0x0003eef4 bl 0xfa60                                         |         fcn_0000fa60 (r0, r1);
    0x0003eef8 ldr r3, [sp, 0x34]                                |         r3 = var_34h;
    0x0003eefa movs r2, 0                                        |         r2 = 0;
    0x0003eefc str r3, [r4, 0x2c]                                |         *((r4 + 0x2c)) = r3;
    0x0003eefe mov.w r3, 0x40000                                 |         r3 = 0x40000;
    0x0003ef00 movs r3, 0x80                                     |         r3 = 0x80;
    0x0003ef02 strd r2, r3, [r4, 0x24]                           |         __asm ("strd r2, r3, [r4, 0x24]");
                                                                 | label_5:
    0x0003ef06 ldr r1, [sp, 0x10]                                |         r1 = var_10h;
    0x0003ef08 movs r2, 0                                        |         r2 = 0;
    0x0003ef0a str r2, [sp, 0x10]                                |         var_10h = r2;
    0x0003ef0c ldr r2, [sp, 0x14]                                |         r2 = var_14h;
    0x0003ef0e ldr r3, [r1, 0x38]                                |         r3 = *((r1 + 0x38));
    0x0003ef10 ldr r0, [sp, 0x40]                                |         r0 = var_40h;
    0x0003ef12 str.w r3, [r2, 0x1a8]                             |         __asm ("str.w r3, aav.0x000000ff");
    0x0003ef16 bl 0x13658                                        |         fcn_00013658 (r0, r1);
                                                                 | label_31:
    0x0003ef1a ldr.w r2, [pc, 0x744]                             |         r2 = *(0x0003f660);
    0x0003ef1e ldr.w r3, [pc, 0x734]                             |         r3 = *(0x3f656);
    0x0003ef22 add r2, pc                                        |         r2 += pc;
    0x0003ef24 ldr r3, [r2, r3]                                  |         r3 = *((r2 + r3));
    0x0003ef26 ldr r2, [r3]                                      |         r2 = *(0x3f656);
    0x0003ef28 ldr r3, [sp, 0xdc]                                |         r3 = var_dch;
    0x0003ef2a eors r2, r3                                       |         r2 ^= r3;
    0x0003ef2c mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0003ef30 bne.w 0x41068                                     |             goto label_124;
                                                                 |         }
    0x0003ef34 ldr r0, [sp, 0x10]                                |         r0 = var_10h;
    0x0003ef36 add sp, 0xe4                                      |         
    0x0003ef38 vpop {d8}                                         |         __asm ("vpop {d8}");
    0x0003ef3c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_111:
    0x0003ef40 ldr r3, [sp, 0x3c]                                |         r3 = var_3ch;
    0x0003ef42 subs r1, r3, 1                                    |         r1 = r3 - 1;
    0x0003ef44 add.w r1, r1, r1, lsl 3                           |         r1 += (r1 << 3);
    0x0003ef48 lsls r1, r1, 3                                    |         r1 <<= 3;
    0x0003ef4a add.w r5, r1, 0x328                               |         r5 = r1 + 0x328;
    0x0003ef4e add.w r1, r1, 0x370                               |         r1 += 0x370;
    0x0003ef52 b 0x3ec98                                         |         goto label_0;
    0x0003ef54 mov r2, r1                                        |         r2 = r1;
    0x0003ef56 mov r3, sb                                        |         r3 = sb;
    0x0003ef58 mov r0, fp                                        |         r0 = fp;
    0x0003ef5a bl 0x23c74                                        |         fcn_00023c74 (r0, r1, r2);
    0x0003ef5e ldr r3, [r4, 8]                                   |         r3 = *((r4 + 8));
    0x0003ef60 ldr r2, [sp, 0x18]                                |         r2 = var_18h;
    0x0003ef62 orrs r2, r3                                       |         r2 |= r3;
    0x0003ef64 ldr r3, [r4, 0xc]                                 |         r3 = *((r4 + 0xc));
    0x0003ef66 str r2, [sp, 0x18]                                |         var_18h = r2;
    0x0003ef68 ldr r2, [sp, 0x1c]                                |         r2 = var_1ch;
    0x0003ef6a orrs r2, r3                                       |         r2 |= r3;
    0x0003ef6c str r2, [sp, 0x1c]                                |         var_1ch = r2;
    0x0003ef6e cmp r0, 0                                         |         
    0x0003ef70 bne 0x3eee6                                       |         
                                                                 |     }
    0x0003ef72 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0003ef74 ldrb.w r3, [r3, 0x40]                             |     r3 = *((r3 + 0x40));
                                                                 |     if (r3 == 0) {
    0x0003ef78 cbnz r3, 0x3ef9a                                  |         
    0x0003ef7a ldr r3, [sp, 0x24]                                |         r3 = var_24h;
    0x0003ef7c adds r6, 1                                        |         r6++;
    0x0003ef7e adds r5, 0x48                                     |         r5 += 0x48;
    0x0003ef80 cmp r3, r6                                        |         
                                                                 |         if (r3 == r6) {
    0x0003ef82 beq 0x3ef9a                                       |             goto label_125;
                                                                 |         }
    0x0003ef84 mov ip, sl                                        |         
    0x0003ef86 b 0x3ee5e                                         |         goto label_1;
                                                                 | label_121:
    0x0003ef88 movs r3, 0                                        |         r3 = 0;
    0x0003ef8a mov r2, r3                                        |         r2 = r3;
    0x0003ef8c b 0x3ee9e                                         |         goto label_2;
                                                                 | label_122:
    0x0003ef8e bl 0x23750                                        |         fcn_00023750 (r0, r1, r2);
    0x0003ef92 ldr r1, [sp, 0x30]                                |         r1 = var_30h;
    0x0003ef94 b 0x3eee2                                         |         goto label_3;
                                                                 | label_114:
    0x0003ef96 ldr r3, [sp, 0xb0]                                |         r3 = var_b0h;
    0x0003ef98 b 0x3ed80                                         |         goto label_4;
                                                                 |     }
                                                                 | label_125:
    0x0003ef9a ldr r1, [r4, 0x2c]                                |     r1 = *((r4 + 0x2c));
    0x0003ef9c ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0003ef9e ldr.w sb, [sp, 0x50]                              |     sb = var_50h;
    0x0003efa2 cmp r3, r1                                        |     
                                                                 |     if (r3 == r1) {
    0x0003efa4 beq.w 0x3f5d0                                     |         goto label_126;
                                                                 |     }
    0x0003efa8 ldr r5, [sp, 0x20]                                |     r5 = var_20h;
    0x0003efaa mov r0, r5                                        |     r0 = r5;
    0x0003efac bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x0003efb0 mov r1, r4                                        |     r1 = r4;
    0x0003efb2 mov r0, r5                                        |     r0 = r5;
                                                                 | label_16:
    0x0003efb4 bl 0xfa60                                         |     fcn_0000fa60 (r0, r1);
    0x0003efb8 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0003efba movs r1, 0                                        |     r1 = 0;
    0x0003efbc str r3, [r4, 0x2c]                                |     *((r4 + 0x2c)) = r3;
    0x0003efbe mov.w r3, 0x40000                                 |     r3 = 0x40000;
    0x0003efc2 strd r1, r3, [r4, 0x24]                           |     __asm ("strd r1, r3, [r4, 0x24]");
                                                                 | label_90:
    0x0003efc6 ldr r4, [sp, 0x10]                                |     r4 = var_10h;
    0x0003efc8 movs r1, 0                                        |     r1 = 0;
    0x0003efca mov r0, r4                                        |     r0 = r4;
    0x0003efcc bl 0x24b84                                        |     fcn_00024b84 (r0, r1);
    0x0003efd0 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0003efd2 ldrb.w r3, [r3, 0x40]                             |     r3 = *((r3 + 0x40));
    0x0003efd6 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003efd8 bne 0x3ef06                                       |         goto label_5;
                                                                 |     }
    0x0003efda ldr r3, [r4, 8]                                   |     r3 = *((r4 + 8));
    0x0003efdc cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0003efde beq.w 0x406f2                                     |         goto label_127;
                                                                 |     }
    0x0003efe2 ldr r0, [sp, 0x10]                                |     r0 = var_10h;
    0x0003efe4 ldrh r1, [r0, 0x20]                               |     r1 = *((r0 + 0x20));
    0x0003efe6 adds r1, 1                                        |     r1++;
    0x0003efe8 sxth r1, r1                                       |     __asm ("sxth r1, r1");
    0x0003efea bl 0x24b84                                        |     fcn_00024b84 (r0, r1);
    0x0003efee ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0003eff0 ldrb.w r3, [r3, 0x40]                             |     r3 = *((r3 + 0x40));
    0x0003eff4 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003eff6 bne 0x3ef06                                       |         goto label_5;
                                                                 |     }
                                                                 | label_105:
    0x0003eff8 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0003effa ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0003effc cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0003effe beq.w 0x406f2                                     |         goto label_127;
                                                                 |     }
                                                                 | label_60:
    0x0003f002 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0003f004 ldr r3, [r3, 0x40]                                |     r3 = *((r3 + 0x40));
    0x0003f006 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003f008 bne.w 0x3ef06                                     |         goto label_5;
                                                                 |     }
    0x0003f00c ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x0003f00e ldrb.w r3, [r2, 0x40]                             |     r3 = *((r2 + 0x40));
    0x0003f012 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003f014 bne.w 0x3ef06                                     |         goto label_5;
                                                                 |     }
    0x0003f018 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0003f01a ldrb.w sl, [r3, 0x29]                             |     sl = *((r3 + 0x29));
    0x0003f01e cmp.w sb, 0                                       |     
    0x0003f022 it ne                                             |     
                                                                 |     if (sb != 0) {
    0x0003f024 cmpne sl, 1                                       |         __asm ("cmpne sl, 1");
                                                                 |     }
                                                                 |     if (sb > 0) {
    0x0003f028 bhi.w 0x40752                                     |         goto label_128;
                                                                 |     }
                                                                 | label_65:
    0x0003f02c ldr r0, [sp, 0x10]                                |     r0 = var_10h;
    0x0003f02e ldr r2, [r0]                                      |     r2 = *(r0);
    0x0003f030 ldrsh.w r1, [r0, 0x20]                            |     r1 = *((r0 + 0x20));
    0x0003f034 ldr.w r3, [r2, 0x1a8]                             |     r3 = *((r2 + 0x1a8));
    0x0003f038 add r3, r1                                        |     r3 += r1;
    0x0003f03a str.w r3, [r2, 0x1a8]                             |     __asm ("str.w r3, aav.0x000000ff");
    0x0003f03e ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x0003f040 lsls r6, r3, 0x1d                                 |     r6 = r3 << 0x1d;
                                                                 |     if (r6 < r3) {
    0x0003f042 bpl 0x3f066                                       |         
    0x0003f044 ldr.w r2, [r0, 0x318]                             |         r2 = *((r0 + 0x318));
    0x0003f048 ldr r3, [r2, 0x24]                                |         r3 = *((r2 + 0x24));
    0x0003f04a lsls r5, r3, 0x13                                 |         r5 = r3 << 0x13;
                                                                 |         if (r5 >= r3) {
    0x0003f04c bpl 0x3f066                                       |             goto label_129;
                                                                 |         }
    0x0003f04e movs r1, 1                                        |         r1 = 1;
    0x0003f050 strb.w r1, [r0, 0x26]                             |         *((r0 + 0x26)) = r1;
    0x0003f054 ldr r1, [sp, 0x2c]                                |         r1 = var_2ch;
    0x0003f056 ldr r1, [r1, 0x18]                                |         r1 = *((r1 + 0x18));
    0x0003f058 ldrb.w r1, [r1, 0x2c]                             |         r1 = *((r1 + 0x2c));
    0x0003f05c lsls r4, r1, 0x1a                                 |         r4 = r1 << 0x1a;
    0x0003f05e itt pl                                            |         
                                                                 |         if (r4 >= r1) {
    0x0003f060 bicpl r3, r3, 0x40                                |             __asm ("bicpl r3, r3, 0x40");
                                                                 |         }
                                                                 |         if (r4 < r1) {
    0x0003f064 str r3, [r2, 0x24]                                |             *((r2 + 0x24)) = r3;
                                                                 |             goto label_129;
                                                                 |         }
                                                                 |     }
                                                                 | label_129:
    0x0003f066 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x0003f068 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0003f06a cmp r3, 0                                         |     
    0x0003f06c add.w sb, r2, 0x2e0                               |     sb = r2 + 0x2e0;
                                                                 |     if (r3 <= 0) {
    0x0003f070 ble.w 0x40c08                                     |         goto label_130;
                                                                 |     }
    0x0003f074 add.w r3, r3, r3, lsl 3                           |     r3 += (r3 << 3);
    0x0003f078 add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0003f07c add.w sl, r3, 0x2e0                               |     sl = r3 + 0x2e0;
    0x0003f080 ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x0003f082 and fp, r3, 0x1000                                |     
    0x0003f086 and r3, r3, 0x10                                  |     r3 &= 0x10;
    0x0003f08a strd sl, r3, [sp, 0x18]                           |     __asm ("strd sl, r3, [var_18h]");
    0x0003f08e str.w fp, [sp, 0x20]                              |     __asm ("str.w fp, [var_20h]");
    0x0003f092 ldr.w sl, [sp, 0x14]                              |     sl = var_14h;
    0x0003f096 ldr.w fp, [sp, 0x40]                              |     fp = var_40h;
                                                                 | label_6:
    0x0003f09a ldrb.w r6, [sb, 0x24]                             |     r6 = *((sb + 0x24));
    0x0003f09e ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x0003f0a0 lsl.w r8, r6, 3                                   |     r8 = r6 << 3;
    0x0003f0a4 add.w r3, r8, r6                                  |     r3 = r8 + r6;
    0x0003f0a8 add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0003f0ac ldr r5, [r3, 0x18]                                |     r5 = *((r3 + 0x18));
    0x0003f0ae ldr r1, [r5, 0x44]                                |     r1 = *((r5 + 0x44));
    0x0003f0b0 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0003f0b2 beq.w 0x40bfc                                     |         goto label_131;
                                                                 |     }
    0x0003f0b6 ldr.w r0, [fp, 0x14]                              |     r0 = *(arg_14h);
    0x0003f0ba cmp r0, 0                                         |     
                                                                 |     if (r0 <= 0) {
    0x0003f0bc ble.w 0x4074c                                     |         goto label_132;
                                                                 |     }
    0x0003f0c0 ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_118h);
    0x0003f0c4 movs r4, 0                                        |     r4 = 0;
    0x0003f0c6 b 0x3f0d0                                         |     
                                                                 |     while (r1 != r2) {
    0x0003f0c8 adds r4, 1                                        |         r4++;
    0x0003f0ca adds r3, 0x10                                     |         r3 += 0x10;
    0x0003f0cc cmp r4, r0                                        |         
                                                                 |         if (r4 == r0) {
    0x0003f0ce beq 0x3f0d6                                       |             goto label_64;
                                                                 |         }
    0x0003f0d0 ldr r2, [r3, 0xc]                                 |         r2 = *((r3 + 0xc));
    0x0003f0d2 cmp r1, r2                                        |         
    0x0003f0d4 bne 0x3f0c8                                       |         
                                                                 |     }
                                                                 | label_64:
    0x0003f0d6 ldrb.w r2, [r5, 0x2c]                             |     r2 = *((r5 + 0x2c));
    0x0003f0da ldr.w r7, [sb, 0x38]                              |     r7 = *((sb + 0x38));
    0x0003f0de lsls r0, r2, 0x1e                                 |     r0 = r2 << 0x1e;
    0x0003f0e0 ldr r3, [r7, 0x24]                                |     r3 = *((r7 + 0x24));
                                                                 |     if (r0 >= r2) {
    0x0003f0e2 bmi 0x3f0ec                                       |         
    0x0003f0e4 ldr r1, [r5, 0xc]                                 |         r1 = *((r5 + 0xc));
    0x0003f0e6 cmp r1, 0                                         |         
                                                                 |         if (r1 == 0) {
    0x0003f0e8 beq.w 0x402f6                                     |             goto label_133;
                                                                 |         }
                                                                 |     }
                                                                 | label_42:
    0x0003f0ec lsls r3, r3, 0x16                                 |     r3 <<= 0x16;
                                                                 |     if (r3 < r3) {
    0x0003f0ee bpl 0x3f158                                       |         
    0x0003f0f0 ldrb.w r3, [r5, 0x2c]                             |         r3 = *((r5 + 0x2c));
    0x0003f0f4 ldr r5, [r7, 0x1c]                                |         r5 = *((r7 + 0x1c));
    0x0003f0f6 lsls r7, r3, 0x1a                                 |         r7 = r3 << 0x1a;
                                                                 |         if (r7 < r3) {
    0x0003f0f8 bpl 0x3f11c                                       |             
    0x0003f0fa ldrb.w r3, [r5, 0x37]                             |             r3 = *((r5 + 0x37));
    0x0003f0fe ldr r2, [sp, 0x38]                                |             r2 = var_38h;
    0x0003f100 and r3, r3, 3                                     |             r3 &= 3;
    0x0003f104 sub.w r3, r3, 2                                   |             r3 -= 2;
    0x0003f106 lsls r2, r0, 0xc                                  |             r2 = r0 << 0xc;
    0x0003f108 cmp r2, 0                                         |             
    0x0003f10a clz r3, r3                                        |             r3 &= r3;
    0x0003f10e lsr.w r3, r3, 5                                   |             r3 >>= 5;
    0x0003f112 it eq                                             |             
                                                                 |             if (r2 != 0) {
    0x0003f114 moveq r3, 0                                       |                 r3 = 0;
                                                                 |             }
    0x0003f116 cmp r3, 0                                         |             
                                                                 |             if (r3 != 0) {
    0x0003f118 bne.w 0x4037a                                     |                 goto label_134;
                                                                 |             }
                                                                 |         }
    0x0003f11c ldr r3, [sp, 0x10]                                |         r3 = var_10h;
    0x0003f11e ldrb.w r3, [r3, 0x26]                             |         r3 = *((r3 + 0x26));
    0x0003f122 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x0003f124 bne.w 0x403c8                                     |             goto label_135;
                                                                 |         }
                                                                 | label_44:
    0x0003f128 ldr r3, [sp, 0x118]                               |         r3 = *(arg_118h);
    0x0003f12a ldr r2, [sp, 0x38]                                |         r2 = var_38h;
    0x0003f12c cmp r3, 0                                         |         
    0x0003f12e it ne                                             |         
                                                                 |         if (r3 != 0) {
    0x0003f130 cmpne r2, 0                                       |             __asm ("cmpne r2, 0");
                                                                 |         }
                                                                 |         if (r3 != 0) {
    0x0003f132 bne.w 0x4053c                                     |             goto label_136;
                                                                 |         }
    0x0003f136 ldr.w r2, [sl, 0x44]                              |         r2 = *((sl + 0x44));
    0x0003f13a movs r1, 0x35                                     |         r1 = 0x35;
    0x0003f13c adds r3, r2, 1                                    |         r3 = r2 + 1;
    0x0003f13e str.w r3, [sl, 0x44]                              |         __asm ("str.w r3, [sl, 0x44]");
                                                                 | label_46:
    0x0003f142 str.w r2, [sb, 8]                                 |         __asm ("str.w r2, [sb, 8]");
    0x0003f146 ldr r0, [sp, 0x48]                                |         r0 = var_48h;
    0x0003f148 ldr r3, [r5, 0x2c]                                |         r3 = *((r5 + 0x2c));
    0x0003f14a str r4, [sp]                                      |         *(sp) = r4;
    0x0003f14c bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003f150 mov r1, r5                                        |         r1 = r5;
    0x0003f152 mov r0, sl                                        |         r0 = sl;
    0x0003f154 bl 0x220e4                                        |         fcn_000220e4 (r0, r1);
                                                                 |     }
                                                                 | label_43:
    0x0003f158 cmp r4, 0                                         |     
                                                                 |     if (r4 >= 0) {
    0x0003f15a blt 0x3f164                                       |         
    0x0003f15c mov r1, r4                                        |         r1 = r4;
    0x0003f15e mov r0, sl                                        |         r0 = sl;
    0x0003f160 bl 0x39214                                        |         fcn_00039214 (r0, r1);
                                                                 |     }
    0x0003f164 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0003f166 add.w sb, sb, 0x48                                |     sb += 0x48;
    0x0003f168 lsrs r0, r1, 5                                    |     r0 = r1 >> 5;
    0x0003f16a cmp sb, r3                                        |     
                                                                 |     if (sb != r3) {
    0x0003f16c bne 0x3f09a                                       |         goto label_6;
                                                                 |     }
    0x0003f16e ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x0003f170 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0003f172 ldr r3, [r3, 0x20]                                |     r3 = *((r3 + 0x20));
    0x0003f174 str r3, [r2, 0x2c]                                |     *((r2 + 0x2c)) = r3;
    0x0003f176 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0003f178 ldrb.w r3, [r3, 0x40]                             |     r3 = *((r3 + 0x40));
    0x0003f17c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003f17e bne.w 0x3ef06                                     |         goto label_5;
                                                                 |     }
    0x0003f182 str r3, [sp, 0x38]                                |     var_38h = r3;
    0x0003f184 movw r2, 0x3d3f                                   |     
    0x0003f188 ldr.w r3, [pc, 0x4d8]                             |     r3 = *(0x0003f664);
    0x0003f18c movt r2, 0x3e3c                                   |     r2 = 0x3e3c3d3f;
    0x0003f190 ldr.w fp, [sp, 0x10]                              |     fp = var_10h;
    0x0003f194 str r2, [sp, 0x9c]                                |     var_9ch = r2;
    0x0003f196 add r3, pc                                        |     r3 += pc;
    0x0003f198 str r3, [sp, 0x88]                                |     var_88h = r3;
    0x0003f19a mov sb, fp                                        |     sb = fp;
    0x0003f19c ldr.w r3, [pc, 0x4c8]                             |     
    0x0003f1a0 add r3, pc                                        |     r3 = 0x7e80c;
    0x0003f1a2 str r3, [sp, 0x8c]                                |     var_8ch = r3;
    0x0003f1a4 ldr.w r3, [pc, 0x4c4]                             |     
    0x0003f1a8 add r3, pc                                        |     r3 = 0x7e818;
    0x0003f1aa str r3, [sp, 0x98]                                |     var_98h = r3;
    0x0003f1ac mov.w r3, -1                                      |     r3 = -1;
    0x0003f1b0 str r3, [sp, 0x30]                                |     var_30h = r3;
    0x0003f1b2 str r3, [sp, 0x34]                                |     var_34h = r3;
                                                                 | label_30:
    0x0003f1b4 ldr.w r3, [sb, 0x318]                             |     r3 = *((sb + 0x318));
    0x0003f1b8 add.w r2, sb, 0x2e0                               |     r2 = sb + 0x2e0;
    0x0003f1bc ldrb.w r1, [sb, 0x304]                            |     r1 = *((sb + 0x304));
    0x0003f1c0 str r2, [sp, 0x44]                                |     var_44h = r2;
    0x0003f1c2 ldr r3, [r3, 0x24]                                |     r3 = *((r3 + 0x24));
    0x0003f1c4 str r1, [sp, 0x20]                                |     var_20h = r1;
    0x0003f1c6 str r2, [sp, 0x5c]                                |     var_5ch = r2;
    0x0003f1c8 lsls r0, r3, 0x11                                 |     r0 = r3 << 0x11;
                                                                 |     if (r0 < r3) {
    0x0003f1ca bmi.w 0x3f670                                     |         goto label_137;
                                                                 |     }
                                                                 | label_24:
    0x0003f1ce ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0003f1d0 ldrb.w r3, [r3, 0x1c2]                            |     r3 = *((r3 + 0x1c2));
    0x0003f1d4 cmp r3, 2                                         |     
                                                                 |     if (r3 == 2) {
    0x0003f1d6 bne 0x3f1f6                                       |         
    0x0003f1d8 ldr r1, [sp, 0x4c]                                |         r1 = var_4ch;
    0x0003f1da ldr.w r3, [sb, 0x318]                             |         r3 = *((sb + 0x318));
    0x0003f1de ldr r2, [sp, 0x20]                                |         r2 = var_20h;
    0x0003f1e0 str r1, [sp, 8]                                   |         var_8h = r1;
    0x0003f1e2 ldr r1, [sp, 0x38]                                |         r1 = var_38h;
    0x0003f1e4 ldr r0, [sp, 0x14]                                |         r0 = var_14h;
    0x0003f1e6 str r2, [sp, 4]                                   |         var_4h = r2;
    0x0003f1e8 str r1, [sp]                                      |         *(sp) = r1;
    0x0003f1ea ldr r1, [sp, 0x2c]                                |         r1 = var_2ch;
    0x0003f1ec bl 0x201b4                                        |         fcn_000201b4 (r0, r1, r2, r3);
    0x0003f1f0 ldrb.w r3, [sb, 0x304]                            |         r3 = *((sb + 0x304));
    0x0003f1f4 str r3, [sp, 0x20]                                |         var_20h = r3;
                                                                 |     }
    0x0003f1f6 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0003f1f8 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x0003f1fa ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x0003f1fc ldr r1, [r2, 4]                                   |     r1 = *((r2 + 4));
    0x0003f1fe ldr r6, [r2]                                      |     r6 = *(r2);
    0x0003f200 ldr r3, [r3, 0x20]                                |     r3 = *((r3 + 0x20));
    0x0003f202 lsls r7, r0, 3                                    |     r7 = r0 << 3;
    0x0003f204 ldr.w sl, [sb, 0x318]                             |     sl = *((sb + 0x318));
    0x0003f208 ldr.w r8, [r6, 8]                                 |     r8 = *((r6 + 8));
    0x0003f20c str.w r3, [sb, 0x300]                             |     __asm ("str.w r3, aav.0x000000ff");
    0x0003f210 adds r3, r7, r0                                   |     r3 = r7 + r0;
    0x0003f212 add.w r3, r1, r3, lsl 3                           |     r3 = r1 + (r3 << 3);
    0x0003f216 ldr r0, [r2, 0x44]                                |     r0 = *((r2 + 0x44));
    0x0003f218 str r1, [sp, 0x1c]                                |     var_1ch = r1;
    0x0003f21a ldr.w fp, [r3, 0x30]                              |     fp = *((r3 + 0x30));
    0x0003f21e ldr r3, [r6]                                      |     r3 = *(r6);
    0x0003f220 cmp r0, 0                                         |     
    0x0003f222 str r3, [sp, 0x28]                                |     var_28h = r3;
                                                                 |     if (r0 <= 0) {
    0x0003f224 ble.w 0x3f648                                     |         goto label_138;
                                                                 |     }
    0x0003f228 adds r2, 0x44                                     |     r2 += 0x44;
    0x0003f22a movs r3, 0                                        |     r3 = 0;
    0x0003f22c b 0x3f236                                         |     
                                                                 |     while (fp != r1) {
    0x0003f22e adds r3, 1                                        |         r3++;
    0x0003f230 cmp r3, r0                                        |         
                                                                 |         if (r3 == r0) {
    0x0003f232 beq.w 0x3f648                                     |             goto label_138;
                                                                 |         }
    0x0003f236 ldr r1, [r2, 4]!                                  |         r1 = *((r2 += 4));
    0x0003f23a cmp fp, r1                                        |         
    0x0003f23c bne 0x3f22e                                       |         
                                                                 |     }
    0x0003f23e movs r1, 1                                        |     r1 = 1;
    0x0003f240 sub.w r2, r3, 0x20                                |     r2 = r3 - 0x20;
    0x0003f244 rsb.w r0, r3, 0x20                                |     r0 = 0x20 - r3;
    0x0003f248 lsl.w r2, r1, r2                                  |     r2 = r1 << r2;
    0x0003f24c lsr.w r0, r1, r0                                  |     r0 = r1 >> r0;
    0x0003f250 lsls r1, r3                                       |     r1 <<= r3;
    0x0003f252 orr.w r3, r2, r0                                  |     r3 = r2 | r0;
    0x0003f256 ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x0003f258 bic.w r1, r2, r1                                  |     r1 = BIT_MASK (r2, r1);
    0x0003f25c ldr r2, [sp, 0x34]                                |     r2 = var_34h;
    0x0003f25e bic.w r3, r2, r3                                  |     r3 = BIT_MASK (r2, r3);
                                                                 | label_21:
    0x0003f262 strd r1, r3, [sb, 0x320]                          |     __asm ("strd r1, r3, aav.0x000000ff");
    0x0003f266 ldr.w r3, [sl, 0x24]                              |     r3 = *((sl + 0x24));
    0x0003f26a ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0003f26c ldr.w r0, [r8, 0x18]                              |     r0 = *((r8 + 0x18));
    0x0003f270 ands r3, r3, 0x40                                 |     r3 &= 0x40;
    0x0003f274 it ne                                             |     
                                                                 |     if (r3 != r3) {
    0x0003f276 ldrhne r3, [r2, 0x22]                             |         __asm ("ldrhne r3, [r2, 0x22]");
                                                                 |     }
    0x0003f278 ldrd r5, r1, [r2, 0x18]                           |     __asm ("ldrd r5, r1, [r2, 0x18]");
    0x0003f27c itt ne                                            |     
                                                                 |     if (r3 == r3) {
    0x0003f27e eorne r3, r3, 0x20                                |         r3 ^= 0x20;
                                                                 |     }
                                                                 |     if (r3 != r3) {
    0x0003f282 ubfx r3, r3, 5, 1                                 |         r3 = (r3 >> 5) & ((1 << 1) - 1);
                                                                 |     }
    0x0003f286 str r1, [sp, 0x18]                                |     var_18h = r1;
    0x0003f288 str r3, [sp, 0x54]                                |     var_54h = r3;
    0x0003f28a bl 0x19ed0                                        |     r0 = fcn_00019ed0 (r0);
    0x0003f28e strd r0, r0, [sb, 0x2ec]                          |     __asm ("strd r0, r0, aav.0x000000ff");
    0x0003f292 mov r4, r0                                        |     r4 = r0;
    0x0003f294 ldr.w r0, [r8, 0x18]                              |     r0 = *((r8 + 0x18));
    0x0003f298 bl 0x19ed0                                        |     fcn_00019ed0 (r0);
    0x0003f29c ldrb.w r3, [sb, 0x304]                            |     r3 = *((sb + 0x304));
    0x0003f2a0 str r0, [sp, 0x24]                                |     var_24h = r0;
    0x0003f2a2 str.w r0, [sb, 0x2f8]                             |     __asm ("str.w r0, aav.0x000000ff");
                                                                 |     if (r3 != 0) {
    0x0003f2a6 cbz r3, 0x3f2bc                                   |         
    0x0003f2a8 ldr r3, [sp, 0x20]                                |         r3 = var_20h;
    0x0003f2aa ldr r2, [sp, 0x1c]                                |         r2 = var_1ch;
    0x0003f2ac adds r3, r7, r3                                   |         r3 = r7 + r3;
    0x0003f2ae add.w r3, r2, r3, lsl 3                           |         r3 = r2 + (r3 << 3);
    0x0003f2b2 ldrb.w r3, [r3, 0x2c]                             |         r3 = *((r3 + 0x2c));
    0x0003f2b6 lsls r3, r3, 0x1c                                 |         r3 <<= 0x1c;
                                                                 |         if (r3 < r3) {
    0x0003f2b8 bmi.w 0x402ac                                     |             goto label_139;
                                                                 |         }
                                                                 |     }
                                                                 | label_39:
    0x0003f2bc ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x0003f2be ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0003f2c0 adds r3, r7, r3                                   |     r3 = r7 + r3;
    0x0003f2c2 add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0003f2c6 ldrb.w r1, [r3, 0x2d]                             |     r1 = *((r3 + 0x2d));
    0x0003f2ca ands r2, r1, 4                                    |     r2 = r1 & 4;
    0x0003f2ce str r2, [sp, 0x50]                                |     var_50h = r2;
                                                                 |     if (r2 != r1) {
    0x0003f2d0 bne.w 0x3ffaa                                     |         goto label_140;
                                                                 |     }
    0x0003f2d4 ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x0003f2d6 ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x0003f2d8 rsb.w r3, r2, 0x20                                |     r3 = 0x20 - r2;
    0x0003f2dc lsrs r5, r2                                       |     r5 >>= r2;
    0x0003f2de lsl.w r3, r0, r3                                  |     r3 = r0 << r3;
    0x0003f2e2 orrs r5, r3                                       |     r5 |= r3;
    0x0003f2e4 sub.w r3, r2, 0x20                                |     r3 = r2 - 0x20;
    0x0003f2e8 lsr.w r3, r0, r3                                  |     r3 = r0 >> r3;
    0x0003f2ec ldr.w r2, [sl, 0x24]                              |     r2 = *((sl + 0x24));
    0x0003f2f0 orrs r5, r3                                       |     r5 |= r3;
    0x0003f2f2 and r3, r5, 1                                     |     r3 = r5 & 1;
    0x0003f2f6 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x0003f2f8 ands r3, r2, 0x400                                |     r3 = r2 & 0x400;
                                                                 |     if (r3 == r2) {
    0x0003f2fc beq.w 0x3faac                                     |         goto label_141;
                                                                 |     }
    0x0003f300 ldr r3, [r6, 0x64]                                |     r3 = *((r6 + 0x64));
    0x0003f302 ldrh.w r4, [sl, 0x28]                             |     r4 = *((sl + 0x28));
    0x0003f306 ldr r1, [r6, 0x3c]                                |     r1 = *((r6 + 0x3c));
    0x0003f308 adds r3, 1                                        |     r3++;
    0x0003f30a str r3, [r6, 0x64]                                |     *((r6 + 0x64)) = r3;
    0x0003f30c adds r2, r4, 2                                    |     r2 = r4 + 2;
    0x0003f30e ldr r3, [r6, 0x38]                                |     r3 = *((r6 + 0x38));
    0x0003f310 str r2, [sp, 0x50]                                |     var_50h = r2;
    0x0003f312 str r1, [sp, 0x1c]                                |     var_1ch = r1;
    0x0003f314 cmp r2, r3                                        |     
                                                                 |     if (r2 > r3) {
    0x0003f316 bgt.w 0x402c6                                     |         goto label_142;
                                                                 |     }
    0x0003f31a subs r3, r3, r2                                   |     r3 -= r2;
    0x0003f31c str r3, [r6, 0x38]                                |     *((r6 + 0x38)) = r3;
    0x0003f31e mov r3, r2                                        |     r3 = r2;
    0x0003f320 add r3, r1                                        |     r3 += r1;
    0x0003f322 str r3, [r6, 0x3c]                                |     *((r6 + 0x3c)) = r3;
                                                                 | label_40:
    0x0003f324 ldr.w r3, [sb, 0x2ec]                             |     r3 = *((sb + 0x2ec));
    0x0003f328 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x0003f32a ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0003f32c adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x0003f32e str r2, [sp, 0x54]                                |     var_54h = r2;
    0x0003f330 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0003f332 beq.w 0x401b4                                     |         goto label_143;
                                                                 |     }
    0x0003f336 movs r7, 0                                        |     r7 = 0;
    0x0003f338 str.w r8, [sp, 0x5c]                              |     __asm ("str.w r8, [var_5ch]");
    0x0003f33c adds r5, r3, 2                                    |     r5 = r3 + 2;
    0x0003f33e mov r8, r7                                        |     r8 = r7;
    0x0003f340 ldr r7, [sp, 0x44]                                |     r7 = var_44h;
    0x0003f342 b 0x3f362                                         |     goto label_8;
                                                                 | label_7:
    0x0003f344 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0003f346 mov r0, r6                                        |     r0 = r6;
    0x0003f348 str r2, [sp, 4]                                   |     var_4h = r2;
    0x0003f34a mov r2, r7                                        |     r2 = r7;
    0x0003f34c str r3, [sp]                                      |     *(sp) = r3;
    0x0003f34e mov r3, r8                                        |     r3 = r8;
    0x0003f350 bl 0x3c350                                        |     fcn_0003c350 (r0, r1, r2, r3, r4, r5, r6);
    0x0003f354 ldr.w r3, [sb, 0x2f0]                             |     r3 = *((sb + 0x2f0));
    0x0003f358 str r3, [sp, 0x20]                                |     var_20h = r3;
                                                                 |     do {
    0x0003f35a add.w r8, r8, 1                                   |         r8++;
    0x0003f35e cmp r4, r8                                        |         
                                                                 |         if (r4 == r8) {
    0x0003f360 beq 0x3f38a                                       |             goto label_144;
                                                                 |         }
                                                                 | label_8:
    0x0003f362 ldr.w r2, [sl, 0x2c]                              |         r2 = *((sl + 0x2c));
    0x0003f366 ldr.w r1, [r2, r8, lsl 2]                         |         offset_1 = r8 << 2;
                                                                 |         r1 = *((r2 + offset_1));
    0x0003f36a add.w r2, r5, r8                                  |         r2 = r5 + r8;
    0x0003f36e cmp r1, 0                                         |         
    0x0003f370 beq 0x3f35a                                       |         
                                                                 |     } while (r1 == 0);
    0x0003f372 ldrh r0, [r1, 0x12]                               |     r0 = *((r1 + 0x12));
    0x0003f374 lsls r0, r0, 0x1f                                 |     r0 <<= 0x1f;
                                                                 |     if (r0 < r0) {
    0x0003f376 bmi 0x3f344                                       |         goto label_7;
                                                                 |     }
    0x0003f378 ldr r1, [r1]                                      |     r1 = *(r1);
    0x0003f37a mov r0, r6                                        |     r0 = r6;
    0x0003f37c add.w r8, r8, 1                                   |     r8++;
    0x0003f380 ldr r1, [r1, 0x10]                                |     r1 = *((r1 + 0x10));
    0x0003f382 bl 0x3c4a8                                        |     fcn_0003c4a8 (r0, r1, r2);
    0x0003f386 cmp r4, r8                                        |     
                                                                 |     if (r4 != r8) {
    0x0003f388 bne 0x3f362                                       |         goto label_8;
                                                                 |     }
                                                                 | label_144:
    0x0003f38a ldr.w r8, [sp, 0x5c]                              |     r8 = var_5ch;
    0x0003f38e movs r5, 0                                        |     r5 = 0;
    0x0003f390 ldr.w r2, [sl, 0x18]                              |     r2 = *((sl + 0x18));
    0x0003f394 movs r1, 0x19                                     |     r1 = 0x19;
    0x0003f396 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0003f398 mov r0, r8                                        |     r0 = r8;
    0x0003f39a str r5, [sp]                                      |     *(sp) = r5;
    0x0003f39c bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003f3a0 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x0003f3a2 mov r2, r4                                        |     r2 = r4;
    0x0003f3a4 movs r1, 0x19                                     |     r1 = 0x19;
    0x0003f3a6 mov r0, r8                                        |     r0 = r8;
    0x0003f3a8 str r5, [sp]                                      |     *(sp) = r5;
    0x0003f3aa bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003f3ae ldrb.w r7, [sl, 0x1c]                             |     r7 = *((sl + 0x1c));
    0x0003f3b2 ldr.w r3, [sl, 0x20]                              |     r3 = *((sl + 0x20));
    0x0003f3b6 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x0003f3b8 beq.w 0x402d6                                     |         goto label_145;
                                                                 |     }
    0x0003f3bc str r3, [sp, 4]                                   |     var_4h = r3;
    0x0003f3be movs r1, 0xe                                      |     r1 = 0xe;
    0x0003f3c0 ldrd r2, r3, [sp, 0x1c]                           |     __asm ("ldrd r2, r3, [var_20h]");
    0x0003f3c4 mov r0, r8                                        |     r0 = r8;
    0x0003f3c6 str r2, [sp]                                      |     *(sp) = r2;
    0x0003f3c8 mvn r2, 0xa                                       |     r2 = ~0xa;
    0x0003f3cc str r2, [sp, 8]                                   |     var_8h = r2;
    0x0003f3ce mov r2, fp                                        |     r2 = fp;
    0x0003f3d0 bl 0x1977c                                        |     fcn_0001977c (r0, r1, r2, r3, r4, r5);
    0x0003f3d4 strb.w r5, [sl, 0x1c]                             |     *((sl + 0x1c)) = r5;
                                                                 | label_41:
    0x0003f3d8 ldrh.w r7, [sl, 0x1e]                             |     r7 = *((sl + 0x1e));
    0x0003f3dc movs r5, 0                                        |     r5 = 0;
    0x0003f3de ldr r0, [sp, 0x44]                                |     r0 = var_44h;
    0x0003f3e0 b 0x3f3f8                                         |     
                                                                 |     while (r2 >= r3) {
                                                                 | label_9:
    0x0003f3e2 adds r5, 1                                        |         r5++;
    0x0003f3e4 cmp r4, r5                                        |         
    0x0003f3e6 ite gt                                            |         
                                                                 |         if (r4 <= r5) {
    0x0003f3e8 movgt r3, 1                                       |             r3 = 1;
                                                                 |         }
                                                                 |         if (r4 > r5) {
    0x0003f3ea movle r3, 0                                       |             r3 = 0;
                                                                 |         }
    0x0003f3ec cmp r5, 0xf                                       |         
    0x0003f3ee it gt                                             |         
                                                                 |         if (r5 <= 0xf) {
    0x0003f3f0 movgt r3, 0                                       |             r3 = 0;
                                                                 |         }
    0x0003f3f2 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0003f3f4 beq.w 0x401fc                                     |             goto label_146;
                                                                 |         }
    0x0003f3f8 asr.w r3, r7, r5                                  |         r3 = r7 >> r5;
    0x0003f3fc lsls r2, r3, 0x1f                                 |         r2 = r3 << 0x1f;
    0x0003f3fe bpl 0x3f3e2                                       |         
                                                                 |     }
    0x0003f400 ldr.w r3, [sl, 0x2c]                              |     r3 = *((sl + 0x2c));
    0x0003f404 ldr.w r1, [r3, r5, lsl 2]                         |     offset_2 = r5 << 2;
                                                                 |     r1 = *((r3 + offset_2));
    0x0003f408 bl 0x83a0                                         |     fcn_000083a0 (r0, r1);
    0x0003f40c b 0x3f3e2                                         |     goto label_9;
                                                                 | label_119:
    0x0003f40e ldrh.w r3, [fp, 0x22]                             |     r3 = *(arg_22h);
    0x0003f412 lsls r3, r3, 0x1a                                 |     r3 <<= 0x1a;
                                                                 |     if (r3 < r3) {
    0x0003f414 bmi.w 0x3ee1c                                     |         goto label_10;
                                                                 |     }
    0x0003f418 ldr r5, [r6, 0x18]                                |     r5 = *((r6 + 0x18));
    0x0003f41a ldrb.w r3, [r5, 0x2c]                             |     r3 = *((r5 + 0x2c));
    0x0003f41e lsls r7, r3, 0x1b                                 |     r7 = r3 << 0x1b;
                                                                 |     if (r7 < r3) {
    0x0003f420 bmi.w 0x3ee1c                                     |         goto label_10;
                                                                 |     }
    0x0003f424 ldr r3, [r6, 0x48]                                |     r3 = *((r6 + 0x48));
    0x0003f426 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003f428 bne.w 0x3ee1c                                     |         goto label_10;
                                                                 |     }
    0x0003f42c ldr.w sl, [r6, 0x30]                              |     sl = *((r6 + 0x30));
    0x0003f430 add.w r7, fp, 0x148                               |     r7 += arg_148h;
    0x0003f434 vmov.i32 d8, 0                                    |     __asm ("vmov.i32 d8, 0");
    0x0003f438 mov.w r2, -1                                      |     r2 = -1;
    0x0003f43c str r3, [r4, 0x24]                                |     *((r4 + 0x24)) = r3;
    0x0003f43e mov r0, r7                                        |     r0 = r7;
    0x0003f440 strh r3, [r4, 0x1a]                               |     *((r4 + 0x1a)) = r3;
    0x0003f442 mov r1, sl                                        |     r1 = sl;
    0x0003f444 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x0003f446 movs r3, 2                                        |     r3 = 2;
    0x0003f448 vstr d8, [sp]                                     |     __asm ("vstr d8, [sp]");
    0x0003f44c str r3, [sp, 8]                                   |     var_8h = r3;
    0x0003f44e bl 0x231d0                                        |     r0 = fcn_000231d0 (r0, r1, r2, r3, r4, r5);
    0x0003f452 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0003f454 beq.w 0x4109c                                     |         goto label_147;
                                                                 |     }
    0x0003f458 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x0003f45a movw r1, 0x1101                                   |     r1 = 0x1101;
    0x0003f45e ldr r2, [r4, 0x2c]                                |     r2 = *((r4 + 0x2c));
    0x0003f460 str r1, [r4, 0x24]                                |     *((r4 + 0x24)) = r1;
    0x0003f462 str r0, [r2]                                      |     *(r2) = r0;
    0x0003f464 strh r3, [r4, 0x28]                               |     *((r4 + 0x28)) = r3;
    0x0003f466 strh r3, [r4, 0x18]                               |     *((r4 + 0x18)) = r3;
    0x0003f468 movs r3, 0x21                                     |     r3 = 0x21;
    0x0003f46a strh r3, [r4, 0x14]                               |     *((r4 + 0x14)) = r3;
                                                                 | label_108:
    0x0003f46c ldr.w r2, [fp, 0x44]                              |     r2 = *(arg_44h);
    0x0003f470 movs r3, 1                                        |     r3 = 1;
    0x0003f472 strh r3, [r4, 0x16]                               |     *((r4 + 0x16)) = r3;
    0x0003f474 str.w r4, [fp, 0x318]                             |     __asm ("str.w r4, [arg_318h]");
    0x0003f478 cmp r2, 0                                         |     
                                                                 |     if (r2 <= 0) {
    0x0003f47a ble.w 0x4106c                                     |         goto label_148;
                                                                 |     }
    0x0003f47e add.w r3, fp, 0x44                                |     r3 += arg_44h;
    0x0003f482 movs r1, 0                                        |     r1 = 0;
    0x0003f484 b 0x3f48e                                         |     
                                                                 |     while (sl != r0) {
    0x0003f486 adds r1, 1                                        |         r1++;
    0x0003f488 cmp r1, r2                                        |         
                                                                 |         if (r1 == r2) {
    0x0003f48a beq.w 0x4106c                                     |             goto label_148;
                                                                 |         }
    0x0003f48c strh r7, [r5, 0x2e]                               |         *((r5 + 0x2e)) = r7;
    0x0003f48e ldr r0, [r3, 4]!                                  |         r0 = *((r3 += 4));
    0x0003f492 cmp sl, r0                                        |         
    0x0003f494 bne 0x3f486                                       |         
                                                                 |     }
    0x0003f496 movs r3, 1                                        |     r3 = 1;
    0x0003f498 sub.w r2, r1, 0x20                                |     r2 = r1 - 0x20;
    0x0003f49c rsb.w r0, r1, 0x20                                |     r0 = 0x20 - r1;
    0x0003f4a0 lsl.w r2, r3, r2                                  |     r2 = r3 << r2;
    0x0003f4a4 lsr.w r0, r3, r0                                  |     r0 = r3 >> r0;
    0x0003f4a8 lsls r3, r1                                       |     r3 <<= r1;
    0x0003f4aa orrs r2, r0                                       |     r2 |= r0;
    0x0003f4ac b.w 0x41070                                       |     goto label_149;
                                                                 | label_118:
    0x0003f4b0 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0003f4b2 ldr r3, [r3]                                      |     r3 = *(r3);
    0x0003f4b4 cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x0003f4b6 bne.w 0x3f5d6                                     |         goto label_150;
                                                                 |     }
    0x0003f4ba ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0003f4bc ldr.w r0, [sb]                                    |     r0 = *(sb);
    0x0003f4c0 ldr.w sl, [r3, 0x30]                              |     sl = *((r3 + 0x30));
    0x0003f4c4 ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x0003f4c6 cmp r0, 0                                         |     
    0x0003f4c8 str r3, [sp, 0x1c]                                |     var_1ch = r3;
                                                                 |     if (r0 <= 0) {
    0x0003f4ca ble 0x3f506                                       |         goto label_151;
                                                                 |     }
    0x0003f4cc ldr.w r4, [sb, 4]                                 |     r4 = *((sb + 4));
    0x0003f4d0 add.w r0, r0, r0, lsl 2                           |     r0 += (r0 << 2);
    0x0003f4d4 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
                                                                 | label_11:
    0x0003f4d6 ldr.w r3, [r4, r2, lsl 2]                         |     offset_3 = r2 << 2;
                                                                 |     r3 = *((r4 + offset_3));
                                                                 |     if (r3 != 0) {
    0x0003f4da cbnz r3, 0x3f4f2                                  |         goto label_152;
                                                                 |     }
    0x0003f4dc b.w 0x411f6                                       |     goto label_153;
                                                                 |     do {
    0x0003f4e0 lsls r6, r1, 0xd                                  |         r6 = r1 << 0xd;
    0x0003f4e2 itett mi                                          |         
                                                                 |         if (r6 >= r1) {
    0x0003f4e4 ldrmi r3, [r3, 0x14]                              |             r3 = *((r3 + 0x14));
                                                                 |         }
                                                                 |         if (r6 < r1) {
    0x0003f4e6 ldrpl r3, [r3, 0xc]                               |             r3 = *((r3 + 0xc));
                                                                 |         }
                                                                 |         if (r6 >= r1) {
    0x0003f4e8 ldrmi r3, [r3, 4]                                 |             r3 = *((r3 + 4));
                                                                 |         }
                                                                 |         if (r6 >= r1) {
    0x0003f4ea ldrmi r3, [r3]                                    |             r3 = *(r3);
                                                                 |         }
    0x0003f4ec cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0003f4ee beq.w 0x411f6                                     |             goto label_153;
                                                                 |         }
                                                                 | label_152:
    0x0003f4f2 ldr r1, [r3, 4]                                   |         r1 = *((r3 + 4));
    0x0003f4f4 lsls r5, r1, 0x13                                 |         r5 = r1 << 0x13;
    0x0003f4f6 bmi 0x3f4e0                                       |         
                                                                 |     } while (r5 < r1);
    0x0003f4f8 ldrb r1, [r3]                                     |     r1 = *(r3);
    0x0003f4fa cmp r1, 0x9a                                      |     
                                                                 |     if (r1 == 0x9a) {
    0x0003f4fc beq.w 0x40292                                     |         goto label_154;
                                                                 |     }
                                                                 | label_36:
    0x0003f500 adds r2, 5                                        |     r2 += 5;
    0x0003f502 cmp r0, r2                                        |     
                                                                 |     if (r0 != r2) {
    0x0003f504 bne 0x3f4d6                                       |         goto label_11;
                                                                 |     }
                                                                 | label_151:
    0x0003f506 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0003f508 ldr r6, [r3, 8]                                   |     r6 = *((r3 + 8));
    0x0003f50a cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0003f50c beq 0x3f5d6                                       |         goto label_150;
                                                                 |     }
    0x0003f50e vmov.i8 d8, 0xff                                  |     __asm ("vmov.i8 d8, 0xff");
    0x0003f512 mov.w fp, 2                                       |     
    0x0003f516 b 0x3f51e                                         |     
                                                                 |     while (r3 == 0) {
                                                                 | label_13:
    0x0003f518 ldr r6, [r6, 0x14]                                |         r6 = *((r6 + 0x14));
    0x0003f51a cmp r6, 0                                         |         
                                                                 |         if (r6 == 0) {
    0x0003f51c beq 0x3f5d6                                       |             goto label_150;
                                                                 |         }
    0x0003f51e ldrb.w r3, [r6, 0x36]                             |         r3 = *((r6 + 0x36));
    0x0003f522 cmp r3, 0                                         |         
    0x0003f524 beq 0x3f518                                       |         
                                                                 |     }
    0x0003f526 ldrh r3, [r6, 0x32]                               |     r3 = *((r6 + 0x32));
    0x0003f528 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0003f52a beq 0x3f5ba                                       |         goto label_37;
                                                                 |     }
    0x0003f52c ldr.w r8, [sp, 0x58]                              |     r8 = var_58h;
    0x0003f530 movs r5, 0                                        |     r5 = 0;
    0x0003f532 b 0x3f53c                                         |     
                                                                 |     while (r0 != 0) {
                                                                 | label_19:
    0x0003f534 ldrh r3, [r6, 0x32]                               |         r3 = *((r6 + 0x32));
    0x0003f536 adds r5, 1                                        |         r5++;
    0x0003f538 cmp r5, r3                                        |         
                                                                 |         if (r5 >= r3) {
    0x0003f53a bge 0x3f5b6                                       |             goto label_155;
                                                                 |         }
    0x0003f53c ldr r3, [r6, 4]                                   |         r3 = *((r6 + 4));
    0x0003f53e mov r1, sl                                        |         r1 = sl;
    0x0003f540 mov r0, r8                                        |         r0 = r8;
    0x0003f542 ldrsh.w r7, [r3, r5, lsl 1]                       |         offset_4 = r5 << 1;
                                                                 |         r7 = *((r3 + offset_4));
    0x0003f546 strd fp, r6, [sp, 8]                              |         __asm ("strd fp, r6, [var_8h]");
    0x0003f54a vstr d8, [sp]                                     |         __asm ("vstr d8, [sp]");
    0x0003f54e mov r2, r7                                        |         r2 = r7;
    0x0003f550 bl 0x231d0                                        |         fcn_000231d0 (r0, r1, r2, r3, r4, r5);
    0x0003f554 lsls r2, r5, 1                                    |         r2 = r5 << 1;
    0x0003f556 cmp r0, 0                                         |         
    0x0003f558 bne 0x3f534                                       |         
                                                                 |     }
    0x0003f55a ldr r3, [r6, 0x20]                                |     r3 = *((r6 + 0x20));
    0x0003f55c ldr.w ip, [sb]                                    |     ip = *(sb);
    0x0003f560 ldr.w r3, [r3, r5, lsl 2]                         |     offset_5 = r5 << 2;
                                                                 |     r3 = *((r3 + offset_5));
    0x0003f564 cmp.w ip, 0                                       |     
    0x0003f568 str r3, [sp, 0x20]                                |     var_20h = r3;
                                                                 |     if (ip <= 0) {
    0x0003f56a ble 0x3f5b4                                       |         goto label_20;
                                                                 |     }
    0x0003f56c mov r3, r2                                        |     r3 = r2;
    0x0003f56e mov r4, r0                                        |     r4 = r0;
    0x0003f570 mov r2, r5                                        |     r2 = r5;
    0x0003f572 mov r5, r7                                        |     r5 = r7;
    0x0003f574 mov r7, r3                                        |     r7 = r3;
                                                                 | label_12:
    0x0003f576 ldr.w r3, [sb, 4]                                 |     r3 = *((sb + 4));
    0x0003f57a add.w r1, r4, r4, lsl 2                           |     r1 = r4 + (r4 << 2);
    0x0003f57e ldr.w r1, [r3, r1, lsl 2]                         |     offset_6 = r1 << 2;
                                                                 |     r1 = *((r3 + offset_6));
    0x0003f582 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0003f584 beq.w 0x411f6                                     |         goto label_153;
                                                                 |     }
    0x0003f588 mov r3, r1                                        |     r3 = r1;
    0x0003f58a b 0x3f59e                                         |     
                                                                 |     while ((r0 & 0x1000) != 0) {
    0x0003f58c lsls r0, r0, 0xd                                  |         r0 <<= 0xd;
    0x0003f58e itett mi                                          |         
                                                                 |         if (r0 >= r0) {
    0x0003f590 ldrmi r3, [r3, 0x14]                              |             r3 = *((r3 + 0x14));
                                                                 |         }
                                                                 |         if (r0 < r0) {
    0x0003f592 ldrpl r3, [r3, 0xc]                               |             r3 = *((r3 + 0xc));
                                                                 |         }
                                                                 |         if (r0 >= r0) {
    0x0003f594 ldrmi r3, [r3, 4]                                 |             r3 = *((r3 + 4));
                                                                 |         }
                                                                 |         if (r0 >= r0) {
    0x0003f596 ldrmi r3, [r3]                                    |             r3 = *(r3);
                                                                 |         }
    0x0003f598 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0003f59a beq.w 0x411f6                                     |             goto label_153;
                                                                 |         }
    0x0003f59e ldr r0, [r3, 4]                                   |         r0 = *((r3 + 4));
    0x0003f5a0 tst.w r0, 0x1000                                  |         
    0x0003f5a4 bne 0x3f58c                                       |         
                                                                 |     }
    0x0003f5a6 ldrb r0, [r3]                                     |     r0 = *(r3);
    0x0003f5a8 cmp r0, 0x9a                                      |     
                                                                 |     if (r0 == 0x9a) {
    0x0003f5aa beq 0x3f5fc                                       |         goto label_156;
                                                                 |     }
                                                                 | label_18:
    0x0003f5ac adds r4, 1                                        |     r4++;
    0x0003f5ae cmp r4, ip                                        |     
                                                                 |     if (r4 < ip) {
    0x0003f5b0 blt 0x3f576                                       |         goto label_12;
                                                                 |     }
    0x0003f5b2 mov r5, r2                                        |     r5 = r2;
                                                                 | label_20:
    0x0003f5b4 ldrh r3, [r6, 0x32]                               |     r3 = *((r6 + 0x32));
                                                                 | label_155:
    0x0003f5b6 cmp r3, r5                                        |     
                                                                 |     if (r3 != r5) {
    0x0003f5b8 bne 0x3f518                                       |         goto label_13;
                                                                 |     }
                                                                 | label_37:
    0x0003f5ba ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0003f5bc movs r3, 1                                        |     r3 = 1;
    0x0003f5be strb.w r3, [r2, 0x28]                             |     *((r2 + 0x28)) = r3;
    0x0003f5c2 b 0x3ee0a                                         |     goto label_14;
                                                                 | label_115:
    0x0003f5c4 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0003f5c6 movs r3, 1                                        |     r3 = 1;
    0x0003f5c8 strb.w r3, [r2, 0x28]                             |     *((r2 + 0x28)) = r3;
    0x0003f5cc b.w 0x3eda2                                       |     goto label_15;
                                                                 | label_126:
    0x0003f5d0 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x0003f5d2 mov r1, r4                                        |     r1 = r4;
    0x0003f5d4 b 0x3efb4                                         |     goto label_16;
                                                                 | label_150:
    0x0003f5d6 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0003f5d8 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003f5da bne.w 0x3ee0a                                     |         goto label_14;
                                                                 |     }
    0x0003f5de ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0003f5e0 ldrh r3, [r2, 0x22]                               |     r3 = *((r2 + 0x22));
    0x0003f5e2 str.w sb, [r2, 8]                                 |     __asm ("str.w sb, [r2, 8]");
    0x0003f5e6 orr r3, r3, 0x200                                 |     r3 |= 0x200;
    0x0003f5ea strh r3, [r2, 0x22]                               |     *((r2 + 0x22)) = r3;
    0x0003f5ec b 0x3ee0a                                         |     goto label_14;
                                                                 | label_123:
    0x0003f5ee ldr r5, [sp, 0x20]                                |     r5 = var_20h;
    0x0003f5f0 mov r0, r5                                        |     r0 = r5;
    0x0003f5f2 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x0003f5f6 mov r1, r4                                        |     r1 = r4;
    0x0003f5f8 mov r0, r5                                        |     r0 = r5;
    0x0003f5fa b 0x3eef4                                         |     goto label_17;
                                                                 | label_156:
    0x0003f5fc ldr r0, [r6, 4]                                   |     r0 = *((r6 + 4));
    0x0003f5fe ldrsh.w lr, [r3, 0x20]                            |     
    0x0003f602 ldrsh r0, [r0, r7]                                |     r0 = *((r0 + r7));
    0x0003f604 cmp lr, r0                                        |     
                                                                 |     if (lr != r0) {
    0x0003f606 bne 0x3f5ac                                       |         goto label_18;
                                                                 |     }
    0x0003f608 ldr r3, [r3, 0x1c]                                |     r3 = *((r3 + 0x1c));
    0x0003f60a cmp sl, r3                                        |     
                                                                 |     if (sl != r3) {
    0x0003f60c bne 0x3f5ac                                       |         goto label_18;
                                                                 |     }
    0x0003f60e ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x0003f610 str r2, [sp, 0x24]                                |     var_24h = r2;
    0x0003f612 bl 0x22e78                                        |     fcn_00022e78 (r0, r1);
    0x0003f616 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
                                                                 |     if (r0 != 0) {
    0x0003f618 cbz r0, 0x3f628                                   |         
    0x0003f61a ldr r0, [r0]                                      |         r0 = *(r0);
    0x0003f61c ldr r1, [sp, 0x20]                                |         r1 = var_20h;
    0x0003f61e str r2, [sp, 0x24]                                |         var_24h = r2;
    0x0003f620 blx 0x6164                                        |         fcn_00006164 ();
    0x0003f624 ldr r2, [sp, 0x24]                                |         r2 = var_24h;
                                                                 |         if (r0 == 0) {
    0x0003f626 cbz r0, 0x3f62e                                   |             goto label_157;
                                                                 |         }
                                                                 |     }
    0x0003f628 ldr.w ip, [sb]                                    |     ip = *(sb);
    0x0003f62c b 0x3f5ac                                         |     goto label_18;
                                                                 | label_157:
    0x0003f62e ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0003f630 mov r7, r5                                        |     r7 = r5;
    0x0003f632 add.w r7, r7, r7, lsl 1                           |     r7 += (r7 << 1);
    0x0003f636 mov r5, r2                                        |     r5 = r2;
    0x0003f638 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0003f63a add.w r3, r3, r7, lsl 3                           |     r3 += (r7 << 3);
    0x0003f63e ldrb r3, [r3, 0x14]                               |     r3 = *((r3 + 0x14));
    0x0003f640 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003f642 bne.w 0x3f534                                     |         goto label_19;
                                                                 |     }
    0x0003f646 b 0x3f5b4                                         |     goto label_20;
                                                                 | label_138:
    0x0003f648 ldrd r1, r3, [sp, 0x30]                           |     __asm ("ldrd r1, r3, [var_30h]");
    0x0003f64c b 0x3f262                                         |     goto label_21;
                                                                 | label_137:
    0x0003f670 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0003f672 mov.w r8, 0x48                                    |     r8 = 0x48;
    0x0003f676 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x0003f678 mla r8, r8, r2, r3                                |     __asm ("mla r8, r8, r2, r3");
    0x0003f67c ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0003f67e ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0003f680 add.w r8, r8, 8                                   |     r8 += 8;
    0x0003f684 str r3, [sp, 0x54]                                |     var_54h = r3;
    0x0003f686 ldr r0, [sp, 0x54]                                |     r0 = var_54h;
    0x0003f688 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0003f68a beq.w 0x4054c                                     |         goto label_158;
                                                                 |     }
                                                                 | label_51:
    0x0003f68e ldr r4, [sp, 0x14]                                |     r4 = var_14h;
    0x0003f690 movs r7, 0                                        |     r7 = 0;
    0x0003f692 mov r3, r7                                        |     r3 = r7;
    0x0003f694 ldr r2, [r4, 0x50]                                |     r2 = *((r4 + 0x50));
    0x0003f696 str r7, [sp]                                      |     *(sp) = r7;
    0x0003f698 adds r1, r2, 1                                    |     r1 = r2 + 1;
    0x0003f69a str r1, [r4, 0x50]                                |     *((r4 + 0x50)) = r1;
    0x0003f69c movs r1, 0x2b                                     |     r1 = 0x2b;
    0x0003f69e bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003f6a2 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0003f6a4 ldr r1, [sp, 0x20]                                |     r1 = var_20h;
    0x0003f6a6 str r0, [sp, 0x6c]                                |     var_6ch = r0;
    0x0003f6a8 ldr.w r3, [r2, 0x154]                             |     r3 = *((r2 + 0x154));
    0x0003f6ac ldr.w r4, [r2, 0x15c]                             |     r4 = *((r2 + 0x15c));
    0x0003f6b0 ldr.w r0, [sb, 0x318]                             |     r0 = *((sb + 0x318));
    0x0003f6b4 add.w r3, r3, r3, lsl 1                           |     r3 += (r3 << 1);
    0x0003f6b8 str r0, [sp, 0x28]                                |     var_28h = r0;
    0x0003f6ba add.w r2, r4, r3, lsl 4                           |     r2 = r4 + (r3 << 4);
    0x0003f6be lsls r3, r1, 3                                    |     r3 = r1 << 3;
    0x0003f6c0 str r3, [sp, 0x64]                                |     var_64h = r3;
    0x0003f6c2 add r3, r1                                        |     r3 += r1;
    0x0003f6c4 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x0003f6c6 cmp r4, r2                                        |     
    0x0003f6c8 str r2, [sp, 0x18]                                |     var_18h = r2;
    0x0003f6ca add.w r3, r1, r3, lsl 3                           |     r3 = r1 + (r3 << 3);
    0x0003f6ce ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x0003f6d0 str r3, [sp, 0x50]                                |     var_50h = r3;
                                                                 |     if (r4 >= r2) {
    0x0003f6d2 bhs.w 0x409d6                                     |         goto label_159;
                                                                 |     }
    0x0003f6d6 ldr.w r3, [pc, 0xb54]                             |     r3 = *(0x0004022c);
    0x0003f6da mov fp, r7                                        |     
    0x0003f6dc mov sl, r7                                        |     sl = r7;
    0x0003f6de str r7, [sp, 0x1c]                                |     var_1ch = r7;
    0x0003f6e0 str r7, [sp, 0x24]                                |     var_24h = r7;
    0x0003f6e2 str.w sb, [sp, 0x68]                              |     __asm ("str.w sb, [var_68h]");
    0x0003f6e6 add r3, pc                                        |     r3 += pc;
    0x0003f6e8 ldrd r7, sb, [sp, 0x30]                           |     __asm ("ldrd r7, sb, [var_30h]");
    0x0003f6ec str r3, [sp, 0x60]                                |     var_60h = r3;
                                                                 |     do {
    0x0003f6ee mov r2, r7                                        |         r2 = r7;
    0x0003f6f0 mov r3, sb                                        |         r3 = sb;
    0x0003f6f2 mov r1, r8                                        |         r1 = r8;
    0x0003f6f4 mov r0, r4                                        |         r0 = r4;
    0x0003f6f6 bl 0xc474                                         |         r0 = fcn_0000c474 (r0, r1);
    0x0003f6fa cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x0003f6fc beq 0x3f776                                       |             
    0x0003f6fe ldr r3, [r4, 0xc]                                 |             r3 = *((r4 + 0xc));
    0x0003f700 cmp r3, 0x3f                                      |             
    0x0003f702 itt gt                                            |             
                                                                 |             if (r3 <= 0x3f) {
    0x0003f704 movgt r6, 0                                       |                 r6 = 0;
                                                                 |             }
                                                                 |             if (r3 <= 0x3f) {
    0x0003f706 movgt r5, -0x80000000                             |                 r5 = -0x80000000;
                                                                 |             }
                                                                 |             if (r3 <= 0x3f) {
    0x0003f70a bgt 0x3f724                                       |                 
    0x0003f70c movs r1, 1                                        |                 r1 = 1;
    0x0003f70e sub.w r5, r3, 0x20                                |                 r5 = r3 - 0x20;
    0x0003f712 rsb.w r2, r3, 0x20                                |                 r2 = 0x20 - r3;
    0x0003f716 lsl.w r5, r1, r5                                  |                 r5 = r1 << r5;
    0x0003f71a lsr.w r2, r1, r2                                  |                 r2 = r1 >> r2;
    0x0003f71e lsl.w r6, r1, r3                                  |                 r6 = r1 << r3;
    0x0003f722 orrs r5, r2                                       |                 r5 |= r2;
                                                                 |             }
    0x0003f724 cmp.w fp, 0                                       |             
                                                                 |             if (fp == 0) {
    0x0003f728 beq.w 0x3fa92                                     |                 goto label_160;
                                                                 |             }
                                                                 | label_26:
    0x0003f72c ldr r2, [sp, 0x1c]                                |             r2 = var_1ch;
    0x0003f72e and.w r3, r6, sl                                  |             r3 = r6 & sl;
    0x0003f732 ands r2, r5                                       |             r2 &= r5;
    0x0003f734 orrs r3, r2                                       |             r3 |= r2;
                                                                 |             if (r3 != r2) {
    0x0003f736 bne.w 0x3fa8c                                     |                 goto label_161;
                                                                 |             }
    0x0003f73a ldr r3, [sp, 0x28]                                |             r3 = var_28h;
    0x0003f73c ldr r2, [sp, 0x24]                                |             r2 = var_24h;
    0x0003f73e ldrh r3, [r3, 0x2a]                               |             r3 = *((r3 + 0x2a));
    0x0003f740 add.w fp, r2, 1                                   |             
    0x0003f744 ldr r2, [sp, 0x14]                                |             r2 = var_14h;
    0x0003f746 cmp fp, r3                                        |             
    0x0003f748 ldr r0, [r2]                                      |             r0 = *(r2);
                                                                 |             if (fp > r3) {
    0x0003f74a ble 0x3f75a                                       |                 
    0x0003f74c ldr r1, [sp, 0x28]                                |                 r1 = var_28h;
    0x0003f74e mov r2, fp                                        |                 r2 = fp;
    0x0003f750 bl 0xeee4                                         |                 r0 = fcn_0000eee4 (r0, r1, r2);
    0x0003f754 cmp r0, 0                                         |                 
                                                                 |                 if (r0 != 0) {
    0x0003f756 bne.w 0x40720                                     |                     goto label_162;
                                                                 |                 }
                                                                 |             }
    0x0003f75a ldr r3, [sp, 0x1c]                                |             r3 = var_1ch;
    0x0003f75c orr.w sl, r6, sl                                  |             sl = r6 | sl;
    0x0003f760 ldr r2, [sp, 0x24]                                |             r2 = var_24h;
    0x0003f762 str.w fp, [sp, 0x24]                              |             __asm ("str.w fp, [var_24h]");
    0x0003f766 mov.w fp, 1                                       |             
    0x0003f76a orrs r3, r5                                       |             r3 |= r5;
    0x0003f76c str r3, [sp, 0x1c]                                |             var_1ch = r3;
    0x0003f76e ldr r3, [sp, 0x28]                                |             r3 = var_28h;
    0x0003f770 ldr r3, [r3, 0x2c]                                |             r3 = *((r3 + 0x2c));
    0x0003f772 str.w r4, [r3, r2, lsl 2]                         |             __asm ("str.w r4, [r3, r2, lsl 2]");
                                                                 |         }
                                                                 | label_25:
    0x0003f776 ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x0003f778 adds r4, 0x30                                     |         r4 += 0x30;
    0x0003f77a cmp r3, r4                                        |         
    0x0003f77c bhi 0x3f6ee                                       |         
                                                                 |     } while (r3 > r4);
    0x0003f77e ldr r7, [sp, 0x24]                                |     r7 = var_24h;
    0x0003f780 mvn.w sl, sl                                      |     sl = ~sl;
    0x0003f784 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0003f786 ldr.w sb, [sp, 0x68]                              |     sb = var_68h;
    0x0003f78a mvns r4, r3                                       |     r4 = ~r3;
    0x0003f78c uxth r3, r7                                       |     r3 = (int16_t) r7;
    0x0003f78e orr r4, r4, 0x80000000                            |     r4 |= 0x80000000;
                                                                 | label_74:
    0x0003f792 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x0003f794 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x0003f796 strh r3, [r0, 0x28]                               |     *((r0 + 0x28)) = r3;
    0x0003f798 strh r3, [r0, 0x18]                               |     *((r0 + 0x18)) = r3;
    0x0003f79a ldr r3, [sp, 0x64]                                |     r3 = var_64h;
    0x0003f79c add r3, r2                                        |     r3 += r2;
    0x0003f79e ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x0003f7a0 add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0003f7a4 ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x0003f7a6 ldr r5, [r3, 0x40]                                |     r5 = *((r3 + 0x40));
    0x0003f7a8 ldrsh.w r1, [r2, 0x26]                            |     r1 = *((r2 + 0x26));
    0x0003f7ac movw r2, 0x4241                                   |     r2 = 0x4241;
    0x0003f7b0 str r2, [r0, 0x24]                                |     *((r0 + 0x24)) = r2;
    0x0003f7b2 ldr r0, [r3, 0x44]                                |     r0 = *((r3 + 0x44));
    0x0003f7b4 and.w r5, r5, sl                                  |     r5 &= sl;
    0x0003f7b8 cmp r1, 0x3f                                      |     
    0x0003f7ba mov r6, r1                                        |     r6 = r1;
    0x0003f7bc it ge                                             |     
                                                                 |     if (r1 < 0x3f) {
    0x0003f7be movge r6, 0x3f                                    |         r6 = 0x3f;
                                                                 |     }
    0x0003f7c0 cmp r1, 0                                         |     
    0x0003f7c2 and.w r4, r4, r0                                  |     r4 &= r0;
    0x0003f7c6 str r1, [sp, 0x1c]                                |     var_1ch = r1;
                                                                 |     if (r1 <= 0) {
    0x0003f7c8 ble 0x3f7f0                                       |         goto label_163;
                                                                 |     }
    0x0003f7ca movs r3, 0                                        |     r3 = 0;
                                                                 |     do {
    0x0003f7cc rsb.w r1, r3, 0x20                                |         r1 = 0x20 - r3;
    0x0003f7d0 lsr.w r2, r5, r3                                  |         r2 = r5 >> r3;
    0x0003f7d4 lsl.w r1, r4, r1                                  |         r1 = r4 << r1;
    0x0003f7d8 orrs r2, r1                                       |         r2 |= r1;
    0x0003f7da sub.w r1, r3, 0x20                                |         r1 = r3 - 0x20;
    0x0003f7de lsr.w r1, r4, r1                                  |         r1 = r4 >> r1;
    0x0003f7e2 adds r3, 1                                        |         r3++;
    0x0003f7e4 orrs r2, r1                                       |         r2 |= r1;
    0x0003f7e6 lsls r1, r2, 0x1f                                 |         r1 = r2 << 0x1f;
    0x0003f7e8 it mi                                             |         
                                                                 |         if (r1 >= r2) {
    0x0003f7ea addmi r7, 1                                       |             r7++;
                                                                 |         }
    0x0003f7ec cmp r6, r3                                        |         
    0x0003f7ee bne 0x3f7cc                                       |         
                                                                 |     } while (r6 != r3);
                                                                 | label_163:
    0x0003f7f0 cmp r0, 0                                         |     
    0x0003f7f2 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x0003f7f4 it lt                                             |     
                                                                 |     if (r0 >= 0) {
    0x0003f7f6 ldrlt r3, [sp, 0x1c]                              |         r3 = var_1ch;
                                                                 |     }
    0x0003f7f8 ldr r0, [r2]                                      |     r0 = *(r2);
    0x0003f7fa mov.w r2, 0                                       |     r2 = 0;
    0x0003f7fe itt lt                                            |     
                                                                 |     if (r0 >= 0) {
    0x0003f800 sublt r3, 0x3f                                    |         r3 -= 0x3f;
                                                                 |     }
                                                                 |     if (r0 >= 0) {
    0x0003f802 addlt r7, r7, r3                                  |         r7 += r3;
                                                                 |     }
    0x0003f804 adds r3, r7, 1                                    |     r3 = r7 + 1;
    0x0003f806 sxth r1, r3                                       |     __asm ("sxth r1, r3");
    0x0003f808 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x0003f80a add r3, sp, 0xc0                                  |     r3 += var_c0h;
    0x0003f80c bl 0xd660                                         |     r0 = fcn_0000d660 (r0, r1, r2, r3);
    0x0003f810 mov sl, r0                                        |     sl = r0;
    0x0003f812 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0003f814 beq.w 0x3fa76                                     |         goto label_61;
                                                                 |     }
    0x0003f818 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x0003f81a mov.w fp, 0                                       |     
    0x0003f81c lsrs r0, r0, 0xc                                  |     r0 >>= 0xc;
    0x0003f81e str r0, [r3, 0x1c]                                |     *((r3 + 0x1c)) = r0;
    0x0003f820 ldr r3, [sp, 0x88]                                |     r3 = var_88h;
    0x0003f822 str r3, [r0]                                      |     *(r0) = r3;
    0x0003f824 ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x0003f826 str r3, [r0, 0xc]                                 |     *((r0 + 0xc)) = r3;
    0x0003f828 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0003f82a ldr.w r7, [r3, 0x15c]                             |     r7 = *((r3 + 0x15c));
    0x0003f82e ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0003f830 cmp r3, r7                                        |     
                                                                 |     if (r3 < r7) {
    0x0003f832 bls.w 0x40860                                     |         goto label_164;
                                                                 |     }
    0x0003f836 str r6, [sp, 0x28]                                |     var_28h = r6;
    0x0003f838 str.w sb, [sp, 0x60]                              |     __asm ("str.w sb, [var_60h]");
    0x0003f83c mov sb, fp                                        |     sb = fp;
    0x0003f83e str r5, [sp, 0x68]                                |     var_68h = r5;
    0x0003f840 str r4, [sp, 0x70]                                |     var_70h = r4;
    0x0003f842 mov r4, r3                                        |     r4 = r3;
    0x0003f844 ldrd r5, r6, [sp, 0x30]                           |     __asm ("ldrd r5, r6, [var_30h]");
    0x0003f848 str.w fp, [sp, 0x18]                              |     __asm ("str.w fp, [var_18h]");
    0x0003f84c b 0x3f854                                         |     
                                                                 |     while (r0 == 0) {
                                                                 | label_22:
    0x0003f84e adds r7, 0x30                                     |         r7 += 0x30;
    0x0003f850 cmp r4, r7                                        |         
                                                                 |         if (r4 < r7) {
    0x0003f852 bls 0x3f8ce                                       |             goto label_165;
                                                                 |         }
                                                                 | label_23:
    0x0003f854 mov r2, r5                                        |         r2 = r5;
    0x0003f856 mov r3, r6                                        |         r3 = r6;
    0x0003f858 mov r1, r8                                        |         r1 = r8;
    0x0003f85a mov r0, r7                                        |         r0 = r7;
    0x0003f85c bl 0xc474                                         |         r0 = fcn_0000c474 (r0, r1);
    0x0003f860 cmp r0, 0                                         |         
    0x0003f862 beq 0x3f84e                                       |         
                                                                 |     }
    0x0003f864 ldr r1, [r7, 0xc]                                 |     r1 = *((r7 + 0xc));
    0x0003f866 cmp r1, 0x3f                                      |     
    0x0003f868 itt gt                                            |     
                                                                 |     if (r1 <= 0x3f) {
    0x0003f86a movgt r0, 0                                       |         r0 = 0;
                                                                 |     }
                                                                 |     if (r1 <= 0x3f) {
    0x0003f86c movgt r2, -0x80000000                             |         r2 = -0x80000000;
                                                                 |     }
                                                                 |     if (r1 <= 0x3f) {
    0x0003f870 bgt 0x3f888                                       |         
    0x0003f872 movs r0, 1                                        |         r0 = 1;
    0x0003f874 sub.w r2, r1, 0x20                                |         r2 = r1 - 0x20;
    0x0003f878 rsb.w r3, r1, 0x20                                |         r3 = 0x20 - r1;
    0x0003f87c lsl.w r2, r0, r2                                  |         r2 = r0 << r2;
    0x0003f880 lsr.w r3, r0, r3                                  |         r3 = r0 >> r3;
    0x0003f884 lsls r0, r1                                       |         r0 <<= r1;
    0x0003f886 orrs r2, r3                                       |         r2 |= r3;
                                                                 |     }
    0x0003f888 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0003f88a and.w ip, r2, sb                                  |     
    0x0003f88e ands r3, r0                                       |     r3 &= r0;
    0x0003f890 orrs.w r3, r3, ip                                 |     r3 |= ip;
                                                                 |     if (r3 != r3) {
    0x0003f894 bne 0x3f84e                                       |         goto label_22;
                                                                 |     }
    0x0003f896 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0003f898 orr.w sb, r2, sb                                  |     sb = r2 | sb;
    0x0003f89c ldr.w r2, [sl, 4]                                 |     r2 = *((sl + 4));
    0x0003f8a0 orrs r3, r0                                       |     r3 |= r0;
    0x0003f8a2 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x0003f8a4 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x0003f8a6 ldr r3, [r7]                                      |     r3 = *(r7);
    0x0003f8a8 strh.w r1, [r2, fp, lsl 1]                        |     offset_7 = fp << 1;
                                                                 |     *((r2 + offset_7)) = r1;
    0x0003f8ac ldrd r1, r2, [r3, 0xc]                            |     __asm ("ldrd r1, r2, [r3, 0xc]");
    0x0003f8b0 bl 0x22f58                                        |     r0 = fcn_00022f58 (r0, r1, r2);
    0x0003f8b4 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0003f8b6 beq.w 0x40438                                     |         goto label_166;
                                                                 |     }
    0x0003f8ba ldr r2, [r0]                                      |     r2 = *(r0);
                                                                 | label_48:
    0x0003f8bc ldr.w r3, [sl, 0x20]                              |     r3 = *((sl + 0x20));
    0x0003f8c0 adds r7, 0x30                                     |     r7 += 0x30;
    0x0003f8c2 cmp r4, r7                                        |     
    0x0003f8c4 str.w r2, [r3, fp, lsl 2]                         |     __asm ("str.w r2, [r3, fp, lsl 2]");
    0x0003f8c8 add.w fp, fp, 1                                   |     
                                                                 |     if (r4 > r7) {
    0x0003f8cc bhi 0x3f854                                       |         goto label_23;
                                                                 |     }
                                                                 | label_165:
    0x0003f8ce ldr r6, [sp, 0x28]                                |     r6 = var_28h;
    0x0003f8d0 lsl.w r7, fp, 1                                   |     r7 = fp << 1;
    0x0003f8d4 ldr.w sb, [sp, 0x60]                              |     sb = var_60h;
    0x0003f8d8 lsl.w ip, fp, 2                                   |     
    0x0003f8dc ldr r5, [sp, 0x68]                                |     r5 = var_68h;
    0x0003f8de ldr r4, [sp, 0x70]                                |     r4 = var_70h;
                                                                 | label_67:
    0x0003f8e0 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0003f8e2 ldr.w r0, [sl, 4]                                 |     r0 = *((sl + 4));
    0x0003f8e6 ldr.w r1, [sl, 0x20]                              |     r1 = *((sl + 0x20));
    0x0003f8ea cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x0003f8ec ble 0x3f92e                                       |         goto label_167;
                                                                 |     }
    0x0003f8ee ldr.w ip, [sp, 0x8c]                              |     ip = var_8ch;
    0x0003f8f2 movs r3, 0                                        |     r3 = 0;
                                                                 |     do {
    0x0003f8f4 rsb.w r7, r3, 0x20                                |         r7 = 0x20 - r3;
    0x0003f8f8 lsr.w r2, r5, r3                                  |         r2 = r5 >> r3;
    0x0003f8fc lsl.w r7, r4, r7                                  |         r7 = r4 << r7;
    0x0003f900 orrs r2, r7                                       |         r2 |= r7;
    0x0003f902 sub.w r7, r3, 0x20                                |         r7 = r3 - 0x20;
    0x0003f906 lsr.w r7, r4, r7                                  |         r7 = r4 >> r7;
    0x0003f90a orrs r2, r7                                       |         r2 |= r7;
    0x0003f90c lsls r2, r2, 0x1f                                 |         r2 <<= 0x1f;
    0x0003f90e it mi                                             |         
                                                                 |         if (r2 < r2) {
    0x0003f910 strhmi r3, [r0, fp, lsl 1]                        |             __asm ("strhmi r3, [r0, fp, lsl 1]");
                                                                 |         }
    0x0003f914 add.w r3, r3, 1                                   |         r3++;
    0x0003f918 itt mi                                            |         
                                                                 |         if (r2 >= r2) {
    0x0003f91a strmi ip, [r1, fp, lsl 2]                         |             offset_8 = fp << 2;
                                                                 |             *((r1 + offset_8)) = ip;
                                                                 |         }
                                                                 |         if (r2 < r2) {
    0x0003f91e add.w fp, fp, 1                                   |             
                                                                 |         }
    0x0003f922 cmp r6, r3                                        |         
    0x0003f924 bne 0x3f8f4                                       |         
                                                                 |     } while (r6 != r3);
    0x0003f926 lsl.w r7, fp, 1                                   |     r7 = fp << 1;
    0x0003f92a lsl.w ip, fp, 2                                   |     
                                                                 | label_167:
    0x0003f92e ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x0003f930 ldr r3, [sp, 0x64]                                |     r3 = var_64h;
    0x0003f932 add r3, r2                                        |     r3 += r2;
    0x0003f934 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x0003f936 add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0003f93a ldr r3, [r3, 0x44]                                |     r3 = *((r3 + 0x44));
    0x0003f93c cmp r3, 0                                         |     
                                                                 |     if (r3 < 0) {
    0x0003f93e blt.w 0x403f6                                     |         goto label_168;
                                                                 |     }
                                                                 | label_47:
    0x0003f942 ldr r5, [sp, 0x14]                                |     r5 = var_14h;
    0x0003f944 movw r6, 0xffff                                   |     r6 = 0xffff;
    0x0003f948 movs r4, 0                                        |     r4 = 0;
    0x0003f94a ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x0003f94c ldr r2, [r5, 0x44]                                |     r2 = *((r5 + 0x44));
    0x0003f94e ldr.w r5, [pc, 0x8e0]                             |     
    0x0003f952 strh r6, [r0, r7]                                 |     *((r0 + r7)) = r6;
    0x0003f954 ldr r7, [sp, 0x14]                                |     r7 = var_14h;
    0x0003f956 ldr r6, [sp, 0x54]                                |     r6 = var_54h;
    0x0003f958 add r5, pc                                        |     r5 = 0x7fb8e;
    0x0003f95a str.w r5, [r1, ip]                                |     __asm ("str.w r5, [r1, ip]");
    0x0003f95e adds r1, r2, 1                                    |     r1 = r2 + 1;
    0x0003f960 str r1, [r7, 0x44]                                |     *((r7 + 0x44)) = r1;
    0x0003f962 movs r1, 0x37                                     |     r1 = 0x37;
    0x0003f964 str.w r2, [sb, 0x2e8]                             |     __asm ("str.w r2, aav.0x000000ff");
    0x0003f968 mov r0, r6                                        |     r0 = r6;
    0x0003f96a str r4, [sp]                                      |     *(sp) = r4;
    0x0003f96c bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003f970 ldr r5, [r7, 8]                                   |     r5 = *((r7 + 8));
    0x0003f972 mov r1, sl                                        |     r1 = sl;
    0x0003f974 mov r0, r7                                        |     r0 = r7;
    0x0003f976 bl 0x21ff4                                        |     fcn_00021ff4 (r0, r1);
    0x0003f97a mvn r3, 5                                         |     r3 = ~5;
    0x0003f97e mov r2, r0                                        |     r2 = r0;
    0x0003f980 mov.w r1, -1                                      |     r1 = -1;
    0x0003f984 mov r0, r5                                        |     r0 = r5;
    0x0003f986 bl 0x1021c                                        |     fcn_0001021c (r0, r1, r2, r3);
    0x0003f98a ldr.w r2, [sb, 0x2e4]                             |     r2 = *((sb + 0x2e4));
    0x0003f98e mov r3, r4                                        |     r3 = r4;
    0x0003f990 mov r0, r6                                        |     r0 = r6;
    0x0003f992 movs r1, 0x6a                                     |     r1 = 0x6a;
    0x0003f994 str r4, [sp]                                      |     *(sp) = r4;
    0x0003f996 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003f99a ldrb r3, [r7, 0x13]                               |     r3 = *((r7 + 0x13));
    0x0003f99c mov r6, r0                                        |     r6 = r0;
    0x0003f99e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0003f9a0 beq.w 0x4051c                                     |         goto label_169;
                                                                 |     }
    0x0003f9a4 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x0003f9a6 subs r3, 1                                        |     r3--;
    0x0003f9a8 uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x0003f9aa strb r3, [r2, 0x13]                               |     *((r2 + 0x13)) = r3;
    0x0003f9ac adds r3, 6                                        |     r3 += 6;
    0x0003f9ae ldr.w r4, [r2, r3, lsl 2]                         |     offset_9 = r3 << 2;
                                                                 |     r4 = *((r2 + offset_9));
                                                                 | label_49:
    0x0003f9b2 movs r5, 0                                        |     r5 = 0;
    0x0003f9b4 ldr.w r2, [sb, 0x2e4]                             |     r2 = *((sb + 0x2e4));
    0x0003f9b8 mov r1, sl                                        |     r1 = sl;
    0x0003f9ba mov r3, r4                                        |     r3 = r4;
    0x0003f9bc strd r5, r5, [sp, 8]                              |     __asm ("strd r5, r5, [var_8h]");
    0x0003f9c0 strd r5, r5, [sp]                                 |     __asm ("strd r5, r5, [sp]");
    0x0003f9c4 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x0003f9c6 bl 0x3d550                                        |     fcn_0003d550 (r0, r1, r2, r3);
    0x0003f9ca ldr.w r2, [sb, 0x2e8]                             |     r2 = *((sb + 0x2e8));
    0x0003f9ce mov r3, r4                                        |     r3 = r4;
    0x0003f9d0 str r5, [sp]                                      |     *(sp) = r5;
    0x0003f9d2 movs r1, 0x6c                                     |     r1 = 0x6c;
    0x0003f9d4 ldr r5, [sp, 0x54]                                |     r5 = var_54h;
    0x0003f9d6 mov r0, r5                                        |     r0 = r5;
    0x0003f9d8 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003f9dc ldr r3, [r5, 4]                                   |     r3 = *((r5 + 4));
                                                                 |     if (r3 != 0) {
    0x0003f9de cbz r3, 0x3f9f0                                   |         
    0x0003f9e0 ldr r2, [r5, 0x20]                                |         r2 = *((r5 + 0x20));
    0x0003f9e2 add.w r2, r2, r2, lsl 2                           |         r2 += (r2 << 2);
    0x0003f9e6 add.w r3, r3, r2, lsl 2                           |         r3 += (r2 << 2);
    0x0003f9ea movs r2, 0x10                                     |         r2 = 0x10;
    0x0003f9ec strb r2, [r3, -0x11]                              |         *((r3 - 0x11)) = r2;
                                                                 |     }
    0x0003f9f0 ldr r5, [sp, 0x54]                                |     r5 = var_54h;
    0x0003f9f2 movs r3, 0                                        |     r3 = 0;
    0x0003f9f4 ldr.w r2, [sb, 0x2e4]                             |     r2 = *((sb + 0x2e4));
    0x0003f9f8 movs r1, 9                                        |     r1 = 9;
    0x0003f9fa str r3, [sp]                                      |     *(sp) = r3;
    0x0003f9fc adds r3, r6, 1                                    |     r3 = r6 + 1;
    0x0003f9fe mov r0, r5                                        |     r0 = r5;
    0x0003fa00 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003fa04 ldr r1, [r5, 4]                                   |     r1 = *((r5 + 4));
    0x0003fa06 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x0003fa08 ldr r2, [r3, 0x20]                                |     r2 = *((r3 + 0x20));
                                                                 |     if (r1 != 0) {
    0x0003fa0a cbz r1, 0x3fa1a                                   |         
    0x0003fa0c add.w r3, r2, r2, lsl 2                           |         r3 = r2 + (r2 << 2);
    0x0003fa10 movs r0, 3                                        |         r0 = 3;
    0x0003fa12 add.w r3, r1, r3, lsl 2                           |         r3 = r1 + (r3 << 2);
    0x0003fa16 strb r0, [r3, -0x11]                              |         *((r3 - 0x11)) = r0;
                                                                 |     }
    0x0003fa1a cmp r6, r2                                        |     
    0x0003fa1c add.w r7, r2, -1                                  |     r7 = r2 + -1;
    0x0003fa20 ittt lo                                           |     
                                                                 |     if (r6 >= r2) {
    0x0003fa22 addlo r6, r6, r6, lsl 2                           |         r6 += (r6 << 2);
                                                                 |     }
                                                                 |     if (r6 >= r2) {
    0x0003fa26 addlo r3, r1, r6, lsl 2                           |         r3 = r1 + (r6 << 2);
                                                                 |     }
                                                                 |     if (r6 < r2) {
    0x0003fa2a str r2, [r3, 8]                                   |         *((r3 + 8)) = r2;
                                                                 |     }
    0x0003fa2c ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x0003fa2e ldr.w ip, [r3, 0x18]                              |     ip = *((r3 + 0x18));
    0x0003fa32 str.w r7, [ip, 0x58]                              |     __asm ("str.w r7, [ip, 0x58]");
                                                                 |     if (r4 == 0) {
    0x0003fa36 cbz r4, 0x3fa62                                   |         goto label_75;
                                                                 |     }
    0x0003fa38 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x0003fa3a ldrb r5, [r0, 0x13]                               |     r5 = *((r0 + 0x13));
    0x0003fa3c cmp r5, 7                                         |     
                                                                 |     if (r5 > 7) {
    0x0003fa3e bhi 0x3fa62                                       |         goto label_75;
                                                                 |     }
    0x0003fa40 add.w r3, r0, 0x74                                |     r3 = r0 + 0x74;
    0x0003fa44 add.w r6, r0, 0x13c                               |     r6 = r0 + 0x13c;
                                                                 |     do {
    0x0003fa48 ldr r0, [r3, 0xc]                                 |         r0 = *((r3 + 0xc));
    0x0003fa4a cmp r4, r0                                        |         
                                                                 |         if (r4 == r0) {
    0x0003fa4c beq.w 0x409e2                                     |             goto label_170;
                                                                 |         }
    0x0003fa50 adds r3, 0x14                                     |         r3 += 0x14;
    0x0003fa52 cmp r3, r6                                        |         
    0x0003fa54 bne 0x3fa48                                       |         
                                                                 |     } while (r3 != r6);
    0x0003fa56 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x0003fa58 adds r3, r5, 1                                    |     r3 = r5 + 1;
    0x0003fa5a adds r5, 6                                        |     r5 += 6;
    0x0003fa5c strb r3, [r0, 0x13]                               |     *((r0 + 0x13)) = r3;
    0x0003fa5e str.w r4, [r0, r5, lsl 2]                         |     __asm ("str.w r4, [r0, r5, lsl 2]");
                                                                 | label_75:
    0x0003fa62 ldr r3, [sp, 0x6c]                                |     r3 = var_6ch;
    0x0003fa64 cmp r3, r2                                        |     
    0x0003fa66 ittt lo                                           |     
                                                                 |     if (r3 >= r2) {
    0x0003fa68 addlo r3, r3, r3, lsl 2                           |         r3 += (r3 << 2);
                                                                 |     }
                                                                 |     if (r3 >= r2) {
    0x0003fa6c addlo r1, r1, r3, lsl 2                           |         r1 += (r3 << 2);
                                                                 |     }
                                                                 |     if (r3 < r2) {
    0x0003fa70 str r2, [r1, 8]                                   |         *((r1 + 8)) = r2;
                                                                 |     }
    0x0003fa72 str.w r7, [ip, 0x58]                              |     __asm ("str.w r7, [ip, 0x58]");
                                                                 | label_61:
    0x0003fa76 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0003fa78 ldrb.w r3, [r3, 0x40]                             |     r3 = *((r3 + 0x40));
    0x0003fa7c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003fa7e bne.w 0x3ef06                                     |         goto label_5;
                                                                 |     }
    0x0003fa82 ldrb.w r3, [sb, 0x304]                            |     r3 = *((sb + 0x304));
    0x0003fa86 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x0003fa88 b.w 0x3f1ce                                       |     goto label_24;
                                                                 | label_161:
    0x0003fa8c mov.w fp, 1                                       |     
    0x0003fa90 b 0x3f776                                         |     goto label_25;
                                                                 | label_160:
    0x0003fa92 ldr r1, [sp, 0x50]                                |     r1 = var_50h;
    0x0003fa94 add.w r3, r3, r3, lsl 1                           |     r3 += (r3 << 1);
    0x0003fa98 mov.w r0, 0x11c                                   |     r0 = 0x11c;
    0x0003fa9c ldr r2, [r1, 4]                                   |     r2 = *((r1 + 4));
    0x0003fa9e ldr.w r3, [r2, r3, lsl 3]                         |     offset_10 = r3 << 3;
                                                                 |     r3 = *((r2 + offset_10));
    0x0003faa2 ldr r2, [r1]                                      |     r2 = *(r1);
    0x0003faa4 ldr r1, [sp, 0x60]                                |     r1 = var_60h;
    0x0003faa6 blx 0x6820                                        |     fcn_00006820 ();
    0x0003faaa b 0x3f72c                                         |     goto label_26;
                                                                 | label_141:
    0x0003faac lsls r0, r2, 0x17                                 |     r0 = r2 << 0x17;
                                                                 |     if (r0 < r2) {
    0x0003faae bpl 0x3fab8                                       |         
    0x0003fab0 tst.w r2, 5                                       |         
                                                                 |         if ((r2 & 5) != 0) {
    0x0003fab4 bne.w 0x40556                                     |             goto label_171;
                                                                 |         }
                                                                 |     }
    0x0003fab8 and r3, r2, 0x102                                 |     r3 = r2 & 0x102;
    0x0003fabc cmp.w r3, 0x102                                   |     
                                                                 |     if (r3 == 0x102) {
    0x0003fac0 beq.w 0x4043e                                     |         goto label_172;
                                                                 |     }
    0x0003fac4 ands r5, r2, 0x200                                |     r5 = r2 & 0x200;
                                                                 |     if (r5 == r2) {
    0x0003fac8 beq.w 0x40506                                     |         goto label_173;
                                                                 |     }
    0x0003facc ldr r4, [sp, 0x10]                                |     r4 = var_10h;
    0x0003face movs r1, 0                                        |     r1 = 0;
    0x0003fad0 ldrh.w r0, [sl, 0x18]                             |     r0 = *((sl + 0x18));
    0x0003fad4 strb.w r1, [sp, 0xc0]                             |     var_c0h = r1;
    0x0003fad8 ldrh r3, [r4, 0x22]                               |     r3 = *((r4 + 0x22));
    0x0003fada ldr.w r5, [sl, 0x1c]                              |     r5 = *((sl + 0x1c));
    0x0003fadc str r4, [r3, r0]                                  |     *((r3 + r0)) = r4;
    0x0003fade ldr.w r7, [sb, 0x2e8]                             |     r7 = *((sb + 0x2e8));
    0x0003fae2 ands r3, r3, 1                                    |     r3 &= 1;
    0x0003fae6 str r0, [sp, 0x1c]                                |     var_1ch = r0;
    0x0003fae8 str r5, [sp, 0x7c]                                |     var_7ch = r5;
    0x0003faea str r7, [sp, 0x70]                                |     var_70h = r7;
                                                                 |     if (r3 == r3) {
    0x0003faec beq.w 0x405be                                     |         goto label_174;
                                                                 |     }
    0x0003faf0 ldrsb.w r3, [r4, 0x24]                            |     r3 = *((r4 + 0x24));
    0x0003faf4 cmp r3, r1                                        |     
                                                                 |     if (r3 > r1) {
    0x0003faf6 ble 0x3fb00                                       |         
    0x0003faf8 ldrh r3, [r5, 0x32]                               |         r3 = *((r5 + 0x32));
    0x0003fafa cmp r3, r0                                        |         
                                                                 |         if (r3 > r0) {
    0x0003fafc bhi.w 0x405bc                                     |             goto label_175;
                                                                 |         }
                                                                 |     }
    0x0003fb00 mov r3, r1                                        |     r3 = r1;
    0x0003fb02 str r1, [sp, 0x64]                                |     var_64h = r1;
                                                                 | label_52:
    0x0003fb04 ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x0003fb06 and r1, r2, 0x10                                  |     r1 = r2 & 0x10;
    0x0003fb0a lsls r2, r2, 0x1a                                 |     r2 <<= 0x1a;
    0x0003fb0c str r0, [sp, 0x84]                                |     var_84h = r0;
                                                                 |     if (r2 >= r2) {
    0x0003fb0e bpl.w 0x405d4                                     |         goto label_176;
                                                                 |     }
    0x0003fb12 ldr.w r3, [sl, 0x2c]                              |     r3 = *((sl + 0x2c));
    0x0003fb16 mov r2, r0                                        |     r2 = r0;
    0x0003fb18 ldr.w r0, [r3, r0, lsl 2]                         |     offset_11 = r0 << 2;
                                                                 |     r0 = *((r3 + offset_11));
    0x0003fb1c str r0, [sp, 0x20]                                |     var_20h = r0;
    0x0003fb1e cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0003fb20 beq.w 0x40bf4                                     |         goto label_177;
                                                                 |     }
    0x0003fb24 adds r2, 1                                        |     r2++;
    0x0003fb26 ldr.w r3, [r3, r2, lsl 2]                         |     offset_12 = r2 << 2;
                                                                 |     r3 = *((r3 + offset_12));
    0x0003fb2a str r3, [sp, 0x5c]                                |     var_5ch = r3;
    0x0003fb2c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0003fb2e beq.w 0x40bbe                                     |         goto label_178;
                                                                 |     }
                                                                 | label_89:
    0x0003fb32 movs r3, 1                                        |     r3 = 1;
                                                                 | label_53:
    0x0003fb34 ldr.w r1, [sb, 0x318]                             |     r1 = *((sb + 0x318));
    0x0003fb38 ldr r2, [r6, 0x48]                                |     r2 = *((r6 + 0x48));
    0x0003fb3a ldr r0, [r6, 8]                                   |     r0 = *((r6 + 8));
    0x0003fb3c ldrh r5, [r1, 0x18]                               |     r5 = *((r1 + 0x18));
    0x0003fb3e adds r7, r2, 1                                    |     r7 = r2 + 1;
    0x0003fb40 ldr r4, [r6]                                      |     r4 = *(r6);
    0x0003fb42 str r1, [sp, 0x90]                                |     var_90h = r1;
    0x0003fb44 add r3, r5                                        |     r3 += r5;
    0x0003fb46 str r5, [sp, 0x94]                                |     var_94h = r5;
    0x0003fb48 mov r5, r1                                        |     r5 = r1;
    0x0003fb4a str r3, [sp, 0x78]                                |     var_78h = r3;
    0x0003fb4c adds r3, r2, r3                                   |     r3 = r2 + r3;
    0x0003fb4e ldrh r2, [r5, 0x1a]                               |     r2 = *((r5 + 0x1a));
    0x0003fb50 ldr r1, [r1, 0x1c]                                |     r1 = *((r1 + 0x1c));
    0x0003fb52 str r3, [r6, 0x48]                                |     *((r6 + 0x48)) = r3;
    0x0003fb54 str r2, [sp, 0x74]                                |     var_74h = r2;
    0x0003fb56 str r0, [sp, 0x60]                                |     var_60h = r0;
    0x0003fb58 str r7, [sp, 0x80]                                |     var_80h = r7;
    0x0003fb5a bl 0xdafc                                         |     r0 = fcn_0000dafc (r0, r1);
    0x0003fb5e mov r1, r0                                        |     r1 = r0;
    0x0003fb60 mov r0, r4                                        |     r0 = r4;
    0x0003fb62 bl 0xd418                                         |     fcn_0000d418 (r0, r1);
    0x0003fb66 str r7, [sp, 0x6c]                                |     var_6ch = r7;
    0x0003fb68 str r0, [sp, 0x68]                                |     var_68h = r0;
    0x0003fb6a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0003fb6c beq.w 0x408d8                                     |         goto label_179;
                                                                 |     }
                                                                 | label_70:
    0x0003fb70 ldr r3, [sp, 0x74]                                |     r3 = var_74h;
    0x0003fb72 mov r4, r3                                        |     r4 = r3;
    0x0003fb74 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0003fb76 beq 0x3fc16                                       |         goto label_180;
                                                                 |     }
    0x0003fb78 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0003fb7a ldr.w r7, [sb, 0x2e8]                             |     r7 = *((sb + 0x2e8));
    0x0003fb7e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0003fb80 beq.w 0x409f4                                     |         goto label_181;
                                                                 |     }
    0x0003fb84 movs r5, 0                                        |     r5 = 0;
    0x0003fb86 mov r2, r7                                        |     r2 = r7;
    0x0003fb88 mov r3, r5                                        |     r3 = r5;
    0x0003fb8a movs r1, 0x67                                     |     r1 = 0x67;
    0x0003fb8c str r5, [sp]                                      |     *(sp) = r5;
    0x0003fb8e ldr r0, [sp, 0x60]                                |     r0 = var_60h;
    0x0003fb90 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003fb94 mov r3, r5                                        |     r3 = r5;
    0x0003fb96 mov r2, r5                                        |     r2 = r5;
    0x0003fb98 movs r1, 0x10                                     |     r1 = 0x10;
    0x0003fb9a str r5, [sp]                                      |     *(sp) = r5;
    0x0003fb9c ldr r0, [sp, 0x60]                                |     r0 = var_60h;
    0x0003fb9e bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003fba2 movs r1, 0x3c                                     |     r1 = 0x3c;
    0x0003fba4 mov r5, r0                                        |     r5 = r0;
                                                                 | label_76:
    0x0003fba6 ldr r3, [sp, 0x80]                                |     r3 = var_80h;
    0x0003fba8 mov r2, r7                                        |     r2 = r7;
    0x0003fbaa ldr r0, [sp, 0x60]                                |     r0 = var_60h;
    0x0003fbac str r3, [sp]                                      |     *(sp) = r3;
    0x0003fbae movs r3, 0                                        |     r3 = 0;
    0x0003fbb0 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003fbb4 ldr r2, [sp, 0x74]                                |     r2 = var_74h;
    0x0003fbb6 mov r1, r0                                        |     r1 = r0;
    0x0003fbb8 mvn r3, 0xd                                       |     r3 = ~0xd;
    0x0003fbbc str r0, [sp, 0xa0]                                |     var_a0h = r0;
    0x0003fbbe ldr r0, [sp, 0x60]                                |     r0 = var_60h;
    0x0003fbc0 bl 0x1021c                                        |     fcn_0001021c (r0, r1, r2, r3);
    0x0003fbc4 ldr r2, [sp, 0x60]                                |     r2 = var_60h;
    0x0003fbc6 ldr r1, [sp, 0xa0]                                |     r1 = var_a0h;
    0x0003fbc8 str r6, [sp, 0xa0]                                |     var_a0h = r6;
    0x0003fbca ldr r3, [r2, 0x20]                                |     r3 = *((r2 + 0x20));
    0x0003fbcc str.w r1, [sb, 0x2f4]                             |     __asm ("str.w r1, aav.0x000000ff");
    0x0003fbd0 ldr r1, [sp, 0x60]                                |     r1 = var_60h;
    0x0003fbd2 cmp r5, r3                                        |     
    0x0003fbd4 itt lo                                            |     
                                                                 |     if (r5 >= r3) {
    0x0003fbd6 ldrlo r2, [r2, 4]                                 |         r2 = *((r2 + 4));
                                                                 |     }
                                                                 |     if (r5 >= r3) {
    0x0003fbd8 addlo r5, r5, r5, lsl 2                           |         r5 += (r5 << 2);
                                                                 |     }
    0x0003fbdc mov r6, r1                                        |     r6 = r1;
    0x0003fbde it lo                                             |     
                                                                 |     if (r5 >= r3) {
    0x0003fbe0 addlo r2, r2, r5, lsl 2                           |         r2 += (r5 << 2);
                                                                 |     }
    0x0003fbe4 mov.w r5, 0                                       |     r5 = 0;
    0x0003fbe8 it lo                                             |     
                                                                 |     if (r5 >= r3) {
    0x0003fbea strlo r3, [r2, 8]                                 |         *((r2 + 8)) = r3;
                                                                 |     }
    0x0003fbec subs r3, 1                                        |     r3--;
    0x0003fbee ldr r2, [r1, 0x18]                                |     r2 = *((r1 + 0x18));
    0x0003fbf0 str r3, [r2, 0x58]                                |     *((r2 + 0x58)) = r3;
    0x0003fbf2 mov r3, r4                                        |     r3 = r4;
    0x0003fbf4 mov r4, r7                                        |     r4 = r7;
    0x0003fbf6 mov r7, r3                                        |     r7 = r3;
                                                                 |     do {
    0x0003fbf8 ldr r3, [sp, 0x80]                                |         r3 = var_80h;
    0x0003fbfa mov r2, r4                                        |         r2 = r4;
    0x0003fbfc movs r1, 0x2e                                     |         r1 = 0x2e;
    0x0003fbfe mov r0, r6                                        |         r0 = r6;
    0x0003fc00 add r3, r5                                        |         r3 += r5;
    0x0003fc02 str r3, [sp]                                      |         *(sp) = r3;
    0x0003fc04 mov r3, r5                                        |         r3 = r5;
    0x0003fc06 bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003fc0a ldr r3, [sp, 0x74]                                |         r3 = var_74h;
    0x0003fc0c adds r5, 1                                        |         r5++;
    0x0003fc0e cmp r5, r3                                        |         
    0x0003fc10 bne 0x3fbf8                                       |         
                                                                 |     } while (r5 != r3);
    0x0003fc12 ldr r6, [sp, 0xa0]                                |     r6 = var_a0h;
    0x0003fc14 mov r4, r7                                        |     r4 = r7;
                                                                 | label_180:
    0x0003fc16 ldr r3, [sp, 0x94]                                |     r3 = var_94h;
    0x0003fc18 ldr r2, [sp, 0x74]                                |     r2 = var_74h;
    0x0003fc1a cmp r3, r2                                        |     
                                                                 |     if (r3 <= r2) {
    0x0003fc1c ble 0x3fcba                                       |         goto label_182;
                                                                 |     }
    0x0003fc1e add.w r2, r6, 0x13c                               |     r2 = r6 + 0x13c;
    0x0003fc22 strd sl, fp, [sp, 0xa0]                           |     __asm ("strd sl, fp, [var_0hxa0]");
    0x0003fc26 str.w r8, [sp, 0x94]                              |     __asm ("str.w r8, [var_94h]");
    0x0003fc2a mov r8, r6                                        |     r8 = r6;
    0x0003fc2c ldr.w sl, [sp, 0x90]                              |     sl = var_90h;
    0x0003fc30 ldr r6, [sp, 0x6c]                                |     r6 = var_6ch;
    0x0003fc32 ldr.w fp, [sp, 0x44]                              |     fp = var_44h;
    0x0003fc36 str.w sb, [sp, 0x74]                              |     __asm ("str.w sb, [var_74h]");
    0x0003fc38 str r0, [sp, 0x1d0]                               |     *((sp + 0x1d0)) = r0;
    0x0003fc3a mov sb, r3                                        |     sb = r3;
    0x0003fc3c str r2, [sp, 0x80]                                |     var_80h = r2;
                                                                 | label_27:
    0x0003fc3e ldr.w r3, [sl, 0x2c]                              |     r3 = *((sl + 0x2c));
    0x0003fc42 adds r7, r6, r4                                   |     r7 = r6 + r4;
    0x0003fc44 mov r2, fp                                        |     r2 = fp;
    0x0003fc46 mov r0, r8                                        |     r0 = r8;
    0x0003fc48 ldr.w r5, [r3, r4, lsl 2]                         |     offset_13 = r4 << 2;
                                                                 |     r5 = *((r3 + offset_13));
    0x0003fc4c ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0003fc4e str r7, [sp, 4]                                   |     var_4h = r7;
    0x0003fc50 mov r1, r5                                        |     r1 = r5;
    0x0003fc52 str r3, [sp]                                      |     *(sp) = r3;
    0x0003fc54 mov r3, r4                                        |     r3 = r4;
    0x0003fc56 bl 0x3c350                                        |     r0 = fcn_0003c350 (r0, r1, r2, r3, r4, r5, r6);
    0x0003fc5a cmp r7, r0                                        |     
    0x0003fc5c mov r2, r0                                        |     r2 = r0;
                                                                 |     if (r7 == r0) {
    0x0003fc5e beq 0x3fc9a                                       |         goto label_38;
                                                                 |     }
    0x0003fc60 ldr r3, [sp, 0x78]                                |     r3 = var_78h;
    0x0003fc62 cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x0003fc64 bne.w 0x4023c                                     |         goto label_183;
                                                                 |     }
    0x0003fc68 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0003fc6a beq.w 0x402a8                                     |         goto label_184;
                                                                 |     }
    0x0003fc6e ldrb.w r0, [r8, 0x13]                             |     r0 = *((r8 + 0x13));
    0x0003fc72 cmp r0, 7                                         |     
                                                                 |     if (r0 > 7) {
    0x0003fc74 bhi.w 0x402a8                                     |         goto label_184;
                                                                 |     }
    0x0003fc78 ldr r7, [sp, 0x80]                                |     r7 = var_80h;
    0x0003fc7a add.w r3, r8, 0x74                                |     r3 = r8 + 0x74;
                                                                 |     do {
    0x0003fc7e ldr r1, [r3, 0xc]                                 |         r1 = *((r3 + 0xc));
    0x0003fc80 cmp r1, r6                                        |         
                                                                 |         if (r1 == r6) {
    0x0003fc82 beq.w 0x40a1a                                     |             goto label_185;
                                                                 |         }
    0x0003fc86 adds r3, 0x14                                     |         r3 += 0x14;
    0x0003fc88 cmp r3, r7                                        |         
    0x0003fc8a bne 0x3fc7e                                       |         
                                                                 |     } while (r3 != r7);
    0x0003fc8c adds r3, r0, 1                                    |     r3 = r0 + 1;
    0x0003fc8e adds r0, 6                                        |     r0 += 6;
    0x0003fc90 strb.w r3, [r8, 0x13]                             |     *((r8 + 0x13)) = r3;
    0x0003fc94 str.w r6, [r8, r0, lsl 2]                         |     __asm ("str.w r6, [r8, r0, lsl 2]");
    0x0003fc98 mov r6, r2                                        |     r6 = r2;
                                                                 | label_38:
    0x0003fc9a ldrh r3, [r5, 0x12]                               |     r3 = *((r5 + 0x12));
    0x0003fc9c ands r1, r3, 0x81                                 |     r1 = r3 & 0x81;
                                                                 |     if (r1 == r3) {
    0x0003fca0 beq.w 0x40254                                     |         goto label_186;
                                                                 |     }
                                                                 | label_35:
    0x0003fca4 adds r4, 1                                        |     r4++;
    0x0003fca6 cmp sb, r4                                        |     
                                                                 |     if (sb != r4) {
    0x0003fca8 bne 0x3fc3e                                       |         goto label_27;
                                                                 |     }
    0x0003fcaa str r6, [sp, 0x6c]                                |     var_6ch = r6;
    0x0003fcac mov r6, r8                                        |     r6 = r8;
    0x0003fcae ldrd sl, fp, [sp, 0xa0]                           |     __asm ("ldrd sl, fp, [var_a0h]");
    0x0003fcb2 ldr.w r8, [sp, 0x94]                              |     r8 = var_94h;
    0x0003fcb6 ldr.w sb, [sp, 0x74]                              |     sb = var_74h;
                                                                 | label_182:
    0x0003fcba ldr r3, [sp, 0x68]                                |     r3 = var_68h;
                                                                 |     if (r3 != 0) {
    0x0003fcbc cbz r3, 0x3fcc6                                   |         
    0x0003fcbe ldr r2, [sp, 0x1c]                                |         r2 = var_1ch;
    0x0003fcc0 ldrb r3, [r3, r2]                                 |         r3 = *((r3 + r2));
    0x0003fcc2 strb.w r3, [sp, 0xc0]                             |         var_c0h = r3;
                                                                 |     }
    0x0003fcc6 ldr.w r1, [sb, 0x2f0]                             |     r1 = *((sb + 0x2f0));
    0x0003fcca ldr r2, [sp, 0x7c]                                |     r2 = var_7ch;
    0x0003fccc str r1, [sp, 0x74]                                |     var_74h = r1;
    0x0003fcce ldrh r3, [r2, 0x32]                               |     r3 = *((r2 + 0x32));
    0x0003fcd0 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x0003fcd2 cmp r1, r3                                        |     
                                                                 |     if (r1 >= r3) {
    0x0003fcd4 bhs.w 0x40686                                     |         goto label_187;
                                                                 |     }
    0x0003fcd8 ldr r3, [r2, 0x1c]                                |     r3 = *((r2 + 0x1c));
    0x0003fcda ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x0003fcdc ldrb r3, [r3, r1]                                 |     r3 = *((r3 + r1));
    0x0003fcde clz r3, r3                                        |     r3 &= r3;
    0x0003fce2 lsrs r3, r3, 5                                    |     r3 >>= 5;
    0x0003fce4 cmp r2, r3                                        |     
                                                                 |     if (r2 == r3) {
    0x0003fce6 beq.w 0x40696                                     |         goto label_188;
                                                                 |     }
    0x0003fcea ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x0003fcec cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0003fcee beq.w 0x40a24                                     |         goto label_189;
                                                                 |     }
                                                                 | label_58:
    0x0003fcf2 ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x0003fcf4 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x0003fcf6 ldr r5, [sp, 0x64]                                |     r5 = var_64h;
    0x0003fcf8 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x0003fcfa movs r3, 0                                        |     r3 = 0;
    0x0003fcfc str r2, [sp, 0x5c]                                |     var_5ch = r2;
    0x0003fcfe str r5, [sp, 0x50]                                |     var_50h = r5;
    0x0003fd00 str r3, [sp, 0x64]                                |     var_64h = r3;
                                                                 | label_59:
    0x0003fd02 ldr r2, [sp, 0x5c]                                |     r2 = var_5ch;
    0x0003fd04 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0003fd06 subs r7, r2, 0                                    |     r7 = r2 - 0;
    0x0003fd08 it ne                                             |     
                                                                 |     if (r7 == r2) {
    0x0003fd0a movne r7, 1                                       |         r7 = 1;
                                                                 |     }
    0x0003fd0c subs r3, 0                                        |     
    0x0003fd0e it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x0003fd10 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x0003fd12 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0003fd14 beq.w 0x4089e                                     |         goto label_190;
                                                                 |     }
    0x0003fd18 ldrh r2, [r2, 0x12]                               |     r2 = *((r2 + 0x12));
    0x0003fd1a and r2, r2, 0x28                                  |     r2 &= 0x28;
    0x0003fd1e subs r2, 0                                        |     
    0x0003fd20 it ne                                             |     
                                                                 |     if (r2 == 0) {
    0x0003fd22 movne r2, 1                                       |         r2 = 1;
                                                                 |     }
    0x0003fd24 str r2, [sp, 0x50]                                |     var_50h = r2;
    0x0003fd26 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x0003fd28 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0003fd2a beq.w 0x409cc                                     |         goto label_191;
                                                                 |     }
    0x0003fd2e orrs r7, r3                                       |     r7 |= r3;
    0x0003fd30 ldrh r3, [r2, 0x12]                               |     r3 = *((r2 + 0x12));
    0x0003fd32 lsls r7, r7, 2                                    |     r7 <<= 2;
    0x0003fd34 and r3, r3, 0x28                                  |     r3 &= 0x28;
    0x0003fd38 subs r3, 0                                        |     
    0x0003fd3a it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x0003fd3c movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x0003fd3e str r3, [sp, 0x60]                                |     var_60h = r3;
                                                                 | label_73:
    0x0003fd40 ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x0003fd42 mov r0, r6                                        |     r0 = r6;
    0x0003fd44 ldr r2, [sp, 0x6c]                                |     r2 = var_6ch;
    0x0003fd46 ldr r3, [r3]                                      |     r3 = *(r3);
    0x0003fd48 ldr r4, [r3, 0x10]                                |     r4 = *((r3 + 0x10));
    0x0003fd4a ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0003fd4c mov r1, r4                                        |     r1 = r4;
    0x0003fd4e adds r2, r3, r2                                   |     r2 = r3 + r2;
    0x0003fd50 str r2, [sp, 0x78]                                |     var_78h = r2;
    0x0003fd52 bl 0x3c4a8                                        |     fcn_0003c4a8 (r0, r1, r2);
    0x0003fd56 mov r0, r4                                        |     r0 = r4;
    0x0003fd58 bl 0x7f74                                         |     fcn_00007f74 (r0);
    0x0003fd5c ldr r2, [sp, 0x78]                                |     r2 = var_78h;
    0x0003fd5e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0003fd60 bne.w 0x40ae8                                     |         goto label_192;
                                                                 |     }
                                                                 | label_83:
    0x0003fd64 ldr r3, [sp, 0x68]                                |     r3 = var_68h;
                                                                 |     if (r3 != 0) {
    0x0003fd66 cbz r3, 0x3fdaa                                   |         
    0x0003fd68 ldr r2, [sp, 0x1c]                                |         r2 = var_1ch;
    0x0003fd6a mov r0, r4                                        |         r0 = r4;
    0x0003fd6c ldrb r1, [r3, r2]                                 |         r1 = *((r3 + r2));
    0x0003fd6e str r1, [sp, 0x78]                                |         var_78h = r1;
    0x0003fd70 bl 0xb8a4                                         |         fcn_0000b8a4 (r0);
    0x0003fd74 ldr r1, [sp, 0x78]                                |         r1 = var_78h;
    0x0003fd76 mov r3, r0                                        |         r3 = r0;
    0x0003fd78 cmp r0, 0                                         |         
    0x0003fd7a it ne                                             |         
                                                                 |         if (r0 != 0) {
    0x0003fd7c cmpne r1, 0                                       |             __asm ("cmpne r1, 0");
                                                                 |         }
                                                                 |         if (r0 != 0) {
    0x0003fd7e bne.w 0x40a36                                     |             goto label_193;
                                                                 |         }
    0x0003fd82 orr.w r2, r1, r0                                  |         r2 = r1 | r0;
    0x0003fd86 uxtb r2, r2                                       |         r2 = (int8_t) r2;
    0x0003fd88 cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x0003fd8a beq.w 0x40a40                                     |             goto label_194;
                                                                 |         }
    0x0003fd8e add r3, r1                                        |         r3 += r1;
    0x0003fd90 uxtb r3, r3                                       |         r3 = (int8_t) r3;
    0x0003fd92 cmp r3, 0x62                                      |         
                                                                 |         if (r3 == 0x62) {
    0x0003fd94 beq.w 0x40a40                                     |             goto label_194;
                                                                 |         }
                                                                 | label_77:
    0x0003fd98 cmp r1, 0x62                                      |         
                                                                 |         if (r1 == 0x62) {
    0x0003fd9a beq.w 0x40a40                                     |             goto label_194;
                                                                 |         }
    0x0003fd9e mov r0, r4                                        |         r0 = r4;
    0x0003fda0 bl 0xa36c                                         |         r0 = fcn_0000a36c (r0, r1);
    0x0003fda4 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x0003fda6 bne.w 0x40a40                                     |             goto label_194;
                                                                 |         }
                                                                 |     }
                                                                 | label_78:
    0x0003fdaa ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x0003fdac add.w r3, r7, r3, lsl 1                           |     r3 = r7 + (r3 << 1);
    0x0003fdb0 str r3, [sp, 0x50]                                |     var_50h = r3;
    0x0003fdb2 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0003fdb4 adds r7, r3, 1                                    |     r7 = r3 + 1;
                                                                 | label_68:
    0x0003fdb6 ldr r2, [sp, 0x68]                                |     r2 = var_68h;
    0x0003fdb8 subs r3, r7, r5                                   |     r3 = r7 - r5;
                                                                 |     if (r2 == 0) {
    0x0003fdba cbz r2, 0x3fe18                                   |         goto label_195;
                                                                 |     }
    0x0003fdbc cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x0003fdbe ble 0x3fe18                                       |         goto label_195;
                                                                 |     }
    0x0003fdc0 ldr r4, [sp, 0x6c]                                |     r4 = var_6ch;
    0x0003fdc2 b 0x3fdcc                                         |     
                                                                 |     while (r1 == 0x62) {
    0x0003fdc4 subs r3, 1                                        |         r3--;
    0x0003fdc6 add.w r4, r4, 1                                   |         r4++;
                                                                 |         if (r3 == 1) {
    0x0003fdca beq 0x3fe18                                       |             goto label_195;
                                                                 |         }
    0x0003fdcc mov r5, r2                                        |         r5 = r2;
    0x0003fdce ldrb r1, [r2], 1                                  |         r1 = *(r2);
                                                                 |         r2++;
    0x0003fdd2 cmp r1, 0x62                                      |         
    0x0003fdd4 beq 0x3fdc4                                       |         
                                                                 |     }
    0x0003fdd6 cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x0003fdd8 beq 0x3fdec                                       |         void (*0x3fdec)() ();
                                                                 |     }
                                                                 | label_195:
    0x0003fe18 ldr.w r3, [pc, 0x418]                             |     r3 = *(0x00040234);
    0x0003fe1c mov pc, pc                                        |     
    0x0003fe1e ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x0003fe20 ldr r5, [sp, 0x6c]                                |     r5 = var_6ch;
    0x0003fe22 add r3, pc                                        |     r3 += pc;
    0x0003fe24 str r7, [sp, 4]                                   |     var_4h = r7;
    0x0003fe26 add r3, r2                                        |     r3 += r2;
    0x0003fe28 ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x0003fe2a str r5, [sp]                                      |     *(sp) = r5;
    0x0003fe2c add r3, r2                                        |     r3 += r2;
    0x0003fe2e ldrb.w r1, [r3, 0xb44]                            |     r1 = *((r3 + 0xb44));
    0x0003fe32 ldrd r2, r3, [sp, 0x70]                           |     __asm ("ldrd r2, r3, [var_74h]");
    0x0003fe36 bl 0x19a3c                                        |     fcn_00019a3c (r0, r1, r2, r3, r4, r5);
    0x0003fe3a ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0003fe3c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0003fe3e beq.w 0x40728                                     |         goto label_196;
                                                                 |     }
    0x0003fe42 ldr r3, [r3]                                      |     r3 = *(r3);
    0x0003fe44 mov r0, r6                                        |     r0 = r6;
    0x0003fe46 movs r2, 1                                        |     r2 = 1;
    0x0003fe48 ldr r4, [r3, 0x10]                                |     r4 = *((r3 + 0x10));
    0x0003fe4a ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0003fe4c adds r5, r3, r5                                   |     r5 = r3 + r5;
    0x0003fe4e mov r1, r5                                        |     r1 = r5;
    0x0003fe50 vshr.u32 d16, d25, 1                              |     __asm ("vshr.u32 d16, d25, 1");
    0x0003fe54 mov r2, r5                                        |     r2 = r5;
    0x0003fe56 mov r1, r4                                        |     r1 = r4;
    0x0003fe58 bl 0x3c4a8                                        |     fcn_0003c4a8 (r0, r1, r2);
    0x0003fe5c mov r0, r4                                        |     r0 = r4;
    0x0003fe5e bl 0x7f74                                         |     r0 = fcn_00007f74 (r0);
    0x0003fe62 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0003fe64 bne.w 0x40b5a                                     |         goto label_197;
                                                                 |     }
                                                                 | label_85:
    0x0003fe68 ldrb.w r7, [sp, 0xc0]                             |     r7 = var_c0h;
    0x0003fe6c mov r0, r4                                        |     r0 = r4;
    0x0003fe6e bl 0xb8a4                                         |     r0 = fcn_0000b8a4 (r0);
    0x0003fe72 mov r3, r0                                        |     r3 = r0;
    0x0003fe74 cmp r0, 0                                         |     
    0x0003fe76 it ne                                             |     
                                                                 |     if (r0 == 0) {
    0x0003fe78 cmpne r7, 0                                       |         __asm ("cmpne r7, 0");
                                                                 |         goto label_198;
                                                                 |     }
                                                                 |     if (r0 == 0) {
                                                                 | label_198:
    0x0003fe7a beq.w 0x4069c                                     |         void (*0x4069c)() ();
                                                                 |     }
                                                                 | label_86:
    0x0003fe8e ldr r1, [sp, 0x68]                                |     r1 = var_68h;
    0x0003fe90 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x0003fe92 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x0003fe94 invalid                                           |     
    0x0003fe98 adds r0, 0x20                                     |     r0 += 0x20;
    0x0003fe9a str.w r3, [sb, 0x30c]                             |     __asm ("str.w r3, aav.0x000000ff");
                                                                 | label_63:
    0x0003fe9e ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x0003fea0 mov r0, r8                                        |     r0 = r8;
    0x0003fea2 ldr r2, [pc, 0x394]                               |     
    0x0003fea4 ldr r3, [sp, 0x84]                                |     r3 = var_84h;
    0x0003fea6 add r2, pc                                        |     r2 = 0x800e4;
    0x0003fea8 add.w r2, r2, r1, lsl 1                           |     r2 += (r1 << 1);
    0x0003feac ldr r1, [sp, 0x60]                                |     r1 = var_60h;
    0x0003feae str r3, [sp, 4]                                   |     var_4h = r3;
    0x0003feb0 ldr r3, [sp, 0x6c]                                |     r3 = var_6ch;
    0x0003feb2 add r2, r1                                        |     r2 += r1;
    0x0003feb4 ldrb.w r1, [r2, 0xb4c]                            |     r1 = *((r2 + 0xb4c));
    0x0003feb8 str r3, [sp]                                      |     *(sp) = r3;
    0x0003feba ldr r2, [sp, 0x70]                                |     r2 = var_70h;
    0x0003febc ldr r3, [sp, 0x74]                                |     r3 = var_74h;
    0x0003febe bl 0x19a3c                                        |     fcn_00019a3c (r0, r1, r2, r3, r4, r5);
                                                                 | label_62:
    0x0003fec2 ldr r1, [sp, 0x5c]                                |     r1 = var_5ch;
    0x0003fec4 ldr r0, [sp, 0x44]                                |     r0 = var_44h;
    0x0003fec6 bl 0x83a0                                         |     fcn_000083a0 (r0, r1);
    0x0003feca ldr r1, [sp, 0x20]                                |     r1 = var_20h;
    0x0003fecc bl 0x83a0                                         |     fcn_000083a0 (r0, r1);
    0x0003fed0 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x0003fed2 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003fed4 bne 0x3ff7a                                       |         void (*0x3ff7a)() ();
                                                                 |     }
                                                                 | label_71:
    0x0003ffa2 movs r3, 1                                        |     r3 = 1;
    0x0003ffa4 strb.w r3, [sb, 0x307]                            |     *((sb + 0x307)) = r3;
    0x0003ffa8 b 0x3ffd6                                         |     goto label_34;
                                                                 | label_140:
    0x0003ffaa ldrd r3, r5, [r3, 0x20]                           |     __asm ("ldrd r3, r5, [r3, 0x20]");
    0x0003ffae movs r1, 0x14                                     |     r1 = 0x14;
    0x0003ffb0 mov r0, r8                                        |     r0 = r8;
    0x0003ffb2 mov r2, r5                                        |     r2 = r5;
    0x0003ffb4 str r3, [sp]                                      |     *(sp) = r3;
    0x0003ffb6 movs r3, 0                                        |     r3 = 0;
    0x0003ffb8 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003ffbc movs r1, 0                                        |     r1 = 0;
    0x0003ffbe mov r3, r4                                        |     r3 = r4;
    0x0003ffc0 str r1, [sp]                                      |     *(sp) = r1;
    0x0003ffc2 mov r2, r5                                        |     r2 = r5;
    0x0003ffc4 movs r1, 0x16                                     |     r1 = 0x16;
    0x0003ffc6 mov r0, r8                                        |     r0 = r8;
    0x0003ffc8 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0003ffcc movs r3, 0x10                                     |     r3 = 0x10;
    0x0003ffce str.w r0, [sb, 0x30c]                             |     __asm ("str.w r0, aav.0x000000ff");
    0x0003ffd2 strb.w r3, [sb, 0x305]                            |     *((sb + 0x305)) = r3;
                                                                 | label_34:
    0x0003ffd6 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0003ffd8 ldr.w r5, [r3, 0x154]                             |     r5 = *((r3 + 0x154));
    0x0003ffdc ldr.w r4, [r3, 0x15c]                             |     r4 = *((r3 + 0x15c));
    0x0003ffe0 ldr.w r3, [sb, 0x2e0]                             |     r3 = *((sb + 0x2e0));
    0x0003ffe4 cmp r5, 0                                         |     
                                                                 |     if (r5 <= 0) {
    0x0003ffe6 ble.w 0x40104                                     |         goto label_199;
                                                                 |     }
    0x0003ffea ldr.w sl, [sp, 0x24]                              |     sl = var_24h;
    0x0003ffee adds r4, 0x30                                     |     r4 += 0x30;
    0x0003fff0 movs r7, 1                                        |     r7 = 1;
    0x0003fff2 b 0x40022                                         |     goto label_29;
                                                                 | label_28:
    0x0003fff4 ldr r1, [r4, -0x30]                               |     r1 = *((r4 - 0x30));
                                                                 |     if (r3 != 0) {
    0x0003fff8 cbz r3, 0x40000                                   |         
    0x0003fffa str r2, [r1, 0x44]                                |         *((r1 + 0x44)) = r2;
    0x0003fffc asrs r7, r7, 0x1d                                 |         r7 >>= 0x1d;
                                                                 |         if (r3 >= 0) {
    0x0003fffe bpl 0x40002                                       |             goto label_200;
                                                                 |         }
                                                                 |     }
    0x00040000 movs r0, r2                                       |     r0 = r2;
                                                                 | label_200:
    0x00040002 movs r0, r0                                       |     
                                                                 |     if (r0 < r0) {
    0x00040004 blt 0x3ff14                                       |         void (*0x3ff14)() ();
                                                                 |     }
    0x00040006 vhadd.u8 d0, d11, d0                              |     __asm ("vhadd.u8 d0, d11, d0");
    0x0004000a movs r4, r0                                       |     r4 = r0;
    0x0004000c subs r4, 0x1c                                     |     r4 -= 0x1c;
    0x0004000e orr r3, r3, 4                                     |     r3 |= 4;
    0x00040010 lsls r4, r0, 0xc                                  |     r4 = r0 << 0xc;
    0x00040012 strbt pc, [r4, 0x1c]                              |     __asm ("strbt pc, [r4, 0x1c]");
    0x00040016 ldr.w r3, [sb, 0x2e0]                             |     r3 = *((sb + 0x2e0));
                                                                 |     do {
    0x0004001a subs r5, 1                                        |         r5--;
    0x0004001c add.w r8, r4, 0xf400000                           |         r8 = r4 + 0xf400000;
    0x00040020 movs r0, r0                                       |         
                                                                 | label_29:
    0x00040022 movs r0, r0                                       |         
    0x00040024 cmp r4, 0x1c                                      |         
    0x00040026 tst.w r2, 6                                       |         
    0x0004002a bne 0x4001a                                       |         
                                                                 |     } while ((r2 & 6) != 0);
    0x0004002c ldrd r2, r1, [r4, -0x8]                           |     __asm ("ldrd r2, r1, [r4, -0x8]");
    0x00040030 ldr.w r0, [sb, 0x320]                             |     r0 = *((sb + 0x320));
    0x00040034 ands r2, r0                                       |     r2 &= r0;
    0x00040036 ldr.w r0, [sb, 0x324]                             |     r0 = *((sb + 0x324));
    0x0004003a ands r1, r0                                       |     r1 &= r0;
    0x0004003c orrs r2, r1                                       |     r2 |= r1;
                                                                 |     if (r2 == r1) {
    0x0004003e beq 0x3fff4                                       |         goto label_28;
                                                                 |     }
    0x00040040 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x00040042 subs r5, 1                                        |     r5--;
    0x00040044 add.w r4, r4, 0x30                                |     r4 += 0x30;
    0x00040048 strb.w r7, [r2, 0x27]                             |     *((r2 + 0x27)) = r7;
                                                                 |     if (r5 != 1) {
    0x0004004c bne 0x40022                                       |         goto label_29;
                                                                 |     }
    0x0004004e ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x00040050 ldr.w r5, [r2, 0x154]                             |     r5 = *((r2 + 0x154));
    0x00040054 ldr.w r4, [r2, 0x15c]                             |     r4 = *((r2 + 0x15c));
    0x00040058 invalid                                           |     
    0x0004005c adds r4, 0x30                                     |     r4 += 0x30;
    0x0004005e movw r7, 0x402                                    |     r7 = 0x402;
    0x00040062 mov.w sl, 3                                       |     sl = 3;
                                                                 |     do {
    0x00040066 ldrb r2, [r4, -0x1c]                              |         r2 = *((r4 - 0x1c));
    0x0004006a tst.w r2, 6                                       |         
                                                                 |         if ((r2 & 6) == 0) {
    0x0004006e bne 0x400fc                                       |             
    0x00040070 ldrh r2, [r4, -0x1e]                              |             r2 = *((r4 - 0x1e));
    0x00040074 cmp r2, r7                                        |             
                                                                 |             if (r2 != r7) {
    0x00040076 bne 0x400fc                                       |                 goto label_201;
                                                                 |             }
    0x00040078 ldr r2, [r4, -0x28]                               |             r2 = *((r4 - 0x28));
    0x0004007c cmp fp, r2                                        |             
                                                                 |             if (fp != r2) {
    0x0004007e bne 0x400fc                                       |                 goto label_201;
                                                                 |             }
    0x00040080 cmp r3, 0                                         |             
                                                                 |             if (r3 != 0) {
    0x00040082 bne 0x400fc                                       |                 goto label_201;
                                                                 |             }
    0x00040084 ldr r1, [r4, -0x30]                               |             r1 = *((r4 - 0x30));
    0x00040088 ldr r2, [r4, -0x24]                               |             r2 = *((r4 - 0x24));
    0x0004008c strd sl, r3, [sp, 8]                              |             __asm ("strd sl, r3, [var_8h]");
    0x00040090 ldr r3, [sp, 0x30]                                |             r3 = var_30h;
    0x00040092 str r1, [sp, 0x18]                                |             var_18h = r1;
    0x00040094 mov r1, fp                                        |             r1 = fp;
    0x00040096 ldr r0, [sp, 0x58]                                |             r0 = var_58h;
    0x00040098 str r3, [sp]                                      |             *(sp) = r3;
    0x0004009a ldr r3, [sp, 0x34]                                |             r3 = var_34h;
    0x0004009c str r3, [sp, 4]                                   |             var_4h = r3;
    0x0004009e bl 0x231d0                                        |             r0 = fcn_000231d0 (r0, r1, r2, r3, r4, r5);
                                                                 |             if (r0 != 0) {
    0x000400a2 cbz r0, 0x400f8                                   |                 
    0x000400a4 ldrb r2, [r0, 0x14]                               |                 r2 = *((r0 + 0x14));
    0x000400a6 lsls r2, r2, 0x1d                                 |                 r2 <<= 0x1d;
                                                                 |                 if (r2 < r2) {
    0x000400a8 bmi 0x400f8                                       |                     goto label_202;
                                                                 |                 }
    0x000400aa str r0, [sp, 0x20]                                |                 var_20h = r0;
    0x000400ac movs r1, 0x30                                     |                 r1 = 0x30;
    0x000400ae ldr r0, [sp, 0x28]                                |                 r0 = var_28h;
    0x000400b0 bl 0xd3a0                                         |                 fcn_0000d3a0 (r0, r1);
    0x000400b4 ldr r3, [sp, 0x20]                                |                 r3 = var_20h;
    0x000400b6 str r0, [sp, 0x1c]                                |                 var_1ch = r0;
                                                                 |                 if (r0 == 0) {
    0x000400b8 cbz r0, 0x400f8                                   |                     goto label_202;
                                                                 |                 }
    0x000400ba ldr.w lr, [r3]                                    |                 
    0x000400be ldr.w ip, [sp, 0x1c]                              |                 ip = var_1ch;
    0x000400c2 ldm.w lr!, {r0, r1, r2, r3}                       |                 r0 = *(lr!);
                                                                 |                 r1 = *((lr! + 4));
                                                                 |                 r2 = *((lr! + 8));
                                                                 |                 r3 = *((lr! + 12));
    0x000400c6 stm.w ip!, {r0, r1, r2, r3}                       |                 *(ip!) = r0;
                                                                 |                 *((ip! + 4)) = r1;
                                                                 |                 *((ip! + 8)) = r2;
                                                                 |                 *((ip! + 12)) = r3;
    0x000400ca ldr r2, [sp, 0x18]                                |                 r2 = var_18h;
    0x000400cc ldr r2, [r2, 0xc]                                 |                 r2 = *((r2 + 0xc));
    0x000400ce str r2, [sp, 0x18]                                |                 var_18h = r2;
    0x000400d0 ldm.w lr!, {r0, r1, r2, r3}                       |                 r0 = *(lr!);
                                                                 |                 r1 = *((lr! + 4));
                                                                 |                 r2 = *((lr! + 8));
                                                                 |                 r3 = *((lr! + 12));
    0x000400d4 stm.w ip!, {r0, r1, r2, r3}                       |                 *(ip!) = r0;
                                                                 |                 *((ip! + 4)) = r1;
                                                                 |                 *((ip! + 8)) = r2;
                                                                 |                 *((ip! + 12)) = r3;
    0x000400d8 ldm.w lr, {r0, r1, r2, r3}                        |                 r0 = *(lr);
                                                                 |                 r1 = *((lr + 4));
                                                                 |                 r2 = *((lr + 8));
                                                                 |                 r3 = *((lr + 12));
    0x000400dc stm.w ip, {r0, r1, r2, r3}                        |                 *(ip) = r0;
                                                                 |                 *((ip + 4)) = r1;
                                                                 |                 *((ip + 8)) = r2;
                                                                 |                 *((ip + 12)) = r3;
    0x000400e0 mov r0, r6                                        |                 r0 = r6;
    0x000400e2 ldr r1, [sp, 0x1c]                                |                 r1 = var_1ch;
    0x000400e4 movs r3, 8                                        |                 r3 = 8;
    0x000400e6 ldr r2, [sp, 0x18]                                |                 r2 = var_18h;
    0x000400e8 str r2, [r1, 0xc]                                 |                 *((r1 + 0xc)) = r2;
    0x000400ea ldr r2, [sp, 0x24]                                |                 r2 = var_24h;
    0x000400ec bl 0x3cee8                                        |                 fcn_0003cee8 (r0, r1, r2, r3, r4, r5);
    0x000400f0 ldr r1, [sp, 0x1c]                                |                 r1 = var_1ch;
    0x000400f2 ldr r0, [sp, 0x28]                                |                 r0 = var_28h;
    0x000400f4 bl 0xe12c                                         |                 fcn_0000e12c (r0, r1);
                                                                 |             }
                                                                 | label_202:
    0x000400f8 ldr.w r3, [sb, 0x2e0]                             |             r3 = *((sb + 0x2e0));
                                                                 |         }
                                                                 | label_201:
    0x000400fc subs r5, 1                                        |         r5--;
    0x000400fe add.w r4, r4, 0x30                                |         r4 += 0x30;
    0x00040102 bne 0x40066                                       |         
                                                                 |     } while (r5 != 1);
                                                                 |     if (r3 != 0) {
                                                                 | label_199:
    0x00040104 cbnz r3, 0x40130                                  |         goto label_203;
                                                                 |     }
                                                                 | label_32:
    0x00040106 ldr.w r3, [sb, 0x320]                             |     r3 = *((sb + 0x320));
    0x0004010a str r3, [sp, 0x30]                                |     var_30h = r3;
    0x0004010c ldr.w r3, [sb, 0x324]                             |     r3 = *((sb + 0x324));
    0x00040110 str r3, [sp, 0x34]                                |     var_34h = r3;
                                                                 | label_33:
    0x00040112 ldr.w r3, [sb, 0x2f8]                             |     r3 = *((sb + 0x2f8));
    0x00040116 add.w sb, sb, 0x48                                |     sb += 0x48;
    0x0004011a ldr r1, [sp, 0x10]                                |     r1 = var_10h;
    0x0004011c ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x0004011e str r3, [r1, 0x30]                                |     *((r1 + 0x30)) = r3;
    0x00040120 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00040122 adds r2, 1                                        |     r2++;
    0x00040124 str r2, [sp, 0x38]                                |     var_38h = r2;
    0x00040126 cmp r3, r2                                        |     
                                                                 |     if (r3 != r2) {
    0x00040128 bne.w 0x3f1b4                                     |         goto label_30;
                                                                 |     }
    0x0004012c b.w 0x3ef1a                                       |     goto label_31;
                                                                 | label_203:
    0x00040130 ldr.w r2, [r8, 0x20]                              |     r2 = *((r8 + 0x20));
    0x00040134 movs r5, 0                                        |     r5 = 0;
    0x00040136 movs r1, 0x19                                     |     r1 = 0x19;
    0x00040138 mov r0, r8                                        |     r0 = r8;
    0x0004013a str.w r2, [sb, 0x2fc]                             |     __asm ("str.w r2, aav.0x000000ff");
    0x0004013e movs r2, 1                                        |     r2 = 1;
    0x00040140 str r5, [sp]                                      |     *(sp) = r5;
    0x00040142 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00040146 mov r0, r6                                        |     r0 = r6;
    0x00040148 bl 0xae68                                         |     fcn_0000ae68 (r0);
    0x0004014c ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0004014e ldr.w r0, [r3, 0x154]                             |     r0 = *((r3 + 0x154));
    0x00040152 ldr.w r4, [r3, 0x15c]                             |     r4 = *((r3 + 0x15c));
    0x00040156 cmp r0, r5                                        |     
                                                                 |     if (r0 <= r5) {
    0x00040158 ble 0x40106                                       |         goto label_32;
                                                                 |     }
    0x0004015a ldrd r1, r3, [sb, 0x320]                          |     __asm ("ldrd r1, r3, aav.0x000000ff");
    0x0004015e adds r4, 0x30                                     |     r4 += 0x30;
    0x00040160 ldr r7, [sp, 0x24]                                |     r7 = var_24h;
    0x00040162 ldr.w r8, [sp, 0x10]                              |     r8 = var_10h;
    0x00040166 mov ip, r3                                        |     
                                                                 |     do {
    0x00040168 ldrb r3, [r4, -0x1c]                              |         r3 = *((r4 - 0x1c));
    0x0004016c tst.w r3, 6                                       |         
                                                                 |         if ((r3 & 6) == 0) {
    0x00040170 bne 0x401a6                                       |             
    0x00040172 ldr r3, [r4, -0x8]                                |             r3 = *((r4 - 0x8));
    0x00040176 ldr r2, [r4, -0x4]                                |             r2 = *((r4 - 0x4));
    0x0004017a ands r3, r1                                       |             r3 &= r1;
    0x0004017c and.w r2, ip, r2                                  |             r2 = ip & r2;
    0x00040180 orrs r3, r2                                       |             r3 |= r2;
                                                                 |             if (r3 != r2) {
    0x00040182 bne 0x401a6                                       |                 goto label_204;
                                                                 |             }
    0x00040184 ldr r1, [r4, -0x30]                               |             r1 = *((r4 - 0x30));
    0x00040188 movs r3, 8                                        |             r3 = 8;
    0x0004018a mov r0, r6                                        |             r0 = r6;
    0x0004018c mov r2, r7                                        |             r2 = r7;
    0x0004018e bl 0x3cee8                                        |             fcn_0003cee8 (r0, r1, r2, r3, r4, r5);
    0x00040192 ldrb r3, [r4, -0x1c]                              |             r3 = *((r4 - 0x1c));
    0x00040196 orr r3, r3, 4                                     |             r3 |= 4;
    0x0004019a strb r3, [r4, -0x1c]                              |             *((r4 - 0x1c)) = r3;
    0x0004019e ldrd r1, ip, [sb, 0x320]                          |             __asm ("ldrd r1, ip, aav.0x000000ff");
    0x000401a2 ldr.w r0, [r8, 0x154]                             |             r0 = *((r8 + 0x154));
                                                                 |         }
                                                                 | label_204:
    0x000401a6 adds r5, 1                                        |         r5++;
    0x000401a8 adds r4, 0x30                                     |         r4 += 0x30;
    0x000401aa cmp r5, r0                                        |         
    0x000401ac blt 0x40168                                       |         
                                                                 |     } while (r5 < r0);
    0x000401ae strd r1, ip, [sp, 0x30]                           |     __asm ("strd r1, ip, [var_30h]");
    0x000401b2 b 0x40112                                         |     goto label_33;
                                                                 | label_143:
    0x000401b4 ldr.w r2, [sl, 0x18]                              |     r2 = *((sl + 0x18));
    0x000401b8 movs r1, 0x19                                     |     r1 = 0x19;
    0x000401ba ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x000401bc mov r0, r8                                        |     r0 = r8;
    0x000401be str r4, [sp]                                      |     *(sp) = r4;
    0x000401c0 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000401c4 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x000401c6 mov r2, r4                                        |     r2 = r4;
    0x000401c8 movs r1, 0x19                                     |     r1 = 0x19;
    0x000401ca mov r0, r8                                        |     r0 = r8;
    0x000401cc str r4, [sp]                                      |     *(sp) = r4;
    0x000401ce bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000401d2 ldrb.w r2, [sl, 0x1c]                             |     r2 = *((sl + 0x1c));
    0x000401d6 ldr.w r3, [sl, 0x20]                              |     r3 = *((sl + 0x20));
    0x000401da cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000401dc beq.w 0x409be                                     |         goto label_205;
                                                                 |     }
    0x000401e0 str r3, [sp, 4]                                   |     var_4h = r3;
    0x000401e2 ldrd r2, r3, [sp, 0x1c]                           |     __asm ("ldrd r2, r3, [var_20h]");
    0x000401e6 str r2, [sp]                                      |     *(sp) = r2;
    0x000401e8 mvn r2, 0xa                                       |     r2 = ~0xa;
                                                                 | label_72:
    0x000401ec str r2, [sp, 8]                                   |     var_8h = r2;
    0x000401ee movs r1, 0xe                                      |     r1 = 0xe;
    0x000401f0 mov r2, fp                                        |     r2 = fp;
    0x000401f2 mov r0, r8                                        |     r0 = r8;
    0x000401f4 bl 0x1977c                                        |     fcn_0001977c (r0, r1, r2, r3, r4, r5);
    0x000401f8 strb.w r4, [sl, 0x1c]                             |     *((sl + 0x1c)) = r4;
                                                                 | label_146:
    0x000401fc ldr.w r3, [r8, 0x20]                              |     r3 = *((r8 + 0x20));
    0x00040200 mov r0, r6                                        |     r0 = r6;
    0x00040202 ldr r4, [sp, 0x50]                                |     r4 = var_50h;
    0x00040204 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x00040206 str.w r3, [sb, 0x30c]                             |     __asm ("str.w r3, aav.0x000000ff");
    0x0004020a movs r3, 0x98                                     |     r3 = 0x98;
    0x0004020c strb.w r3, [sb, 0x305]                            |     *((sb + 0x305)) = r3;
    0x00040210 mov r2, r4                                        |     r2 = r4;
    0x00040212 str.w fp, [sb, 0x308]                             |     __asm ("str.w fp, aav.0x000000ff");
    0x00040216 bl 0xaea0                                         |     fcn_0000aea0 (r0, r1, r2);
    0x0004021a ldr r3, [r6, 0x38]                                |     r3 = *((r6 + 0x38));
    0x0004021c cmp r4, r3                                        |     
    0x0004021e ittt gt                                           |     
                                                                 |     if (r4 <= r3) {
    0x00040220 movgt r3, r1                                      |         r3 = r1;
                                                                 |     }
                                                                 |     if (r4 <= r3) {
    0x00040222 strgt r4, [r6, 0x38]                              |         *((r6 + 0x38)) = r4;
                                                                 |     }
                                                                 |     if (r4 <= r3) {
    0x00040224 strgt r3, [r6, 0x3c]                              |         *((r6 + 0x3c)) = r3;
                                                                 |     }
    0x00040226 bl 0xa404                                         |     fcn_0000a404 (r0);
    0x0004022a b 0x3ffd6                                         |     goto label_34;
                                                                 | label_183:
    0x0004023c movs r1, 0                                        |     r1 = 0;
    0x0004023e mov r3, r7                                        |     r3 = r7;
    0x00040240 str r1, [sp]                                      |     *(sp) = r1;
    0x00040242 movs r1, 0x22                                     |     r1 = 0x22;
    0x00040244 ldr r0, [sp, 0x60]                                |     r0 = var_60h;
    0x00040246 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0004024a ldrh r3, [r5, 0x12]                               |     r3 = *((r5 + 0x12));
    0x0004024c ands r1, r3, 0x81                                 |     r1 = r3 & 0x81;
                                                                 |     if (r1 != r3) {
    0x00040250 bne.w 0x3fca4                                     |         goto label_35;
                                                                 |     }
                                                                 | label_186:
    0x00040254 ldr r3, [r5]                                      |     r3 = *(r5);
    0x00040256 ldr r5, [r3, 0x10]                                |     r5 = *((r3 + 0x10));
    0x00040258 mov r0, r5                                        |     r0 = r5;
    0x0004025a bl 0x7f74                                         |     r0 = fcn_00007f74 (r0);
    0x0004025e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00040260 bne.w 0x40528                                     |         goto label_206;
                                                                 |     }
                                                                 | label_50:
    0x00040264 ldr r3, [sp, 0x68]                                |     r3 = var_68h;
    0x00040266 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00040268 beq.w 0x3fca4                                     |         goto label_35;
                                                                 |     }
    0x0004026c ldrb r7, [r3, r4]                                 |     r7 = *((r3 + r4));
    0x0004026e mov r0, r5                                        |     r0 = r5;
    0x00040270 bl 0xb8a4                                         |     r0 = fcn_0000b8a4 (r0);
    0x00040274 mov r3, r0                                        |     r3 = r0;
    0x00040276 cmp r0, 0                                         |     
    0x00040278 it ne                                             |     
                                                                 |     if (r0 != 0) {
    0x0004027a cmpne r7, 0                                       |         __asm ("cmpne r7, 0");
                                                                 |     }
                                                                 |     if (r0 == 0) {
    0x0004027c beq.w 0x4039c                                     |         goto label_207;
                                                                 |     }
    0x00040280 cmp r7, 0x62                                      |     
    0x00040282 it ls                                             |     
                                                                 |     if (r7 <= 0x62) {
    0x00040284 cmpls r0, 0x62                                    |         __asm ("cmpls r0, 0x62");
                                                                 |     }
                                                                 |     if (r7 > 0x62) {
    0x00040286 bhi.w 0x403b2                                     |         goto label_208;
                                                                 |     }
                                                                 | label_45:
    0x0004028a ldr r2, [sp, 0x68]                                |     r2 = var_68h;
    0x0004028c movs r3, 0x62                                     |     r3 = 0x62;
    0x0004028e strb r3, [r2, r4]                                 |     *((r2 + r4)) = r3;
    0x00040290 b 0x3fca4                                         |     goto label_35;
                                                                 | label_154:
    0x00040292 ldr r1, [r3, 0x1c]                                |     r1 = *((r3 + 0x1c));
    0x00040294 cmp sl, r1                                        |     
                                                                 |     if (sl != r1) {
    0x00040296 bne.w 0x3f500                                     |         goto label_36;
                                                                 |     }
    0x0004029a ldrsh.w r3, [r3, 0x20]                            |     r3 = *((r3 + 0x20));
    0x0004029e cmp r3, 0                                         |     
                                                                 |     if (r3 >= 0) {
    0x000402a0 bge.w 0x3f500                                     |         goto label_36;
                                                                 |     }
    0x000402a4 b.w 0x3f5ba                                       |     goto label_37;
                                                                 | label_184:
    0x000402a8 mov r6, r2                                        |     r6 = r2;
    0x000402aa b 0x3fc9a                                         |     goto label_38;
                                                                 | label_139:
    0x000402ac ldr r3, [r6, 0x48]                                |     r3 = *((r6 + 0x48));
    0x000402ae movs r2, 0                                        |     r2 = 0;
    0x000402b0 movs r1, 0x19                                     |     r1 = 0x19;
    0x000402b2 mov r0, r8                                        |     r0 = r8;
    0x000402b4 adds r3, 1                                        |     r3++;
    0x000402b6 str r3, [r6, 0x48]                                |     *((r6 + 0x48)) = r3;
    0x000402b8 str.w r3, [sb, 0x2e0]                             |     __asm ("str.w r3, aav.0x000000ff");
    0x000402bc str r2, [sp]                                      |     *(sp) = r2;
    0x000402be bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000402c2 b.w 0x3f2bc                                       |     goto label_39;
                                                                 | label_142:
    0x000402c6 ldr r3, [r6, 0x48]                                |     r3 = *((r6 + 0x48));
    0x000402c8 adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x000402ca str r2, [sp, 0x1c]                                |     var_1ch = r2;
    0x000402cc ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x000402ce add r3, r2                                        |     r3 += r2;
    0x000402d0 str r3, [r6, 0x48]                                |     *((r6 + 0x48)) = r3;
    0x000402d2 b.w 0x3f324                                       |     goto label_40;
                                                                 | label_145:
    0x000402d6 str r3, [sp, 4]                                   |     var_4h = r3;
    0x000402d8 movs r1, 0xe                                      |     r1 = 0xe;
    0x000402da ldrd r2, r3, [sp, 0x1c]                           |     __asm ("ldrd r2, r3, [var_20h]");
    0x000402de mov r0, r8                                        |     r0 = r8;
    0x000402e0 str r2, [sp]                                      |     *(sp) = r2;
    0x000402e2 mvn r2, 1                                         |     r2 = ~1;
    0x000402e6 str r2, [sp, 8]                                   |     var_8h = r2;
    0x000402e8 mov r2, fp                                        |     r2 = fp;
    0x000402ea bl 0x1977c                                        |     fcn_0001977c (r0, r1, r2, r3, r4, r5);
    0x000402ee strb.w r7, [sl, 0x1c]                             |     *((sl + 0x1c)) = r7;
    0x000402f2 b.w 0x3f3d8                                       |     goto label_41;
                                                                 | label_133:
    0x000402f6 lsls r0, r3, 0x15                                 |     r0 = r3 << 0x15;
                                                                 |     if (r0 < r3) {
    0x000402f8 bmi.w 0x40868                                     |         goto label_209;
                                                                 |     }
    0x000402fc lsls r0, r2, 0x1b                                 |     r0 = r2 << 0x1b;
                                                                 |     if (r0 < r2) {
    0x000402fe bmi.w 0x3f0ec                                     |         goto label_42;
                                                                 |     }
    0x00040302 lsls r2, r3, 0x19                                 |     r2 = r3 << 0x19;
                                                                 |     if (r2 < r3) {
    0x00040304 bmi 0x40386                                       |         goto label_210;
                                                                 |     }
    0x00040306 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00040308 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004030a bne 0x40386                                       |         goto label_210;
                                                                 |     }
    0x0004030c ldr r0, [sp, 0x10]                                |     r0 = var_10h;
    0x0004030e add.w r3, r8, r6                                  |     r3 = r8 + r6;
    0x00040312 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x00040314 ldrb.w r2, [r0, 0x26]                             |     r2 = *((r0 + 0x26));
    0x00040318 add.w r3, r1, r3, lsl 3                           |     r3 = r1 + (r3 << 3);
    0x0004031c ldr r1, [r3, 0x30]                                |     r1 = *((r3 + 0x30));
    0x0004031e movs r3, 0x35                                     |     r3 = 0x35;
                                                                 |     if (r2 != 0) {
    0x00040320 cbz r2, 0x40326                                   |         
    0x00040322 movs r3, 0x36                                     |         r3 = 0x36;
    0x00040324 str r1, [r0, 0x3c]                                |         *((r0 + 0x3c)) = r1;
                                                                 |     }
    0x00040326 str r3, [sp]                                      |     *(sp) = r3;
    0x00040328 mov r2, r4                                        |     r2 = r4;
    0x0004032a mov r3, r5                                        |     r3 = r5;
    0x0004032c mov r0, sl                                        |     r0 = sl;
    0x0004032e bl 0x22140                                        |     fcn_00022140 (r0, r1, r2, r3, r4);
    0x00040330 invalid                                           |     
    0x00040334 ldrb.w r3, [r3, 0x26]                             |     r3 = *((r3 + 0x26));
                                                                 |     if (r3 != 0) {
    0x00040338 cbnz r3, 0x40396                                  |         goto label_211;
                                                                 |     }
    0x0004033a ldrsh.w r3, [r5, 0x26]                            |     r3 = *((r5 + 0x26));
    0x0004033e cmp r3, 0x3f                                      |     
                                                                 |     if (r3 > 0x3f) {
    0x00040340 bgt 0x40396                                       |         goto label_211;
                                                                 |     }
    0x00040342 ldrb.w r2, [r5, 0x2c]                             |     r2 = *((r5 + 0x2c));
    0x00040346 ands r2, r2, 0x20                                 |     r2 &= 0x20;
                                                                 |     if (r2 == r2) {
    0x0004034a beq.w 0x411ac                                     |         goto label_212;
                                                                 |     }
    0x0004034e ldr r3, [r7, 0x24]                                |     r3 = *((r7 + 0x24));
    0x00040350 lsls r0, r3, 0x16                                 |     r0 = r3 << 0x16;
                                                                 |     if (r0 >= r3) {
    0x00040352 bpl.w 0x3f158                                     |         goto label_43;
                                                                 |     }
    0x00040356 ldr r5, [r7, 0x1c]                                |     r5 = *((r7 + 0x1c));
    0x00040358 ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x0004035a ldrb.w r3, [r5, 0x37]                             |     r3 = *((r5 + 0x37));
    0x0004035e cmp r2, 0                                         |     
    0x00040360 and r3, r3, 3                                     |     r3 &= 3;
    0x00040364 sub.w r3, r3, 2                                   |     r3 -= 2;
    0x00040368 clz r3, r3                                        |     r3 &= r3;
    0x0004036c lsr.w r3, r3, 5                                   |     r3 >>= 5;
    0x00040370 it eq                                             |     
                                                                 |     if (r2 != 0) {
    0x00040372 moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00040374 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00040376 beq.w 0x3f128                                     |         goto label_44;
                                                                 |     }
                                                                 | label_134:
    0x0004037a ldr.w r3, [sb, 4]                                 |     r3 = *((sb + 4));
    0x0004037e str.w r3, [sb, 8]                                 |     __asm ("str.w r3, [sb, 8]");
    0x00040382 b.w 0x3f158                                       |     goto label_43;
                                                                 | label_210:
    0x00040386 ldr r3, [r5]                                      |     r3 = *(r5);
    0x00040388 mov r1, r4                                        |     r1 = r4;
    0x0004038a ldr r2, [r5, 0x20]                                |     r2 = *((r5 + 0x20));
    0x0004038c mov r0, sl                                        |     r0 = sl;
    0x0004038e str r3, [sp]                                      |     *(sp) = r3;
    0x00040390 movs r3, 0                                        |     r3 = 0;
    0x00040392 bl 0x19dd4                                        |     fcn_00019dd4 (r0, r1, r2, r3, r4);
                                                                 | label_211:
    0x00040396 ldr r3, [r7, 0x24]                                |     r3 = *((r7 + 0x24));
    0x00040398 b.w 0x3f0ec                                       |     goto label_42;
                                                                 | label_207:
    0x0004039c orr.w r2, r7, r0                                  |     r2 = r7 | r0;
    0x000403a0 uxtb r2, r2                                       |     r2 = (int8_t) r2;
    0x000403a2 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000403a4 beq.w 0x4028a                                     |         goto label_45;
                                                                 |     }
    0x000403a8 add r3, r7                                        |     r3 += r7;
    0x000403aa uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x000403ac cmp r3, 0x62                                      |     
                                                                 |     if (r3 == 0x62) {
    0x000403ae beq.w 0x4028a                                     |         goto label_45;
                                                                 |     }
                                                                 | label_208:
    0x000403b2 cmp r7, 0x62                                      |     
                                                                 |     if (r7 == 0x62) {
    0x000403b4 beq.w 0x4028a                                     |         goto label_45;
                                                                 |     }
    0x000403b8 mov r1, r7                                        |     r1 = r7;
    0x000403ba mov r0, r5                                        |     r0 = r5;
    0x000403bc bl 0xa36c                                         |     r0 = fcn_0000a36c (r0, r1);
    0x000403c0 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000403c2 beq.w 0x3fca4                                     |         goto label_35;
                                                                 |     }
    0x000403c6 b 0x4028a                                         |     goto label_45;
                                                                 | label_135:
    0x000403c8 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x000403ca add.w r3, r8, r6                                  |     r3 = r8 + r6;
    0x000403ce add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x000403d2 ldr r2, [sp, 0x118]                               |     r2 = *(arg_118h);
    0x000403d4 ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x000403d6 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x000403d8 cmp r3, 0                                         |     
    0x000403da it ne                                             |     
                                                                 |     if (r3 != 0) {
    0x000403dc cmpne r5, r3                                      |         __asm ("cmpne r5, r3");
                                                                 |     }
                                                                 |     if (r3 == 0) {
    0x000403de beq 0x403ec                                       |         goto label_213;
                                                                 |     }
                                                                 |     do {
    0x000403e0 ldr r3, [r3, 0x14]                                |         r3 = *((r3 + 0x14));
    0x000403e2 adds r2, 1                                        |         r2++;
    0x000403e4 cmp r3, 0                                         |         
    0x000403e6 it ne                                             |         
                                                                 |         if (r3 != 0) {
    0x000403e8 cmpne r5, r3                                      |             __asm ("cmpne r5, r3");
                                                                 |         }
    0x000403ea bne 0x403e0                                       |         
                                                                 |     } while (r3 != 0);
                                                                 | label_213:
    0x000403ec ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x000403ee movs r1, 0x36                                     |     r1 = 0x36;
    0x000403f0 str r2, [r3, 0x40]                                |     *((r3 + 0x40)) = r2;
    0x000403f2 b.w 0x3f142                                       |     goto label_46;
                                                                 | label_168:
    0x000403f6 ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x000403f8 ldrsh.w r3, [r2, 0x26]                            |     r3 = *((r2 + 0x26));
    0x000403fc cmp r3, 0x3f                                      |     
                                                                 |     if (r3 <= 0x3f) {
    0x000403fe ble.w 0x3f942                                     |         goto label_47;
                                                                 |     }
    0x00040402 ldr.w r6, [pc, 0xba8]                             |     
    0x00040406 add.w r5, r0, fp, lsl 1                           |     r5 = r0 + (fp << 1);
    0x0004040a add.w r4, r1, fp, lsl 2                           |     r4 = r1 + (fp << 2);
    0x0004040e sub.w ip, fp, 0x3e                                |     
    0x00040412 movs r3, 0x3f                                     |     r3 = 0x3f;
    0x00040414 add r6, pc                                        |     r6 = 0x813c6;
    0x00040416 mov lr, r2                                        |     lr = r2;
                                                                 |     do {
    0x00040418 strh r3, [r5], 2                                  |         *(r5) = r3;
                                                                 |         r5 += 2;
    0x0004041c add.w r2, ip, r3                                  |         r2 = ip + r3;
    0x00040420 ldrsh.w r7, [lr, 0x26]                            |         r7 = *((lr + 0x26));
    0x00040424 adds r3, 1                                        |         r3++;
    0x00040426 str r6, [r4], 4                                   |         *(r4) = r6;
                                                                 |         r4 += 4;
    0x0004042a cmp r3, r7                                        |         
    0x0004042c blt 0x40418                                       |         
                                                                 |     } while (r3 < r7);
    0x0004042e lsls r7, r2, 1                                    |     r7 = r2 << 1;
    0x00040430 lsl.w ip, r2, 2                                   |     
    0x00040434 b.w 0x3f942                                       |     goto label_47;
                                                                 | label_166:
    0x00040438 ldr r2, [sp, 0x98]                                |     r2 = var_98h;
    0x0004043a b.w 0x3f8bc                                       |     goto label_48;
                                                                 | label_172:
    0x0004043e ands r3, r2, 0x20                                 |     r3 = r2 & 0x20;
    0x00040442 itett ne                                          |     
                                                                 |     if (r3 == r2) {
    0x00040444 ldrne r3, [sl, 0x2c]                              |         r3 = *((sl + 0x2c));
                                                                 |     }
                                                                 |     if (r3 == r2) {
    0x00040448 movne r7, r3                                      |         r7 = r3;
                                                                 |     }
                                                                 |     if (r3 == r2) {
    0x0004044a ldrne r7, [r3]                                    |         r7 = *(r3);
                                                                 |     }
                                                                 |     if (r3 != r2) {
    0x0004044c movs r3, 1                                        |         r3 = 1;
                                                                 |     }
    0x0004044e lsls r1, r2, 0x1b                                 |     r1 = r2 << 0x1b;
                                                                 |     if (r1 < r2) {
    0x00040450 bmi.w 0x40668                                     |         goto label_214;
                                                                 |     }
    0x00040454 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00040456 mov sl, r3                                        |     sl = r3;
    0x00040458 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004045a beq.w 0x405fa                                     |         goto label_55;
                                                                 |     }
                                                                 | label_56:
    0x0004045e movs r1, 0x67                                     |     r1 = 0x67;
                                                                 | label_88:
    0x00040460 movs r3, 0                                        |     r3 = 0;
    0x00040462 mov r2, fp                                        |     r2 = fp;
    0x00040464 str r3, [sp]                                      |     *(sp) = r3;
    0x00040466 mov r0, r8                                        |     r0 = r8;
    0x00040468 mov r3, r4                                        |     r3 = r4;
    0x0004046a bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
                                                                 | label_54:
    0x0004046e cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x00040470 beq.w 0x405e2                                     |         goto label_215;
                                                                 |     }
    0x00040474 ldr r3, [r6, 0x48]                                |     r3 = *((r6 + 0x48));
    0x00040476 mov r0, r6                                        |     r0 = r6;
    0x00040478 ldr r5, [r7]                                      |     r5 = *(r7);
    0x0004047a add.w sl, r3, 1                                   |     sl = r3 + 1;
    0x0004047e ldr r1, [r5, 0x10]                                |     r1 = *((r5 + 0x10));
    0x00040480 mov r2, sl                                        |     r2 = sl;
    0x00040482 str.w sl, [r6, 0x48]                              |     __asm ("str.w sl, [r6, 0x48]");
    0x00040486 bl 0x3c4a8                                        |     fcn_0003c4a8 (r0, r1, r2);
    0x0004048a ldrb r3, [r5]                                     |     r3 = *(r5);
    0x0004048c and r3, r3, 0xfd                                  |     r3 &= 0xfd;
    0x00040490 cmp r3, 0x50                                      |     
    0x00040492 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
                                                                 |     if (r3 != 0x50) {
    0x00040494 bne.w 0x408cc                                     |         goto label_216;
                                                                 |     }
    0x00040498 movs r5, 0x53                                     |     r5 = 0x53;
    0x0004049a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004049c bne.w 0x40a4c                                     |         goto label_217;
                                                                 |     }
                                                                 | label_69:
    0x000404a0 ldr r0, [sp, 0x44]                                |     r0 = var_44h;
    0x000404a2 mov r1, r7                                        |     r1 = r7;
    0x000404a4 bl 0x83a0                                         |     fcn_000083a0 (r0, r1);
    0x000404a8 ldr.w r2, [r8, 0x20]                              |     r2 = *((r8 + 0x20));
    0x000404ac movs r3, 9                                        |     r3 = 9;
                                                                 | label_79:
    0x000404ae ldr r7, [r6, 0x48]                                |     r7 = *((r6 + 0x48));
    0x000404b0 movs r1, 0x65                                     |     r1 = 0x65;
    0x000404b2 strb.w r3, [sb, 0x305]                            |     *((sb + 0x305)) = r3;
    0x000404b6 movs r3, 0                                        |     r3 = 0;
    0x000404b8 strd fp, r2, [sb, 0x308]                          |     __asm ("strd fp, r2, aav.0x000000ff");
    0x000404bc mov r0, r8                                        |     r0 = r8;
    0x000404be adds r7, 1                                        |     r7++;
    0x000404c0 mov r2, fp                                        |     r2 = fp;
    0x000404c2 str r7, [r6, 0x48]                                |     *((r6 + 0x48)) = r7;
    0x000404c4 str r3, [sp]                                      |     *(sp) = r3;
    0x000404c6 mov r3, r7                                        |     r3 = r7;
    0x000404c8 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000404cc mov r3, r7                                        |     r3 = r7;
    0x000404ce mov.w r2, -1                                      |     r2 = -1;
    0x000404d2 mov r1, fp                                        |     r1 = fp;
    0x000404d4 mov r0, r6                                        |     r0 = r6;
    0x000404d6 bl 0xa44c                                         |     fcn_0000a44c (r0, r1, r2, r3);
    0x000404da mov r3, r4                                        |     r3 = r4;
    0x000404dc mov r2, sl                                        |     r2 = sl;
    0x000404de mov r1, r5                                        |     r1 = r5;
    0x000404e0 mov r0, r8                                        |     r0 = r8;
    0x000404e2 str r7, [sp]                                      |     *(sp) = r7;
    0x000404e4 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000404e8 ldr.w r3, [r8, 4]                                 |     r3 = *((r8 + 4));
    0x000404ec cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000404ee beq.w 0x3ffd6                                     |         goto label_34;
                                                                 |     }
    0x000404f2 ldr.w r2, [r8, 0x20]                              |     r2 = *((r8 + 0x20));
    0x000404f6 add.w r2, r2, r2, lsl 2                           |     r2 += (r2 << 2);
    0x000404fa add.w r3, r3, r2, lsl 2                           |     r3 += (r2 << 2);
    0x000404fe movs r2, 0x6b                                     |     r2 = 0x6b;
    0x00040500 strb r2, [r3, -0x11]                              |     *((r3 - 0x11)) = r2;
    0x00040504 b 0x3ffd6                                         |     goto label_34;
                                                                 | label_173:
    0x00040506 lsls r0, r2, 0x12                                 |     r0 = r2 << 0x12;
                                                                 |     if (r0 < r2) {
    0x00040508 bmi.w 0x408e4                                     |         goto label_218;
                                                                 |     }
    0x0004050c ands r1, r1, 8                                    |     r1 &= 8;
                                                                 |     if (r1 == r1) {
    0x00040510 beq.w 0x4098e                                     |         goto label_219;
                                                                 |     }
    0x00040514 movs r3, 0x9d                                     |     r3 = 0x9d;
    0x00040516 strb.w r3, [sb, 0x305]                            |     *((sb + 0x305)) = r3;
    0x0004051a b 0x3ffd6                                         |     goto label_34;
                                                                 | label_169:
    0x0004051c ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0004051e ldr r4, [r3, 0x48]                                |     r4 = *((r3 + 0x48));
    0x00040520 adds r4, 1                                        |     r4++;
    0x00040522 str r4, [r3, 0x48]                                |     *((r3 + 0x48)) = r4;
    0x00040524 b.w 0x3f9b2                                       |     goto label_49;
                                                                 | label_206:
    0x00040528 ldr r3, [sp, 0x74]                                |     r3 = var_74h;
    0x0004052a adds r2, r6, r4                                   |     r2 = r6 + r4;
    0x0004052c ldr r0, [sp, 0x60]                                |     r0 = var_60h;
    0x0004052e ldr.w r3, [r3, 0x2ec]                             |     r3 = *((r3 + 0x2ec));
    0x00040532 str r1, [sp]                                      |     *(sp) = r1;
    0x00040534 movs r1, 0x4c                                     |     r1 = 0x4c;
    0x00040536 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0004053a b 0x40264                                         |     goto label_50;
                                                                 | label_136:
    0x0004053c ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0004053e ldr r2, [sp, 0x118]                               |     r2 = *(arg_118h);
    0x00040540 cmp r3, 0                                         |     
    0x00040542 ite eq                                            |     
                                                                 |     if (r3 != 0) {
    0x00040544 moveq r1, 0x35                                    |         r1 = 0x35;
                                                                 |     }
                                                                 |     if (r3 == 0) {
    0x00040546 movne r1, 0x34                                    |         r1 = 0x34;
                                                                 |     }
    0x00040548 b.w 0x3f142                                       |     goto label_46;
                                                                 | label_158:
    0x0004054c ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x0004054e bl 0x192c8                                        |     fcn_000192c8 (r0);
    0x00040552 b.w 0x3f68e                                       |     goto label_51;
                                                                 | label_171:
    0x00040556 ldr r4, [r6, 0x48]                                |     r4 = *((r6 + 0x48));
    0x00040558 ldr.w r1, [sl, 0x2c]                              |     r1 = *((sl + 0x2c));
    0x0004055c ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x0004055e adds r4, 1                                        |     r4++;
    0x00040560 ldr r2, [sp, 0x44]                                |     r2 = var_44h;
    0x00040562 ldr r1, [r1]                                      |     r1 = *(r1);
    0x00040564 str r4, [r6, 0x48]                                |     *((r6 + 0x48)) = r4;
    0x00040566 strd r0, r4, [sp]                                 |     __asm ("strd r0, r4, [sp]");
    0x0004056a mov r0, r6                                        |     r0 = r6;
    0x0004056c bl 0x3c350                                        |     fcn_0003c350 (r0, r1, r2, r3, r4, r5, r6);
    0x00040570 cmp r4, 0                                         |     
    0x00040572 it ne                                             |     
                                                                 |     if (r4 != 0) {
    0x00040574 cmpne r4, r0                                      |         __asm ("cmpne r4, r0");
                                                                 |     }
    0x00040576 mov r5, r0                                        |     r5 = r0;
                                                                 |     if (r4 != 0) {
    0x00040578 bne.w 0x40afa                                     |         goto label_220;
                                                                 |     }
                                                                 | label_84:
    0x0004057c ldr.w r4, [sb, 0x2f0]                             |     r4 = *((sb + 0x2f0));
    0x00040580 movs r3, 0                                        |     r3 = 0;
    0x00040582 mov r2, r5                                        |     r2 = r5;
    0x00040584 movs r1, 0x26                                     |     r1 = 0x26;
    0x00040586 str r3, [sp]                                      |     *(sp) = r3;
    0x00040588 mov r0, r8                                        |     r0 = r8;
    0x0004058a mov r3, r4                                        |     r3 = r4;
    0x0004058c bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00040590 mov r3, r4                                        |     r3 = r4;
    0x00040592 mov r2, fp                                        |     r2 = fp;
    0x00040594 movs r1, 0x44                                     |     r1 = 0x44;
    0x00040596 mov r0, r8                                        |     r0 = r8;
    0x00040598 str r5, [sp]                                      |     *(sp) = r5;
    0x0004059a bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0004059e movs r2, 1                                        |     r2 = 1;
    0x000405a0 mov r1, r5                                        |     r1 = r5;
    0x000405a2 mov r0, r6                                        |     r0 = r6;
    0x000405a4 bl 0xaea0                                         |     fcn_0000aea0 (r0, r1, r2);
    0x000405a8 mov r3, r5                                        |     r3 = r5;
    0x000405aa mov.w r2, -1                                      |     r2 = -1;
    0x000405ae mov r1, fp                                        |     r1 = fp;
    0x000405b0 bl 0xa44c                                         |     fcn_0000a44c (r0, r1, r2, r3);
    0x000405b4 movs r3, 0x9d                                     |     r3 = 0x9d;
    0x000405b6 strb.w r3, [sb, 0x305]                            |     *((sb + 0x305)) = r3;
    0x000405ba b 0x3ffd6                                         |     goto label_34;
                                                                 | label_175:
    0x000405bc movs r3, 1                                        |     r3 = 1;
                                                                 | label_174:
    0x000405be str r3, [sp, 0x64]                                |     var_64h = r3;
    0x000405c0 b.w 0x3fb04                                       |     goto label_52;
                                                                 | label_112:
    0x000405c4 mov r1, r0                                        |     r1 = r0;
    0x000405c6 movs r3, 0                                        |     r3 = 0;
    0x000405c8 ldr r0, [sp, 0x40]                                |     r0 = var_40h;
    0x000405ca str r3, [sp, 0x10]                                |     var_10h = r3;
    0x000405cc bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x000405d0 b.w 0x3ef1a                                       |     goto label_31;
                                                                 | label_176:
    0x000405d4 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x000405d6 bne.w 0x40bb2                                     |         goto label_221;
                                                                 |     }
    0x000405da str r1, [sp, 0x20]                                |     var_20h = r1;
    0x000405dc str r1, [sp, 0x5c]                                |     var_5ch = r1;
    0x000405de b.w 0x3fb34                                       |     goto label_53;
                                                                 | label_215:
    0x000405e2 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x000405e4 ldr.w r3, [r8, 0x20]                              |     r3 = *((r8 + 0x20));
    0x000405e8 strd fp, r3, [sb, 0x308]                          |     __asm ("strd fp, r3, aav.0x000000ff");
    0x000405ec cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000405ee beq.w 0x409ea                                     |         goto label_222;
                                                                 |     }
    0x000405f2 movs r3, 8                                        |     r3 = 8;
    0x000405f4 strb.w r3, [sb, 0x305]                            |     *((sb + 0x305)) = r3;
    0x000405f8 b 0x3ffd6                                         |     goto label_34;
                                                                 | label_55:
    0x000405fa cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x000405fc beq.w 0x40be6                                     |         goto label_223;
                                                                 |     }
                                                                 | label_57:
    0x00040600 ldr r5, [r7]                                      |     r5 = *(r7);
    0x00040602 add r2, sp, 0xc0                                  |     r2 += var_c0h;
    0x00040604 ldr r3, [sp, 0x9c]                                |     r3 = var_9ch;
    0x00040606 mov r0, r6                                        |     r0 = r6;
    0x00040608 ldr r1, [r5, 0x10]                                |     r1 = *((r5 + 0x10));
    0x0004060a str r3, [sp, 0xd8]                                |     var_d8h = r3;
    0x0004060c bl 0x3c858                                        |     fcn_0003c858 (r0, r1, r2);
    0x00040610 ldrb r3, [r5]                                     |     r3 = *(r5);
    0x00040612 mov r2, fp                                        |     r2 = fp;
    0x00040614 str r0, [sp]                                      |     *(sp) = r0;
    0x00040616 mov r5, r0                                        |     r5 = r0;
    0x00040618 mov r0, r8                                        |     r0 = r8;
    0x0004061a adds r3, 0xe0                                     |     r3 += 0xe0;
    0x0004061c add r3, sp, r3                                    |     r3 = sp + r3;
    0x0004061e ldrb r1, [r3, -0x58]                              |     r1 = *((r3 - 0x58));
    0x00040622 mov r3, r4                                        |     r3 = r4;
    0x00040624 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00040628 mov r1, r5                                        |     r1 = r5;
    0x0004062a movs r2, 1                                        |     r2 = 1;
    0x0004062c mov r0, r6                                        |     r0 = r6;
    0x0004062e bl 0xaea0                                         |     fcn_0000aea0 (r0, r1, r2);
    0x00040632 ldr r1, [sp, 0xc0]                                |     r1 = var_c0h;
                                                                 |     if (r1 == 0) {
    0x00040634 cbz r1, 0x4065c                                   |         goto label_104;
                                                                 |     }
    0x00040636 ldrb r3, [r6, 0x13]                               |     r3 = *((r6 + 0x13));
    0x00040638 cmp r3, 7                                         |     
                                                                 |     if (r3 > 7) {
    0x0004063a bhi 0x4065c                                       |         goto label_104;
                                                                 |     }
    0x0004063c add.w r2, r6, 0x74                                |     r2 = r6 + 0x74;
    0x00040640 add.w r5, r6, 0x13c                               |     r5 = r6 + 0x13c;
                                                                 |     do {
    0x00040644 ldr r0, [r2, 0xc]                                 |         r0 = *((r2 + 0xc));
    0x00040646 cmp r1, r0                                        |         
                                                                 |         if (r1 == r0) {
    0x00040648 beq.w 0x41060                                     |             goto label_224;
                                                                 |         }
    0x0004064c adds r2, 0x14                                     |         r2 += 0x14;
    0x0004064e cmp r2, r5                                        |         
    0x00040650 bne 0x40644                                       |         
                                                                 |     } while (r2 != r5);
    0x00040652 adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x00040654 adds r3, 6                                        |     r3 += 6;
    0x00040656 strb r2, [r6, 0x13]                               |     *((r6 + 0x13)) = r2;
    0x00040658 str.w r1, [r6, r3, lsl 2]                         |     __asm ("str.w r1, [r6, r3, lsl 2]");
                                                                 | label_104:
    0x0004065c mov r1, r7                                        |     r1 = r7;
    0x0004065e ldr r0, [sp, 0x44]                                |     r0 = var_44h;
    0x00040660 mov r7, sl                                        |     r7 = sl;
    0x00040662 bl 0x83a0                                         |     fcn_000083a0 (r0, r1);
    0x00040666 b 0x4046e                                         |     goto label_54;
                                                                 | label_214:
    0x00040668 ldr.w r2, [sl, 0x2c]                              |     r2 = *((sl + 0x2c));
    0x0004066c ldr.w sl, [r2, r3, lsl 2]                         |     offset_14 = r3 << 2;
                                                                 |     sl = *((r2 + offset_14));
    0x00040670 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00040672 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00040674 beq 0x405fa                                       |         goto label_55;
                                                                 |     }
    0x00040676 cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x0004067a beq.w 0x4045e                                     |         goto label_56;
                                                                 |     }
    0x0004067e mov r3, r7                                        |     r3 = r7;
    0x00040680 mov r7, sl                                        |     r7 = sl;
    0x00040682 mov sl, r3                                        |     sl = r3;
    0x00040684 b 0x40600                                         |     goto label_57;
                                                                 | label_187:
    0x00040686 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00040688 and r3, r3, 1                                     |     r3 &= 1;
    0x0004068c it ne                                             |     
                                                                 |     if (sl == 0) {
    0x0004068e movne r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00040690 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00040692 beq.w 0x3fcf2                                     |         goto label_58;
                                                                 |     }
                                                                 | label_188:
    0x00040696 movs r5, 0                                        |     r5 = 0;
    0x00040698 b.w 0x3fd02                                       |     goto label_59;
                                                                 | label_127:
    0x000406f2 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x000406f4 ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x000406f6 lsls r4, r3, 0xe                                  |     r4 = r3 << 0xe;
                                                                 |     if (r4 >= r3) {
    0x000406f8 bpl.w 0x3f002                                     |         goto label_60;
                                                                 |     }
    0x000406fc ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x000406fe vmov.i8 d16, 0xff                                 |     __asm ("vmov.i8 d16, 0xff");
    0x00040702 vstr d16, [r3, 0x18]                              |     __asm ("vstr d16, [r3, 0x18]");
    0x00040706 b.w 0x3f002                                       |     goto label_60;
                                                                 | label_110:
    0x0004070a ldr.w r1, [pc, 0x8a4]                             |     r1 = *(0x00040fb0);
    0x0004070e movs r3, 0                                        |     r3 = 0;
    0x00040710 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x00040712 movs r2, 0x40                                     |     r2 = 0x40;
    0x00040714 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00040716 add r1, pc                                        |     r1 += pc;
    0x00040718 bl 0x1ca34                                        |     fcn_0001ca34 (r0);
    0x0004071c b.w 0x3ef1a                                       |     goto label_31;
                                                                 | label_162:
    0x00040720 ldr.w sb, [sp, 0x68]                              |     sb = var_68h;
    0x00040724 b.w 0x3fa76                                       |     goto label_61;
                                                                 | label_196:
    0x00040728 ldr r3, [sp, 0x64]                                |     r3 = var_64h;
    0x0004072a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004072c bne.w 0x40b6e                                     |         goto label_225;
                                                                 |     }
    0x00040730 ldr r1, [sp, 0x68]                                |     r1 = var_68h;
    0x00040732 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x00040734 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x00040738 ldr.w r3, [r8, 0x20]                              |     r3 = *((r8 + 0x20));
    0x0004073c str.w r3, [sb, 0x30c]                             |     __asm ("str.w r3, aav.0x000000ff");
    0x00040740 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00040742 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00040744 beq.w 0x3fec2                                     |         goto label_62;
                                                                 |     }
    0x00040748 b.w 0x3fe9e                                       |     goto label_63;
                                                                 | label_132:
    0x0004074c movs r4, 0                                        |     r4 = 0;
    0x0004074e b.w 0x3f0d6                                       |     goto label_64;
                                                                 | label_128:
    0x00040752 ldrh r4, [r2, 0x3c]                               |     r4 = *((r2 + 0x3c));
    0x00040754 ands r4, r4, 0x400                                |     r4 &= 0x400;
                                                                 |     if (r4 != r4) {
    0x00040758 bne.w 0x3f02c                                     |         goto label_65;
                                                                 |     }
    0x0004075c ldr.w r5, [sb]                                    |     r5 = *(sb);
    0x00040760 add.w fp, r3, 0x44                                |     
    0x00040764 cmp r5, 0                                         |     
                                                                 |     if (r5 <= 0) {
    0x00040766 ble.w 0x41058                                     |         goto label_226;
                                                                 |     }
    0x0004076a add.w r5, r5, r5, lsl 2                           |     r5 += (r5 << 2);
    0x0004076e ldr.w r6, [sb, 4]                                 |     r6 = *((sb + 4));
    0x00040772 mov r8, r4                                        |     r8 = r4;
    0x00040774 mov sb, r4                                        |     sb = r4;
                                                                 |     do {
    0x00040776 ldr.w r1, [r6, r4, lsl 2]                         |         offset_15 = r4 << 2;
                                                                 |         r1 = *((r6 + offset_15));
    0x0004077a mov r0, fp                                        |         r0 = fp;
    0x0004077c adds r4, 5                                        |         r4 += 5;
    0x0004077e bl 0xbc08                                         |         fcn_0000bc08 (r0, r1);
    0x00040782 cmp r5, r4                                        |         
    0x00040784 orr.w r8, r0, r8                                  |         r8 = r0 | r8;
    0x00040788 orr.w sb, r1, sb                                  |         sb = r1 | sb;
    0x0004078c bne 0x40776                                       |         
                                                                 |     } while (r5 != r4);
                                                                 | label_103:
    0x0004078e ldr r3, [sp, 0xb4]                                |     r3 = var_b4h;
                                                                 |     if (r3 == 0) {
    0x00040790 cbz r3, 0x407d4                                   |         goto label_227;
                                                                 |     }
    0x00040792 ldr r5, [r3]                                      |     r5 = *(r3);
    0x00040794 cmp r5, 0                                         |     
                                                                 |     if (r5 <= 0) {
    0x00040796 ble 0x407d4                                       |         goto label_227;
                                                                 |     }
    0x00040798 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004079a add.w r5, r5, r5, lsl 2                           |     r5 += (r5 << 2);
    0x0004079e movs r4, 0                                        |     r4 = 0;
    0x000407a0 str.w sb, [sp, 0x18]                              |     __asm ("str.w sb, [var_18h]");
    0x000407a4 mov r7, r4                                        |     r7 = r4;
    0x000407a6 mov sb, r8                                        |     sb = r8;
    0x000407a8 mov r6, r4                                        |     r6 = r4;
    0x000407aa mov r8, r5                                        |     r8 = r5;
    0x000407ac mov r5, r3                                        |     r5 = r3;
                                                                 |     do {
    0x000407ae ldr.w r1, [r5, r4, lsl 2]                         |         offset_16 = r4 << 2;
                                                                 |         r1 = *((r5 + offset_16));
    0x000407b2 mov r0, fp                                        |         r0 = fp;
    0x000407b4 adds r4, 5                                        |         r4 += 5;
    0x000407b6 bl 0xbc08                                         |         fcn_0000bc08 (r0, r1);
    0x000407ba cmp r8, r4                                        |         
    0x000407bc orr.w r7, r7, r0                                  |         r7 |= r0;
    0x000407c0 orr.w r6, r6, r1                                  |         r6 |= r1;
    0x000407c4 bne 0x407ae                                       |         
                                                                 |     } while (r8 != r4);
    0x000407c6 mov r8, sb                                        |     r8 = sb;
    0x000407c8 ldr.w sb, [sp, 0x18]                              |     sb = var_18h;
    0x000407cc orr.w r8, r7, r8                                  |     r8 = r7 | r8;
    0x000407d0 orr.w sb, r6, sb                                  |     sb = r6 | sb;
                                                                 | label_227:
    0x000407d4 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x000407d6 mov r6, sl                                        |     r6 = sl;
    0x000407d8 ldr r7, [sp, 0xb0]                                |     r7 = var_b0h;
    0x000407da ldr.w lr, [sp, 0x3c]                              |     lr = var_3ch;
    0x000407de ldr.w ip, [r3, 4]                                 |     ip = *((r3 + 4));
    0x000407e2 mov fp, r3                                        |     
                                                                 | label_66:
    0x000407e4 subs r6, 1                                        |     r6--;
    0x000407e6 add.w r3, r6, r6, lsl 3                           |     r3 = r6 + (r6 << 3);
    0x000407ea add.w r3, fp, r3, lsl 3                           |     r3 = fp + (r3 << 3);
    0x000407ee ldr.w r2, [r3, 0x318]                             |     r2 = *((r3 + 0x318));
    0x000407f2 ldrb r3, [r2, 0x10]                               |     r3 = *((r2 + 0x10));
    0x000407f4 add.w r3, r3, r3, lsl 3                           |     r3 += (r3 << 3);
    0x000407f8 add.w r3, ip, r3, lsl 3                           |     r3 = ip + (r3 << 3);
    0x000407fc ldrb.w r3, [r3, 0x2c]                             |     r3 = *((r3 + 0x2c));
    0x00040800 lsls r0, r3, 0x1c                                 |     r0 = r3 << 0x1c;
                                                                 |     if (r0 >= r3) {
    0x00040802 bpl 0x40858                                       |         goto label_82;
                                                                 |     }
    0x00040804 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
                                                                 |     if (r3 == 0) {
    0x00040806 cbnz r3, 0x4080e                                  |         
    0x00040808 ldr r3, [r2, 0x24]                                |         r3 = *((r2 + 0x24));
    0x0004080a lsls r1, r3, 0x13                                 |         r1 = r3 << 0x13;
                                                                 |         if (r1 >= r3) {
    0x0004080c bpl 0x40858                                       |             goto label_82;
                                                                 |         }
                                                                 |     }
    0x0004080e ldrd r4, r5, [r2, 8]                              |     __asm ("ldrd r4, r5, [r2, 8]");
    0x00040812 and.w r3, r4, r8                                  |     r3 = r4 & r8;
    0x00040816 and.w r2, r5, sb                                  |     r2 = r5 & sb;
    0x0004081a orrs r3, r2                                       |     r3 |= r2;
                                                                 |     if (r3 != r2) {
    0x0004081c bne 0x40858                                       |         goto label_82;
                                                                 |     }
    0x0004081e ldr r0, [r7, 0xc]                                 |     r0 = *((r7 + 0xc));
    0x00040820 ldr r3, [r7, 0x14]                                |     r3 = *((r7 + 0x14));
    0x00040822 add.w r0, r0, r0, lsl 1                           |     r0 += (r0 << 1);
    0x00040826 add.w r0, r3, r0, lsl 4                           |     r0 = r3 + (r0 << 4);
    0x0004082a cmp r3, r0                                        |     
                                                                 |     if (r3 >= r0) {
    0x0004082c bhs 0x4084a                                       |         goto label_81;
                                                                 |     }
                                                                 |     do {
    0x0004082e ldr r2, [r3, 0x28]                                |         r2 = *((r3 + 0x28));
    0x00040830 ldr r1, [r3, 0x2c]                                |         r1 = *((r3 + 0x2c));
    0x00040832 ands r2, r4                                       |         r2 &= r4;
    0x00040834 ands r1, r5                                       |         r1 &= r5;
    0x00040836 orrs r2, r1                                       |         r2 |= r1;
                                                                 |         if (r2 != r1) {
    0x00040838 beq 0x40844                                       |             
    0x0004083a ldr r2, [r3]                                      |             r2 = *(r3);
    0x0004083c ldr r2, [r2, 4]                                   |             r2 = *((r2 + 4));
    0x0004083e lsls r2, r2, 0x1f                                 |             r2 <<= 0x1f;
                                                                 |             if (r2 >= r2) {
    0x00040840 bpl.w 0x40ae0                                     |                 goto label_228;
                                                                 |             }
                                                                 |         }
    0x00040844 adds r3, 0x30                                     |         r3 += 0x30;
    0x00040846 cmp r0, r3                                        |         
    0x00040848 bhi 0x4082e                                       |         
                                                                 |     } while (r0 > r3);
                                                                 | label_81:
    0x0004084a uxtb r6, r6                                       |     r6 = (int8_t) r6;
    0x0004084c add.w lr, lr, -1                                  |     lr += -1;
    0x00040850 cmp r6, 1                                         |     
    0x00040852 strb.w r6, [fp, 0x29]                             |     *(arg_29h) = r6;
                                                                 |     if (r6 != 1) {
    0x00040856 bne 0x407e4                                       |         goto label_66;
                                                                 |     }
                                                                 | label_82:
    0x00040858 str.w lr, [sp, 0x3c]                              |     __asm ("str.w lr, [var_3ch]");
    0x0004085c b.w 0x3f02c                                       |     goto label_65;
                                                                 | label_164:
    0x00040860 mov ip, fp                                        |     
    0x00040862 mov r7, fp                                        |     r7 = fp;
    0x00040864 b.w 0x3f8e0                                       |     goto label_67;
                                                                 | label_209:
    0x00040868 ldr r3, [r5, 0x3c]                                |     r3 = *((r5 + 0x3c));
                                                                 |     if (r3 != 0) {
    0x0004086a cbnz r3, 0x40872                                  |         goto label_229;
                                                                 |     }
    0x0004086c b 0x40878                                         |     goto label_230;
                                                                 |     do {
    0x0004086e ldr r3, [r3, 0x18]                                |         r3 = *((r3 + 0x18));
                                                                 |         if (r3 == 0) {
    0x00040870 cbz r3, 0x40878                                   |             goto label_230;
                                                                 |         }
                                                                 | label_229:
    0x00040872 ldr r2, [r3]                                      |         r2 = *(r3);
    0x00040874 cmp fp, r2                                        |         
    0x00040876 bne 0x4086e                                       |         
                                                                 |     } while (fp != r2);
                                                                 | label_230:
    0x00040878 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x0004087a add.w r2, r8, r6                                  |     r2 = r8 + r6;
    0x0004087c lsls r6, r0, 8                                    |     r6 = r0 << 8;
    0x0004087e ldr r0, [sp, 0x48]                                |     r0 = var_48h;
    0x00040880 add.w r2, r1, r2, lsl 3                           |     r2 = r1 + (r2 << 3);
    0x00040884 mvn r1, 9                                         |     r1 = ~9;
    0x00040888 ldr r2, [r2, 0x30]                                |     r2 = *((r2 + 0x30));
    0x0004088a str r3, [sp, 4]                                   |     var_4h = r3;
    0x0004088c movs r3, 0                                        |     r3 = 0;
    0x0004088e str r3, [sp]                                      |     *(sp) = r3;
    0x00040890 str r1, [sp, 8]                                   |     var_8h = r1;
    0x00040892 movs r1, 0x96                                     |     r1 = 0x96;
    0x00040894 bl 0x1977c                                        |     fcn_0001977c (r0, r1, r2, r3, r4, r5);
    0x00040898 ldr r3, [r7, 0x24]                                |     r3 = *((r7 + 0x24));
    0x0004089a b.w 0x3f0ec                                       |     goto label_42;
                                                                 | label_190:
    0x0004089e ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x000408a0 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000408a2 beq.w 0x40baa                                     |         goto label_231;
                                                                 |     }
    0x000408a6 orrs r7, r3                                       |     r7 |= r3;
    0x000408a8 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x000408aa ldrh r3, [r3, 0x12]                               |     r3 = *((r3 + 0x12));
    0x000408ac and r3, r3, 0x28                                  |     r3 &= 0x28;
    0x000408b0 subs r3, 0                                        |     
    0x000408b2 it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x000408b4 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x000408b6 str r3, [sp, 0x60]                                |     var_60h = r3;
                                                                 | label_87:
    0x000408b8 ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x000408ba cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000408bc bne.w 0x40b8e                                     |         goto label_232;
                                                                 |     }
    0x000408c0 lsls r7, r7, 2                                    |     r7 <<= 2;
    0x000408c2 adds r3, r7, 2                                    |     r3 = r7 + 2;
    0x000408c4 ldr r7, [sp, 0x1c]                                |     r7 = var_1ch;
    0x000408c6 str r3, [sp, 0x50]                                |     var_50h = r3;
    0x000408c8 b.w 0x3fdb6                                       |     goto label_68;
                                                                 | label_216:
    0x000408cc movs r5, 0x50                                     |     r5 = 0x50;
    0x000408ce cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000408d0 beq.w 0x404a0                                     |         goto label_69;
                                                                 |     }
    0x000408d4 movs r5, 0x52                                     |     r5 = 0x52;
    0x000408d6 b 0x40a4e                                         |     goto label_233;
                                                                 | label_179:
    0x000408d8 ldr r3, [r6]                                      |     r3 = *(r6);
    0x000408da movs r2, 1                                        |     r2 = 1;
    0x000408dc strb.w r2, [r3, 0x40]                             |     *((r3 + 0x40)) = r2;
    0x000408e0 b.w 0x3fb70                                       |     goto label_70;
                                                                 | label_218:
    0x000408e4 ldr r2, [r6, 0x44]                                |     r2 = *((r6 + 0x44));
    0x000408e6 ldr r3, [r6, 0x48]                                |     r3 = *((r6 + 0x48));
    0x000408e8 ldr.w r0, [r8, 0x18]                              |     r0 = *((r8 + 0x18));
    0x000408ec str r2, [sp, 0x78]                                |     var_78h = r2;
    0x000408ee adds r4, r3, 1                                    |     r4 = r3 + 1;
    0x000408f0 adds r3, r2, 1                                    |     r3 = r2 + 1;
    0x000408f2 str r4, [r6, 0x48]                                |     *((r6 + 0x48)) = r4;
    0x000408f4 str r3, [r6, 0x44]                                |     *((r6 + 0x44)) = r3;
    0x000408f6 str r4, [sp, 0x68]                                |     var_68h = r4;
    0x000408f8 bl 0x19ed0                                        |     fcn_00019ed0 (r0);
    0x000408fc ldr.w r2, [sl, 0x2c]                              |     r2 = *((sl + 0x2c));
    0x00040900 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00040902 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x00040904 ldr r2, [r2]                                      |     r2 = *(r2);
    0x00040906 adds r3, r7, r3                                   |     r3 = r7 + r3;
    0x00040908 str r0, [sp, 0x6c]                                |     var_6ch = r0;
    0x0004090a str r2, [sp, 0x7c]                                |     var_7ch = r2;
    0x0004090c add.w r3, r1, r3, lsl 3                           |     r3 = r1 + (r3 << 3);
    0x00040910 ldr r2, [r2, 0xc]                                 |     r2 = *((r2 + 0xc));
    0x00040912 ldr r0, [r3, 0x18]                                |     r0 = *((r3 + 0x18));
    0x00040914 movs r3, 0x12                                     |     r3 = 0x12;
    0x00040916 strb.w r3, [sb, 0x305]                            |     *((sb + 0x305)) = r3;
    0x0004091a str r2, [sp, 0x18]                                |     var_18h = r2;
    0x0004091c ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0004091e str.w r4, [sb, 0x308]                             |     __asm ("str.w r4, aav.0x000000ff");
    0x00040922 str r0, [sp, 0x50]                                |     var_50h = r0;
    0x00040924 ldrb.w r4, [r2, 0x29]                             |     r4 = *((r2 + 0x29));
    0x00040928 cmp r4, 1                                         |     
                                                                 |     if (r4 > 1) {
    0x0004092a bhi.w 0x40a5e                                     |         goto label_234;
                                                                 |     }
    0x0004092e ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00040930 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x00040932 str r3, [sp, 0x54]                                |     var_54h = r3;
                                                                 | label_80:
    0x00040934 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00040936 ldrh r3, [r3, 0x22]                               |     r3 = *((r3 + 0x22));
    0x00040938 lsls r2, r3, 0x1c                                 |     r2 = r3 << 0x1c;
                                                                 |     if (r2 < r3) {
    0x0004093a bmi.w 0x40c2a                                     |         goto label_235;
                                                                 |     }
    0x0004093e ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x00040940 ldrb.w r2, [r3, 0x2c]                             |     r2 = *((r3 + 0x2c));
    0x00040944 ands r2, r2, 0x20                                 |     r2 &= 0x20;
                                                                 |     if (r2 == r2) {
    0x00040948 beq.w 0x41030                                     |         goto label_236;
                                                                 |     }
    0x0004094c ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x0004094e ldr r4, [r3, 8]                                   |     r4 = *((r3 + 8));
                                                                 |     if (r4 != 0) {
    0x00040950 cbnz r4, 0x4095e                                  |         goto label_237;
                                                                 |     }
    0x00040952 b.w 0x411e4                                       |     goto label_238;
                                                                 |     do {
    0x00040956 ldr r4, [r4, 0x14]                                |         r4 = *((r4 + 0x14));
    0x00040958 cmp r4, 0                                         |         
                                                                 |         if (r4 == 0) {
    0x0004095a beq.w 0x411e4                                     |             goto label_238;
                                                                 |         }
                                                                 | label_237:
    0x0004095e ldrb.w r3, [r4, 0x37]                             |         r3 = *((r4 + 0x37));
    0x00040962 and r3, r3, 3                                     |         r3 &= 3;
    0x00040966 cmp r3, 2                                         |         
    0x00040968 bne 0x40956                                       |         
                                                                 |     } while (r3 != 2);
    0x0004096a ldr.w sl, [r6, 0x44]                              |     sl = *((r6 + 0x44));
    0x0004096e movs r1, 0x38                                     |     r1 = 0x38;
    0x00040970 ldrh r3, [r4, 0x32]                               |     r3 = *((r4 + 0x32));
    0x00040972 mov r0, r8                                        |     r0 = r8;
    0x00040974 add.w r2, sl, 1                                   |     r2 = sl + 1;
    0x00040978 str r2, [r6, 0x44]                                |     *((r6 + 0x44)) = r2;
    0x0004097a movs r2, 0                                        |     r2 = 0;
    0x0004097c str r2, [sp]                                      |     *(sp) = r2;
    0x0004097e mov r2, sl                                        |     r2 = sl;
    0x00040980 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00040984 mov r1, r4                                        |     r1 = r4;
    0x00040986 mov r0, r6                                        |     r0 = r6;
    0x00040988 bl 0x220e4                                        |     fcn_000220e4 (r0, r1);
    0x0004098c b 0x41046                                         |     goto label_239;
                                                                 | label_219:
    0x0004098e ldr.w r0, [pc, 0x624]                             |     r0 = *(0x00040fb4);
    0x00040992 mov r3, r4                                        |     r3 = r4;
    0x00040994 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00040996 str.w fp, [sb, 0x308]                             |     __asm ("str.w fp, aav.0x000000ff");
    0x0004099a add r0, pc                                        |     r0 += pc;
    0x0004099c add r0, r2                                        |     r0 += r2;
    0x0004099e mov r2, fp                                        |     r2 = fp;
    0x000409a0 ldrb.w r4, [r0, 0xb50]                            |     r4 = *((r0 + 0xb50));
    0x000409a4 strb.w r4, [sb, 0x305]                            |     *((sb + 0x305)) = r4;
    0x000409a8 str r1, [sp]                                      |     *(sp) = r1;
    0x000409aa ldrb.w r1, [r0, 0xb54]                            |     r1 = *((r0 + 0xb54));
    0x000409ae mov r0, r8                                        |     r0 = r8;
    0x000409b0 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000409b4 adds r0, 1                                        |     r0++;
    0x000409b6 str.w r0, [sb, 0x30c]                             |     __asm ("str.w r0, aav.0x000000ff");
    0x000409ba b.w 0x3ffa2                                       |     goto label_71;
                                                                 | label_205:
    0x000409be str r3, [sp, 4]                                   |     var_4h = r3;
    0x000409c0 ldrd r2, r3, [sp, 0x1c]                           |     __asm ("ldrd r2, r3, [var_20h]");
    0x000409c4 str r2, [sp]                                      |     *(sp) = r2;
    0x000409c6 mvn r2, 1                                         |     r2 = ~1;
    0x000409ca b 0x401ec                                         |     goto label_72;
                                                                 | label_191:
    0x000409cc movs r3, 1                                        |     r3 = 1;
    0x000409ce movs r7, 4                                        |     r7 = 4;
    0x000409d0 str r3, [sp, 0x60]                                |     var_60h = r3;
    0x000409d2 b.w 0x3fd40                                       |     goto label_73;
                                                                 | label_159:
    0x000409d6 mov.w sl, -1                                      |     sl = -1;
    0x000409da mov r3, r7                                        |     r3 = r7;
    0x000409dc mov r4, sl                                        |     r4 = sl;
    0x000409de b.w 0x3f792                                       |     goto label_74;
                                                                 | label_170:
    0x000409e2 movs r0, 1                                        |     r0 = 1;
    0x000409e4 strb r0, [r3, 6]                                  |     *((r3 + 6)) = r0;
    0x000409e6 b.w 0x3fa62                                       |     goto label_75;
                                                                 | label_222:
    0x000409ea movs r3, 9                                        |     r3 = 9;
    0x000409ec strb.w r3, [sb, 0x305]                            |     *((sb + 0x305)) = r3;
    0x000409f0 b.w 0x3ffd6                                       |     goto label_34;
                                                                 | label_181:
    0x000409f4 ldr r5, [sp, 0x60]                                |     r5 = var_60h;
    0x000409f6 mov r2, r7                                        |     r2 = r7;
    0x000409f8 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x000409fa movs r1, 0x6a                                     |     r1 = 0x6a;
    0x000409fc mov r0, r5                                        |     r0 = r5;
    0x000409fe str r3, [sp]                                      |     *(sp) = r3;
    0x00040a00 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00040a04 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00040a06 movs r1, 0x10                                     |     r1 = 0x10;
    0x00040a08 mov r0, r5                                        |     r0 = r5;
    0x00040a0a mov r2, r3                                        |     r2 = r3;
    0x00040a0c str r3, [sp]                                      |     *(sp) = r3;
    0x00040a0e bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00040a12 movs r1, 0x3f                                     |     r1 = 0x3f;
    0x00040a14 mov r5, r0                                        |     r5 = r0;
    0x00040a16 b.w 0x3fba6                                       |     goto label_76;
                                                                 | label_185:
    0x00040a1a mov r6, r2                                        |     r6 = r2;
    0x00040a1c movs r2, 1                                        |     r2 = 1;
    0x00040a1e strb r2, [r3, 6]                                  |     *((r3 + 6)) = r2;
    0x00040a20 b.w 0x3fc9a                                       |     goto label_38;
                                                                 | label_189:
    0x00040a24 ldr r3, [sp, 0x5c]                                |     r3 = var_5ch;
    0x00040a26 ldr r1, [sp, 0x20]                                |     r1 = var_20h;
    0x00040a28 ldr r5, [sp, 0x64]                                |     r5 = var_64h;
    0x00040a2a str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00040a2c str r1, [sp, 0x5c]                                |     var_5ch = r1;
    0x00040a2e str r5, [sp, 0x50]                                |     var_50h = r5;
    0x00040a30 str r2, [sp, 0x64]                                |     var_64h = r2;
    0x00040a32 b.w 0x3fd02                                       |     goto label_59;
                                                                 | label_193:
    0x00040a36 cmp r1, 0x62                                      |     
    0x00040a38 it ls                                             |     
                                                                 |     if (r1 > 0x62) {
    0x00040a3a cmpls r0, 0x62                                    |         __asm ("cmpls r0, 0x62");
                                                                 |         goto label_240;
                                                                 |     }
                                                                 |     if (r1 > 0x62) {
                                                                 | label_240:
    0x00040a3c bhi.w 0x3fd98                                     |         goto label_77;
                                                                 |     }
                                                                 | label_194:
    0x00040a40 ldr r2, [sp, 0x68]                                |     r2 = var_68h;
    0x00040a42 movs r3, 0x62                                     |     r3 = 0x62;
    0x00040a44 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x00040a46 strb r3, [r2, r1]                                 |     *((r2 + r1)) = r3;
    0x00040a48 b.w 0x3fdaa                                       |     goto label_78;
                                                                 | label_217:
    0x00040a4c movs r5, 0x51                                     |     r5 = 0x51;
                                                                 | label_233:
    0x00040a4e ldr r0, [sp, 0x44]                                |     r0 = var_44h;
    0x00040a50 mov r1, r7                                        |     r1 = r7;
    0x00040a52 bl 0x83a0                                         |     fcn_000083a0 (r0, r1);
    0x00040a56 ldr.w r2, [r8, 0x20]                              |     r2 = *((r8 + 0x20));
    0x00040a5a movs r3, 8                                        |     r3 = 8;
    0x00040a5c b 0x404ae                                         |     goto label_79;
                                                                 | label_234:
    0x00040a5e ldr r0, [sp, 0x38]                                |     r0 = var_38h;
    0x00040a60 subs r4, r4, r0                                   |     r4 -= r0;
    0x00040a62 ldr r0, [sp, 0x28]                                |     r0 = var_28h;
    0x00040a64 subs r7, r4, 1                                    |     r7 = r4 - 1;
    0x00040a66 add.w r1, r7, r7, lsl 3                           |     r1 = r7 + (r7 << 3);
    0x00040a6a lsls r1, r1, 3                                    |     r1 <<= 3;
    0x00040a6c adds r1, 0x50                                     |     r1 += 0x50;
    0x00040a6e bl 0xd3a0                                         |     fcn_0000d3a0 (r0, r1);
    0x00040a72 str r0, [sp, 0x54]                                |     var_54h = r0;
    0x00040a74 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00040a76 beq.w 0x40112                                     |         goto label_33;
                                                                 |     }
    0x00040a7a ldrd r1, r3, [sp, 0x1c]                           |     __asm ("ldrd r1, r3, [var_20h]");
    0x00040a7e movs r2, 0x48                                     |     r2 = 0x48;
    0x00040a80 mla r1, r2, r3, r1                                |     __asm ("mla r1, r2, r3, r1");
    0x00040a84 uxtb r3, r4                                       |     r3 = (int8_t) r4;
    0x00040a86 adds r1, 8                                        |     r1 += 8;
    0x00040a88 str r3, [r0, 4]                                   |     *((r0 + 4)) = r3;
    0x00040a8a str r3, [r0], 8                                   |     *(r0) = r3;
                                                                 |     r0 += 8;
    0x00040a8e blx 0x6214                                        |     fcn_00006214 ();
    0x00040a92 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x00040a94 cmp r7, 0                                         |     
    0x00040a96 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x00040a98 add.w sl, r3, 8                                   |     sl = r3 + 8;
                                                                 |     if (r7 <= 0) {
    0x00040a9c ble.w 0x40934                                     |         goto label_80;
                                                                 |     }
    0x00040aa0 ldr r0, [sp, 0x54]                                |     r0 = var_54h;
    0x00040aa2 add.w r4, r4, r4, lsl 3                           |     r4 += (r4 << 3);
    0x00040aa6 add.w r3, sb, 0x298                               |     r3 = sb + 0x298;
    0x00040aaa str r5, [sp, 0x1c]                                |     var_1ch = r5;
    0x00040aac add.w r7, r3, r4, lsl 3                           |     r7 = r3 + (r4 << 3);
    0x00040ab0 add.w r4, r0, 0x50                                |     r4 = r0 + 0x50;
    0x00040ab4 mov r5, r4                                        |     r5 = r4;
    0x00040ab6 ldr r4, [sp, 0x44]                                |     r4 = var_44h;
                                                                 |     do {
    0x00040ab8 ldrb.w r1, [r4, 0x6c]                             |         r1 = *((r4 + 0x6c));
    0x00040abc mov r0, r5                                        |         r0 = r5;
    0x00040abe adds r4, 0x48                                     |         r4 += 0x48;
    0x00040ac0 movs r2, 0x48                                     |         r2 = 0x48;
    0x00040ac2 adds r5, 0x48                                     |         r5 += 0x48;
    0x00040ac4 add.w r1, r1, r1, lsl 3                           |         r1 += (r1 << 3);
    0x00040ac8 add.w r1, sl, r1, lsl 3                           |         r1 = sl + (r1 << 3);
    0x00040acc blx 0x6214                                        |         fcn_00006214 ();
    0x00040ad0 cmp r7, r4                                        |         
    0x00040ad2 bne 0x40ab8                                       |         
                                                                 |     } while (r7 != r4);
    0x00040ad4 ldr r5, [sp, 0x1c]                                |     r5 = var_1ch;
    0x00040ad6 b 0x40934                                         |     goto label_80;
                                                                 | label_228:
    0x00040ae0 cmp r0, r3                                        |     
                                                                 |     if (r0 < r3) {
    0x00040ae2 bls.w 0x4084a                                     |         goto label_81;
                                                                 |     }
    0x00040ae6 b 0x40858                                         |     goto label_82;
                                                                 | label_192:
    0x00040ae8 movs r3, 0                                        |     r3 = 0;
    0x00040aea movs r1, 0x4c                                     |     r1 = 0x4c;
    0x00040aec str r3, [sp]                                      |     *(sp) = r3;
    0x00040aee mov r0, r8                                        |     r0 = r8;
    0x00040af0 ldr r3, [sp, 0x74]                                |     r3 = var_74h;
    0x00040af2 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00040af6 b.w 0x3fd64                                       |     goto label_83;
                                                                 | label_220:
    0x00040afa ldrb r3, [r6, 0x13]                               |     r3 = *((r6 + 0x13));
    0x00040afc cmp r3, 7                                         |     
                                                                 |     if (r3 > 7) {
    0x00040afe bhi.w 0x4057c                                     |         goto label_84;
                                                                 |     }
    0x00040b02 add.w r2, r6, 0x74                                |     r2 = r6 + 0x74;
    0x00040b06 add.w r1, r6, 0x13c                               |     r1 = r6 + 0x13c;
                                                                 |     do {
    0x00040b0a ldr r0, [r2, 0xc]                                 |         r0 = *((r2 + 0xc));
    0x00040b0c cmp r4, r0                                        |         
                                                                 |         if (r4 == r0) {
    0x00040b0e beq.w 0x41050                                     |             goto label_241;
                                                                 |         }
    0x00040b12 adds r2, 0x14                                     |         r2 += 0x14;
    0x00040b14 cmp r2, r1                                        |         
    0x00040b16 bne 0x40b0a                                       |         
                                                                 |     } while (r2 != r1);
    0x00040b18 adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x00040b1a adds r3, 6                                        |     r3 += 6;
    0x00040b1c strb r2, [r6, 0x13]                               |     *((r6 + 0x13)) = r2;
    0x00040b1e str.w r4, [r6, r3, lsl 2]                         |     __asm ("str.w r4, [r6, r3, lsl 2]");
    0x00040b22 b 0x4057c                                         |     goto label_84;
                                                                 | label_197:
    0x00040b5a movs r3, 0                                        |     r3 = 0;
    0x00040b5c mov r2, r5                                        |     r2 = r5;
    0x00040b5e str r3, [sp]                                      |     *(sp) = r3;
    0x00040b60 movs r1, 0x4c                                     |     r1 = 0x4c;
    0x00040b62 ldr r3, [sp, 0x74]                                |     r3 = var_74h;
    0x00040b64 mov r0, r8                                        |     r0 = r8;
    0x00040b66 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00040b6a b.w 0x3fe68                                       |     goto label_85;
                                                                 | label_225:
    0x00040b6e ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x00040b70 ldr r4, [sp, 0x20]                                |     r4 = var_20h;
    0x00040b72 ldr r0, [sp, 0x6c]                                |     r0 = var_6ch;
    0x00040b74 mov r3, r1                                        |     r3 = r1;
    0x00040b76 adds r1, 1                                        |     r1++;
    0x00040b78 str r1, [sp, 0x84]                                |     var_84h = r1;
    0x00040b7a mov r2, r4                                        |     r2 = r4;
    0x00040b7c add r3, r0                                        |     r3 += r0;
    0x00040b7e movs r1, 0x1c                                     |     r1 = 0x1c;
    0x00040b80 mov r0, r8                                        |     r0 = r8;
    0x00040b82 str r4, [sp]                                      |     *(sp) = r4;
    0x00040b84 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00040b88 str r4, [sp, 0x60]                                |     var_60h = r4;
    0x00040b8a b.w 0x3fe8e                                       |     goto label_86;
                                                                 | label_232:
    0x00040b8e movs r1, 4                                        |     r1 = 4;
    0x00040b90 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00040b92 str r1, [sp, 0x50]                                |     var_50h = r1;
    0x00040b94 movs r2, 0                                        |     r2 = 0;
    0x00040b96 ldr r1, [sp, 0x6c]                                |     r1 = var_6ch;
    0x00040b98 mov r0, r8                                        |     r0 = r8;
    0x00040b9a adds r7, r3, 1                                    |     r7 = r3 + 1;
    0x00040b9c str r2, [sp]                                      |     *(sp) = r2;
    0x00040b9e add r3, r1                                        |     r3 += r1;
    0x00040ba0 movs r1, 0x1c                                     |     r1 = 0x1c;
    0x00040ba2 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00040ba6 b.w 0x3fdb6                                       |     goto label_68;
                                                                 | label_231:
    0x00040baa mov r7, r3                                        |     r7 = r3;
    0x00040bac movs r3, 1                                        |     r3 = 1;
    0x00040bae str r3, [sp, 0x60]                                |     var_60h = r3;
    0x00040bb0 b 0x408b8                                         |     goto label_87;
                                                                 | label_221:
    0x00040bb2 ldr.w r3, [sl, 0x2c]                              |     r3 = *((sl + 0x2c));
    0x00040bb6 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00040bb8 ldr.w r3, [r3, r2, lsl 2]                         |     offset_17 = r2 << 2;
                                                                 |     r3 = *((r3 + offset_17));
    0x00040bbc str r3, [sp, 0x5c]                                |     var_5ch = r3;
                                                                 | label_178:
    0x00040bbe ldr r2, [sp, 0x7c]                                |     r2 = var_7ch;
    0x00040bc0 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x00040bc2 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x00040bc4 ldrsh.w r3, [r3, r1, lsl 1]                       |     offset_18 = r1 << 1;
                                                                 |     r3 = *((r3 + offset_18));
    0x00040bc8 cmp r3, 0                                         |     
                                                                 |     if (r3 >= 0) {
    0x00040bca blt 0x40bec                                       |         
    0x00040bcc ldr r2, [r2, 0xc]                                 |         r2 = *((r2 + 0xc));
    0x00040bce add.w r3, r3, r3, lsl 1                           |         r3 += (r3 << 1);
    0x00040bd2 ldr r2, [r2, 4]                                   |         r2 = *((r2 + 4));
    0x00040bd4 add.w r3, r2, r3, lsl 3                           |         r3 = r2 + (r3 << 3);
    0x00040bd8 ldrb r3, [r3, 0x14]                               |         r3 = *((r3 + 0x14));
                                                                 |         if (r3 != 0) {
    0x00040bda cbnz r3, 0x40bec                                  |             goto label_242;
                                                                 |         }
    0x00040bdc str r3, [sp, 0x20]                                |         var_20h = r3;
    0x00040bde movs r3, 1                                        |         r3 = 1;
    0x00040be0 str r3, [sp, 0x64]                                |         var_64h = r3;
    0x00040be2 b.w 0x3fb34                                       |         goto label_53;
                                                                 | label_223:
    0x00040be6 mov r7, sl                                        |         r7 = sl;
    0x00040be8 movs r1, 0x6a                                     |         r1 = 0x6a;
    0x00040bea b 0x40460                                         |         goto label_88;
                                                                 |     }
                                                                 | label_242:
    0x00040bec movs r3, 0                                        |     r3 = 0;
    0x00040bee str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00040bf0 b.w 0x3fb32                                       |     goto label_89;
                                                                 | label_177:
    0x00040bf4 movs r3, 1                                        |     r3 = 1;
    0x00040bf6 str r1, [sp, 0x5c]                                |     var_5ch = r1;
    0x00040bf8 b.w 0x3fb34                                       |     goto label_53;
                                                                 | label_131:
    0x00040bfc movw r4, 0xbdc0                                   |     
    0x00040c00 movt r4, 0xfff0                                   |     r4 = 0xfff0bdc0;
    0x00040c04 b.w 0x3f0d6                                       |     goto label_64;
                                                                 | label_130:
    0x00040c08 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00040c0a ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x00040c0c ldr r3, [r3, 0x20]                                |     r3 = *((r3 + 0x20));
    0x00040c0e str r3, [r2, 0x2c]                                |     *((r2 + 0x2c)) = r3;
    0x00040c10 b.w 0x3ef1a                                       |     goto label_31;
                                                                 | label_120:
    0x00040c14 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x00040c16 mov r1, r4                                        |     r1 = r4;
    0x00040c18 bl 0xfa60                                         |     fcn_0000fa60 (r0, r1);
    0x00040c1c ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00040c1e str r3, [r4, 0x2c]                                |     *((r4 + 0x2c)) = r3;
    0x00040c20 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00040c22 strd r3, r6, [r4, 0x24]                           |     __asm ("strd r3, r6, [r4, 0x24]");
    0x00040c26 b.w 0x3efc6                                       |     goto label_90;
                                                                 | label_235:
    0x00040c2a movs r3, 0                                        |     r3 = 0;
    0x00040c2c mov sl, r3                                        |     sl = r3;
    0x00040c2e str r3, [sp, 0x1c]                                |     var_1ch = r3;
                                                                 | label_102:
    0x00040c30 movs r7, 0                                        |     r7 = 0;
    0x00040c32 ldr r3, [sp, 0x68]                                |     r3 = var_68h;
    0x00040c34 mov r2, r7                                        |     r2 = r7;
    0x00040c36 movs r1, 0x19                                     |     r1 = 0x19;
    0x00040c38 mov r0, r8                                        |     r0 = r8;
    0x00040c3a str r7, [sp]                                      |     *(sp) = r7;
    0x00040c3c bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00040c40 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00040c42 str r0, [sp, 0x84]                                |     var_84h = r0;
    0x00040c44 ldr.w r0, [r3, 0x154]                             |     r0 = *((r3 + 0x154));
    0x00040c48 cmp r0, 1                                         |     
                                                                 |     if (r0 <= 1) {
    0x00040c4a ble.w 0x40f92                                     |         goto label_243;
                                                                 |     }
    0x00040c4e str r6, [sp, 0x20]                                |     var_20h = r6;
    0x00040c50 mov r4, r7                                        |     r4 = r7;
    0x00040c52 ldr r6, [sp, 0x10]                                |     r6 = var_10h;
                                                                 |     do {
    0x00040c54 ldr.w r3, [r6, 0x15c]                             |         r3 = *((r6 + 0x15c));
    0x00040c58 adds r2, r3, r5                                   |         r2 = r3 + r5;
    0x00040c5a ldr r1, [r3, r5]                                  |         r1 = *((r3 + r5));
    0x00040c5c ldr r3, [sp, 0x7c]                                |         r3 = var_7ch;
    0x00040c5e cmp r3, r2                                        |         
                                                                 |         if (r3 != r2) {
    0x00040c60 beq 0x40c9c                                       |             
    0x00040c62 ldr r3, [r1, 4]                                   |             r3 = *((r1 + 4));
    0x00040c64 lsls r3, r3, 0x1f                                 |             r3 <<= 0x1f;
                                                                 |             if (r3 < r3) {
    0x00040c66 bmi 0x40c9c                                       |                 goto label_99;
                                                                 |             }
    0x00040c68 ldrb r3, [r2, 0x14]                               |             r3 = *((r2 + 0x14));
    0x00040c6a ands r3, r3, 0x12                                 |             r3 &= 0x12;
                                                                 |             if (r3 != r3) {
    0x00040c6e bne 0x40c9c                                       |                 goto label_99;
                                                                 |             }
    0x00040c70 ldrh r2, [r2, 0x12]                               |             r2 = *((r2 + 0x12));
    0x00040c72 ubfx r2, r2, 0, 0xc                               |             r2 = (r2 >> 0) & ((1 << 0xc) - 1);
                                                                 |             if (r2 == 0) {
    0x00040c76 cbz r2, 0x40c9c                                   |                 goto label_99;
                                                                 |             }
    0x00040c78 mov r2, r3                                        |             r2 = r3;
    0x00040c7a ldr r0, [sp, 0x28]                                |             r0 = var_28h;
    0x00040c7c bl 0xe5fc                                         |             r0 = fcn_0000e5fc (r0, r1, r2, r3, r4, r5);
    0x00040c80 mov r2, r0                                        |             r2 = r0;
    0x00040c82 cmp r4, 0                                         |             
                                                                 |             if (r4 == 0) {
    0x00040c84 beq.w 0x40fe4                                     |                 goto label_244;
                                                                 |             }
    0x00040c88 cmp r0, 0                                         |             
                                                                 |             if (r0 == 0) {
    0x00040c8a beq.w 0x40fe6                                     |                 goto label_245;
                                                                 |             }
    0x00040c8e mov r1, r4                                        |             r1 = r4;
    0x00040c90 ldr r0, [sp, 0x28]                                |             r0 = var_28h;
    0x00040c92 bl 0x13020                                        |             r0 = fcn_00013020 (r0, r1, r2);
    0x00040c96 mov r4, r0                                        |             r4 = r0;
    0x00040c98 ldr.w r0, [r6, 0x154]                             |             r0 = *((r6 + 0x154));
                                                                 |         }
                                                                 | label_99:
    0x00040c9c adds r7, 1                                        |         r7++;
    0x00040c9e adds r5, 0x30                                     |         r5 += 0x30;
    0x00040ca0 cmp r7, r0                                        |         
    0x00040ca2 blt 0x40c54                                       |         
                                                                 |     } while (r7 < r0);
    0x00040ca4 ldr r6, [sp, 0x20]                                |     r6 = var_20h;
    0x00040ca6 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00040ca8 beq.w 0x40f92                                     |         goto label_243;
                                                                 |     }
    0x00040cac mov r3, r4                                        |     r3 = r4;
    0x00040cae movs r4, 0                                        |     r4 = 0;
    0x00040cb0 mov r2, r4                                        |     r2 = r4;
    0x00040cb2 movs r1, 0x48                                     |     r1 = 0x48;
    0x00040cb4 mov r0, r6                                        |     r0 = r6;
    0x00040cb6 str r4, [sp]                                      |     *(sp) = r4;
    0x00040cb8 bl 0x1cd60                                        |     fcn_0001cd60 (r0, r1, r2, r3, r4);
    0x00040cbc ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00040cbe str r0, [sp, 0x74]                                |     var_74h = r0;
    0x00040cc0 ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
    0x00040cc2 cmp r2, r4                                        |     
                                                                 |     if (r2 <= r4) {
    0x00040cc4 ble.w 0x41028                                     |         goto label_246;
                                                                 |     }
                                                                 | label_97:
    0x00040cc8 movs r3, 0                                        |     r3 = 0;
    0x00040cca movs r1, 0xf0                                     |     r1 = 0xf0;
    0x00040ccc mov r7, r3                                        |     r7 = r3;
    0x00040cce str r3, [sp, 0x60]                                |     var_60h = r3;
    0x00040cd0 str r1, [sp, 0x70]                                |     var_70h = r1;
    0x00040cd2 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00040cd4 str.w fp, [sp, 0x64]                              |     __asm ("str.w fp, [var_64h]");
    0x00040cd8 str.w sb, [sp, 0x80]                              |     __asm ("str.w sb, [var_80h]");
    0x00040cdc b 0x40d94                                         |     goto label_247;
                                                                 | label_92:
    0x00040cde ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00040ce0 ldr r1, [sp, 0x50]                                |     r1 = var_50h;
    0x00040ce2 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x00040ce4 ldrb.w r4, [r1, 0x2c]                             |     r4 = *((r1 + 0x2c));
    0x00040ce8 subs r3, 1                                        |     r3--;
    0x00040cea cmp r3, r7                                        |     
    0x00040cec ite ne                                            |     
                                                                 |     if (r3 == r7) {
    0x00040cee movne r5, r7                                      |         r5 = r7;
                                                                 |     }
                                                                 |     if (r3 != r7) {
    0x00040cf0 moveq r5, -1                                      |         r5 = -1;
                                                                 |     }
    0x00040cf4 ands r4, r4, 0x20                                 |     r4 &= 0x20;
    0x00040cf8 str r5, [sp, 0x44]                                |     var_44h = r5;
                                                                 |     if (r4 != r4) {
    0x00040cfa bne.w 0x40e46                                     |         goto label_248;
                                                                 |     }
    0x00040cfe ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00040d00 mov.w r2, -1                                      |     r2 = -1;
    0x00040d04 mov r0, r6                                        |     r0 = r6;
    0x00040d06 str r4, [sp, 4]                                   |     var_4h = r4;
    0x00040d08 str r3, [sp]                                      |     *(sp) = r3;
    0x00040d0a ldr r3, [sp, 0x64]                                |     r3 = var_64h;
    0x00040d0c bl 0x26204                                        |     fcn_00026204 (r0, r1, r2, r3, r4, r5);
    0x00040d10 mov r3, r4                                        |     r3 = r4;
    0x00040d12 strd r0, r5, [sp]                                 |     __asm ("strd r0, r5, [sp]");
    0x00040d16 mov r2, sl                                        |     r2 = sl;
    0x00040d18 movs r1, 0x80                                     |     r1 = 0x80;
    0x00040d1a mov r0, r8                                        |     r0 = r8;
    0x00040d1c bl 0x19a3c                                        |     r0 = fcn_00019a3c (r0, r1, r2, r3, r4, r5);
    0x00040d20 mov sb, r0                                        |     sb = r0;
                                                                 | label_95:
    0x00040d22 movs r3, 0                                        |     r3 = 0;
    0x00040d24 movs r1, 0x11                                     |     r1 = 0x11;
    0x00040d26 str r3, [sp]                                      |     *(sp) = r3;
    0x00040d28 mov r0, r8                                        |     r0 = r8;
    0x00040d2a ldrd r2, r3, [sp, 0x68]                           |     __asm ("ldrd r2, r3, [var_6ch]");
    0x00040d2e bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00040d32 cmp.w sb, 0                                       |     
                                                                 |     if (sb != 0) {
    0x00040d36 beq 0x40d56                                       |         
    0x00040d38 ldr.w r3, [r8, 0x20]                              |         r3 = *((r8 + 0x20));
    0x00040d3c cmp sb, r3                                        |         
    0x00040d3e itttt lo                                          |         
                                                                 |         if (sb >= r3) {
    0x00040d40 ldrlo r2, [r8, 4]                                 |             r2 = *((r8 + 4));
                                                                 |         }
                                                                 |         if (sb >= r3) {
    0x00040d44 addlo r1, sb, sb, lsl 2                           |             r1 = sb + (sb << 2);
                                                                 |         }
                                                                 |         if (sb < r3) {
    0x00040d48 add.w r2, r2, r1, lsl 2                           |             r2 += (r1 << 2);
                                                                 |         }
                                                                 |         if (sb < r3) {
    0x00040d4c str r3, [r2, 8]                                   |             *((r2 + 8)) = r3;
                                                                 |         }
    0x00040d4e subs r3, 1                                        |         r3--;
    0x00040d50 ldr.w r2, [r8, 0x18]                              |         r2 = *((r8 + 0x18));
    0x00040d54 str r3, [r2, 0x58]                                |         *((r2 + 0x58)) = r3;
                                                                 |     }
                                                                 | label_93:
    0x00040d56 ldrb.w r3, [fp, 0x27]                             |     r3 = *(arg_27h);
    0x00040d5a ldr.w r2, [fp, 0x318]                             |     r2 = *(arg_318h);
    0x00040d5e cmp r3, 0                                         |     
    0x00040d60 ldr r3, [sp, 0x60]                                |     r3 = var_60h;
    0x00040d62 it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x00040d64 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x00040d66 str r3, [sp, 0x60]                                |     var_60h = r3;
    0x00040d68 ldr r3, [r2, 0x24]                                |     r3 = *((r2 + 0x24));
    0x00040d6a ands r3, r3, 0x200                                |     r3 &= 0x200;
                                                                 |     if (r3 != r3) {
    0x00040d6e beq 0x40d80                                       |         
    0x00040d70 ldr r3, [r2, 0x1c]                                |         r3 = *((r2 + 0x1c));
    0x00040d72 cmp r7, 0                                         |         
                                                                 |         if (r7 == 0) {
    0x00040d74 beq 0x40e1e                                       |             goto label_249;
                                                                 |         }
    0x00040d76 ldr r2, [sp, 0x20]                                |         r2 = var_20h;
    0x00040d78 cmp r2, r3                                        |         
    0x00040d7a it ne                                             |         
                                                                 |         if (r2 == r3) {
    0x00040d7c movne r3, 0                                       |             r3 = 0;
                                                                 |         }
                                                                 |         if (r2 == r3) {
    0x00040d7e beq 0x40e1e                                       |             goto label_249;
                                                                 |         }
                                                                 |     }
    0x00040d80 str r3, [sp, 0x20]                                |     var_20h = r3;
                                                                 | label_94:
    0x00040d82 mov r0, fp                                        |     r0 = fp;
    0x00040d84 bl 0x18dcc                                        |     fcn_00018dcc (r0);
                                                                 | label_91:
    0x00040d88 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00040d8a ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
                                                                 |     do {
    0x00040d8c adds r7, 1                                        |         r7++;
    0x00040d8e cmp r7, r2                                        |         
                                                                 |         if (r7 >= r2) {
    0x00040d90 bge.w 0x40efe                                     |             goto label_250;
                                                                 |         }
                                                                 | label_247:
    0x00040d94 ldr r1, [sp, 0x18]                                |         r1 = var_18h;
    0x00040d96 add.w r3, r7, r7, lsl 1                           |         r3 = r7 + (r7 << 1);
    0x00040d9a ldr r5, [sp, 0x64]                                |         r5 = var_64h;
    0x00040d9c lsls r3, r3, 4                                    |         r3 <<= 4;
    0x00040d9e ldr r1, [r1, 0x14]                                |         r1 = *((r1 + 0x14));
    0x00040da0 adds r0, r1, r3                                   |         r0 = r1 + r3;
    0x00040da2 ldr r4, [r0, 8]                                   |         r4 = *((r0 + 8));
    0x00040da4 cmp r5, r4                                        |         
                                                                 |         if (r5 == r4) {
    0x00040da6 beq 0x40dae                                       |             goto label_251;
                                                                 |         }
    0x00040da8 ldrh r0, [r0, 0x12]                               |         r0 = *((r0 + 0x12));
    0x00040daa lsls r0, r0, 0x16                                 |         r0 <<= 0x16;
    0x00040dac bpl 0x40d8c                                       |         
                                                                 |     } while (r0 >= r0);
                                                                 | label_251:
    0x00040dae ldr r2, [r1, r3]                                  |     r2 = *((r1 + r3));
    0x00040db0 ldr r1, [sp, 0x74]                                |     r1 = var_74h;
                                                                 |     if (r1 != 0) {
    0x00040db2 cbz r1, 0x40dbe                                   |         
    0x00040db4 ldr r3, [r2, 4]                                   |         r3 = *((r2 + 4));
    0x00040db6 lsls r3, r3, 0x1f                                 |         r3 <<= 0x1f;
    0x00040db8 itt pl                                            |         
                                                                 |         if (r3 < r3) {
    0x00040dba strpl r2, [r1, 0xc]                               |             *((r1 + 0xc)) = r2;
                                                                 |         }
                                                                 |         if (r3 >= r3) {
    0x00040dbc movpl r2, r1                                      |             r2 = r1;
                                                                 |             goto label_252;
                                                                 |         }
                                                                 |     }
                                                                 | label_252:
    0x00040dbe ldr r3, [sp, 0x78]                                |     r3 = var_78h;
    0x00040dc0 mov r0, r6                                        |     r0 = r6;
    0x00040dc2 ldr r1, [sp, 0x54]                                |     r1 = var_54h;
    0x00040dc4 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00040dc6 ldr r3, [sp, 0x70]                                |     r3 = var_70h;
    0x00040dc8 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00040dca movs r3, 0                                        |     r3 = 0;
    0x00040dcc str r3, [sp]                                      |     *(sp) = r3;
    0x00040dce bl 0x3ec04                                        |     r0 = fcn_0003ec04 (r0, r1, r2, r3, r4, r5, r6);
    0x00040dd2 mov fp, r0                                        |     
    0x00040dd4 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00040dd6 beq 0x40d88                                       |         goto label_91;
                                                                 |     }
    0x00040dd8 ldrb.w r3, [r6, 0x1c2]                            |     r3 = *((r6 + 0x1c2));
    0x00040ddc cmp r3, 2                                         |     
                                                                 |     if (r3 == 2) {
    0x00040dde bne 0x40e00                                       |         
    0x00040de0 movs r1, 0                                        |         r1 = 0;
    0x00040de2 ldr.w r3, [r0, 0x318]                             |         r3 = *((r0 + 0x318));
    0x00040de6 ldrb.w r2, [r0, 0x304]                            |         r2 = *((r0 + 0x304));
    0x00040dea mov r0, r6                                        |         r0 = r6;
    0x00040dec str r1, [sp, 8]                                   |         var_8h = r1;
    0x00040dee ldr r1, [sp, 0x80]                                |         r1 = var_80h;
    0x00040df0 ldrb.w r1, [r1, 0x304]                            |         r1 = *((r1 + 0x304));
    0x00040df4 str r1, [sp, 4]                                   |         var_4h = r1;
    0x00040df6 ldr r1, [sp, 0x38]                                |         r1 = var_38h;
    0x00040df8 str r1, [sp]                                      |         *(sp) = r1;
    0x00040dfa ldr r1, [sp, 0x54]                                |         r1 = var_54h;
    0x00040dfc bl 0x201b4                                        |         fcn_000201b4 (r0, r1, r2, r3);
                                                                 |     }
    0x00040e00 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00040e02 ldrh r3, [r3, 0x22]                               |     r3 = *((r3 + 0x22));
    0x00040e04 lsls r5, r3, 0x1c                                 |     r5 = r3 << 0x1c;
    0x00040e06 it mi                                             |     
                                                                 |     if (r5 < r3) {
    0x00040e08 movmi r3, 0                                       |         r3 = 0;
                                                                 |         goto label_253;
                                                                 |     }
                                                                 |     if (r5 >= r3) {
                                                                 | label_253:
    0x00040e0a bpl.w 0x40cde                                     |         goto label_92;
                                                                 |     }
                                                                 | label_98:
    0x00040e0e str r3, [sp]                                      |     *(sp) = r3;
    0x00040e10 movs r1, 0x11                                     |     r1 = 0x11;
    0x00040e12 ldrd r2, r3, [sp, 0x68]                           |     __asm ("ldrd r2, r3, [var_6ch]");
    0x00040e16 mov r0, r8                                        |     r0 = r8;
    0x00040e18 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00040e1c b 0x40d56                                         |     goto label_93;
                                                                 | label_249:
    0x00040e1e ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x00040e20 ldrb.w r2, [r2, 0x2c]                             |     r2 = *((r2 + 0x2c));
    0x00040e24 lsls r4, r2, 0x1a                                 |     r4 = r2 << 0x1a;
                                                                 |     if (r4 >= r2) {
    0x00040e26 bpl 0x40ef4                                       |         goto label_254;
                                                                 |     }
    0x00040e28 ldrb.w r2, [r3, 0x37]                             |     r2 = *((r3 + 0x37));
    0x00040e2c and r2, r2, 3                                     |     r2 &= 3;
    0x00040e30 cmp r2, 2                                         |     
    0x00040e32 movw r2, 0x10f0                                   |     r2 = 0x10f0;
    0x00040e36 it eq                                             |     
                                                                 |     if (r2 != 2) {
    0x00040e38 moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00040e3a str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00040e3c ldr r3, [sp, 0x70]                                |     r3 = var_70h;
    0x00040e3e it ne                                             |     
                                                                 |     if (r2 == 2) {
    0x00040e40 movne r3, r2                                      |         r3 = r2;
                                                                 |     }
    0x00040e42 str r3, [sp, 0x70]                                |     var_70h = r3;
    0x00040e44 b 0x40d82                                         |     goto label_94;
                                                                 | label_248:
    0x00040e46 ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x00040e48 ldr.w sb, [r3, 8]                                 |     sb = *((r3 + 8));
    0x00040e4c cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x00040e50 beq.w 0x411f0                                     |         goto label_255;
                                                                 |     }
    0x00040e54 mov r2, sb                                        |     r2 = sb;
    0x00040e56 b 0x40e60                                         |     
                                                                 |     while (r3 != 2) {
    0x00040e58 ldr r2, [r2, 0x14]                                |         r2 = *((r2 + 0x14));
    0x00040e5a cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x00040e5c beq.w 0x411f0                                     |             goto label_255;
                                                                 |         }
    0x00040e60 ldrb.w r3, [r2, 0x37]                             |         r3 = *((r2 + 0x37));
    0x00040e64 and r3, r3, 3                                     |         r3 &= 3;
    0x00040e68 cmp r3, 2                                         |         
    0x00040e6a bne 0x40e58                                       |         
                                                                 |     }
    0x00040e6c ldrd r3, r5, [r6, 0x38]                           |     __asm ("ldrd r3, r5, [r6, 0x38]");
    0x00040e70 mov sb, r2                                        |     sb = r2;
    0x00040e72 ldrh r4, [r2, 0x32]                               |     r4 = *((r2 + 0x32));
    0x00040e74 cmp r4, r3                                        |     
    0x00040e76 iteee gt                                          |     
                                                                 |     if (r4 <= r3) {
    0x00040e78 ldrgt r3, [r6, 0x48]                              |         r3 = *((r6 + 0x48));
                                                                 |     }
                                                                 |     if (r4 > r3) {
    0x00040e7a suble r3, r3, r4                                  |         r3 -= r4;
                                                                 |     }
                                                                 |     if (r4 > r3) {
    0x00040e7c strle r3, [r6, 0x38]                              |         *((r6 + 0x38)) = r3;
                                                                 |     }
                                                                 |     if (r4 > r3) {
    0x00040e7e addle r3, r4, r5                                  |         r3 = r4 + r5;
                                                                 |     }
    0x00040e80 iteee le                                          |     
                                                                 |     if (r4 > r3) {
    0x00040e82 strle r3, [r6, 0x3c]                              |         *((r6 + 0x3c)) = r3;
                                                                 |     }
                                                                 |     if (r4 <= r3) {
    0x00040e84 addgt r5, r3, 1                                   |         r5 = r3 + 1;
                                                                 |     }
                                                                 |     if (r4 <= r3) {
    0x00040e86 addgt r3, r3, r4                                  |         r3 += r4;
                                                                 |     }
                                                                 |     if (r4 <= r3) {
    0x00040e88 strgt r3, [r6, 0x48]                              |         *((r6 + 0x48)) = r3;
                                                                 |     }
                                                                 |     if (r4 == 0) {
    0x00040e8a cbz r4, 0x40eb4                                   |         goto label_256;
                                                                 |     }
    0x00040e8c movs r3, 0                                        |     r3 = 0;
    0x00040e8e str r7, [sp, 0x90]                                |     var_90h = r7;
    0x00040e90 mov r7, r3                                        |     r7 = r3;
                                                                 |     do {
    0x00040e92 ldr.w r3, [sb, 4]                                 |         r3 = *((sb + 4));
    0x00040e96 mov r0, r6                                        |         r0 = r6;
    0x00040e98 ldr r1, [sp, 0x50]                                |         r1 = var_50h;
    0x00040e9a ldrsh.w r2, [r3, r7, lsl 1]                       |         offset_19 = r7 << 1;
                                                                 |         r2 = *((r3 + offset_19));
    0x00040e9e movs r3, 0                                        |         r3 = 0;
    0x00040ea0 str r3, [sp, 4]                                   |         var_4h = r3;
    0x00040ea2 adds r3, r5, r7                                   |         r3 = r5 + r7;
    0x00040ea4 str r3, [sp]                                      |         *(sp) = r3;
    0x00040ea6 adds r7, 1                                        |         r7++;
    0x00040ea8 ldr r3, [sp, 0x64]                                |         r3 = var_64h;
    0x00040eaa bl 0x26204                                        |         fcn_00026204 (r0, r1, r2, r3, r4, r5);
    0x00040eae cmp r4, r7                                        |         
    0x00040eb0 bne 0x40e92                                       |         
                                                                 |     } while (r4 != r7);
    0x00040eb2 ldr r7, [sp, 0x90]                                |     r7 = var_90h;
                                                                 | label_256:
    0x00040eb4 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x00040eb6 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00040eb8 bne 0x40fb8                                       |         goto label_257;
                                                                 |     }
    0x00040eba ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00040ebc mov r2, r5                                        |     r2 = r5;
    0x00040ebe movs r1, 0x30                                     |     r1 = 0x30;
    0x00040ec0 mov r0, r8                                        |     r0 = r8;
    0x00040ec2 str r3, [sp]                                      |     *(sp) = r3;
    0x00040ec4 mov r3, r4                                        |     r3 = r4;
    0x00040ec6 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00040eca ldr r2, [sp, 0x44]                                |     r2 = var_44h;
    0x00040ecc movs r1, 0x6c                                     |     r1 = 0x6c;
    0x00040ece ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00040ed0 mov r0, r8                                        |     r0 = r8;
    0x00040ed2 str r2, [sp]                                      |     *(sp) = r2;
    0x00040ed4 mov r2, sl                                        |     r2 = sl;
    0x00040ed6 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00040eda mov r2, r4                                        |     r2 = r4;
    0x00040edc mov r1, r5                                        |     r1 = r5;
    0x00040ede mov r0, r6                                        |     r0 = r6;
    0x00040ee0 bl 0xaea0                                         |     fcn_0000aea0 (r0, r1, r2);
    0x00040ee4 ldr r3, [r6, 0x38]                                |     r3 = *((r6 + 0x38));
    0x00040ee6 cmp r4, r3                                        |     
                                                                 |     if (r4 <= r3) {
    0x00040ee8 ble 0x40fa8                                       |         goto label_258;
                                                                 |     }
    0x00040eea ldr.w sb, [sp, 0x44]                              |     sb = var_44h;
    0x00040eee strd r4, r5, [r6, 0x38]                           |     __asm ("strd r4, r5, [r6, 0x38]");
    0x00040ef2 b 0x40d22                                         |     goto label_95;
                                                                 | label_254:
    0x00040ef4 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00040ef6 movw r3, 0x10f0                                   |     r3 = 0x10f0;
    0x00040efa str r3, [sp, 0x70]                                |     var_70h = r3;
    0x00040efc b 0x40d82                                         |     goto label_94;
                                                                 | label_250:
    0x00040efe ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00040f00 ldr.w sb, [sp, 0x80]                              |     sb = var_80h;
    0x00040f04 ldr.w fp, [sp, 0x64]                              |     fp = var_64h;
    0x00040f08 str.w r3, [sb, 0x310]                             |     __asm ("str.w r3, aav.0x000000ff");
                                                                 |     if (r3 != 0) {
    0x00040f0c cbz r3, 0x40f14                                   |         
    0x00040f0e ldr r3, [sp, 0x78]                                |         r3 = var_78h;
    0x00040f10 str.w r3, [sb, 0x2e8]                             |         __asm ("str.w r3, aav.0x000000ff");
                                                                 |     }
                                                                 | label_101:
    0x00040f14 ldr r2, [sp, 0x74]                                |     r2 = var_74h;
                                                                 |     if (r2 != 0) {
    0x00040f16 cbz r2, 0x40f24                                   |         
    0x00040f18 movs r3, 0                                        |         r3 = 0;
    0x00040f1a ldr r0, [sp, 0x28]                                |         r0 = var_28h;
    0x00040f1c mov r1, r2                                        |         r1 = r2;
    0x00040f1e str r3, [r2, 0xc]                                 |         *((r2 + 0xc)) = r3;
    0x00040f20 bl 0x12e68                                        |         fcn_00012e68 (r0);
                                                                 |     }
                                                                 | label_96:
    0x00040f24 ldr.w r1, [r8, 0x20]                              |     r1 = *((r8 + 0x20));
    0x00040f28 mov r0, r8                                        |     r0 = r8;
    0x00040f2a ldr r3, [sp, 0x84]                                |     r3 = var_84h;
    0x00040f2c cmp r3, r1                                        |     
    0x00040f2e ittt lo                                           |     
                                                                 |     if (r3 >= r1) {
    0x00040f30 ldrlo r2, [r8, 4]                                 |         r2 = *((r8 + 4));
                                                                 |     }
                                                                 |     if (r3 >= r1) {
    0x00040f34 addlo r3, r3, r3, lsl 2                           |         r3 += (r3 << 2);
                                                                 |     }
                                                                 |     if (r3 < r1) {
    0x00040f38 add.w r2, r2, r3, lsl 2                           |         r2 += (r3 << 2);
                                                                 |     }
    0x00040f3c ldr.w r3, [sb, 0x2ec]                             |     r3 = *((sb + 0x2ec));
    0x00040f40 it lo                                             |     
                                                                 |     if (r3 >= r1) {
    0x00040f42 strlo r1, [r2, 4]                                 |         *((r2 + 4)) = r1;
                                                                 |     }
    0x00040f44 movs r2, 0                                        |     r2 = 0;
    0x00040f46 str r2, [sp]                                      |     *(sp) = r2;
    0x00040f48 movs r1, 0x10                                     |     r1 = 0x10;
    0x00040f4a bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00040f4e ldr r3, [sp, 0x6c]                                |     r3 = var_6ch;
    0x00040f50 ldr.w r2, [r8, 0x18]                              |     r2 = *((r8 + 0x18));
    0x00040f54 mvns r3, r3                                       |     r3 = ~r3;
                                                                 |     if (r3 >= r3) {
    0x00040f56 bmi 0x40f64                                       |         
    0x00040f58 ldr r1, [r2, 0x70]                                |         r1 = *((r2 + 0x70));
                                                                 |         if (r1 == 0) {
    0x00040f5a cbz r1, 0x40f64                                   |             goto label_259;
                                                                 |         }
    0x00040f5c ldr.w r0, [r8, 0x20]                              |         r0 = *((r8 + 0x20));
    0x00040f60 str.w r0, [r1, r3, lsl 2]                         |         __asm ("str.w r0, [r1, r3, lsl 2]");
                                                                 |     }
                                                                 | label_259:
    0x00040f64 ldr.w r3, [r8, 0x20]                              |     r3 = *((r8 + 0x20));
    0x00040f68 subs r3, 1                                        |     r3--;
    0x00040f6a str r3, [r2, 0x58]                                |     *((r2 + 0x58)) = r3;
    0x00040f6c ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00040f6e ldrb.w r3, [r3, 0x29]                             |     r3 = *((r3 + 0x29));
    0x00040f72 cmp r3, 1                                         |     
                                                                 |     if (r3 >= 1) {
    0x00040f74 bls 0x40f7e                                       |         
    0x00040f76 ldr r1, [sp, 0x54]                                |         r1 = var_54h;
    0x00040f78 ldr r0, [sp, 0x28]                                |         r0 = var_28h;
    0x00040f7a bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
                                                                 |     }
    0x00040f7e ldr r3, [sp, 0x60]                                |     r3 = var_60h;
    0x00040f80 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00040f82 bne.w 0x3ffd6                                     |         goto label_34;
                                                                 |     }
    0x00040f86 ldr r1, [sp, 0x7c]                                |     r1 = var_7ch;
    0x00040f88 ldr r0, [sp, 0x5c]                                |     r0 = var_5ch;
    0x00040f8a bl 0x83a0                                         |     fcn_000083a0 (r0, r1);
    0x00040f8e b.w 0x3ffd6                                       |     goto label_34;
                                                                 | label_243:
    0x00040f92 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00040f94 ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
    0x00040f96 movs r3, 0                                        |     r3 = 0;
    0x00040f98 cmp r2, 0                                         |     
    0x00040f9a itt le                                            |     
                                                                 |     if (r2 > 0) {
    0x00040f9c strle r3, [sb, 0x310]                             |         *((sb + 0x310)) = r3;
                                                                 |     }
                                                                 |     if (r2 > 0) {
    0x00040fa0 str r3, [sp, 0x60]                                |         var_60h = r3;
                                                                 |         goto label_260;
                                                                 |     }
                                                                 |     if (r2 <= 0) {
                                                                 | label_260:
    0x00040fa2 ble 0x40f24                                       |         goto label_96;
                                                                 |     }
    0x00040fa4 str r3, [sp, 0x74]                                |     var_74h = r3;
    0x00040fa6 b 0x40cc8                                         |     goto label_97;
                                                                 | label_258:
    0x00040fa8 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x00040faa b 0x40e0e                                         |     goto label_98;
                                                                 | label_257:
    0x00040fb8 movs r3, 0                                        |     r3 = 0;
    0x00040fba mov r2, sl                                        |     r2 = sl;
    0x00040fbc movs r1, 0x43                                     |     r1 = 0x43;
    0x00040fbe mov r0, r8                                        |     r0 = r8;
    0x00040fc0 strd r5, r4, [sp]                                 |     __asm ("strd r5, r4, [sp]");
    0x00040fc4 bl 0x19a3c                                        |     fcn_00019a3c (r0, r1, r2, r3, r4, r5);
    0x00040fc8 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x00040fca mov sb, r0                                        |     sb = r0;
    0x00040fcc adds r3, 1                                        |     r3++;
                                                                 |     if (r3 != 1) {
    0x00040fce bne 0x40fec                                       |         goto label_261;
                                                                 |     }
                                                                 | label_100:
    0x00040fd0 mov r2, r4                                        |     r2 = r4;
    0x00040fd2 mov r1, r5                                        |     r1 = r5;
    0x00040fd4 mov r0, r6                                        |     r0 = r6;
    0x00040fd6 bl 0xaea0                                         |     fcn_0000aea0 (r0, r1, r2);
    0x00040fda ldr r3, [r6, 0x38]                                |     r3 = *((r6 + 0x38));
    0x00040fdc cmp r4, r3                                        |     
                                                                 |     if (r4 <= r3) {
    0x00040fde ble.w 0x40d22                                     |         goto label_95;
                                                                 |     }
                                                                 | label_244:
    0x00040fe4 mov r4, r0                                        |     r4 = r0;
                                                                 | label_245:
    0x00040fe6 ldr.w r0, [r6, 0x154]                             |     r0 = *((r6 + 0x154));
    0x00040fea b 0x40c9c                                         |     goto label_99;
                                                                 | label_261:
    0x00040fec ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00040fee mov r2, r5                                        |     r2 = r5;
    0x00040ff0 movs r1, 0x30                                     |     r1 = 0x30;
    0x00040ff2 mov r0, r8                                        |     r0 = r8;
    0x00040ff4 str r3, [sp]                                      |     *(sp) = r3;
    0x00040ff6 mov r3, r4                                        |     r3 = r4;
    0x00040ff8 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00040ffc movs r2, 0                                        |     r2 = 0;
    0x00040ffe ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00041000 str r2, [sp]                                      |     *(sp) = r2;
    0x00041002 movs r1, 0x6c                                     |     r1 = 0x6c;
    0x00041004 mov r2, sl                                        |     r2 = sl;
    0x00041006 mov r0, r8                                        |     r0 = r8;
    0x00041008 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0004100c ldr.w r3, [r8, 4]                                 |     r3 = *((r8 + 4));
    0x00041010 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00041012 beq 0x40fd0                                       |         goto label_100;
                                                                 |     }
    0x00041014 ldr.w r2, [r8, 0x20]                              |     r2 = *((r8 + 0x20));
    0x00041018 add.w r2, r2, r2, lsl 2                           |     r2 += (r2 << 2);
    0x0004101c add.w r3, r3, r2, lsl 2                           |     r3 += (r2 << 2);
    0x00041020 movs r2, 0x10                                     |     r2 = 0x10;
    0x00041022 strb r2, [r3, -0x11]                              |     *((r3 - 0x11)) = r2;
    0x00041026 b 0x40fd0                                         |     goto label_100;
                                                                 | label_246:
    0x00041028 str.w r4, [sb, 0x310]                             |     __asm ("str.w r4, aav.0x000000ff");
    0x0004102c str r4, [sp, 0x60]                                |     var_60h = r4;
    0x0004102e b 0x40f14                                         |     goto label_101;
                                                                 | label_236:
    0x00041030 ldr r3, [r6, 0x48]                                |     r3 = *((r6 + 0x48));
    0x00041032 movs r1, 0x1c                                     |     r1 = 0x1c;
    0x00041034 mov r0, r8                                        |     r0 = r8;
    0x00041036 add.w sl, r3, 1                                   |     sl = r3 + 1;
    0x0004103a str.w sl, [r6, 0x48]                              |     __asm ("str.w sl, [r6, 0x48]");
    0x0004103e mov r3, sl                                        |     r3 = sl;
    0x00041040 str r2, [sp]                                      |     *(sp) = r2;
    0x00041042 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
                                                                 | label_239:
    0x00041046 ldr r3, [r6, 0x48]                                |     r3 = *((r6 + 0x48));
    0x00041048 adds r3, 1                                        |     r3++;
    0x0004104a str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x0004104c str r3, [r6, 0x48]                                |     *((r6 + 0x48)) = r3;
    0x0004104e b 0x40c30                                         |     goto label_102;
                                                                 | label_241:
    0x00041050 movs r3, 1                                        |     r3 = 1;
    0x00041052 strb r3, [r2, 6]                                  |     *((r2 + 6)) = r3;
    0x00041054 b.w 0x4057c                                       |     goto label_84;
                                                                 | label_226:
    0x00041058 mov r8, r4                                        |     r8 = r4;
    0x0004105a mov sb, r4                                        |     sb = r4;
    0x0004105c b.w 0x4078e                                       |     goto label_103;
                                                                 | label_224:
    0x00041060 movs r3, 1                                        |     r3 = 1;
    0x00041062 strb r3, [r2, 6]                                  |     *((r2 + 6)) = r3;
    0x00041064 b.w 0x4065c                                       |     goto label_104;
                                                                 | label_124:
    0x00041068 blx 0x6498                                        |     fcn_00006498 ();
                                                                 | label_148:
    0x0004106c movs r3, 0                                        |     r3 = 0;
    0x0004106e mov r2, r3                                        |     r2 = r3;
                                                                 | label_149:
    0x00041070 strd r3, r2, [r4, 8]                              |     __asm ("strd r3, r2, [r4, 8]");
    0x00041074 movs r2, 1                                        |     r2 = 1;
    0x00041076 ldr.w r3, [fp, 8]                                 |     r3 = *(arg_110h);
    0x0004107a str.w sl, [fp, 0x2e4]                             |     __asm ("str.w sl, [arg_2e4h]");
    0x0004107e strh.w r2, [fp, 0x20]                             |     *(arg_20h) = r2;
                                                                 |     if (r3 != 0) {
    0x00041082 cbz r3, 0x4108a                                   |         
    0x00041084 ldr r3, [r3]                                      |         r3 = *(r3);
    0x00041086 strb.w r3, [fp, 0x24]                             |         *(arg_24h) = r3;
                                                                 |     }
    0x0004108a ldrh.w r3, [fp, 0x22]                             |     r3 = *(arg_22h);
    0x0004108e lsls r5, r3, 0x15                                 |     r5 = r3 << 0x15;
    0x00041090 itt mi                                            |     
                                                                 |     if (r5 >= r3) {
    0x00041092 movmi r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r5 >= r3) {
    0x00041094 strbmi r3, [fp, 0x28]                             |         *(arg_28h) = r3;
                                                                 |     }
    0x00041098 b.w 0x3eff8                                       |     goto label_105;
                                                                 | label_147:
    0x0004109c ldr r5, [r5, 8]                                   |     r5 = *((r5 + 8));
                                                                 |     if (r5 != 0) {
    0x0004109e cbnz r5, 0x410a8                                  |         goto label_262;
                                                                 |     }
    0x000410a0 b 0x41152                                         |     goto label_263;
                                                                 |     do {
                                                                 | label_106:
    0x000410a2 ldr r5, [r5, 0x14]                                |         r5 = *((r5 + 0x14));
    0x000410a4 cmp r5, 0                                         |         
                                                                 |         if (r5 == 0) {
    0x000410a6 beq 0x41152                                       |             goto label_263;
                                                                 |         }
                                                                 | label_262:
    0x000410a8 ldrb.w r3, [r5, 0x36]                             |         r3 = *((r5 + 0x36));
    0x000410ac cmp r3, 0                                         |         
    0x000410ae beq 0x410a2                                       |         
                                                                 |     } while (r3 == 0);
    0x000410b0 ldr r2, [r5, 0x24]                                |     r2 = *((r5 + 0x24));
    0x000410b2 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x000410b4 bne 0x410a2                                       |         goto label_106;
                                                                 |     }
    0x000410b6 ldrh r3, [r5, 0x32]                               |     r3 = *((r5 + 0x32));
    0x000410b8 cmp r3, 4                                         |     
                                                                 |     if (r3 > 4) {
    0x000410ba bhi 0x410a2                                       |         goto label_106;
                                                                 |     }
    0x000410bc cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000410be beq 0x41168                                       |         goto label_264;
                                                                 |     }
    0x000410c0 mov r8, r2                                        |     r8 = r2;
    0x000410c2 b 0x410d4                                         |     
                                                                 |     while (r0 != 0) {
    0x000410c4 ldr r2, [r4, 0x2c]                                |         r2 = *((r4 + 0x2c));
    0x000410c6 ldrh r3, [r5, 0x32]                               |         r3 = *((r5 + 0x32));
    0x000410c8 str.w r0, [r2, r8, lsl 2]                         |         __asm ("str.w r0, [r2, r8, lsl 2]");
    0x000410cc add.w r8, r8, 1                                   |         r8++;
    0x000410d0 cmp r8, r3                                        |         
                                                                 |         if (r8 >= r3) {
    0x000410d2 bge 0x410f2                                       |             goto label_265;
                                                                 |         }
    0x000410d4 ldr r3, [r5, 4]                                   |         r3 = *((r5 + 4));
    0x000410d6 mov r1, sl                                        |         r1 = sl;
    0x000410d8 mov r0, r7                                        |         r0 = r7;
    0x000410da ldrsh.w r2, [r3, r8, lsl 1]                       |         offset_20 = r8 << 1;
                                                                 |         r2 = *((r3 + offset_20));
    0x000410de movs r3, 2                                        |         r3 = 2;
    0x000410e0 str r5, [sp, 0xc]                                 |         var_ch = r5;
    0x000410e2 str r3, [sp, 8]                                   |         var_8h = r3;
    0x000410e4 vstr d8, [sp]                                     |         __asm ("vstr d8, [sp]");
    0x000410e8 bl 0x231d0                                        |         r0 = fcn_000231d0 (r0, r1, r2, r3, r4, r5);
    0x000410ec cmp r0, 0                                         |         
    0x000410ee bne 0x410c4                                       |         
                                                                 |     }
    0x000410f0 ldrh r3, [r5, 0x32]                               |     r3 = *((r5 + 0x32));
                                                                 | label_265:
    0x000410f2 cmp r3, r8                                        |     
                                                                 |     if (r3 != r8) {
    0x000410f4 bne 0x410a2                                       |         goto label_106;
                                                                 |     }
                                                                 | label_109:
    0x000410f6 ldrb.w r3, [r5, 0x37]                             |     r3 = *((r5 + 0x37));
    0x000410fa movw r2, 0x1201                                   |     r2 = 0x1201;
    0x000410fe str r2, [r4, 0x24]                                |     *((r4 + 0x24)) = r2;
    0x00041100 ands r3, r3, 0x20                                 |     r3 &= 0x20;
                                                                 |     if (r3 != r3) {
    0x00041104 bne 0x41190                                       |         goto label_266;
                                                                 |     }
    0x00041106 ldr r2, [r6, 0x40]                                |     r2 = *((r6 + 0x40));
    0x00041108 ldrh r1, [r5, 0x34]                               |     r1 = *((r5 + 0x34));
    0x0004110a ldr.w lr, [r5, 4]                                 |     
    0x0004110e str r2, [sp, 0x1c]                                |     var_1ch = r2;
    0x00041110 ldr r2, [r6, 0x44]                                |     r2 = *((r6 + 0x44));
    0x00041112 str r2, [sp, 0x20]                                |     var_20h = r2;
    0x00041114 subs r2, r1, 1                                    |     r2 = r1 - 1;
                                                                 |     if (r1 == 0) {
    0x00041116 cbz r1, 0x4116c                                   |         goto label_267;
                                                                 |     }
    0x00041118 add.w r2, lr, r2, lsl 1                           |     r2 = lr + (r2 << 1);
    0x0004111c mov r6, r3                                        |     r6 = r3;
    0x0004111e movs r7, 1                                        |     r7 = 1;
    0x00041120 b 0x41128                                         |     
                                                                 |     while (r1 > 0x3e) {
                                                                 | label_107:
    0x00041122 ldr r1, [sp, 0x18]                                |         r1 = var_18h;
    0x00041124 cmp lr, r1                                        |         
                                                                 |         if (lr == r1) {
    0x00041126 beq 0x4116e                                       |             goto label_268;
                                                                 |         }
    0x00041128 ldrsh.w r1, [r2]                                  |         r1 = *(r2);
    0x0004112c str r2, [sp, 0x18]                                |         var_18h = r2;
    0x0004112e subs r2, 2                                        |         r2 -= 2;
    0x00041130 cmp r1, 0x3e                                      |         
    0x00041132 bhi 0x41122                                       |         
                                                                 |     }
    0x00041134 sub.w r0, r1, 0x20                                |     r0 = r1 - 0x20;
    0x00041138 rsb.w ip, r1, 0x20                                |     
    0x0004113c lsl.w r0, r7, r0                                  |     r0 = r7 << r0;
    0x00041140 lsr.w ip, r7, ip                                  |     
    0x00041144 lsl.w r1, r7, r1                                  |     r1 = r7 << r1;
    0x00041148 orr.w r0, r0, ip                                  |     r0 |= ip;
    0x0004114c orrs r6, r0                                       |     r6 |= r0;
    0x0004114e orrs r3, r1                                       |     r3 |= r1;
    0x00041150 b 0x41122                                         |     goto label_107;
                                                                 | label_263:
    0x00041152 ldr r3, [r4, 0x24]                                |     r3 = *((r4 + 0x24));
    0x00041154 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00041156 bne.w 0x3f46c                                     |         goto label_108;
                                                                 |     }
    0x0004115a ldr.w fp, [sp, 0xac]                              |     fp = var_ach;
    0x0004115e ldr r4, [sp, 0xb8]                                |     r4 = var_b8h;
    0x00041160 ldr.w r6, [fp, 4]                                 |     r6 = *(arg_4h);
    0x00041164 b.w 0x3ee1c                                       |     goto label_10;
                                                                 | label_264:
    0x00041168 mov r8, r3                                        |     r8 = r3;
    0x0004116a b 0x410f6                                         |     goto label_109;
                                                                 | label_267:
    0x0004116c mov r6, r3                                        |     r6 = r3;
                                                                 | label_268:
    0x0004116e ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x00041170 bic.w r2, r2, r3                                  |     r2 = BIT_MASK (r2, r3);
    0x00041174 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00041176 bic.w r3, r3, r6                                  |     r3 = BIT_MASK (r3, r6);
    0x0004117a orrs r3, r2                                       |     r3 |= r2;
                                                                 |     if (r3 != r2) {
    0x0004117c beq 0x41190                                       |         
    0x0004117e uxth.w r3, r8                                     |         r3 = (int16_t) r8;
    0x00041182 str r5, [r4, 0x1c]                                |         *((r4 + 0x1c)) = r5;
    0x00041184 strh r3, [r4, 0x28]                               |         *((r4 + 0x28)) = r3;
    0x00041186 strh r3, [r4, 0x18]                               |         *((r4 + 0x18)) = r3;
    0x00041188 movs r3, 0x27                                     |         r3 = 0x27;
    0x0004118a strh r3, [r4, 0x14]                               |         *((r4 + 0x14)) = r3;
    0x0004118c b.w 0x3f46c                                       |         goto label_108;
                                                                 |     }
                                                                 | label_266:
    0x00041190 uxth.w r8, r8                                     |     r8 = (int16_t) r8;
    0x00041194 movw r3, 0x1241                                   |     r3 = 0x1241;
    0x00041198 str r3, [r4, 0x24]                                |     *((r4 + 0x24)) = r3;
    0x0004119a movs r3, 0x27                                     |     r3 = 0x27;
    0x0004119c str r5, [r4, 0x1c]                                |     *((r4 + 0x1c)) = r5;
    0x0004119e strh.w r8, [r4, 0x28]                             |     *((r4 + 0x28)) = r8;
    0x000411a2 strh.w r8, [r4, 0x18]                             |     *((r4 + 0x18)) = r8;
    0x000411a6 strh r3, [r4, 0x14]                               |     *((r4 + 0x14)) = r3;
    0x000411a8 b.w 0x3f46c                                       |     goto label_108;
                                                                 | label_212:
    0x000411ac ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x000411ae add.w r1, r8, r6                                  |     r1 = r8 + r6;
    0x000411b2 add.w r1, r3, r1, lsl 3                           |     r1 = r3 + (r1 << 3);
    0x000411b6 ldrd r3, r1, [r1, 0x40]                           |     __asm ("ldrd r3, r1, [r1, 0x40]");
    0x000411ba orrs.w r0, r3, r1                                 |     r0 = r3 | r1;
                                                                 |     if (r0 == r3) {
    0x000411be beq 0x411d0                                       |         goto label_269;
                                                                 |     }
                                                                 |     do {
    0x000411c0 lsrs r3, r3, 1                                    |         r3 >>= 1;
    0x000411c2 adds r2, 1                                        |         r2++;
    0x000411c4 orr.w r3, r3, r1, lsl 31                          |         r3 |= (r1 << 31);
    0x000411c8 lsrs r1, r1, 1                                    |         r1 >>= 1;
    0x000411ca orrs.w r0, r3, r1                                 |         r0 = r3 | r1;
    0x000411ce bne 0x411c0                                       |         
                                                                 |     } while (r0 != r3);
                                                                 | label_269:
    0x000411d0 ldr r0, [sp, 0x48]                                |     r0 = var_48h;
    0x000411d2 mvn r3, 0xd                                       |     r3 = ~0xd;
    0x000411d6 ldr r1, [r0, 0x20]                                |     r1 = *((r0 + 0x20));
    0x000411d8 subs r1, 1                                        |     r1--;
    0x000411da bl 0x1021c                                        |     fcn_0001021c (r0, r1, r2, r3);
    0x000411de ldr r3, [r7, 0x24]                                |     r3 = *((r7 + 0x24));
    0x000411e0 b.w 0x3f0ec                                       |     goto label_42;
                                                                 | label_238:
    0x000411e4 ldr r3, [r6, 0x44]                                |     r3 = *((r6 + 0x44));
    0x000411e6 movs r2, 0                                        |     r2 = 0;
    0x000411e8 ldrh r2, [r2, 0x32]                               |     r2 = *((r2 + 0x32));
    0x000411ea adds r3, 1                                        |     r3++;
    0x000411ec str r3, [r6, 0x44]                                |     *((r6 + 0x44)) = r3;
    0x000411ee udf 0xff                                          |     __asm ("udf 0xff");
                                                                 | label_255:
    0x000411f0 movs r3, 0                                        |     r3 = 0;
    0x000411f2 ldrh r3, [r3, 0x32]                               |     r3 = *((r3 + 0x32));
    0x000411f4 udf 0xff                                          |     __asm ("udf 0xff");
                                                                 | label_153:
    0x000411f6 movs r3, 0                                        |     r3 = 0;
    0x000411f8 ldrb r3, [r3]                                     |     r3 = *(r3);
    0x000411fa udf 0xff                                          |     __asm ("udf 0xff");
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x411fc */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.000411fc ()                                      | void fcn_000411fc (int16_t arg_2ch, int16_t arg_80h, int16_t arg_88h, int16_t arg_8ch, 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_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     int32_t var_3ch_2;
                                                                 |     int32_t var_44h;
                                                                 |     int32_t var_44h_2;
                                                                 |     int32_t var_4ch;
                                                                 |     int16_t var_50h;
                                                                 |     int16_t var_54h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x000411fc push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00041200 mov fp, r2                                        |     
    0x00041202 ldr r2, [pc, 0x3a0]                               |     
    0x00041204 mov sb, r3                                        |     sb = r3;
    0x00041206 sub sp, 0x5c                                      |     
    0x00041208 mov r7, r0                                        |     r7 = r0;
    0x0004120a ldr r3, [pc, 0x39c]                               |     r3 = *(0x415aa);
    0x0004120c add r2, pc                                        |     r2 = 0x827b6;
    0x0004120e str r1, [sp, 0x18]                                |     var_18h = r1;
    0x00041210 ldr.w sl, [r0]                                    |     sl = *(r0);
    0x00041214 ldr r3, [r2, r3]                                  |     
    0x00041216 ldrd r8, r2, [sp, 0x80]                           |     __asm ("ldrd r8, r2, [arg_80h]");
    0x0004121a ldr r3, [r3]                                      |     r3 = *(0x827b6);
    0x0004121c str r3, [sp, 0x54]                                |     var_54h = r3;
    0x0004121e mov.w r3, 0                                       |     r3 = 0;
    0x00041222 ldr r3, [r0, 8]                                   |     r3 = *((r0 + 8));
    0x00041224 str r2, [sp, 0x14]                                |     var_14h = r2;
    0x00041226 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00041228 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004122a beq.w 0x414ec                                     |         goto label_16;
                                                                 |     }
                                                                 | label_9:
    0x0004122e ldr r3, [sp, 0x8c]                                |     r3 = *(arg_8ch);
    0x00041230 adds r3, 1                                        |     r3++;
                                                                 |     if (r3 == 1) {
    0x00041232 beq.w 0x413b2                                     |         goto label_17;
                                                                 |     }
    0x00041236 ldr.w r3, [r8, 0x14]                              |     r3 = *((r8 + 0x14));
    0x0004123a ldr r2, [sp, 0x8c]                                |     r2 = *(arg_8ch);
    0x0004123c cmp r3, 0                                         |     
    0x0004123e and r2, r2, 1                                     |     r2 &= 1;
    0x00041242 str r2, [sp, 0x20]                                |     var_20h = r2;
                                                                 |     if (r3 <= 0) {
    0x00041244 ble.w 0x414f4                                     |         goto label_18;
                                                                 |     }
    0x00041248 movs r3, 0                                        |     r3 = 0;
    0x0004124a str r3, [sp, 0x24]                                |     var_24h = r3;
                                                                 | label_5:
    0x0004124c movs r5, 0                                        |     r5 = 0;
    0x0004124e add r3, sp, 0x34                                  |     r3 += var_34h;
    0x00041250 mov r4, r5                                        |     r4 = r5;
    0x00041252 str r3, [sp, 0x10]                                |     var_10h = r3;
                                                                 | label_0:
    0x00041254 mov.w r3, -1                                      |     r3 = -1;
    0x00041258 cmp.w sb, 0                                       |     
                                                                 |     if (sb != 0) {
    0x0004125c beq 0x41266                                       |         
    0x0004125e ldr.w r3, [sb, 4]                                 |         r3 = *((sb + 4));
    0x00041262 ldrsh.w r3, [r3, r4, lsl 1]                       |         offset_0 = r4 << 1;
                                                                 |         r3 = *((r3 + offset_0));
                                                                 |     }
    0x00041266 ldr r2, [sp, 0x88]                                |     r2 = *(arg_88h);
    0x00041268 mov r1, fp                                        |     r1 = fp;
    0x0004126a mov r0, r7                                        |     r0 = r7;
    0x0004126c bl 0xd8f8                                         |     fcn_0000d8f8 (r0, r1, r2, r3);
    0x00041270 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00041272 mov r6, r0                                        |     r6 = r0;
    0x00041274 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00041276 beq.w 0x4138e                                     |         goto label_19;
                                                                 |     }
    0x0004127a ldrsh.w r3, [r3, r4, lsl 2]                       |     offset_1 = r4 << 2;
                                                                 |     r3 = *((r3 + offset_1));
                                                                 | label_1:
    0x0004127e ldr.w r2, [r8]                                    |     r2 = *(r8);
    0x00041282 add.w r3, r3, r3, lsl 1                           |     r3 += (r3 << 1);
    0x00041286 ldr r2, [r2, 4]                                   |     r2 = *((r2 + 4));
    0x00041288 ldr.w r1, [r2, r3, lsl 3]                         |     offset_2 = r3 << 3;
                                                                 |     r1 = *((r2 + offset_2));
    0x0004128c str r1, [sp, 0x34]                                |     var_34h = r1;
                                                                 |     if (r1 == 0) {
    0x0004128e cbz r1, 0x412a8                                   |         goto label_3;
                                                                 |     }
    0x00041290 ldrb r3, [r1]                                     |     r3 = *(r1);
    0x00041292 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00041294 beq.w 0x413a8                                     |         goto label_20;
                                                                 |     }
    0x00041298 mov r3, r1                                        |     r3 = r1;
                                                                 |     do {
    0x0004129a ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x0004129e cmp r2, 0                                         |         
    0x000412a0 bne 0x4129a                                       |         
                                                                 |     } while (r2 != 0);
    0x000412a2 subs r3, r3, r1                                   |     r3 -= r1;
    0x000412a4 bic r1, r3, 0xc0000000                            |     r1 = BIT_MASK (r3, 0xc0000000);
                                                                 | label_3:
    0x000412a8 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x000412aa movs r3, 0                                        |     r3 = 0;
    0x000412ac str r1, [sp, 0x38]                                |     var_38h = r1;
    0x000412ae mov r0, sl                                        |     r0 = sl;
    0x000412b0 movs r1, 0x1b                                     |     r1 = 0x1b;
    0x000412b2 bl 0xd7ac                                         |     fcn_0000d7ac (r0, r1, r2, r3);
    0x000412b6 movs r1, 0                                        |     r1 = 0;
    0x000412b8 mov r3, r0                                        |     r3 = r0;
    0x000412ba mov r2, r6                                        |     r2 = r6;
    0x000412bc str r1, [sp]                                      |     *(sp) = r1;
    0x000412be mov r0, r7                                        |     r0 = r7;
    0x000412c0 movs r1, 0x4f                                     |     r1 = 0x4f;
    0x000412c2 bl 0x1cd60                                        |     r0 = fcn_0001cd60 (r0, r1, r2, r3, r4);
    0x000412c6 mov r2, r0                                        |     r2 = r0;
    0x000412c8 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x000412ca beq 0x41394                                       |         goto label_21;
                                                                 |     }
                                                                 |     if (r0 != 0) {
    0x000412cc cbz r0, 0x412d8                                   |         
    0x000412ce mov r1, r5                                        |         r1 = r5;
    0x000412d0 mov r0, sl                                        |         r0 = sl;
    0x000412d2 bl 0x13020                                        |         r0 = fcn_00013020 (r0, r1, r2);
    0x000412d6 mov r5, r0                                        |         r5 = r0;
                                                                 |     }
                                                                 | label_2:
    0x000412d8 ldr.w r3, [r8, 0x14]                              |     r3 = *((r8 + 0x14));
    0x000412dc adds r4, 1                                        |     r4++;
    0x000412de cmp r3, r4                                        |     
                                                                 |     if (r3 > r4) {
    0x000412e0 bgt 0x41254                                       |         goto label_0;
                                                                 |     }
    0x000412e2 ldr.w r2, [r8]                                    |     r2 = *(r8);
    0x000412e6 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x000412e8 cmp r2, fp                                        |     
    0x000412ea ite ne                                            |     
                                                                 |     if (r2 == fp) {
    0x000412ec movne r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r2 != fp) {
    0x000412ee andeq r3, r3, 1                                   |         r3 &= 1;
                                                                 |     }
    0x000412f2 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000412f4 bne 0x413ee                                       |         goto label_22;
                                                                 |     }
    0x000412f6 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x000412f8 str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x000412fa strd r3, r3, [sp, 0x40]                           |     __asm ("strd r3, r3, [var_3ch_2]");
    0x000412fe strd r7, r2, [sp, 0x34]                           |     __asm ("strd r7, r2, [var_34h]");
    0x00041302 strd r3, r3, [sp, 0x48]                           |     __asm ("strd r3, r3, [var_44h_2]");
    0x00041306 str r3, [sp, 0x50]                                |     var_50h = r3;
                                                                 |     if (r5 != 0) {
    0x00041308 cbz r5, 0x41312                                   |         
                                                                 | label_8:
    0x0004130a ldr r0, [sp, 0x10]                                |         r0 = var_10h;
    0x0004130c mov r1, r5                                        |         r1 = r5;
    0x0004130e bl 0x1f318                                        |         fcn_0001f318 (r0, r1);
                                                                 |     }
                                                                 | label_6:
    0x00041312 movs r3, 0                                        |     r3 = 0;
    0x00041314 ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x00041316 strd r3, r3, [sp, 4]                              |     __asm ("strd r3, r3, [var_4h]");
    0x0004131a mov r2, r5                                        |     r2 = r5;
    0x0004131c str r3, [sp]                                      |     *(sp) = r3;
    0x0004131e mov r0, r7                                        |     r0 = r7;
    0x00041320 bl 0x3ec04                                        |     fcn_0003ec04 (r0, r1, r2, r3, r4, r5, r6);
    0x00041324 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00041326 mov r4, r0                                        |     r4 = r0;
    0x00041328 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004132a beq 0x413ac                                       |         goto label_23;
                                                                 |     }
                                                                 | label_13:
    0x0004132c ldrb.w r2, [r8, 0x18]                             |     r2 = *((r8 + 0x18));
    0x00041330 cmp r2, 0                                         |     
    0x00041332 beq 0x41398                                       |     
                                                                 |     while (1) {
                                                                 | label_4:
    0x00041334 movs r1, 0                                        |         r1 = 0;
    0x00041336 ldr r3, [sp, 0x8c]                                |         r3 = *(arg_8ch);
    0x00041338 str r1, [sp]                                      |         *(sp) = r1;
    0x0004133a movs r1, 0x83                                     |         r1 = 0x83;
    0x0004133c ldr r0, [sp, 0x1c]                                |         r0 = var_1ch;
    0x0004133e bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
                                                                 |         if (r4 != 0) {
    0x00041342 cbz r4, 0x4134a                                   |             
    0x00041344 mov r0, r4                                        |             r0 = r4;
    0x00041346 bl 0x18dcc                                        |             fcn_00018dcc (r0);
                                                                 |         }
    0x0004134a mov r1, r5                                        |         r1 = r5;
    0x0004134c mov r0, sl                                        |         r0 = sl;
    0x0004134e bl 0x12e68                                        |         fcn_00012e68 (r0);
    0x00041352 ldr r1, [sp, 0x24]                                |         r1 = var_24h;
                                                                 |         if (r1 != 0) {
    0x00041354 cbz r1, 0x41372                                   |             
    0x00041356 ldr r2, [sp, 0x1c]                                |             r2 = var_1ch;
    0x00041358 ldr r3, [r2, 0x20]                                |             r3 = *((r2 + 0x20));
    0x0004135a cmp r1, r3                                        |             
    0x0004135c itttt lo                                          |             
                                                                 |             if (r1 >= r3) {
    0x0004135e ldrlo r2, [r2, 4]                                 |                 r2 = *((r2 + 4));
                                                                 |             }
                                                                 |             if (r1 >= r3) {
    0x00041360 addlo r1, r1, r1, lsl 2                           |                 r1 += (r1 << 2);
                                                                 |             }
                                                                 |             if (r1 >= r3) {
    0x00041364 addlo r2, r2, r1, lsl 2                           |                 r2 += (r1 << 2);
                                                                 |             }
                                                                 |             if (r1 < r3) {
    0x00041368 str r3, [r2, 8]                                   |                 *((r2 + 8)) = r3;
                                                                 |             }
    0x0004136a subs r3, 1                                        |             r3--;
    0x0004136c ldr r2, [sp, 0x1c]                                |             r2 = var_1ch;
    0x0004136e ldr r2, [r2, 0x18]                                |             r2 = *((r2 + 0x18));
    0x00041370 str r3, [r2, 0x58]                                |             *((r2 + 0x58)) = r3;
                                                                 |         }
    0x00041372 ldr r2, [pc, 0x238]                               |         
    0x00041374 ldr r3, [pc, 0x230]                               |         r3 = *(0x415a8);
    0x00041376 add r2, pc                                        |         r2 = 0x82928;
    0x00041378 ldr r3, [r2, r3]                                  |         r3 = *(0x82928);
    0x0004137a ldr r2, [r3]                                      |         r2 = *(0x82928);
    0x0004137c ldr r3, [sp, 0x54]                                |         r3 = var_54h;
    0x0004137e eors r2, r3                                       |         r2 ^= r3;
    0x00041380 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00041384 bne.w 0x4159a                                     |             goto label_24;
                                                                 |         }
    0x00041388 add sp, 0x5c                                      |         
    0x0004138a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_19:
    0x0004138e ldrsh.w r3, [r8, 0x24]                            |         r3 = *((r8 + 0x24));
    0x00041392 b 0x4127e                                         |         goto label_1;
                                                                 | label_21:
    0x00041394 mov r5, r0                                        |         r5 = r0;
    0x00041396 b 0x412d8                                         |         goto label_2;
    0x00041398 ldr.w r3, [r7, 0x198]                             |         r3 = *((r7 + 0x198));
    0x0004139c movs r1, 1                                        |         r1 = 1;
    0x0004139e cmp r3, 0                                         |         
    0x000413a0 it eq                                             |         
                                                                 |         if (r3 != 0) {
    0x000413a2 moveq r3, r7                                      |             r3 = r7;
                                                                 |         }
    0x000413a4 strb r1, [r3, 0x15]                               |         *((r3 + 0x15)) = r1;
    0x000413a6 b 0x41334                                         |         
                                                                 |     }
                                                                 | label_20:
    0x000413a8 mov r1, r3                                        |     r1 = r3;
    0x000413aa b 0x412a8                                         |     goto label_3;
                                                                 | label_23:
    0x000413ac ldrb.w r2, [r8, 0x18]                             |     r2 = *((r8 + 0x18));
    0x000413b0 b 0x41334                                         |     goto label_4;
                                                                 | label_17:
    0x000413b2 movs r4, 0                                        |     r4 = 0;
    0x000413b4 ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x000413b6 mov r3, r4                                        |     r3 = r4;
    0x000413b8 str r4, [sp]                                      |     *(sp) = r4;
    0x000413ba movs r1, 0x84                                     |     r1 = 0x84;
    0x000413bc ldrb.w r2, [r8, 0x18]                             |     r2 = *((r8 + 0x18));
    0x000413c0 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000413c4 ldr.w r3, [r8, 0x14]                              |     r3 = *((r8 + 0x14));
    0x000413c8 str r0, [sp, 0x24]                                |     var_24h = r0;
    0x000413ca str r4, [sp, 0x20]                                |     var_20h = r4;
    0x000413cc cmp r3, r4                                        |     
                                                                 |     if (r3 > r4) {
    0x000413ce bgt.w 0x4124c                                     |         goto label_5;
                                                                 |     }
                                                                 | label_11:
    0x000413d2 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x000413d4 movs r5, 0                                        |     r5 = 0;
    0x000413d6 strd r5, r5, [sp, 0x3c]                           |     __asm ("strd r5, r5, [var_3ch]");
    0x000413da strd r5, r5, [sp, 0x44]                           |     __asm ("strd r5, r5, [var_44h]");
    0x000413dc strb r1, [r2, r4]                                 |     *((r2 + r4)) = r1;
    0x000413de strd r7, r3, [sp, 0x34]                           |     __asm ("strd r7, r3, [var_34h]");
    0x000413e2 strd r5, r5, [sp, 0x4c]                           |     __asm ("strd r5, r5, [var_50h]");
    0x000413e6 b 0x41312                                         |     goto label_6;
                                                                 | label_10:
    0x000413e8 movs r3, 0                                        |     r3 = 0;
    0x000413ea mov r5, r3                                        |     r5 = r3;
    0x000413ec str r3, [sp, 0x24]                                |     var_24h = r3;
                                                                 | label_22:
    0x000413ee ldrb.w r3, [fp, 0x2c]                             |     r3 = *(arg_2ch);
    0x000413f2 ands r3, r3, 0x20                                 |     r3 &= 0x20;
                                                                 |     if (r3 == r3) {
    0x000413f6 beq.w 0x4150e                                     |         goto label_25;
                                                                 |     }
    0x000413fa ldr.w r6, [fp, 8]                                 |     r6 = *(arg_88h);
                                                                 |     if (r6 != 0) {
    0x000413fe cbnz r6, 0x4140a                                  |         goto label_26;
                                                                 |     }
    0x00041400 b 0x4159e                                         |     goto label_27;
                                                                 |     do {
    0x00041402 ldr r6, [r6, 0x14]                                |         r6 = *((r6 + 0x14));
    0x00041404 cmp r6, 0                                         |         
                                                                 |         if (r6 == 0) {
    0x00041406 beq.w 0x4159e                                     |             goto label_27;
                                                                 |         }
                                                                 | label_26:
    0x0004140a ldrb.w r3, [r6, 0x37]                             |         r3 = *((r6 + 0x37));
    0x0004140e and r3, r3, 3                                     |         r3 &= 3;
    0x00041412 cmp r3, 2                                         |         
    0x00041414 bne 0x41402                                       |         
                                                                 |     } while (r3 != 2);
    0x00041416 ldrh r4, [r6, 0x32]                               |     r4 = *((r6 + 0x32));
    0x00041418 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0004141a beq.w 0x41596                                     |         goto label_28;
                                                                 |     }
    0x0004141e movs r3, 0                                        |     r3 = 0;
    0x00041420 add r2, sp, 0x34                                  |     r2 += var_34h;
    0x00041422 str r6, [sp, 0x20]                                |     var_20h = r6;
    0x00041424 mov r4, r3                                        |     r4 = r3;
    0x00041426 mov r6, r3                                        |     r6 = r3;
    0x00041428 str r2, [sp, 0x10]                                |     var_10h = r2;
    0x0004142a str r5, [sp, 0x28]                                |     var_28h = r5;
    0x0004142c str.w r8, [sp, 0x2c]                              |     __asm ("str.w r8, [var_2ch]");
    0x00041430 b 0x41448                                         |     
                                                                 |     while (r6 != 0) {
                                                                 |         if (r0 != 0) {
    0x00041432 cbz r0, 0x4143e                                   |             
    0x00041434 mov r1, r6                                        |             r1 = r6;
    0x00041436 mov r0, sl                                        |             r0 = sl;
    0x00041438 bl 0x13020                                        |             r0 = fcn_00013020 (r0, r1, r2);
    0x0004143c mov r6, r0                                        |             r6 = r0;
                                                                 |         }
    0x0004143e ldr r3, [sp, 0x20]                                |         r3 = var_20h;
    0x00041440 adds r4, 1                                        |         r4++;
    0x00041442 ldrh r3, [r3, 0x32]                               |         r3 = *((r3 + 0x32));
    0x00041444 cmp r3, r4                                        |         
                                                                 |         if (r3 <= r4) {
    0x00041446 ble 0x414a0                                       |             goto label_29;
                                                                 |         }
                                                                 | label_7:
    0x00041448 ldr.w r3, [sb, 4]                                 |         r3 = *((sb + 4));
    0x0004144c mov r1, fp                                        |         r1 = fp;
    0x0004144e ldr r2, [sp, 0x88]                                |         r2 = *(arg_88h);
    0x00041450 mov r0, r7                                        |         r0 = r7;
    0x00041452 ldrsh.w r8, [r3, r4, lsl 1]                       |         offset_3 = r4 << 1;
                                                                 |         r8 = *((r3 + offset_3));
    0x00041456 mov r3, r8                                        |         r3 = r8;
    0x00041458 bl 0xd8f8                                         |         fcn_0000d8f8 (r0, r1, r2, r3);
    0x0004145c ldr r5, [sp, 0x18]                                |         r5 = var_18h;
    0x0004145e movs r3, 0                                        |         r3 = 0;
    0x00041460 str r0, [sp, 0x14]                                |         var_14h = r0;
    0x00041462 movs r1, 0x9a                                     |         r1 = 0x9a;
    0x00041464 ldr r2, [sp, 0x10]                                |         r2 = var_10h;
    0x00041466 mov r0, sl                                        |         r0 = sl;
    0x00041468 strd r3, r3, [sp, 0x34]                           |         __asm ("strd r3, r3, [var_34h]");
    0x0004146c ldr r5, [r5, 0x30]                                |         r5 = *((r5 + 0x30));
    0x0004146e bl 0xd7ac                                         |         r0 = fcn_0000d7ac (r0, r1, r2, r3);
    0x00041472 mov r3, r0                                        |         r3 = r0;
                                                                 |         if (r0 != 0) {
    0x00041474 cbz r0, 0x41480                                   |             
    0x00041476 str r5, [r0, 0x1c]                                |             *((r0 + 0x1c)) = r5;
    0x00041478 strh.w r8, [r0, 0x20]                             |             *((r0 + 0x20)) = r8;
    0x0004147c str.w fp, [r0, 0x2c]                              |             __asm ("str.w fp, [r0, 0x2c]");
                                                                 |         }
    0x00041480 movs r1, 0                                        |         r1 = 0;
    0x00041482 ldr r2, [sp, 0x14]                                |         r2 = var_14h;
    0x00041484 str r1, [sp]                                      |         *(sp) = r1;
    0x00041486 mov r0, r7                                        |         r0 = r7;
    0x00041488 movs r1, 0x4f                                     |         r1 = 0x4f;
    0x0004148a bl 0x1cd60                                        |         r0 = fcn_0001cd60 (r0, r1, r2, r3, r4);
    0x0004148e mov r2, r0                                        |         r2 = r0;
    0x00041490 cmp r6, 0                                         |         
    0x00041492 bne 0x41432                                       |         
                                                                 |     }
    0x00041494 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00041496 adds r4, 1                                        |     r4++;
    0x00041498 mov r6, r0                                        |     r6 = r0;
    0x0004149a ldrh r3, [r3, 0x32]                               |     r3 = *((r3 + 0x32));
    0x0004149c cmp r3, r4                                        |     
                                                                 |     if (r3 > r4) {
    0x0004149e bgt 0x41448                                       |         goto label_7;
                                                                 |     }
                                                                 | label_29:
    0x000414a0 ldr r5, [sp, 0x28]                                |     r5 = var_28h;
    0x000414a2 mov r3, r6                                        |     r3 = r6;
    0x000414a4 ldr.w r8, [sp, 0x2c]                              |     r8 = var_2ch;
                                                                 | label_15:
    0x000414a8 mov r2, r3                                        |     r2 = r3;
    0x000414aa movs r3, 0                                        |     r3 = 0;
    0x000414ac movs r1, 0x13                                     |     r1 = 0x13;
    0x000414ae mov r0, r7                                        |     r0 = r7;
    0x000414b0 str r3, [sp]                                      |     *(sp) = r3;
    0x000414b2 bl 0x1cd60                                        |     r0 = fcn_0001cd60 (r0, r1, r2, r3, r4);
    0x000414b6 mov r2, r0                                        |     r2 = r0;
                                                                 | label_12:
    0x000414b8 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x000414ba beq 0x41592                                       |         goto label_30;
                                                                 |     }
    0x000414bc cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000414be beq 0x41576                                       |         goto label_31;
                                                                 |     }
    0x000414c0 mov r1, r5                                        |     r1 = r5;
    0x000414c2 mov r0, sl                                        |     r0 = sl;
    0x000414c4 bl 0x13020                                        |     r0 = fcn_00013020 (r0, r1, r2);
    0x000414c8 mov r5, r0                                        |     r5 = r0;
                                                                 | label_14:
    0x000414ca ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x000414cc strd r7, r3, [sp, 0x34]                           |     __asm ("strd r7, r3, [var_34h]");
    0x000414d0 movs r3, 0                                        |     r3 = 0;
    0x000414d2 strd r3, r3, [sp, 0x3c]                           |     __asm ("strd r3, r3, [var_3ch]");
    0x000414d6 strd r3, r3, [sp, 0x44]                           |     __asm ("strd r3, r3, [var_44h]");
    0x000414da strd r3, r3, [sp, 0x4c]                           |     __asm ("strd r3, r3, [var_50h]");
    0x000414de cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x000414e0 beq 0x41560                                       |         goto label_32;
                                                                 |     }
    0x000414e2 movs r3, 1                                        |     r3 = 1;
    0x000414e4 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x000414e6 add r3, sp, 0x34                                  |     r3 += var_34h;
    0x000414e8 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x000414ea b 0x4130a                                         |     goto label_8;
                                                                 | label_16:
    0x000414ec bl 0x192c8                                        |     fcn_000192c8 (r0);
    0x000414f0 str r0, [sp, 0x1c]                                |     var_1ch = r0;
    0x000414f2 b 0x4122e                                         |     goto label_9;
                                                                 | label_18:
    0x000414f4 ldr.w r2, [r8]                                    |     r2 = *(r8);
    0x000414f8 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x000414fa cmp r2, fp                                        |     
    0x000414fc ite ne                                            |     
                                                                 |     if (r2 == fp) {
    0x000414fe movne r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r2 != fp) {
    0x00041500 andeq r3, r3, 1                                   |         r3 &= 1;
                                                                 |     }
    0x00041504 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00041506 bne.w 0x413e8                                     |         goto label_10;
                                                                 |     }
    0x0004150a str r3, [sp, 0x24]                                |     var_24h = r3;
    0x0004150c b 0x413d2                                         |     goto label_11;
                                                                 | label_25:
    0x0004150e add r2, sp, 0x34                                  |     r2 += var_34h;
    0x00041510 ldr r0, [r7]                                      |     r0 = *(r7);
    0x00041512 movs r1, 0x9f                                     |     r1 = 0x9f;
    0x00041514 strd r3, r3, [sp, 0x34]                           |     __asm ("strd r3, r3, [var_34h]");
    0x00041518 str r2, [sp, 0x10]                                |     var_10h = r2;
    0x0004151a bl 0xd7ac                                         |     r0 = fcn_0000d7ac (r0, r1, r2, r3);
    0x0004151e mov r4, r0                                        |     r4 = r0;
                                                                 |     if (r0 != 0) {
    0x00041520 cbz r0, 0x4152a                                   |         
    0x00041522 ldr r3, [sp, 0x88]                                |         r3 = *(arg_88h);
    0x00041524 str r3, [r0, 0x1c]                                |         *((r0 + 0x1c)) = r3;
    0x00041526 movs r3, 0x64                                     |         r3 = 0x64;
    0x00041528 strb r3, [r0, 1]                                  |         *((r0 + 1)) = r3;
                                                                 |     }
    0x0004152a ldr r6, [sp, 0x18]                                |     r6 = var_18h;
    0x0004152c movs r3, 0                                        |     r3 = 0;
    0x0004152e ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x00041530 movs r1, 0x9a                                     |     r1 = 0x9a;
    0x00041532 mov r0, sl                                        |     r0 = sl;
    0x00041534 strd r3, r3, [sp, 0x34]                           |     __asm ("strd r3, r3, [var_34h]");
    0x00041538 ldr r6, [r6, 0x30]                                |     r6 = *((r6 + 0x30));
    0x0004153a bl 0xd7ac                                         |     r0 = fcn_0000d7ac (r0, r1, r2, r3);
    0x0004153e mov r3, r0                                        |     r3 = r0;
                                                                 |     if (r0 != 0) {
    0x00041540 cbz r0, 0x4154e                                   |         
    0x00041542 movw r2, 0xffff                                   |         r2 = 0xffff;
    0x00041546 str.w fp, [r0, 0x2c]                              |         __asm ("str.w fp, [r0, 0x2c]");
    0x0004154a str r6, [r0, 0x1c]                                |         *((r0 + 0x1c)) = r6;
    0x0004154c strh r2, [r0, 0x20]                               |         *((r0 + 0x20)) = r2;
                                                                 |     }
    0x0004154e movs r1, 0                                        |     r1 = 0;
    0x00041550 mov r2, r4                                        |     r2 = r4;
    0x00041552 str r1, [sp]                                      |     *(sp) = r1;
    0x00041554 mov r0, r7                                        |     r0 = r7;
    0x00041556 movs r1, 0x4e                                     |     r1 = 0x4e;
    0x00041558 bl 0x1cd60                                        |     r0 = fcn_0001cd60 (r0, r1, r2, r3, r4);
    0x0004155c mov r2, r0                                        |     r2 = r0;
    0x0004155e b 0x414b8                                         |     goto label_12;
                                                                 | label_32:
    0x00041560 ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x00041562 mov r3, r5                                        |     r3 = r5;
    0x00041564 mov r2, r5                                        |     r2 = r5;
    0x00041566 mov r0, r7                                        |     r0 = r7;
    0x00041568 strd r5, r5, [sp, 4]                              |     __asm ("strd r5, r5, [var_4h]");
    0x0004156c str r5, [sp]                                      |     *(sp) = r5;
    0x0004156e bl 0x3ec04                                        |     r0 = fcn_0003ec04 (r0, r1, r2, r3, r4, r5, r6);
    0x00041572 mov r4, r0                                        |     r4 = r0;
    0x00041574 b 0x4132c                                         |     goto label_13;
                                                                 | label_31:
    0x00041576 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00041578 str r2, [sp, 0x3c]                                |     var_3ch = r2;
    0x0004157a strd r2, r2, [sp, 0x40]                           |     __asm ("strd r2, r2, [var_3ch_2]");
    0x0004157e strd r7, r3, [sp, 0x34]                           |     __asm ("strd r7, r3, [var_34h]");
    0x00041582 movs r3, 1                                        |     r3 = 1;
    0x00041584 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00041586 add r3, sp, 0x34                                  |     r3 += var_34h;
    0x00041588 strd r2, r2, [sp, 0x48]                           |     __asm ("strd r2, r2, [var_44h_2]");
    0x0004158c str r2, [sp, 0x50]                                |     var_50h = r2;
    0x0004158e str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00041590 b 0x4130a                                         |     goto label_8;
                                                                 | label_30:
    0x00041592 mov r5, r2                                        |     r5 = r2;
    0x00041594 b 0x414ca                                         |     goto label_14;
                                                                 | label_28:
    0x00041596 mov r3, r4                                        |     r3 = r4;
    0x00041598 b 0x414a8                                         |     goto label_15;
                                                                 | label_24:
    0x0004159a blx 0x6498                                        |     fcn_00006498 ();
                                                                 | label_27:
    0x0004159e movs r3, 0                                        |     r3 = 0;
    0x000415a0 ldrh r3, [r3, 0x32]                               |     r3 = *((r3 + 0x32));
    0x000415a2 udf 0xff                                          |     __asm ("udf 0xff");
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x415b0 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.000415b0 ()                                      | void fcn_000415b0 (int16_t arg_324h, int16_t arg_58h, int16_t arg1, uint32_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_14h;
                                                                 |     int32_t var_14h_2;
                                                                 |     int16_t var_1ch;
                                                                 |     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;
    0x000415b0 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x000415b4 mov r6, r0                                        |     r6 = r0;
    0x000415b6 ldr r4, [pc, 0x124]                               |     
    0x000415b8 sub sp, 0x34                                      |     
    0x000415ba ldr r0, [pc, 0x124]                               |     r0 = *(0x416e2);
    0x000415bc add r4, pc                                        |     r4 = 0x82c9e;
    0x000415be ldrb.w sb, [sp, 0x58]                             |     sb = *(arg_58h);
    0x000415c2 ldr r0, [r4, r0]                                  |     
    0x000415c4 and r8, sb, 1                                     |     r8 = sb & 1;
    0x000415c8 rsb.w r8, r8, 0x22                                |     r8 = 0x22 - r8;
    0x000415cc ldr r0, [r0]                                      |     r0 = *(0x82c9e);
    0x000415ce str r0, [sp, 0x2c]                                |     var_2ch = r0;
    0x000415d0 mov.w r0, 0                                       |     r0 = 0;
    0x000415d4 ldrb r0, [r6, 0x17]                               |     r0 = *((r6 + 0x17));
    0x000415d6 uxtb.w r8, r8                                     |     r8 = (int8_t) r8;
                                                                 |     if (r0 == 0) {
    0x000415da cbnz r0, 0x415e0                                  |         
    0x000415dc and sb, sb, 0xfd                                  |         sb &= 0xfd;
                                                                 |     }
    0x000415e0 cmp r1, 0                                         |     
                                                                 |     if (r1 <= 0) {
    0x000415e2 ble 0x41692                                       |         goto label_4;
                                                                 |     }
    0x000415e4 ldr.w fp, [pc, 0xfc]                              |     
    0x000415e8 mov r4, r3                                        |     r4 = r3;
    0x000415ea ldr.w sl, [pc, 0xfc]                              |     sl = *(0x000416e8);
    0x000415ec adr r0, 0x3f0                                     |     r0 = 0x3f0;
    0x000415ee adds r7, r1, r3                                   |     r7 = r1 + r3;
    0x000415f0 and sb, sb, 2                                     |     sb &= 2;
    0x000415f4 add.w r5, r2, 0x14                                |     r5 = r2 + 0x14;
    0x000415f8 add fp, pc                                        |     fp = 0x82ce0;
    0x000415fa add.w r3, fp, 0x324                               |     r3 += arg_324h;
    0x000415fe add sl, pc                                        |     sl += pc;
    0x00041600 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00041602 b 0x4164c                                         |     
                                                                 |     while (sb == 0) {
                                                                 | label_0:
    0x00041604 mov r2, r4                                        |         r2 = r4;
    0x00041606 mov r0, r6                                        |         r0 = r6;
    0x00041608 bl 0x3b6f0                                        |         r0 = fcn_0003b6f0 (r0, r1, r2);
    0x0004160c cmp r4, r0                                        |         
    0x0004160e mov r2, r0                                        |         r2 = r0;
                                                                 |         if (r4 != r0) {
    0x00041610 beq 0x41644                                       |             
    0x00041612 cmp.w r8, 0x21                                    |             
    0x00041616 ldr r0, [r6, 8]                                   |             r0 = *((r6 + 8));
                                                                 |             if (r8 == 0x21) {
    0x00041618 bne 0x41638                                       |                 
    0x0004161a ldr r3, [r0]                                      |                 r3 = *(r0);
    0x0004161c ldrb.w r1, [r3, 0x40]                             |                 r1 = *((r3 + 0x40));
    0x00041620 ldr r3, [r0, 0x20]                                |                 r3 = *((r0 + 0x20));
    0x00041622 cmp r1, 0                                         |                 
                                                                 |                 if (r1 != 0) {
    0x00041624 bne 0x416ac                                       |                     goto label_5;
                                                                 |                 }
    0x00041626 ldr r1, [r0, 4]                                   |                 r1 = *((r0 + 4));
    0x00041628 subs r3, 1                                        |                 r3--;
    0x0004162a add.w r3, r3, r3, lsl 2                           |                 r3 += (r3 << 2);
    0x0004162e add.w r3, r1, r3, lsl 2                           |                 r3 = r1 + (r3 << 2);
    0x00041632 ldrb r1, [r3]                                     |                 r1 = *(r3);
    0x00041634 cmp r1, 0x21                                      |                 
                                                                 |                 if (r1 == 0x21) {
    0x00041636 beq 0x416b4                                       |                     goto label_6;
                                                                 |                 }
                                                                 |             }
                                                                 | label_2:
    0x00041638 movs r1, 0                                        |             r1 = 0;
    0x0004163a mov r3, r4                                        |             r3 = r4;
    0x0004163c str r1, [sp]                                      |             *(sp) = r1;
    0x0004163e mov r1, r8                                        |             r1 = r8;
    0x00041640 bl 0x18bf8                                        |             fcn_00018bf8 (r0, r1, r2, r3, r4);
                                                                 |         }
                                                                 | label_3:
    0x00041644 adds r4, 1                                        |         r4++;
    0x00041646 adds r5, 0x14                                     |         r5 += 0x14;
    0x00041648 cmp r4, r7                                        |         
                                                                 |         if (r4 == r7) {
    0x0004164a beq 0x41692                                       |             goto label_4;
                                                                 |         }
                                                                 | label_1:
    0x0004164c ldr r1, [r5, -0x14]                               |         r1 = *((r5 - 0x14));
    0x00041650 cmp.w sb, 0                                       |         
    0x00041654 beq 0x41604                                       |         
                                                                 |     }
    0x00041656 ldr r2, [pc, 0x94]                                |     
    0x00041658 movs r0, 1                                        |     r0 = 1;
    0x0004165a mov.w fp, 0                                       |     
    0x0004165e str r0, [sp, 0x28]                                |     var_28h = r0;
    0x00041660 add r0, sp, 0x14                                  |     r0 += var_14h;
    0x00041662 str r1, [sp, 8]                                   |     var_8h = r1;
    0x00041664 add r2, pc                                        |     r2 = 0x82d56;
    0x00041666 str.w fp, [sp, 0x1c]                              |     __asm ("str.w fp, [var_1ch]");
    0x0004166a strd sl, r2, [sp, 0x14]                           |     __asm ("strd sl, r2, [var_14h]");
    0x0004166e strd fp, fp, [sp, 0x20]                           |     __asm ("strd fp, fp, [var_0hx20]");
    0x00041672 bl 0xc6b0                                         |     fcn_0000c6b0 (r0, r1);
    0x00041676 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x00041678 ldr r1, [sp, 8]                                   |     r1 = var_8h;
    0x0004167a cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0004167c beq 0x41604                                       |         goto label_0;
                                                                 |     }
    0x0004167e mov r2, r4                                        |     r2 = r4;
    0x00041680 mov r3, fp                                        |     r3 = fp;
    0x00041682 mov r0, r6                                        |     r0 = r6;
    0x00041684 adds r4, 1                                        |     r4++;
    0x00041686 bl 0x19d94                                        |     fcn_00019d94 (r0, r1, r2, r3);
    0x0004168a cmp r4, r7                                        |     
    0x0004168c add.w r5, r5, 0x14                                |     r5 += 0x14;
                                                                 |     if (r4 != r7) {
    0x00041690 bne 0x4164c                                       |         goto label_1;
                                                                 |     }
                                                                 | label_4:
    0x00041692 ldr r2, [pc, 0x5c]                                |     
    0x00041694 ldr r3, [pc, 0x48]                                |     r3 = *(0x416e0);
    0x00041696 add r2, pc                                        |     r2 = 0x82d8c;
    0x00041698 ldr r3, [r2, r3]                                  |     r3 = *(0x82d8c);
    0x0004169a ldr r2, [r3]                                      |     r2 = *(0x82d8c);
    0x0004169c ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0004169e eors r2, r3                                       |     r2 ^= r3;
    0x000416a0 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x000416a4 bne 0x416d6                                       |         goto label_7;
                                                                 |     }
    0x000416a6 add sp, 0x34                                      |     
    0x000416a8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_5:
    0x000416ac ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x000416ae ldrb r1, [r3]                                     |     r1 = *(r3);
    0x000416b0 cmp r1, 0x21                                      |     
                                                                 |     if (r1 != 0x21) {
    0x000416b2 bne 0x41638                                       |         goto label_2;
                                                                 |     }
                                                                 | label_6:
    0x000416b4 ldr.w ip, [r3, 0xc]                               |     ip = *((r3 + 0xc));
    0x000416b8 ldr r1, [r3, 4]                                   |     r1 = *((r3 + 4));
    0x000416ba add r1, ip                                        |     r1 += ip;
    0x000416bc adds r1, 1                                        |     r1++;
    0x000416be cmp r2, r1                                        |     
                                                                 |     if (r2 != r1) {
    0x000416c0 bne 0x41638                                       |         goto label_2;
                                                                 |     }
    0x000416c2 ldr r1, [r3, 8]                                   |     r1 = *((r3 + 8));
    0x000416c4 add r1, ip                                        |     r1 += ip;
    0x000416c6 adds r1, 1                                        |     r1++;
    0x000416c8 cmp r4, r1                                        |     
    0x000416ca itt eq                                            |     
                                                                 |     if (r4 != r1) {
    0x000416cc addeq r2, ip, 1                                   |         r2 = ip + 1;
                                                                 |     }
                                                                 |     if (r4 != r1) {
    0x000416d0 str r2, [r3, 0xc]                                 |         *((r3 + 0xc)) = r2;
                                                                 |         goto label_8;
                                                                 |     }
                                                                 |     if (r4 != r1) {
                                                                 | label_8:
    0x000416d2 bne 0x41638                                       |         goto label_2;
                                                                 |     }
    0x000416d4 b 0x41644                                         |     goto label_3;
                                                                 | label_7:
    0x000416d6 blx 0x6498                                        |     fcn_00006498 ();
    0x000416da nop                                               |     
    0x000416dc str r4, [r3, 0x68]                                |     *((r3 + 0x68)) = r4;
    0x000416de movs r3, r0                                       |     r3 = r0;
    0x000416e0 lsls r0, r1, 0xe                                  |     r0 = r1 << 0xe;
    0x000416e2 movs r0, r0                                       |     
    0x000416e4 strb r4, [r7, 0x1e]                               |     *((r7 + 0x1e)) = r4;
    0x000416e6 movs r3, r0                                       |     r3 = r0;
    0x000416e8 ldr r7, [r7, 4]                                   |     r7 = *((r7 + 4));
    0x000416ea vtbl.8 d22, {d28}, d9                             |     __asm ("vtbl.8 d22, {d28}, d9");
    0x000416ee invalid                                           |     
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x41964 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00041964 ()                                      | void fcn_00041964 (int16_t arg_1h, int16_t arg_60h, int16_t arg_64h, int16_t arg_68h, int16_t arg_70h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h_2;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h_2;
                                                                 |     int16_t var_18h_2;
                                                                 |     int16_t var_1ch_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;
                                                                 |     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;
                                                                 | label_11:
    0x000416f4 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x000416f8 mov r8, r3                                        |     r8 = r3;
    0x000416fa ldr r3, [r1]                                      |     r3 = *(r1);
    0x000416fc sub sp, 0x24                                      |     
    0x000416fe mov r5, r1                                        |     r5 = r1;
    0x00041700 mov.w sb, 0                                       |     sb = 0;
    0x00041704 ldr r7, [r0, 0x48]                                |     r7 = *((r0 + 0x48));
    0x00041706 mov r6, r0                                        |     r6 = r0;
    0x00041708 ldr r3, [r3]                                      |     r3 = *(r3);
    0x0004170a str r2, [sp, 0x14]                                |     var_14h_2 = r2;
    0x0004170c ldr r2, [r1, 4]                                   |     r2 = *((r1 + 4));
    0x0004170e adds r1, r7, 1                                    |     r1 = r7 + 1;
    0x00041710 add.w fp, r3, 2                                   |     
    0x00041714 adds r7, 2                                        |     r7 += 2;
    0x00041716 add.w sl, r3, r7                                  |     sl = r3 + r7;
    0x0004171a str r3, [sp, 0x18]                                |     var_18h_2 = r3;
    0x0004171c add.w r3, r1, fp                                  |     r3 = r1 + fp;
    0x00041720 ldr r4, [r0, 8]                                   |     r4 = *((r0 + 8));
    0x00041722 str r3, [r0, 0x48]                                |     *((r0 + 0x48)) = r3;
    0x00041724 str r2, [sp, 0xc]                                 |     var_ch = r2;
    0x00041726 str r1, [sp, 0x10]                                |     var_10h = r1;
    0x00041728 bl 0xae68                                         |     fcn_0000ae68 (r0);
    0x0004172c ldr r1, [r5]                                      |     r1 = *(r5);
    0x0004172e mov r3, r7                                        |     r3 = r7;
    0x00041730 ldrd r1, r2, [r1]                                 |     __asm ("ldrd r1, r2, [r1]");
    0x00041734 str.w sb, [sp]                                    |     __asm ("str.w sb, [sp]");
    0x00041738 bl 0x415b0                                        |     fcn_000415b0 (r0, r1, r2, r3, r4, r5);
    0x0004173c mov r3, sl                                        |     r3 = sl;
    0x0004173e movs r1, 0x45                                     |     r1 = 0x45;
    0x00041740 str.w sb, [sp]                                    |     __asm ("str.w sb, [sp]");
    0x00041744 mov r0, r4                                        |     r0 = r4;
    0x00041746 ldr r2, [r5, 8]                                   |     r2 = *((r5 + 8));
    0x00041748 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0004174c movs r3, 1                                        |     r3 = 1;
    0x0004174e mov r1, r8                                        |     r1 = r8;
    0x00041750 add.w r2, sl, r3                                  |     r2 = sl + r3;
    0x00041754 mov r0, r6                                        |     r0 = r6;
    0x00041756 bl 0x18d88                                        |     fcn_00018d88 (r0, r1, r2, r3);
    0x0004175a ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x0004175c mov r0, r4                                        |     r0 = r4;
    0x0004175e ldr r1, [sp, 0x10]                                |     r1 = var_10h;
    0x00041760 sub.w r3, fp, r2                                  |     r3 = fp - r2;
    0x00041764 adds r2, r7, r2                                   |     r2 = r7 + r2;
    0x00041766 str r1, [sp]                                      |     *(sp) = r1;
    0x00041768 movs r1, 0x30                                     |     r1 = 0x30;
    0x0004176a bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0004176e ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x00041770 cmp r2, sb                                        |     
                                                                 |     if (r2 > sb) {
    0x00041772 bgt 0x4182c                                       |         goto label_32;
                                                                 |     }
                                                                 | label_0:
    0x00041774 ldrb r1, [r5, 0x18]                               |     r1 = *((r5 + 0x18));
    0x00041776 movs r2, 0                                        |     r2 = 0;
    0x00041778 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0004177a mov r0, r4                                        |     r0 = r4;
    0x0004177c str r2, [sp]                                      |     *(sp) = r2;
    0x0004177e and r1, r1, 1                                     |     r1 &= 1;
    0x00041782 ldr r2, [r5, 8]                                   |     r2 = *((r5 + 8));
    0x00041784 rsb.w r1, r1, 0x6c                                |     r1 = 0x6c - r1;
    0x00041788 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0004178c ldr r3, [sp, 0x14]                                |     r3 = var_14h_2;
    0x0004178e ldr r6, [r3, 8]                                   |     r6 = *((r3 + 8));
    0x00041790 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00041792 beq 0x41826                                       |         goto label_33;
                                                                 |     }
    0x00041794 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
                                                                 |     if (r3 != 0) {
    0x00041796 cbz r3, 0x4179a                                   |         
    0x00041798 adds r6, r3, 1                                    |         r6 = r3 + 1;
                                                                 |     }
    0x0004179a mov.w r8, 0                                       |     r8 = 0;
    0x0004179e mov r2, r6                                        |     r2 = r6;
    0x000417a0 mov r3, r8                                        |     r3 = r8;
    0x000417a2 movs r1, 0x89                                     |     r1 = 0x89;
    0x000417a4 mov r0, r4                                        |     r0 = r4;
    0x000417a6 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x000417aa bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000417ae mov r2, r6                                        |     r2 = r6;
    0x000417b0 mov r7, r0                                        |     r7 = r0;
    0x000417b2 mov.w r3, -1                                      |     r3 = -1;
    0x000417b6 movs r1, 0x25                                     |     r1 = 0x25;
    0x000417b8 mov r0, r4                                        |     r0 = r4;
    0x000417ba str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x000417be bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000417c2 mov r2, r8                                        |     r2 = r8;
    0x000417c4 mov r3, r8                                        |     r3 = r8;
    0x000417c6 movs r1, 0x10                                     |     r1 = 0x10;
    0x000417c8 mov r0, r4                                        |     r0 = r4;
    0x000417ca str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x000417ce bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000417d2 ldr r3, [r4, 0x20]                                |     r3 = *((r4 + 0x20));
    0x000417d4 mov r6, r0                                        |     r6 = r0;
    0x000417d6 movs r1, 0x67                                     |     r1 = 0x67;
    0x000417d8 mov r0, r4                                        |     r0 = r4;
    0x000417da cmp r7, r3                                        |     
    0x000417dc ittt lo                                           |     
                                                                 |     if (r7 >= r3) {
    0x000417de ldrlo r2, [r4, 4]                                 |         r2 = *((r4 + 4));
                                                                 |     }
                                                                 |     if (r7 >= r3) {
    0x000417e0 addlo r7, r7, r7, lsl 2                           |         r7 += (r7 << 2);
                                                                 |     }
                                                                 |     if (r7 < r3) {
    0x000417e4 add.w r2, r2, r7, lsl 2                           |         r2 += (r7 << 2);
                                                                 |     }
    0x000417e8 mov.w r7, 0                                       |     r7 = 0;
    0x000417ec it lo                                             |     
                                                                 |     if (r7 >= r3) {
    0x000417ee strlo r3, [r2, 8]                                 |         *((r2 + 8)) = r3;
                                                                 |     }
    0x000417f0 subs r3, 1                                        |     r3--;
    0x000417f2 ldr r2, [r4, 0x18]                                |     r2 = *((r4 + 0x18));
    0x000417f4 str r3, [r2, 0x58]                                |     *((r2 + 0x58)) = r3;
    0x000417f6 mov r3, r7                                        |     r3 = r7;
    0x000417f8 str r7, [sp]                                      |     *(sp) = r7;
    0x000417fa ldr r2, [r5, 8]                                   |     r2 = *((r5 + 8));
    0x000417fc bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00041800 ldr r2, [r5, 8]                                   |     r2 = *((r5 + 8));
    0x00041802 mov r3, r7                                        |     r3 = r7;
    0x00041804 movs r1, 0x4b                                     |     r1 = 0x4b;
    0x00041806 mov r0, r4                                        |     r0 = r4;
    0x00041808 str r7, [sp]                                      |     *(sp) = r7;
    0x0004180a bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0004180c invalid                                           |     
    0x00041810 cmp r6, r3                                        |     
    0x00041812 itttt lo                                          |     
                                                                 |     if (r6 >= r3) {
    0x00041814 ldrlo r2, [r4, 4]                                 |         r2 = *((r4 + 4));
                                                                 |     }
                                                                 |     if (r6 >= r3) {
    0x00041816 addlo r6, r6, r6, lsl 2                           |         r6 += (r6 << 2);
                                                                 |     }
                                                                 |     if (r6 >= r3) {
    0x0004181a addlo r2, r2, r6, lsl 2                           |         r2 += (r6 << 2);
                                                                 |     }
                                                                 |     if (r6 < r3) {
    0x0004181e str r3, [r2, 8]                                   |         *((r2 + 8)) = r3;
                                                                 |     }
    0x00041820 subs r3, 1                                        |     r3--;
    0x00041822 ldr r2, [r4, 0x18]                                |     r2 = *((r4 + 0x18));
    0x00041824 str r3, [r2, 0x58]                                |     *((r2 + 0x58)) = r3;
                                                                 |     do {
                                                                 | label_33:
    0x00041826 add sp, 0x24                                      |         
    0x00041828 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_32:
    0x0004182c str.w sb, [sp]                                    |         __asm ("str.w sb, [sp]");
    0x00041830 mov r2, sl                                        |         r2 = sl;
    0x00041832 ldr.w ip, [r6, 0x48]                              |         ip = *((r6 + 0x48));
    0x00041836 mov r3, sb                                        |         r3 = sb;
    0x00041838 ldr.w sl, [r5, 4]                                 |         sl = *((r5 + 4));
    0x0004183c movs r1, 0x2d                                     |         r1 = 0x2d;
    0x0004183e mov r0, r4                                        |         r0 = r4;
    0x00041840 add.w fp, ip, 1                                   |         
    0x00041844 add ip, sl                                        |         
    0x00041846 str.w ip, [r6, 0x48]                              |         __asm ("str.w ip, [r6, 0x48]");
    0x0004184a bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0004184e ldr r3, [r5, 4]                                   |         r3 = *((r5 + 4));
    0x00041850 mov r2, fp                                        |         r2 = fp;
    0x00041852 str r0, [sp, 0x1c]                                |         var_1ch_2 = r0;
    0x00041854 movs r1, 0x29                                     |         r1 = 0x29;
    0x00041856 mov r0, r4                                        |         r0 = r4;
    0x00041858 str r3, [sp]                                      |         *(sp) = r3;
    0x0004185a mov r3, r7                                        |         r3 = r7;
    0x0004185c bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00041860 ldr r3, [r5, 0x14]                                |         r3 = *((r5 + 0x14));
    0x00041862 ldr r2, [r4]                                      |         r2 = *(r4);
    0x00041864 cmp r3, sb                                        |         
    0x00041866 ldrb.w r2, [r2, 0x40]                             |         r2 = *((r2 + 0x40));
    0x0004186a itt lt                                            |         
                                                                 |         if (r3 >= sb) {
    0x0004186c ldrlt r3, [r4, 0x20]                              |             r3 = *((r4 + 0x20));
                                                                 |         }
                                                                 |         if (r3 >= sb) {
    0x0004186e addlt r3, r3, -1                                  |             r3 += -1;
                                                                 |         }
    0x00041872 cmp r2, 0                                         |         
                                                                 |         if (r2 != 0) {
    0x00041874 bne 0x41952                                       |             goto label_34;
                                                                 |         }
    0x00041876 ldr r2, [r4, 4]                                   |         r2 = *((r4 + 4));
    0x00041878 add.w r3, r3, r3, lsl 2                           |         r3 += (r3 << 2);
    0x0004187c add.w r8, r2, r3, lsl 2                           |         r8 = r2 + (r3 << 2);
                                                                 | label_1:
    0x00041880 ldr r3, [r6]                                      |         r3 = *(r6);
    0x00041882 ldrb.w sb, [r3, 0x40]                             |         sb = *((r3 + 0x40));
    0x00041884 str r0, [sp, 0x100]                               |         *((sp + 0x100)) = r0;
    0x00041886 cmp.w sb, 0                                       |         
    0x0004188a bne 0x41826                                       |         
                                                                 |     } while (sb != 0);
    0x0004188c ldr r3, [sp, 0x18]                                |     r3 = var_18h_2;
    0x0004188e mov r1, sb                                        |     r1 = sb;
    0x00041890 sub.w r3, r3, sl                                  |     r3 -= sl;
    0x00041894 ldr.w sl, [r8, 0x10]                              |     sl = *((r8 + 0x10));
    0x00041898 adds r3, 2                                        |     r3 += 2;
    0x0004189a str.w r3, [r8, 8]                                 |     __asm ("str.w r3, [r8, 8]");
    0x0004189e ldrh.w r2, [sl, 6]                                |     r2 = *((sl + 6));
    0x000418a2 ldr.w r0, [sl, 0x10]                              |     r0 = *((sl + 0x10));
    0x000418a6 blx 0x5fcc                                        |     fcn_00005fcc ();
    0x000418aa mov r2, sl                                        |     r2 = sl;
    0x000418ac mvn r3, 5                                         |     r3 = ~5;
    0x000418b0 mov.w r1, -1                                      |     r1 = -1;
    0x000418b4 mov r0, r4                                        |     r0 = r4;
    0x000418b6 bl 0x1021c                                        |     fcn_0001021c (r0, r1, r2, r3);
    0x000418ba ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x000418bc movs r3, 1                                        |     r3 = 1;
    0x000418be ldr r1, [r5]                                      |     r1 = *(r5);
    0x000418c0 mov r0, r6                                        |     r0 = r6;
    0x000418c2 bl 0x243a0                                        |     fcn_000243a0 (r0, r1, r2);
    0x000418c6 str.w r0, [r8, 0x10]                              |     __asm ("str.w r0, [r8, 0x10]");
    0x000418ca mov r3, sb                                        |     r3 = sb;
    0x000418cc ldr.w r8, [r4, 0x20]                              |     r8 = *((r4 + 0x20));
    0x000418d0 movs r1, 0x2a                                     |     r1 = 0x2a;
    0x000418d2 mov r0, r4                                        |     r0 = r4;
    0x000418d4 add.w r2, r8, 1                                   |     r2 = r8 + 1;
    0x000418d8 str r2, [sp]                                      |     *(sp) = r2;
    0x000418da bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000418de ldr r0, [r4, 0x18]                                |     r0 = *((r4 + 0x18));
    0x000418e0 bl 0x19ed0                                        |     fcn_00019ed0 (r0);
    0x000418e4 str.w sb, [sp]                                    |     __asm ("str.w sb, [sp]");
    0x000418e8 mov r3, r0                                        |     r3 = r0;
    0x000418ea ldr r2, [r6, 0x48]                                |     r2 = *((r6 + 0x48));
    0x000418ec movs r1, 0x11                                     |     r1 = 0x11;
    0x000418ee str r0, [r5, 0x10]                                |     *((r5 + 0x10)) = r0;
    0x000418f0 mov r0, r4                                        |     r0 = r4;
    0x000418f2 adds r2, 1                                        |     r2++;
    0x000418f4 str r2, [r6, 0x48]                                |     *((r6 + 0x48)) = r2;
    0x000418f6 str r2, [r5, 0xc]                                 |     *((r5 + 0xc)) = r2;
    0x000418f8 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000418fc movs r1, 0x75                                     |     r1 = 0x75;
    0x000418fe mov r3, sb                                        |     r3 = sb;
    0x00041900 str.w sb, [sp]                                    |     __asm ("str.w sb, [sp]");
    0x00041904 mov r0, r4                                        |     r0 = r4;
    0x00041906 ldr r2, [r5, 8]                                   |     r2 = *((r5 + 8));
    0x00041908 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0004190c ldr r3, [r4, 0x20]                                |     r3 = *((r4 + 0x20));
    0x0004190e ldr r2, [sp, 0x1c]                                |     r2 = var_1ch_2;
    0x00041910 ldr r0, [r4, 0x18]                                |     r0 = *((r4 + 0x18));
    0x00041912 cmp r2, r3                                        |     
    0x00041914 ittt lo                                           |     
                                                                 |     if (r2 >= r3) {
    0x00041916 ldrlo r1, [r4, 4]                                 |         r1 = *((r4 + 4));
                                                                 |     }
                                                                 |     if (r2 >= r3) {
    0x00041918 addlo r2, r2, r2, lsl 2                           |         r2 += (r2 << 2);
                                                                 |     }
                                                                 |     if (r2 < r3) {
    0x0004191c add.w r1, r1, r2, lsl 2                           |         r1 += (r2 << 2);
                                                                 |     }
    0x00041920 mov r2, r7                                        |     r2 = r7;
    0x00041922 it lo                                             |     
                                                                 |     if (r2 >= r3) {
    0x00041924 strlo r3, [r1, 8]                                 |         *((r1 + 8)) = r3;
                                                                 |     }
    0x00041926 subs r1, r3, 1                                    |     r1 = r3 - 1;
    0x00041928 str r1, [r0, 0x58]                                |     *((r0 + 0x58)) = r1;
    0x0004192a mov r3, fp                                        |     r3 = fp;
    0x0004192c ldr r1, [r5, 4]                                   |     r1 = *((r5 + 4));
    0x0004192e mov r0, r4                                        |     r0 = r4;
    0x00041930 str r1, [sp]                                      |     *(sp) = r1;
    0x00041932 movs r1, 0x20                                     |     r1 = 0x20;
    0x00041934 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00041938 ldr r3, [r4, 0x20]                                |     r3 = *((r4 + 0x20));
    0x0004193a cmp r8, r3                                        |     
    0x0004193c itttt lo                                          |     
                                                                 |     if (r8 >= r3) {
    0x0004193e ldrlo r2, [r4, 4]                                 |         r2 = *((r4 + 4));
                                                                 |     }
                                                                 |     if (r8 >= r3) {
    0x00041940 addlo r8, r8, r8, lsl 2                           |         r8 += (r8 << 2);
                                                                 |     }
                                                                 |     if (r8 >= r3) {
    0x00041944 addlo r2, r2, r8, lsl 2                           |         r2 += (r8 << 2);
                                                                 |     }
                                                                 |     if (r8 < r3) {
    0x00041948 str r3, [r2, 8]                                   |         *((r2 + 8)) = r3;
                                                                 |     }
    0x0004194a subs r3, 1                                        |     r3--;
    0x0004194c ldr r2, [r4, 0x18]                                |     r2 = *((r4 + 0x18));
    0x0004194e str r3, [r2, 0x58]                                |     *((r2 + 0x58)) = r3;
    0x00041950 b 0x41774                                         |     goto label_0;
                                                                 | label_34:
    0x00041952 ldr.w r8, [pc, 0xc]                               |     r8 = *(0x00041960);
    0x00041956 add r8, pc                                        |     r8 += pc;
    0x00041958 add.w r8, r8, 0x324                               |     r8 += 0x324;
    0x0004195c b 0x41880                                         |     goto label_1;
    0x00041964 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00041968 sub sp, 0x3c                                      |     
    0x0004196a mov fp, r2                                        |     
    0x0004196c ldrd sl, r2, [sp, 0x68]                           |     __asm ("ldrd sl, r2, [arg_68h]");
    0x00041970 mov sb, r3                                        |     sb = r3;
    0x00041972 mov r8, r0                                        |     r8 = r0;
    0x00041974 ldr r3, [sp, 0x64]                                |     r3 = *(arg_64h);
    0x00041976 str r2, [sp, 0x28]                                |     var_28h = r2;
    0x00041978 ldr r2, [sp, 0x70]                                |     r2 = *(arg_70h);
    0x0004197a ldr r0, [sp, 0x60]                                |     r0 = *(arg_60h);
    0x0004197c ldr.w r5, [r8, 8]                                 |     r5 = *((r8 + 8));
    0x00041980 str r2, [sp, 0x30]                                |     var_30h = r2;
    0x00041982 ldrb.w r2, [sl]                                   |     r2 = *(sl);
    0x00041986 str r0, [sp, 0x14]                                |     var_14h = r0;
    0x00041988 str r1, [sp, 0x20]                                |     var_20h = r1;
    0x0004198a str r2, [sp, 0x1c]                                |     var_1ch = r2;
    0x0004198c ldr.w r2, [sl, 4]                                 |     r2 = *((sl + 4));
    0x00041990 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00041992 str r2, [sp, 0x2c]                                |     var_2ch = r2;
    0x00041994 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00041996 beq.w 0x41bb0                                     |         goto label_35;
                                                                 |     }
    0x0004199a ldrb r3, [r3, 1]                                  |     r3 = *((r3 + 1));
    0x0004199c str r3, [sp, 0x18]                                |     var_18h = r3;
    0x0004199e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000419a0 beq 0x41a1c                                       |         goto label_36;
                                                                 |     }
    0x000419a2 ldr r3, [r0]                                      |     r3 = *(r0);
    0x000419a4 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000419a6 beq 0x41a1c                                       |         goto label_36;
                                                                 |     }
                                                                 | label_6:
    0x000419a8 ldr.w r6, [sl, 8]                                 |     r6 = *((sl + 8));
    0x000419ac ldr.w r7, [fp]                                    |     r7 = *(fp);
    0x000419b0 ldr.w r3, [r8, 0x48]                              |     r3 = *((r8 + 0x48));
    0x000419b4 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x000419b6 bne 0x41a44                                       |         goto label_37;
                                                                 |     }
                                                                 | label_2:
    0x000419b8 cmp.w sb, 0                                       |     
    0x000419bc add.w r6, r3, 1                                   |     r6 = r3 + 1;
    0x000419c0 add r3, r7                                        |     r3 += r7;
    0x000419c2 str.w r6, [sl, 8]                                 |     __asm ("str.w r6, [sl, 8]");
    0x000419c6 str.w r3, [r8, 0x48]                              |     __asm ("str.w r3, [r8, 0x48]");
    0x000419ca str.w r7, [sl, 0xc]                               |     __asm ("str.w r7, [sl, 0xc]");
                                                                 |     if (sb < 0) {
    0x000419ce blt 0x41a5a                                       |         goto label_38;
                                                                 |     }
                                                                 | label_3:
    0x000419d0 cmp r7, 0                                         |     
                                                                 |     if (r7 <= 0) {
    0x000419d2 ble 0x419ec                                       |         goto label_39;
                                                                 |     }
    0x000419d4 movs r4, 0                                        |     r4 = 0;
                                                                 |     do {
    0x000419d6 adds r3, r4, r6                                   |         r3 = r4 + r6;
    0x000419d8 mov r2, sb                                        |         r2 = sb;
    0x000419da str r3, [sp]                                      |         *(sp) = r3;
    0x000419dc movs r1, 0x2e                                     |         r1 = 0x2e;
    0x000419de mov r3, r4                                        |         r3 = r4;
    0x000419e0 mov r0, r5                                        |         r0 = r5;
    0x000419e2 adds r4, 1                                        |         r4++;
    0x000419e4 bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000419e8 cmp r7, r4                                        |         
    0x000419ea bne 0x419d6                                       |         
                                                                 |     } while (r7 != r4);
                                                                 | label_39:
    0x000419ec ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x000419ee cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000419f0 bne 0x41a84                                       |         goto label_8;
                                                                 |     }
                                                                 | label_4:
    0x000419f2 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x000419f4 subs r3, 1                                        |     r3--;
    0x000419f6 cmp r3, 0xd                                       |     
                                                                 |     if (r3 > 0xd) {
    0x000419f8 bhi.w 0x41ba6                                     |         goto label_9;
                                                                 |     }
                                                                 |     /* switch table (15 cases) at 0x41a00 */
    0x000419fc tbh [pc, r3, lsl 1]                               |     __asm ("tbh [pc, r3, lsl 1]");
                                                                 | label_36:
    0x00041a1c ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00041a1e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00041a20 bne.w 0x421ae                                     |         goto label_40;
                                                                 |     }
                                                                 | label_5:
    0x00041a24 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00041a26 ldr r1, [r3, 0xc]                                 |     r1 = *((r3 + 0xc));
    0x00041a28 cmp r1, 0                                         |     
                                                                 |     if (r1 > 0) {
    0x00041a2a bgt.w 0x41c12                                     |         goto label_41;
                                                                 |     }
    0x00041a2e ldr.w r6, [sl, 8]                                 |     r6 = *((sl + 8));
    0x00041a32 movs r3, 0                                        |     r3 = 0;
    0x00041a34 strd r3, r3, [sp, 0x14]                           |     __asm ("strd r3, r3, [var_14h]");
    0x00041a38 ldr.w r7, [fp]                                    |     r7 = *(fp);
    0x00041a3c ldr.w r3, [r8, 0x48]                              |     r3 = *((r8 + 0x48));
    0x00041a40 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00041a42 beq 0x419b8                                       |         goto label_2;
                                                                 |     }
                                                                 | label_37:
    0x00041a44 adds r2, r6, r7                                   |     r2 = r6 + r7;
    0x00041a46 cmp r2, r3                                        |     
    0x00041a48 itt gt                                            |     
                                                                 |     if (r2 <= r3) {
    0x00041a4a addgt r3, r3, r7                                  |         r3 += r7;
                                                                 |     }
                                                                 |     if (r2 <= r3) {
    0x00041a4c strgt r3, [r8, 0x48]                              |         *((r8 + 0x48)) = r3;
                                                                 |     }
    0x00041a50 cmp.w sb, 0                                       |     
    0x00041a54 str.w r7, [sl, 0xc]                               |     __asm ("str.w r7, [sl, 0xc]");
                                                                 |     if (sb >= 0) {
    0x00041a58 bge 0x419d0                                       |         goto label_3;
                                                                 |     }
                                                                 | label_38:
    0x00041a5a ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00041a5c cmp r3, 3                                         |     
                                                                 |     if (r3 == 3) {
    0x00041a5e beq.w 0x41bf8                                     |         goto label_42;
                                                                 |     }
    0x00041a62 and r3, r3, 0xfb                                  |     r3 &= 0xfb;
    0x00041a66 mov r0, r8                                        |     r0 = r8;
    0x00041a68 sub.w r3, r3, 9                                   |     r3 -= 9;
    0x00041a6c clz r3, r3                                        |     r3 &= r3;
    0x00041a70 lsrs r3, r3, 5                                    |     r3 >>= 5;
    0x00041a72 str r3, [sp]                                      |     *(sp) = r3;
    0x00041a74 mov r3, r6                                        |     r3 = r6;
    0x00041a76 ldrd r1, r2, [fp]                                 |     __asm ("ldrd r1, r2, [fp]");
    0x00041a7a bl 0x415b0                                        |     fcn_000415b0 (r0, r1, r2, r3, r4, r5);
    0x00041a7e ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00041a80 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00041a82 beq 0x419f2                                       |         goto label_4;
                                                                 |     }
                                                                 | label_8:
    0x00041a84 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00041a86 ldrb r3, [r2, 1]                                  |     r3 = *((r2 + 1));
    0x00041a88 cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x00041a8a beq.w 0x41eea                                     |         goto label_43;
                                                                 |     }
    0x00041a8e cmp r3, 2                                         |     
                                                                 |     if (r3 != 2) {
    0x00041a90 bne.w 0x41efe                                     |         goto label_44;
                                                                 |     }
    0x00041a94 ldr r1, [r2, 8]                                   |     r1 = *((r2 + 8));
    0x00041a96 ldr r2, [r5, 0x20]                                |     r2 = *((r5 + 0x20));
    0x00041a98 ldr.w r3, [r8, 0x48]                              |     r3 = *((r8 + 0x48));
    0x00041a9c cmp r1, r2                                        |     
    0x00041a9e add.w r0, r3, r7                                  |     r0 = r3 + r7;
    0x00041aa2 add.w r3, r3, 1                                   |     r3++;
    0x00041aa6 str.w r0, [r8, 0x48]                              |     __asm ("str.w r0, [r8, 0x48]");
    0x00041aaa str r3, [sp, 0x18]                                |     var_18h = r3;
                                                                 |     if (r1 < r2) {
    0x00041aac blt.w 0x41e3c                                     |         goto label_45;
                                                                 |     }
                                                                 | label_10:
    0x00041ab0 ldr r3, [r5]                                      |     r3 = *(r5);
    0x00041ab2 cmp r1, 0                                         |     
    0x00041ab4 it lt                                             |     
                                                                 |     if (r1 >= 0) {
    0x00041ab6 addlt r1, r2, -1                                  |         r1 = r2 + -1;
                                                                 |     }
    0x00041aba ldrb.w r3, [r3, 0x40]                             |     r3 = *((r3 + 0x40));
    0x00041abe cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00041ac0 bne.w 0x41f74                                     |         goto label_46;
                                                                 |     }
    0x00041ac4 ldr r3, [r5, 4]                                   |     r3 = *((r5 + 4));
    0x00041ac6 add.w r1, r1, r1, lsl 2                           |     r1 += (r1 << 2);
    0x00041aca add.w r3, r3, r1, lsl 2                           |     r3 += (r1 << 2);
                                                                 | label_16:
    0x00041ace ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x00041ad0 adds r2, r7, r2                                   |     r2 = r7 + r2;
    0x00041ad2 cmp r7, 0                                         |     
    0x00041ad4 itt gt                                            |     
                                                                 |     if (r7 <= 0) {
    0x00041ad6 strgt sl, [sp, 0x34]                              |         var_34h = sl;
                                                                 |     }
                                                                 |     if (r7 > 0) {
    0x00041ada movs r4, 0                                        |         r4 = 0;
                                                                 |     }
    0x00041adc str r1, [r3, 8]                                   |     *((r3 + 8)) = r1;
    0x00041ade mov r1, r2                                        |     r1 = r2;
    0x00041ae0 mov.w r2, 0x1c                                    |     r2 = 0x1c;
    0x00041ae4 it gt                                             |     
                                                                 |     if (r4 <= 0) {
    0x00041ae6 movgt sl, r1                                      |         sl = r1;
                                                                 |     }
    0x00041ae8 strb r2, [r3]                                     |     *(r3) = r2;
    0x00041aea mov.w r2, 1                                       |     r2 = 1;
    0x00041aee str r2, [r3, 4]                                   |     *((r3 + 4)) = r2;
    0x00041af0 add.w r3, r7, -1                                  |     r3 = r7 + -1;
    0x00041af4 str r3, [sp, 0x24]                                |     var_24h = r3;
                                                                 |     if (r4 <= 0) {
    0x00041af6 ble 0x41b58                                       |         goto label_47;
                                                                 |     }
                                                                 |     do {
    0x00041af8 ldr.w r3, [fp, 4]                                 |         r3 = *(arg_64h);
    0x00041afc add.w r2, r4, r4, lsl 2                           |         r2 = r4 + (r4 << 2);
    0x00041b00 mov r0, r8                                        |         r0 = r8;
    0x00041b02 ldr.w r1, [r3, r2, lsl 2]                         |         offset_0 = r2 << 2;
                                                                 |         r1 = *((r3 + offset_0));
    0x00041b06 bl 0x22e78                                        |         fcn_00022e78 (r0, r1);
    0x00041b0a ldr r1, [sp, 0x24]                                |         r1 = var_24h;
    0x00041b0c adds r2, r6, r4                                   |         r2 = r6 + r4;
    0x00041b0e ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x00041b10 mov sb, r0                                        |         sb = r0;
    0x00041b12 mov r0, r5                                        |         r0 = r5;
    0x00041b14 cmp r1, r4                                        |         
    0x00041b16 add r3, r4                                        |         r3 += r4;
    0x00041b18 it gt                                             |         
                                                                 |         if (r1 <= r4) {
    0x00041b1a movgt r1, 0x4e                                    |             r1 = 0x4e;
                                                                 |         }
    0x00041b1c str r3, [sp]                                      |         *(sp) = r3;
    0x00041b1e itte le                                           |         
                                                                 |         if (r1 > r4) {
    0x00041b20 movle r1, 0x4f                                    |             r1 = 0x4f;
                                                                 |         }
                                                                 |         if (r1 > r4) {
    0x00041b22 ldrle r3, [sp, 0x28]                              |             r3 = var_28h;
                                                                 |         }
                                                                 |         if (r1 <= r4) {
    0x00041b24 movgt r3, sl                                      |             r3 = sl;
                                                                 |         }
    0x00041b26 bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00041b2a mvn r3, 3                                         |         r3 = ~3;
    0x00041b2e mov r2, sb                                        |         r2 = sb;
    0x00041b30 mov.w r1, -1                                      |         r1 = -1;
    0x00041b34 mov r0, r5                                        |         r0 = r5;
    0x00041b36 bl 0x1021c                                        |         fcn_0001021c (r0, r1, r2, r3);
    0x00041b3a ldr r3, [r5, 4]                                   |         r3 = *((r5 + 4));
    0x00041b3c adds r4, 1                                        |         r4++;
                                                                 |         if (r3 != 0) {
    0x00041b3e cbz r3, 0x41b50                                   |             
    0x00041b40 ldr r2, [r5, 0x20]                                |             r2 = *((r5 + 0x20));
    0x00041b42 add.w r2, r2, r2, lsl 2                           |             r2 += (r2 << 2);
    0x00041b46 add.w r3, r3, r2, lsl 2                           |             r3 += (r2 << 2);
    0x00041b4a movs r2, 0x80                                     |             r2 = 0x80;
    0x00041b4c strb r2, [r3, -0x11]                              |             *((r3 - 0x11)) = r2;
                                                                 |         }
    0x00041b50 cmp r7, r4                                        |         
    0x00041b52 bne 0x41af8                                       |         
                                                                 |     } while (r7 != r4);
    0x00041b54 ldr.w sl, [sp, 0x34]                              |     sl = var_34h;
                                                                 | label_47:
    0x00041b58 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00041b5a mov r2, r6                                        |     r2 = r6;
    0x00041b5c movs r1, 0x21                                     |     r1 = 0x21;
    0x00041b5e mov r0, r5                                        |     r0 = r5;
    0x00041b60 str r3, [sp]                                      |     *(sp) = r3;
    0x00041b62 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00041b64 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
                                                                 | label_13:
    0x00041b68 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00041b6a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00041b6c beq.w 0x41f16                                     |         goto label_48;
                                                                 |     }
                                                                 | label_14:
    0x00041b70 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00041b72 subs r3, 1                                        |     r3--;
    0x00041b74 cmp r3, 0xd                                       |     
                                                                 |     if (r3 <= 0xd) {
    0x00041b76 bhi 0x41baa                                       |         
                                                                 |         /* switch table (15 cases) at 0x41b7c */
    0x00041b78 tbh [pc, r3, lsl 1]                               |         __asm ("tbh [pc, r3, lsl 1]");
    0x00041b98 ldr r2, [sp, 0x2c]                                |         r2 = var_2ch;
    0x00041b9a mov r3, r6                                        |         r3 = r6;
    0x00041b9c movs r1, 0x6d                                     |         r1 = 0x6d;
    0x00041b9e mov r0, r5                                        |         r0 = r5;
    0x00041ba0 str r7, [sp]                                      |         *(sp) = r7;
    0x00041ba2 bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
                                                                 | label_9:
    0x00041ba6 ldr r3, [sp, 0x14]                                |         r3 = var_14h;
                                                                 |         if (r3 == 0) {
    0x00041ba8 cbz r3, 0x41bda                                   |             goto label_15;
                                                                 |         }
                                                                 |     }
                                                                 | label_7:
    0x00041baa add sp, 0x3c                                      |     
    0x00041bac pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_35:
    0x00041bb0 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00041bb2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00041bb4 beq.w 0x41a24                                     |         goto label_5;
                                                                 |     }
    0x00041bb8 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00041bba cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00041bbc beq.w 0x41a24                                     |         goto label_5;
                                                                 |     }
    0x00041bc0 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00041bc2 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x00041bc4 b 0x419a8                                         |     goto label_6;
    0x00041bc6 ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x00041bc8 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00041bca bne.w 0x41e7e                                     |         goto label_49;
                                                                 |     }
    0x00041bce ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x00041bd0 mov r1, r6                                        |     r1 = r6;
    0x00041bd2 mov r0, r8                                        |     r0 = r8;
    0x00041bd4 movs r3, 1                                        |     r3 = 1;
    0x00041bd6 bl 0x18d88                                        |     fcn_00018d88 (r0, r1, r2, r3);
                                                                 | label_15:
    0x00041bda invalid                                           |     
    0x00041bdc ldr r2, [r3, 8]                                   |     r2 = *((r3 + 8));
    0x00041bde cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00041be0 beq 0x41baa                                       |         goto label_7;
                                                                 |     }
    0x00041be2 mov.w r4, -1                                      |     r4 = -1;
    0x00041be6 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00041be8 movs r1, 0x89                                     |     r1 = 0x89;
    0x00041bea mov r0, r5                                        |     r0 = r5;
    0x00041bec str r4, [sp, 0x60]                                |     *(arg_60h) = r4;
    0x00041bee add sp, 0x3c                                      |     
    0x00041bf0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |     
    0x00041bf4 b.w 0x18bf8                                       |     void (*0x18bf8)() ();
                                                                 | label_42:
    0x00041bf8 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00041bfa cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00041bfc bne.w 0x41a84                                     |         goto label_8;
                                                                 |     }
    0x00041c00 movs r2, 0                                        |     r2 = 0;
    0x00041c02 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00041c04 str r2, [sp]                                      |     *(sp) = r2;
    0x00041c06 movs r1, 0x19                                     |     r1 = 0x19;
    0x00041c08 movs r2, 1                                        |     r2 = 1;
    0x00041c0a mov r0, r5                                        |     r0 = r5;
    0x00041c0c bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00041c10 b 0x41ba6                                         |     goto label_9;
                                                                 | label_41:
    0x00041c12 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x00041c14 mov r0, r5                                        |     r0 = r5;
    0x00041c16 bl 0x19b28                                        |     fcn_00019b28 (r0, r1, r2);
    0x00041c1a movs r3, 0                                        |     r3 = 0;
    0x00041c1c strd r3, r3, [sp, 0x14]                           |     __asm ("strd r3, r3, [var_14h]");
    0x00041c20 b 0x419a8                                         |     goto label_6;
    0x00041c22 ldrb.w r3, [r8, 0x13]                             |     r3 = *((r8 + 0x13));
    0x00041c26 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00041c28 beq.w 0x42106                                     |         goto label_50;
                                                                 |     }
    0x00041c2c subs r3, 1                                        |     r3--;
    0x00041c2e uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x00041c30 strb.w r3, [r8, 0x13]                             |     *((r8 + 0x13)) = r3;
    0x00041c34 adds r3, 6                                        |     r3 += 6;
    0x00041c36 ldr.w r4, [r8, r3, lsl 2]                         |     offset_1 = r3 << 2;
                                                                 |     r4 = *((r8 + offset_1));
                                                                 | label_24:
    0x00041c3a mov r3, r7                                        |     r3 = r7;
    0x00041c3c mov r2, r6                                        |     r2 = r6;
    0x00041c3e movs r1, 0x30                                     |     r1 = 0x30;
    0x00041c40 mov r0, r5                                        |     r0 = r5;
    0x00041c42 str r4, [sp]                                      |     *(sp) = r4;
    0x00041c44 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00041c48 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00041c4a cmp r3, 6                                         |     
                                                                 |     if (r3 == 6) {
    0x00041c4c beq.w 0x4211e                                     |         goto label_51;
                                                                 |     }
                                                                 | label_26:
    0x00041c50 ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x00041c52 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00041c54 beq.w 0x41fa2                                     |         goto label_52;
                                                                 |     }
    0x00041c58 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00041c5a mov r3, r4                                        |     r3 = r4;
    0x00041c5c mov r0, r8                                        |     r0 = r8;
    0x00041c5e bl 0x416f4                                        |     void (*0x416f4)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3, r4, r5, r6);
    0x00041c62 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00041c64 beq 0x41baa                                       |         goto label_7;
                                                                 |     }
    0x00041c66 ldrb.w r0, [r8, 0x13]                             |     r0 = *((r8 + 0x13));
    0x00041c6a cmp r0, 7                                         |     
                                                                 |     if (r0 > 7) {
    0x00041c6c bhi 0x41baa                                       |         goto label_7;
                                                                 |     }
                                                                 | label_19:
    0x00041c6e add.w r3, r8, 0x74                                |     r3 = r8 + 0x74;
    0x00041c72 add.w r1, r8, 0x13c                               |     r1 = r8 + 0x13c;
                                                                 |     do {
                                                                 | label_31:
    0x00041c76 ldr r2, [r3, 0xc]                                 |         r2 = *((r3 + 0xc));
    0x00041c78 cmp r4, r2                                        |         
                                                                 |         if (r4 == r2) {
    0x00041c7a beq.w 0x42198                                     |             goto label_53;
                                                                 |         }
    0x00041c7e adds r3, 0x14                                     |         r3 += 0x14;
    0x00041c80 cmp r3, r1                                        |         
    0x00041c82 bne 0x41c76                                       |         
                                                                 |     } while (r3 != r1);
                                                                 | label_12:
    0x00041c84 adds r3, r0, 1                                    |     r3 = r0 + 1;
    0x00041c86 adds r0, 6                                        |     r0 += 6;
    0x00041c88 strb.w r3, [r8, 0x13]                             |     *((r8 + 0x13)) = r3;
    0x00041c8c str.w r4, [r8, r0, lsl 2]                         |     __asm ("str.w r4, [r8, r0, lsl 2]");
    0x00041c90 b 0x41ba6                                         |     goto label_9;
    0x00041c92 ldrb.w r3, [r8, 0x13]                             |     r3 = *((r8 + 0x13));
    0x00041c96 ldr.w sb, [sl, 0x10]                              |     sb = *((sl + 0x10));
    0x00041c9a ldr.w sl, [sb]                                    |     sl = *(sb);
    0x00041c9e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00041ca0 beq.w 0x420ec                                     |         goto label_54;
                                                                 |     }
    0x00041ca4 subs r3, 1                                        |     r3--;
    0x00041ca6 uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x00041ca8 strb.w r3, [r8, 0x13]                             |     *((r8 + 0x13)) = r3;
    0x00041cac adds r3, 6                                        |     r3 += 6;
    0x00041cae ldr.w r3, [r8, r3, lsl 2]                         |     offset_2 = r3 << 2;
                                                                 |     r3 = *((r8 + offset_2));
    0x00041cb2 str r3, [sp, 0x28]                                |     var_28h = r3;
                                                                 | label_22:
    0x00041cb4 ldr.w r3, [r8, 0x38]                              |     r3 = *((r8 + 0x38));
    0x00041cb8 add.w r2, sl, 2                                   |     r2 = sl + 2;
    0x00041cbc ldr.w r1, [r8, 0x3c]                              |     r1 = *((r8 + 0x3c));
    0x00041cc0 str r2, [sp, 0x24]                                |     var_24h = r2;
    0x00041cc2 cmp r2, r3                                        |     
    0x00041cc4 str r1, [sp, 0x18]                                |     var_18h = r1;
                                                                 |     if (r2 > r3) {
    0x00041cc6 bgt.w 0x41f90                                     |         goto label_55;
                                                                 |     }
    0x00041cca subs r3, r3, r2                                   |     r3 -= r2;
    0x00041ccc str.w r3, [r8, 0x38]                              |     __asm ("str.w r3, [r8, 0x38]");
    0x00041cd0 mov r3, r2                                        |     r3 = r2;
    0x00041cd2 add r3, r1                                        |     r3 += r1;
    0x00041cd4 str.w r3, [r8, 0x3c]                              |     __asm ("str.w r3, [r8, 0x3c]");
                                                                 | label_18:
    0x00041cd8 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00041cda add.w fp, sl, r3                                  |     
    0x00041cde ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00041ce0 add.w r4, fp, 1                                   |     r4 += arg_1h;
    0x00041ce4 cmp r3, 8                                         |     
                                                                 |     if (r3 == 8) {
    0x00041ce6 beq.w 0x42146                                     |         goto label_56;
                                                                 |     }
    0x00041cea mov r3, r7                                        |     r3 = r7;
    0x00041cec mov r2, r6                                        |     r2 = r6;
    0x00041cee movs r1, 0x30                                     |     r1 = 0x30;
    0x00041cf0 mov r0, r5                                        |     r0 = r5;
    0x00041cf2 str r4, [sp]                                      |     *(sp) = r4;
    0x00041cf4 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00041cf8 cmp.w sl, 0                                       |     
    0x00041cfc itt gt                                            |     
                                                                 |     if (sl <= 0) {
    0x00041cfe movgt r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (sl <= 0) {
    0x00041d00 strgt r3, [sp, 0x1c]                              |         var_1ch = r3;
                                                                 |     }
                                                                 |     if (sl <= 0) {
    0x00041d02 ble.w 0x421bc                                     |         goto label_57;
                                                                 |     }
                                                                 | label_27:
    0x00041d06 ldr r4, [sp, 0x18]                                |     r4 = var_18h;
    0x00041d08 movs r7, 0                                        |     r7 = 0;
    0x00041d0a mov sl, r7                                        |     sl = r7;
                                                                 |     do {
    0x00041d0c ldr.w r3, [sb, 4]                                 |         r3 = *((sb + 4));
    0x00041d10 movs r1, 0x22                                     |         r1 = 0x22;
    0x00041d12 mov r0, r5                                        |         r0 = r5;
    0x00041d14 add r3, r7                                        |         r3 += r7;
    0x00041d16 adds r7, 0x14                                     |         r7 += 0x14;
    0x00041d18 ldrh r2, [r3, 0x10]                               |         r2 = *((r3 + 0x10));
    0x00041d1a mov r3, r4                                        |         r3 = r4;
    0x00041d1c str.w sl, [sp]                                    |         __asm ("str.w sl, [sp]");
    0x00041d20 adds r4, 1                                        |         r4++;
    0x00041d22 add r2, r6                                        |         r2 += r6;
    0x00041d24 subs r2, 1                                        |         r2--;
    0x00041d26 bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00041d2a cmp fp, r4                                        |         
    0x00041d2c bne 0x41d0c                                       |         
                                                                 |     } while (fp != r4);
                                                                 | label_28:
    0x00041d2e ldr r7, [sp, 0x2c]                                |     r7 = var_2ch;
    0x00041d30 movs r4, 0                                        |     r4 = 0;
    0x00041d32 mov r3, fp                                        |     r3 = fp;
    0x00041d34 movs r1, 0x45                                     |     r1 = 0x45;
    0x00041d36 mov r0, r5                                        |     r0 = r5;
    0x00041d38 str r4, [sp]                                      |     *(sp) = r4;
    0x00041d3a mov r2, r7                                        |     r2 = r7;
    0x00041d3c bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00041d40 ldr r6, [sp, 0x28]                                |     r6 = var_28h;
    0x00041d42 movs r1, 0x30                                     |     r1 = 0x30;
    0x00041d44 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00041d46 mov r0, r5                                        |     r0 = r5;
    0x00041d48 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00041d4a str r6, [sp]                                      |     *(sp) = r6;
    0x00041d4c bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00041d50 mov r3, r6                                        |     r3 = r6;
    0x00041d52 mov r2, r7                                        |     r2 = r7;
    0x00041d54 movs r1, 0x6c                                     |     r1 = 0x6c;
    0x00041d56 mov r0, r5                                        |     r0 = r5;
    0x00041d58 str r4, [sp]                                      |     *(sp) = r4;
    0x00041d5a bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00041d5e ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
                                                                 |     if (r3 != 0) {
    0x00041d60 cbz r3, 0x41d7e                                   |         
    0x00041d62 ldr r2, [r5, 0x20]                                |         r2 = *((r5 + 0x20));
    0x00041d64 ldr r3, [sp, 0x1c]                                |         r3 = var_1ch;
    0x00041d66 cmp r3, r2                                        |         
    0x00041d68 ittt lo                                           |         
                                                                 |         if (r3 >= r2) {
    0x00041d6a ldrlo r1, [r5, 4]                                 |             r1 = *((r5 + 4));
                                                                 |         }
                                                                 |         if (r3 >= r2) {
    0x00041d6c addlo r3, r3, r3, lsl 2                           |             r3 += (r3 << 2);
                                                                 |         }
                                                                 |         if (r3 < r2) {
    0x00041d70 add.w r1, r1, r3, lsl 2                           |             r1 += (r3 << 2);
                                                                 |         }
    0x00041d74 ldr r3, [r5, 0x18]                                |         r3 = *((r5 + 0x18));
    0x00041d76 it lo                                             |         
                                                                 |         if (r3 >= r2) {
    0x00041d78 strlo r2, [r1, 8]                                 |             *((r1 + 8)) = r2;
                                                                 |         }
    0x00041d7a subs r2, 1                                        |         r2--;
    0x00041d7c str r2, [r3, 0x58]                                |         *((r3 + 0x58)) = r2;
                                                                 |     }
                                                                 | label_30:
    0x00041d7e ldr r4, [sp, 0x28]                                |     r4 = var_28h;
                                                                 |     if (r4 == 0) {
    0x00041d80 cbz r4, 0x41dae                                   |         goto label_29;
                                                                 |     }
    0x00041d82 ldrb.w r0, [r8, 0x13]                             |     r0 = *((r8 + 0x13));
    0x00041d86 cmp r0, 7                                         |     
                                                                 |     if (r0 > 7) {
    0x00041d88 bhi 0x41dae                                       |         goto label_29;
                                                                 |     }
    0x00041d8a add.w r3, r8, 0x74                                |     r3 = r8 + 0x74;
    0x00041d8e add.w r1, r8, 0x13c                               |     r1 = r8 + 0x13c;
                                                                 |     do {
    0x00041d92 ldr r2, [r3, 0xc]                                 |         r2 = *((r3 + 0xc));
    0x00041d94 cmp r4, r2                                        |         
                                                                 |         if (r4 == r2) {
    0x00041d96 beq.w 0x421b6                                     |             goto label_58;
                                                                 |         }
    0x00041d9a adds r3, 0x14                                     |         r3 += 0x14;
    0x00041d9c cmp r3, r1                                        |         
    0x00041d9e bne 0x41d92                                       |         
                                                                 |     } while (r3 != r1);
    0x00041da0 adds r3, r0, 1                                    |     r3 = r0 + 1;
    0x00041da2 adds r0, 6                                        |     r0 += 6;
    0x00041da4 strb.w r3, [r8, 0x13]                             |     *((r8 + 0x13)) = r3;
    0x00041da8 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00041daa str.w r3, [r8, r0, lsl 2]                         |     __asm ("str.w r3, [r8, r0, lsl 2]");
                                                                 | label_29:
    0x00041dae ldr r4, [sp, 0x24]                                |     r4 = var_24h;
    0x00041db0 mov r0, r8                                        |     r0 = r8;
    0x00041db2 ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x00041db4 mov r2, r4                                        |     r2 = r4;
    0x00041db6 bl 0xaea0                                         |     fcn_0000aea0 (r0, r1, r2);
    0x00041dba ldr.w r3, [r8, 0x38]                              |     r3 = *((r8 + 0x38));
    0x00041dbe cmp r4, r3                                        |     
    0x00041dc0 ittt gt                                           |     
                                                                 |     if (r4 <= r3) {
    0x00041dc2 movgt r3, r1                                      |         r3 = r1;
                                                                 |     }
                                                                 |     if (r4 <= r3) {
    0x00041dc4 strgt r4, [r8, 0x38]                              |         *((r8 + 0x38)) = r4;
                                                                 |     }
                                                                 |     if (r4 > r3) {
    0x00041dc8 str.w r3, [r8, 0x3c]                              |         __asm ("str.w r3, [r8, 0x3c]");
                                                                 |     }
    0x00041dcc b 0x41ba6                                         |     goto label_9;
    0x00041dce ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00041dd0 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00041dd2 beq.w 0x420ac                                     |         goto label_59;
                                                                 |     }
    0x00041dd6 ldrb.w r3, [r8, 0x13]                             |     r3 = *((r8 + 0x13));
    0x00041dda cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00041ddc beq.w 0x42112                                     |         goto label_60;
                                                                 |     }
    0x00041de0 subs r3, 1                                        |     r3--;
    0x00041de2 uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x00041de4 strb.w r3, [r8, 0x13]                             |     *((r8 + 0x13)) = r3;
    0x00041de8 adds r3, 6                                        |     r3 += 6;
    0x00041dea ldr.w r4, [r8, r3, lsl 2]                         |     offset_3 = r3 << 2;
                                                                 |     r4 = *((r8 + offset_3));
                                                                 | label_25:
    0x00041dee mov r3, r7                                        |     r3 = r7;
    0x00041df0 mov r2, r6                                        |     r2 = r6;
    0x00041df2 movs r1, 0x30                                     |     r1 = 0x30;
    0x00041df4 mov r0, r5                                        |     r0 = r5;
    0x00041df6 str r4, [sp]                                      |     *(sp) = r4;
    0x00041df8 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00041dfc ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00041dfe mov r3, r4                                        |     r3 = r4;
    0x00041e00 ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x00041e02 mov r0, r8                                        |     r0 = r8;
    0x00041e04 bl 0x416f4                                        |     void (*0x416f4)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3, r4, r5, r6);
    0x00041e08 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00041e0a beq.w 0x41baa                                     |         goto label_7;
                                                                 |     }
    0x00041e0e ldrb.w r0, [r8, 0x13]                             |     r0 = *((r8 + 0x13));
    0x00041e12 cmp r0, 7                                         |     
                                                                 |     if (r0 > 7) {
    0x00041e14 bhi.w 0x41baa                                     |         goto label_7;
                                                                 |     }
    0x00041e18 add.w r3, r8, 0x74                                |     r3 = r8 + 0x74;
    0x00041e1c add.w r1, r8, 0x13c                               |     r1 = r8 + 0x13c;
                                                                 |     do {
    0x00041e20 ldr r2, [r3, 0xc]                                 |         r2 = *((r3 + 0xc));
    0x00041e22 cmp r4, r2                                        |         
                                                                 |         if (r4 == r2) {
    0x00041e24 beq.w 0x421ee                                     |             goto label_61;
                                                                 |         }
    0x00041e28 adds r3, 0x14                                     |         r3 += 0x14;
    0x00041e2a cmp r1, r3                                        |         
    0x00041e2c bne 0x41e20                                       |         
                                                                 |     } while (r1 != r3);
    0x00041e2e adds r3, r0, 1                                    |     r3 = r0 + 1;
    0x00041e30 adds r0, 6                                        |     r0 += 6;
    0x00041e32 strb.w r3, [r8, 0x13]                             |     *((r8 + 0x13)) = r3;
    0x00041e34 adds r0, 0x13                                     |     r0 += 0x13;
    0x00041e36 str.w r4, [r8, r0, lsl 2]                         |     __asm ("str.w r4, [r8, r0, lsl 2]");
    0x00041e3a b 0x41baa                                         |     goto label_7;
                                                                 | label_45:
    0x00041e3c mov r0, r5                                        |     r0 = r5;
    0x00041e3e bl 0x102bc                                        |     fcn_000102bc (r0, r1);
    0x00041e42 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00041e44 ldr r2, [r5, 0x20]                                |     r2 = *((r5 + 0x20));
    0x00041e46 ldr r1, [r3, 8]                                   |     r1 = *((r3 + 8));
    0x00041e48 b 0x41ab0                                         |     goto label_10;
    0x00041e4a ldr.w r3, [fp, 4]                                 |     r3 = *(arg_64h);
    0x00041e4e ldrb.w r4, [sl, 1]                                |     r4 = *((sl + 1));
    0x00041e52 ldr r0, [r3]                                      |     r0 = *(r3);
    0x00041e54 bl 0xb8a4                                         |     r0 = fcn_0000b8a4 (r0);
    0x00041e58 cmp r0, 0                                         |     
    0x00041e5a it ne                                             |     
                                                                 |     if (r0 != 0) {
    0x00041e5c cmpne r4, 0                                       |         __asm ("cmpne r4, 0");
                                                                 |     }
                                                                 |     if (r0 == 0) {
    0x00041e5e beq.w 0x41f7e                                     |         goto label_62;
                                                                 |     }
    0x00041e62 cmp r4, 0x62                                      |     
    0x00041e64 it ls                                             |     
                                                                 |     if (r4 <= 0x62) {
    0x00041e66 cmpls r0, 0x62                                    |         __asm ("cmpls r0, 0x62");
                                                                 |     }
    0x00041e68 ite hi                                            |     
                                                                 |     if (r4 <= 0x62) {
    0x00041e6a movhi r0, 1                                       |         r0 = 1;
                                                                 |     }
                                                                 |     if (r4 > 0x62) {
    0x00041e6c movls r0, 0                                       |         r0 = 0;
                                                                 |     }
    0x00041e6e add.w r3, r0, 0x62                                |     r3 = r0 + 0x62;
                                                                 | label_17:
    0x00041e72 ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x00041e74 strb.w r3, [sl, 1]                                |     *((sl + 1)) = r3;
    0x00041e78 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00041e7a beq.w 0x42030                                     |         goto label_63;
                                                                 |     }
                                                                 | label_49:
    0x00041e7e ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00041e80 mov r3, r6                                        |     r3 = r6;
    0x00041e82 mov r0, r8                                        |     r0 = r8;
    0x00041e84 add sp, 0x3c                                      |     
    0x00041e86 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |     
    0x00041e8a b 0x416f4                                         |     goto label_11;
    0x00041e8c ldrb.w r3, [r8, 0x13]                             |     r3 = *((r8 + 0x13));
    0x00041e90 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00041e92 beq.w 0x420fa                                     |         goto label_64;
                                                                 |     }
    0x00041e96 subs r3, 1                                        |     r3--;
    0x00041e98 uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x00041e9a strb.w r3, [r8, 0x13]                             |     *((r8 + 0x13)) = r3;
    0x00041e9e adds r3, 6                                        |     r3 += 6;
    0x00041ea0 ldr.w r4, [r8, r3, lsl 2]                         |     offset_4 = r3 << 2;
                                                                 |     r4 = *((r8 + offset_4));
                                                                 | label_23:
    0x00041ea4 mov r3, r7                                        |     r3 = r7;
    0x00041ea6 mov r2, r6                                        |     r2 = r6;
    0x00041ea8 movs r1, 0x30                                     |     r1 = 0x30;
    0x00041eaa mov r0, r5                                        |     r0 = r5;
    0x00041eac str r4, [sp]                                      |     *(sp) = r4;
    0x00041eae bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00041eb2 movs r3, 0                                        |     r3 = 0;
    0x00041eb4 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x00041eb6 str r3, [sp]                                      |     *(sp) = r3;
    0x00041eb8 movs r1, 0x6c                                     |     r1 = 0x6c;
    0x00041eba mov r3, r4                                        |     r3 = r4;
    0x00041ebc mov r0, r5                                        |     r0 = r5;
    0x00041ebe bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00041ec2 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00041ec4 beq.w 0x41ba6                                     |         goto label_9;
                                                                 |     }
    0x00041ec8 ldrb.w r0, [r8, 0x13]                             |     r0 = *((r8 + 0x13));
    0x00041ecc cmp r0, 7                                         |     
                                                                 |     if (r0 > 7) {
    0x00041ece bhi.w 0x41ba6                                     |         goto label_9;
                                                                 |     }
    0x00041ed2 add.w r3, r8, 0x74                                |     r3 = r8 + 0x74;
    0x00041ed6 add.w r1, r8, 0x13c                               |     r1 = r8 + 0x13c;
                                                                 |     do {
    0x00041eda ldr r2, [r3, 0xc]                                 |         r2 = *((r3 + 0xc));
    0x00041edc cmp r4, r2                                        |         
                                                                 |         if (r4 == r2) {
    0x00041ede beq.w 0x42198                                     |             goto label_53;
                                                                 |         }
    0x00041ee2 adds r3, 0x14                                     |         r3 += 0x14;
    0x00041ee4 cmp r3, r1                                        |         
    0x00041ee6 bne 0x41eda                                       |         
                                                                 |     } while (r3 != r1);
    0x00041ee8 b 0x41c84                                         |     goto label_12;
                                                                 | label_43:
    0x00041eea ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00041eec ldr r1, [r3, 8]                                   |     r1 = *((r3 + 8));
    0x00041eee ldr r3, [r5, 0x20]                                |     r3 = *((r5 + 0x20));
    0x00041ef0 cmp r1, r3                                        |     
                                                                 |     if (r1 >= r3) {
    0x00041ef2 bge.w 0x41b68                                     |         goto label_13;
                                                                 |     }
    0x00041ef6 mov r0, r5                                        |     r0 = r5;
    0x00041ef8 bl 0x102bc                                        |     fcn_000102bc (r0, r1);
    0x00041efc b 0x41b68                                         |     goto label_13;
                                                                 | label_44:
    0x00041efe ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00041f00 mov r0, r8                                        |     r0 = r8;
    0x00041f02 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x00041f04 ldr r1, [r3, 4]                                   |     r1 = *((r3 + 4));
    0x00041f06 mov r3, r7                                        |     r3 = r7;
    0x00041f08 str r6, [sp]                                      |     *(sp) = r6;
    0x00041f0a bl 0x19334                                        |     fcn_00019334 (r0, r1, r2, r3, r4);
    0x00041f0e ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00041f10 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00041f12 bne.w 0x41b70                                     |         goto label_14;
                                                                 |     }
                                                                 | label_48:
    0x00041f16 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00041f18 ldr r1, [r3, 0xc]                                 |     r1 = *((r3 + 0xc));
    0x00041f1a cmp r1, 0                                         |     
                                                                 |     if (r1 > 0) {
    0x00041f1c ble 0x41f26                                       |         
    0x00041f1e ldr r2, [sp, 0x28]                                |         r2 = var_28h;
    0x00041f20 mov r0, r5                                        |         r0 = r5;
    0x00041f22 bl 0x19b28                                        |         fcn_00019b28 (r0, r1, r2);
    0x00041f24 invalid                                           |         
                                                                 |     }
    0x00041f26 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00041f28 subs r3, 1                                        |     r3--;
    0x00041f2a cmp r3, 0xd                                       |     
                                                                 |     if (r3 > 0xd) {
    0x00041f2c bhi.w 0x41bda                                     |         goto label_15;
                                                                 |     }
    0x00041f30 adr r2, 8                                         |     r2 = 8;
    0x00041f32 ldr.w r3, [r2, r3, lsl 2]                         |     offset_5 = r3 << 2;
                                                                 |     r3 = *((r2 + offset_5));
    0x00041f36 add r2, r3                                        |     r2 += r3;
                                                                 |     /* switch table (14 cases) at 0x41f3c */
    0x00041f38 bx r2                                             |     return uint32_t (*r2)() ();
                                                                 | label_46:
    0x00041f74 ldr r3, [pc, 0x294]                               |     
    0x00041f76 add r3, pc                                        |     
    0x00041f78 add.w r3, r3, 0x324                               |     r3 = 0x844aa;
    0x00041f7c b 0x41ace                                         |     goto label_16;
                                                                 | label_62:
    0x00041f7e orr.w r3, r4, r0                                  |     r3 = r4 | r0;
    0x00041f82 uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x00041f84 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00041f86 beq.w 0x420d0                                     |         goto label_65;
                                                                 |     }
    0x00041f8a adds r3, r4, r0                                   |     r3 = r4 + r0;
    0x00041f8c uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x00041f8e b 0x41e72                                         |     goto label_17;
                                                                 | label_55:
    0x00041f90 ldr.w r3, [r8, 0x48]                              |     r3 = *((r8 + 0x48));
    0x00041f94 adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x00041f96 str r2, [sp, 0x18]                                |     var_18h = r2;
    0x00041f98 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00041f9a add r3, r2                                        |     r3 += r2;
    0x00041f9c str.w r3, [r8, 0x48]                              |     __asm ("str.w r3, [r8, 0x48]");
    0x00041fa0 b 0x41cd8                                         |     goto label_18;
                                                                 | label_52:
    0x00041fa2 ldrb.w r3, [r8, 0x13]                             |     r3 = *((r8 + 0x13));
    0x00041fa6 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00041fa8 beq.w 0x420e0                                     |         goto label_66;
                                                                 |     }
    0x00041fac subs r3, 1                                        |     r3--;
    0x00041fae uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x00041fb0 strb.w r3, [r8, 0x13]                             |     *((r8 + 0x13)) = r3;
    0x00041fb4 adds r3, 6                                        |     r3 += 6;
    0x00041fb6 ldr.w r6, [r8, r3, lsl 2]                         |     offset_6 = r3 << 2;
                                                                 |     r6 = *((r8 + offset_6));
                                                                 | label_21:
    0x00041fba ldr r7, [sp, 0x2c]                                |     r7 = var_2ch;
    0x00041fbc movs r3, 0                                        |     r3 = 0;
    0x00041fbe movs r1, 0x46                                     |     r1 = 0x46;
    0x00041fc0 str r3, [sp]                                      |     *(sp) = r3;
    0x00041fc2 mov r0, r5                                        |     r0 = r5;
    0x00041fc4 mov r3, r6                                        |     r3 = r6;
    0x00041fc6 mov r2, r7                                        |     r2 = r7;
    0x00041fc8 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00041fcc mov r3, r4                                        |     r3 = r4;
    0x00041fce mov r2, r7                                        |     r2 = r7;
    0x00041fd0 movs r1, 0x49                                     |     r1 = 0x49;
    0x00041fd2 mov r0, r5                                        |     r0 = r5;
    0x00041fd4 str r6, [sp]                                      |     *(sp) = r6;
    0x00041fd6 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00041fda ldr r3, [r5, 4]                                   |     r3 = *((r5 + 4));
                                                                 |     if (r3 != 0) {
    0x00041fdc cbz r3, 0x41fee                                   |         
    0x00041fde ldr r2, [r5, 0x20]                                |         r2 = *((r5 + 0x20));
    0x00041fe0 add.w r2, r2, r2, lsl 2                           |         r2 += (r2 << 2);
    0x00041fe4 add.w r3, r3, r2, lsl 2                           |         r3 += (r2 << 2);
    0x00041fe8 movs r2, 8                                        |         r2 = 8;
    0x00041fea strb r2, [r3, -0x11]                              |         *((r3 - 0x11)) = r2;
                                                                 |     }
                                                                 |     if (r6 == 0) {
    0x00041fee cbz r6, 0x4201e                                   |         goto label_67;
                                                                 |     }
    0x00041ff0 ldrb.w r7, [r8, 0x13]                             |     r7 = *((r8 + 0x13));
    0x00041ff4 cmp r7, 7                                         |     
                                                                 |     if (r7 > 7) {
    0x00041ff6 bhi.w 0x41bda                                     |         goto label_15;
                                                                 |     }
    0x00041ffa add.w r3, r8, 0x74                                |     r3 = r8 + 0x74;
    0x00041ffe add.w r1, r8, 0x13c                               |     r1 = r8 + 0x13c;
    0x00042002 mov r2, r3                                        |     r2 = r3;
                                                                 |     do {
    0x00042004 ldr r0, [r2, 0xc]                                 |         r0 = *((r2 + 0xc));
    0x00042006 cmp r6, r0                                        |         
                                                                 |         if (r6 == r0) {
    0x00042008 beq.w 0x421f4                                     |             goto label_68;
                                                                 |         }
    0x0004200c adds r2, 0x14                                     |         r2 += 0x14;
    0x0004200e cmp r2, r1                                        |         
    0x00042010 bne 0x42004                                       |         
                                                                 |     } while (r2 != r1);
    0x00042012 adds r3, r7, 1                                    |     r3 = r7 + 1;
    0x00042014 adds r7, 6                                        |     r7 += 6;
    0x00042016 strb.w r3, [r8, 0x13]                             |     *((r8 + 0x13)) = r3;
    0x0004201a str.w r6, [r8, r7, lsl 2]                         |     __asm ("str.w r6, [r8, r7, lsl 2]");
                                                                 | label_67:
    0x0004201e cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00042020 beq.w 0x41bda                                     |         goto label_15;
                                                                 |     }
    0x00042024 ldrb.w r0, [r8, 0x13]                             |     r0 = *((r8 + 0x13));
    0x00042028 cmp r0, 7                                         |     
                                                                 |     if (r0 < 7) {
    0x0004202a bls.w 0x41c6e                                     |         goto label_19;
                                                                 |     }
    0x0004202e b 0x41bda                                         |     goto label_15;
                                                                 | label_63:
    0x00042030 ldrb.w r3, [r8, 0x13]                             |     r3 = *((r8 + 0x13));
    0x00042034 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00042036 beq 0x420d4                                       |         goto label_69;
                                                                 |     }
    0x00042038 subs r3, 1                                        |     r3--;
    0x0004203a uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x0004203c strb.w r3, [r8, 0x13]                             |     *((r8 + 0x13)) = r3;
    0x00042040 adds r3, 6                                        |     r3 += 6;
    0x00042042 ldr.w r4, [r8, r3, lsl 2]                         |     offset_7 = r3 << 2;
                                                                 |     r4 = *((r8 + offset_7));
                                                                 | label_20:
    0x00042046 movs r7, 1                                        |     r7 = 1;
    0x00042048 add.w r3, sl, 1                                   |     r3 = sl + 1;
    0x0004204c mov r2, r6                                        |     r2 = r6;
    0x0004204e movs r1, 0x30                                     |     r1 = 0x30;
    0x00042050 strd r4, r3, [sp]                                 |     __asm ("strd r4, r3, [sp]");
    0x00042054 mov r0, r5                                        |     r0 = r5;
    0x00042056 mov r3, r7                                        |     r3 = r7;
    0x00042058 str r7, [sp, 8]                                   |     var_8h = r7;
    0x0004205a bl 0x1977c                                        |     fcn_0001977c (r0, r1, r2, r3, r4, r5);
    0x0004205e mov r2, r7                                        |     r2 = r7;
    0x00042060 mov r1, r6                                        |     r1 = r6;
    0x00042062 mov r0, r8                                        |     r0 = r8;
    0x00042064 bl 0xaea0                                         |     fcn_0000aea0 (r0, r1, r2);
    0x00042068 movs r3, 0                                        |     r3 = 0;
    0x0004206a ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x0004206c str r3, [sp]                                      |     *(sp) = r3;
    0x0004206e movs r1, 0x6c                                     |     r1 = 0x6c;
    0x00042070 mov r3, r4                                        |     r3 = r4;
    0x00042072 mov r0, r5                                        |     r0 = r5;
    0x00042074 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00042078 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0004207a beq.w 0x41bda                                     |         goto label_15;
                                                                 |     }
    0x0004207e ldrb.w r0, [r8, 0x13]                             |     r0 = *((r8 + 0x13));
    0x00042082 cmp r0, 7                                         |     
                                                                 |     if (r0 > 7) {
    0x00042084 bhi.w 0x41bda                                     |         goto label_15;
                                                                 |     }
    0x00042088 add.w r3, r8, 0x74                                |     r3 = r8 + 0x74;
    0x0004208c add.w r1, r8, 0x13c                               |     r1 = r8 + 0x13c;
                                                                 |     do {
    0x00042090 ldr r2, [r3, 0xc]                                 |         r2 = *((r3 + 0xc));
    0x00042092 cmp r4, r2                                        |         
                                                                 |         if (r4 == r2) {
    0x00042094 beq.w 0x42204                                     |             goto label_70;
                                                                 |         }
    0x00042098 adds r3, 0x14                                     |         r3 += 0x14;
    0x0004209a cmp r1, r3                                        |         
    0x0004209c bne 0x42090                                       |         
                                                                 |     } while (r1 != r3);
    0x0004209e adds r3, r0, 1                                    |     r3 = r0 + 1;
    0x000420a0 adds r0, 6                                        |     r0 += 6;
    0x000420a2 strb.w r3, [r8, 0x13]                             |     *((r8 + 0x13)) = r3;
    0x000420a6 str.w r4, [r8, r0, lsl 2]                         |     __asm ("str.w r4, [r8, r0, lsl 2]");
    0x000420aa b 0x41bda                                         |     goto label_15;
                                                                 | label_59:
    0x000420ac ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x000420ae cmp r3, 0xd                                       |     
    0x000420b0 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r3 == 0xd) {
    0x000420b4 beq 0x4219e                                       |         goto label_71;
                                                                 |     }
    0x000420b6 mov r2, r6                                        |     r2 = r6;
    0x000420b8 str r3, [sp]                                      |     *(sp) = r3;
    0x000420ba mov r0, r5                                        |     r0 = r5;
    0x000420bc mov r3, r7                                        |     r3 = r7;
    0x000420be movs r1, 0x23                                     |     r1 = 0x23;
    0x000420c0 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000420c4 mov r2, r7                                        |     r2 = r7;
    0x000420c6 mov r1, r6                                        |     r1 = r6;
    0x000420c8 mov r0, r8                                        |     r0 = r8;
    0x000420ca bl 0xaea0                                         |     fcn_0000aea0 (r0, r1, r2);
    0x000420ce b 0x41bda                                         |     goto label_15;
                                                                 | label_65:
    0x000420d0 movs r3, 0x62                                     |     r3 = 0x62;
    0x000420d2 b 0x41e72                                         |     goto label_17;
                                                                 | label_69:
    0x000420d4 ldr.w r4, [r8, 0x48]                              |     r4 = *((r8 + 0x48));
    0x000420d8 adds r4, 1                                        |     r4++;
    0x000420da str.w r4, [r8, 0x48]                              |     __asm ("str.w r4, [r8, 0x48]");
    0x000420de b 0x42046                                         |     goto label_20;
                                                                 | label_66:
    0x000420e0 ldr.w r6, [r8, 0x48]                              |     r6 = *((r8 + 0x48));
    0x000420e4 adds r6, 1                                        |     r6++;
    0x000420e6 str.w r6, [r8, 0x48]                              |     __asm ("str.w r6, [r8, 0x48]");
    0x000420ea b 0x41fba                                         |     goto label_21;
                                                                 | label_54:
    0x000420ec ldr.w r3, [r8, 0x48]                              |     r3 = *((r8 + 0x48));
    0x000420f0 adds r3, 1                                        |     r3++;
    0x000420f2 str r3, [sp, 0x28]                                |     var_28h = r3;
    0x000420f4 str.w r3, [r8, 0x48]                              |     __asm ("str.w r3, [r8, 0x48]");
    0x000420f8 b 0x41cb4                                         |     goto label_22;
                                                                 | label_64:
    0x000420fa ldr.w r4, [r8, 0x48]                              |     r4 = *((r8 + 0x48));
    0x000420fe adds r4, 1                                        |     r4++;
    0x00042100 str.w r4, [r8, 0x48]                              |     __asm ("str.w r4, [r8, 0x48]");
    0x00042104 b 0x41ea4                                         |     goto label_23;
                                                                 | label_50:
    0x00042106 ldr.w r4, [r8, 0x48]                              |     r4 = *((r8 + 0x48));
    0x0004210a adds r4, 1                                        |     r4++;
    0x0004210c str.w r4, [r8, 0x48]                              |     __asm ("str.w r4, [r8, 0x48]");
    0x00042110 b 0x41c3a                                         |     goto label_24;
                                                                 | label_60:
    0x00042112 ldr.w r4, [r8, 0x48]                              |     r4 = *((r8 + 0x48));
    0x00042116 adds r4, 1                                        |     r4++;
    0x00042118 str.w r4, [r8, 0x48]                              |     __asm ("str.w r4, [r8, 0x48]");
    0x0004211c b 0x41dee                                         |     goto label_25;
                                                                 | label_51:
    0x0004211e ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x00042120 movs r6, 0                                        |     r6 = 0;
    0x00042122 ldr r3, [r5, 0x20]                                |     r3 = *((r5 + 0x20));
    0x00042124 movs r1, 0x43                                     |     r1 = 0x43;
    0x00042126 mov r0, r5                                        |     r0 = r5;
    0x00042128 str r4, [sp]                                      |     *(sp) = r4;
    0x0004212a adds r7, r2, 1                                    |     r7 = r2 + 1;
    0x0004212c str r6, [sp, 4]                                   |     var_4h = r6;
    0x0004212e mov r2, r7                                        |     r2 = r7;
    0x00042130 adds r3, 4                                        |     r3 += 4;
    0x00042132 bl 0x19a3c                                        |     fcn_00019a3c (r0, r1, r2, r3, r4, r5);
    0x00042136 mov r2, r7                                        |     r2 = r7;
    0x00042138 mov r3, r4                                        |     r3 = r4;
    0x0004213a movs r1, 0x6c                                     |     r1 = 0x6c;
    0x0004213c mov r0, r5                                        |     r0 = r5;
    0x0004213e str r6, [sp]                                      |     *(sp) = r6;
    0x00042140 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00042144 b 0x41c50                                         |     goto label_26;
                                                                 | label_56:
    0x00042146 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00042148 movs r1, 0x43                                     |     r1 = 0x43;
    0x0004214a mov r0, r5                                        |     r0 = r5;
    0x0004214c strd r6, r7, [sp]                                 |     __asm ("strd r6, r7, [sp]");
    0x00042150 adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x00042152 movs r3, 0                                        |     r3 = 0;
    0x00042154 str r2, [sp, 0x34]                                |     var_34h = r2;
    0x00042156 bl 0x19a3c                                        |     fcn_00019a3c (r0, r1, r2, r3, r4, r5);
    0x0004215a mov r3, r7                                        |     r3 = r7;
    0x0004215c mov r2, r6                                        |     r2 = r6;
    0x0004215e movs r1, 0x30                                     |     r1 = 0x30;
    0x00042160 str r0, [sp, 0x1c]                                |     var_1ch = r0;
    0x00042162 str r4, [sp]                                      |     *(sp) = r4;
    0x00042164 mov r0, r5                                        |     r0 = r5;
    0x00042166 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0004216a movs r1, 0                                        |     r1 = 0;
    0x0004216c mov r3, r4                                        |     r3 = r4;
    0x0004216e str r1, [sp]                                      |     *(sp) = r1;
    0x00042170 mov r0, r5                                        |     r0 = r5;
    0x00042172 ldr r2, [sp, 0x34]                                |     r2 = var_34h;
    0x00042174 movs r1, 0x6c                                     |     r1 = 0x6c;
    0x00042176 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0004217a ldr r3, [r5, 4]                                   |     r3 = *((r5 + 4));
                                                                 |     if (r3 != 0) {
    0x0004217c cbz r3, 0x4218e                                   |         
    0x0004217e ldr r2, [r5, 0x20]                                |         r2 = *((r5 + 0x20));
    0x00042180 add.w r2, r2, r2, lsl 2                           |         r2 += (r2 << 2);
    0x00042184 add.w r3, r3, r2, lsl 2                           |         r3 += (r2 << 2);
    0x00042188 movs r2, 0x10                                     |         r2 = 0x10;
    0x0004218a strb r2, [r3, -0x11]                              |         *((r3 - 0x11)) = r2;
                                                                 |     }
    0x0004218e cmp.w sl, 0                                       |     
                                                                 |     if (sl > 0) {
    0x00042192 bgt.w 0x41d06                                     |         goto label_27;
                                                                 |     }
    0x00042196 b 0x41d2e                                         |     goto label_28;
                                                                 | label_53:
    0x00042198 movs r2, 1                                        |     r2 = 1;
    0x0004219a strb r2, [r3, 6]                                  |     *((r3 + 6)) = r2;
    0x0004219c b 0x41ba6                                         |     goto label_9;
                                                                 | label_71:
    0x0004219e ldr.w r2, [sl, 4]                                 |     r2 = *((sl + 4));
    0x000421a2 movs r1, 0x16                                     |     r1 = 0x16;
    0x000421a4 mov r0, r5                                        |     r0 = r5;
    0x000421a6 str r3, [sp]                                      |     *(sp) = r3;
    0x000421a8 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000421ac b 0x41bda                                         |     goto label_15;
                                                                 | label_40:
    0x000421ae movs r3, 0                                        |     r3 = 0;
    0x000421b0 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x000421b2 b.w 0x419a8                                       |     goto label_6;
                                                                 | label_58:
    0x000421b6 movs r2, 1                                        |     r2 = 1;
    0x000421b8 strb r2, [r3, 6]                                  |     *((r3 + 6)) = r2;
    0x000421ba b 0x41dae                                         |     goto label_29;
                                                                 | label_57:
    0x000421bc ldr r7, [sp, 0x2c]                                |     r7 = var_2ch;
    0x000421be movs r4, 0                                        |     r4 = 0;
    0x000421c0 mov r3, fp                                        |     r3 = fp;
    0x000421c2 movs r1, 0x45                                     |     r1 = 0x45;
    0x000421c4 mov r0, r5                                        |     r0 = r5;
    0x000421c6 str r4, [sp]                                      |     *(sp) = r4;
    0x000421c8 mov r2, r7                                        |     r2 = r7;
    0x000421ca bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000421ce ldr r6, [sp, 0x28]                                |     r6 = var_28h;
    0x000421d0 movs r1, 0x30                                     |     r1 = 0x30;
    0x000421d2 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x000421d4 mov r0, r5                                        |     r0 = r5;
    0x000421d6 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x000421d8 str r6, [sp]                                      |     *(sp) = r6;
    0x000421da bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000421de mov r2, r7                                        |     r2 = r7;
    0x000421e0 mov r3, r6                                        |     r3 = r6;
    0x000421e2 movs r1, 0x6c                                     |     r1 = 0x6c;
    0x000421e4 mov r0, r5                                        |     r0 = r5;
    0x000421e6 str r4, [sp]                                      |     *(sp) = r4;
    0x000421e8 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000421ec b 0x41d7e                                         |     goto label_30;
                                                                 | label_61:
    0x000421ee movs r2, 1                                        |     r2 = 1;
    0x000421f0 strb r2, [r3, 6]                                  |     *((r3 + 6)) = r2;
    0x000421f2 b 0x41baa                                         |     goto label_7;
                                                                 | label_68:
    0x000421f4 movs r0, 1                                        |     r0 = 1;
    0x000421f6 strb r0, [r2, 6]                                  |     *((r2 + 6)) = r0;
    0x000421f8 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x000421fa beq.w 0x41bda                                     |         goto label_15;
                                                                 |     }
    0x000421fe ldrb.w r0, [r8, 0x13]                             |     r0 = *((r8 + 0x13));
    0x00042202 b 0x41c76                                         |     goto label_31;
                                                                 | label_70:
    0x00042204 movs r2, 1                                        |     r2 = 1;
    0x00042206 strb r2, [r3, 6]                                  |     *((r3 + 6)) = r2;
    0x00042208 b 0x41bda                                         |     goto label_15;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x42210 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00042210 ()                                      | void fcn_00042210 (int16_t arg_4h, int16_t arg_18h, int16_t arg_20h, int16_t arg1, int16_t arg2) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x00042210 ldr r3, [r1, 0x2c]                                |     r3 = *((r1 + 0x2c));
    0x00042212 mov.w r2, 1                                       |     r2 = 1;
    0x00042216 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x0004221a mov sb, r1                                        |     sb = r1;
    0x0004221c ldr.w fp, [r0, 8]                                 |     fp = *((r0 + 8));
    0x00042220 sub sp, 0x24                                      |     
    0x00042222 cmp r3, 0                                         |     
    0x00042224 mov r4, r0                                        |     r4 = r0;
    0x00042226 ldr r6, [r1, 0x28]                                |     r6 = *((r1 + 0x28));
    0x00042228 strb r2, [r1]                                     |     *(r1) = r2;
                                                                 |     if (r3 <= 0) {
    0x0004222a ble.w 0x423be                                     |         goto label_5;
                                                                 |     }
    0x0004222e movs r3, 0                                        |     r3 = 0;
    0x00042230 adds r6, 0x10                                     |     r6 += 0x10;
    0x00042232 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00042234 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00042236 str r1, [sp, 0x18]                                |     var_18h = r1;
    0x00042238 b 0x4224c                                         |     
                                                                 |     while (r3 == 0) {
                                                                 | label_0:
    0x0004223a ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x0004223c adds r6, 0x10                                     |         r6 += 0x10;
    0x0004223e ldr r2, [sp, 0x10]                                |         r2 = var_10h;
    0x00042240 ldr r3, [r3, 0x2c]                                |         r3 = *((r3 + 0x2c));
    0x00042242 adds r2, 1                                        |         r2++;
    0x00042244 str r2, [sp, 0x10]                                |         var_10h = r2;
    0x00042246 cmp r3, r2                                        |         
                                                                 |         if (r3 <= r2) {
    0x00042248 ble.w 0x423b8                                     |             goto label_6;
                                                                 |         }
    0x0004224c ldr r3, [r6, -0x10]                               |         r3 = *((r6 - 0x10));
    0x00042250 ldr.w r8, [r3, 0x14]                              |         r8 = *((r3 + 0x14));
    0x00042254 cmp.w r8, 0                                       |         
                                                                 |         if (r8 == 0) {
    0x00042258 beq 0x4233e                                       |             goto label_7;
                                                                 |         }
    0x0004225a ldrd r3, r7, [r4, 0x38]                           |         __asm ("ldrd r3, r7, [r4, 0x38]");
    0x0004225e mov r0, r4                                        |         r0 = r4;
    0x00042260 ldr.w r5, [r8]                                    |         r5 = *(r8);
    0x00042264 cmp r5, r3                                        |         
    0x00042266 iteee gt                                          |         
                                                                 |         if (r5 <= r3) {
    0x00042268 ldrgt r3, [r4, 0x48]                              |             r3 = *((r4 + 0x48));
                                                                 |         }
                                                                 |         if (r5 > r3) {
    0x0004226a suble r3, r3, r5                                  |             r3 -= r5;
                                                                 |         }
                                                                 |         if (r5 > r3) {
    0x0004226c strle r3, [r4, 0x38]                              |             *((r4 + 0x38)) = r3;
                                                                 |         }
                                                                 |         if (r5 > r3) {
    0x0004226e addle r3, r5, r7                                  |             r3 = r5 + r7;
                                                                 |         }
    0x00042270 iteee le                                          |         
                                                                 |         if (r5 > r3) {
    0x00042272 strle r3, [r4, 0x3c]                              |             *((r4 + 0x3c)) = r3;
                                                                 |         }
                                                                 |         if (r5 <= r3) {
    0x00042274 addgt r7, r3, 1                                   |             r7 = r3 + 1;
                                                                 |         }
                                                                 |         if (r5 <= r3) {
    0x00042276 addgt r3, r3, r5                                  |             r3 += r5;
                                                                 |         }
                                                                 |         if (r5 <= r3) {
    0x00042278 strgt r3, [r4, 0x48]                              |             *((r4 + 0x48)) = r3;
                                                                 |         }
    0x0004227a movs r3, 1                                        |         r3 = 1;
    0x0004227c ldrd r1, r2, [r8]                                 |         __asm ("ldrd r1, r2, [r8]");
    0x00042280 str r3, [sp]                                      |         *(sp) = r3;
    0x00042282 mov r3, r7                                        |         r3 = r7;
    0x00042284 bl 0x415b0                                        |         fcn_000415b0 (r0, r1, r2, r3, r4, r5);
    0x00042288 uxtb r3, r5                                       |         r3 = (int8_t) r5;
    0x0004228a str r3, [sp, 0x14]                                |         var_14h = r3;
                                                                 | label_1:
    0x0004228c ldr r3, [r6, -0x4]                                |         r3 = *((r6 - 0x4));
    0x00042290 cmp r3, 0                                         |         
    0x00042292 itt lt                                            |         
                                                                 |         if (r3 >= 0) {
    0x00042294 movlt r3, 0                                       |             r3 = 0;
                                                                 |         }
                                                                 |         if (r3 >= 0) {
    0x00042296 strlt r3, [sp, 0xc]                               |             var_ch = r3;
                                                                 |         }
                                                                 |         if (r3 >= 0) {
    0x00042298 blt 0x422b4                                       |             
    0x0004229a ldr.w r0, [fp, 0x18]                              |             r0 = *(arg_18h);
    0x0004229e bl 0x19ed0                                        |             fcn_00019ed0 (r0);
    0x000422a2 ldr r1, [r6, -0x4]                                |             r1 = *((r6 - 0x4));
    0x000422a6 mov r2, r0                                        |             r2 = r0;
    0x000422a8 str r0, [sp, 0xc]                                 |             var_ch = r0;
    0x000422aa movs r3, 1                                        |             r3 = 1;
    0x000422ac mov r0, r4                                        |             r0 = r4;
    0x000422ae str r7, [sp]                                      |             *(sp) = r7;
    0x000422b0 bl 0x19334                                        |             fcn_00019334 (r0, r1, r2, r3, r4);
                                                                 |         }
    0x000422b4 ldr sl, [r6, -0xc]                                |         sl = *((r6 - 0xc));
    0x000422b8 ldrh.w r3, [sl, 2]                                |         r3 = *((sl + 2));
    0x000422bc lsls r3, r3, 0x1a                                 |         r3 <<= 0x1a;
                                                                 |         if (r3 < r3) {
    0x000422be bmi 0x42348                                       |             goto label_8;
                                                                 |         }
                                                                 | label_2:
    0x000422c0 ldr r3, [r6, -0x8]                                |         r3 = *((r6 - 0x8));
    0x000422c4 movs r2, 0                                        |         r2 = 0;
    0x000422c6 movs r1, 0xa                                      |         r1 = 0xa;
    0x000422c8 mov r0, fp                                        |         r0 = fp;
    0x000422ca str r3, [sp]                                      |         *(sp) = r3;
    0x000422cc mov r3, r7                                        |         r3 = r7;
    0x000422ce bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000422d2 mvn r3, 4                                         |         r3 = ~4;
    0x000422d6 mov r1, r0                                        |         r1 = r0;
    0x000422d8 mov r2, sl                                        |         r2 = sl;
    0x000422da mov r0, fp                                        |         r0 = fp;
    0x000422dc bl 0x1021c                                        |         fcn_0001021c (r0, r1, r2, r3);
    0x000422e0 ldr.w r3, [fp, 4]                                 |         r3 = *(arg_4h);
                                                                 |         if (r3 != 0) {
    0x000422e4 cbz r3, 0x422f8                                   |             
    0x000422e6 ldr.w r2, [fp, 0x20]                              |             r2 = *(arg_20h);
    0x000422ea add.w r2, r2, r2, lsl 2                           |             r2 += (r2 << 2);
    0x000422ee add.w r3, r3, r2, lsl 2                           |             r3 += (r2 << 2);
    0x000422f2 ldr r2, [sp, 0x14]                                |             r2 = var_14h;
    0x000422f4 strb r2, [r3, -0x11]                              |             *((r3 - 0x11)) = r2;
                                                                 |         }
    0x000422f8 mov r1, r7                                        |         r1 = r7;
    0x000422fa mov r0, r4                                        |         r0 = r4;
    0x000422fc mov r2, r5                                        |         r2 = r5;
    0x000422fe bl 0xaea0                                         |         fcn_0000aea0 (r0, r1, r2);
    0x00042302 mov r2, r5                                        |         r2 = r5;
    0x00042304 bl 0xaea0                                         |         fcn_0000aea0 (r0, r1, r2);
    0x00042308 ldr r3, [r4, 0x38]                                |         r3 = *((r4 + 0x38));
    0x0004230a cmp r5, r3                                        |         
    0x0004230c ldr r3, [sp, 0xc]                                 |         r3 = var_ch;
    0x0004230e it gt                                             |         
                                                                 |         if (r5 > r3) {
    0x00042310 strdgt r5, r7, [r4, 0x38]                         |             __asm ("strdgt r5, r7, [r4, 0x38]");
                                                                 |         }
    0x00042314 cmp r3, 0                                         |         
    0x00042316 beq 0x4223a                                       |         
                                                                 |     }
    0x00042318 mvns.w sb, r3                                     |     sb = ~r3;
    0x0004231c ldr.w r2, [fp, 0x18]                              |     r2 = *(arg_18h);
                                                                 |     if (sb >= r3) {
    0x00042320 bmi 0x4232e                                       |         
    0x00042322 ldr r3, [r2, 0x70]                                |         r3 = *((r2 + 0x70));
                                                                 |         if (r3 == 0) {
    0x00042324 cbz r3, 0x4232e                                   |             goto label_9;
                                                                 |         }
    0x00042326 ldr.w r1, [fp, 0x20]                              |         r1 = *(arg_20h);
    0x0004232a str.w r1, [r3, sb, lsl 2]                         |         __asm ("str.w r1, [r3, sb, lsl 2]");
                                                                 |     }
                                                                 | label_9:
    0x0004232e ldr.w r3, [fp, 0x20]                              |     r3 = *(arg_20h);
    0x00042332 mov r0, r4                                        |     r0 = r4;
    0x00042334 subs r3, 1                                        |     r3--;
    0x00042336 str r3, [r2, 0x58]                                |     *((r2 + 0x58)) = r3;
    0x00042338 bl 0xae68                                         |     fcn_0000ae68 (r0);
    0x0004233c b 0x4223a                                         |     goto label_0;
                                                                 | label_7:
    0x0004233e mov r7, r8                                        |     r7 = r8;
    0x00042340 mov r5, r8                                        |     r5 = r8;
    0x00042342 str.w r8, [sp, 0x14]                              |     __asm ("str.w r8, [var_14h]");
    0x00042346 b 0x4228c                                         |     goto label_1;
                                                                 | label_8:
    0x00042348 ldr.w r3, [r8, 4]                                 |     r3 = *((r8 + 4));
    0x0004234c cmp r5, 0                                         |     
    0x0004234e itt gt                                            |     
                                                                 |     if (r5 <= 0) {
    0x00042350 movgt sb, 0                                       |         sb = 0;
                                                                 |     }
                                                                 |     if (r5 > 0) {
    0x00042354 add.w sl, r3, 0x14                                |         sl = r3 + 0x14;
                                                                 |     }
                                                                 |     if (r5 <= 0) {
    0x00042358 ble 0x4241e                                       |         goto label_10;
                                                                 |     }
                                                                 |     do {
    0x0004235a ldr r1, [sl, -0x14]                               |         r1 = *((sl - 0x14));
    0x0004235e mov r0, r4                                        |         r0 = r4;
    0x00042360 bl 0x22e78                                        |         fcn_00022e78 (r0, r1);
    0x00042364 add.w sb, sb, 1                                   |         sb++;
    0x00042368 clz r3, r0                                        |         r3 &= r0;
    0x0004236c lsrs r3, r3, 5                                    |         r3 >>= 5;
    0x0004236e cmp r5, sb                                        |         
    0x00042370 it le                                             |         
                                                                 |         if (r5 > sb) {
    0x00042372 movle r3, 0                                       |             r3 = 0;
                                                                 |         }
    0x00042374 add.w sl, sl, 0x14                                |         sl += 0x14;
    0x00042378 cmp r3, 0                                         |         
    0x0004237a bne 0x4235a                                       |         
                                                                 |     } while (r3 != 0);
    0x0004237c mov r8, r0                                        |     r8 = r0;
    0x0004237e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00042380 beq 0x4241e                                       |         goto label_10;
                                                                 |     }
                                                                 | label_3:
    0x00042382 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
                                                                 |     if (r3 == 0) {
    0x00042384 cbnz r3, 0x42396                                  |         
    0x00042386 ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x00042388 ldr r3, [r3, 0x24]                                |         r3 = *((r3 + 0x24));
    0x0004238a str r3, [sp, 0x1c]                                |         var_1ch = r3;
                                                                 |         if (r3 == 0) {
    0x0004238c cbz r3, 0x42396                                   |             goto label_11;
                                                                 |         }
    0x0004238e ldr r3, [r4, 0x48]                                |         r3 = *((r4 + 0x48));
    0x00042390 adds r3, 1                                        |         r3++;
    0x00042392 str r3, [sp, 0x1c]                                |         var_1ch = r3;
    0x00042394 str r3, [r4, 0x48]                                |         *((r4 + 0x48)) = r3;
                                                                 |     }
                                                                 | label_11:
    0x00042396 movs r3, 0                                        |     r3 = 0;
    0x00042398 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x0004239a movs r1, 0x24                                     |     r1 = 0x24;
    0x0004239c str r3, [sp]                                      |     *(sp) = r3;
    0x0004239e mov r0, fp                                        |     r0 = fp;
    0x000423a0 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000423a4 mov r2, r8                                        |     r2 = r8;
    0x000423a6 mov r1, r0                                        |     r1 = r0;
    0x000423a8 mvn r3, 3                                         |     r3 = ~3;
    0x000423ac mov r0, fp                                        |     r0 = fp;
    0x000423ae bl 0x1021c                                        |     fcn_0001021c (r0, r1, r2, r3);
    0x000423b2 ldr sl, [r6, -0xc]                                |     sl = *((r6 - 0xc));
    0x000423b6 b 0x422c0                                         |     goto label_2;
                                                                 | label_6:
    0x000423b8 ldrd sb, r3, [sp, 0x18]                           |     __asm ("ldrd sb, r3, [var_1ch]");
                                                                 |     if (r3 != 0) {
    0x000423bc cbnz r3, 0x42426                                  |         goto label_12;
                                                                 |     }
                                                                 | label_5:
    0x000423be movs r7, 0                                        |     r7 = 0;
                                                                 | label_4:
    0x000423c0 mov r0, r4                                        |     r0 = r4;
    0x000423c2 bl 0xae68                                         |     fcn_0000ae68 (r0);
    0x000423c6 ldr.w r3, [sb, 0x24]                              |     r3 = *((sb + 0x24));
    0x000423ca ldr.w r5, [sb, 0x1c]                              |     r5 = *((sb + 0x1c));
    0x000423ce cmp r3, 0                                         |     
    0x000423d0 it gt                                             |     
                                                                 |     if (r3 <= 0) {
    0x000423d2 movgt r6, 0                                       |         r6 = 0;
                                                                 |     }
                                                                 |     if (r3 <= 0) {
    0x000423d4 ble 0x423ec                                       |         goto label_13;
                                                                 |     }
                                                                 |     do {
    0x000423d6 ldrd r2, r1, [r5, 0x10]                           |         __asm ("ldrd r2, r1, [r5, 0x10]");
    0x000423da mov r0, r4                                        |         r0 = r4;
    0x000423dc bl 0x3c4a8                                        |         fcn_0003c4a8 (r0, r1, r2);
    0x000423e0 ldr.w r3, [sb, 0x24]                              |         r3 = *((sb + 0x24));
    0x000423e4 adds r6, 1                                        |         r6++;
    0x000423e6 adds r5, 0x18                                     |         r5 += 0x18;
    0x000423e8 cmp r3, r6                                        |         
    0x000423ea bgt 0x423d6                                       |         
                                                                 |     } while (r3 > r6);
                                                                 | label_13:
    0x000423ec movs r3, 0                                        |     r3 = 0;
    0x000423ee mov r0, r4                                        |     r0 = r4;
    0x000423f0 strb.w r3, [sb]                                   |     *(sb) = r3;
    0x000423f4 bl 0xae68                                         |     fcn_0000ae68 (r0);
                                                                 |     if (r7 != 0) {
    0x000423f8 cbz r7, 0x42418                                   |         
    0x000423fa ldr.w r3, [fp, 0x20]                              |         r3 = *(arg_20h);
    0x000423fe cmp r7, r3                                        |         
    0x00042400 itttt lo                                          |         
                                                                 |         if (r7 >= r3) {
    0x00042402 ldrlo r2, [fp, 4]                                 |             r2 = *(arg_4h);
                                                                 |         }
                                                                 |         if (r7 >= r3) {
    0x00042406 addlo r7, r7, r7, lsl 2                           |             r7 += (r7 << 2);
                                                                 |         }
                                                                 |         if (r7 < r3) {
    0x0004240a add.w r2, r2, r7, lsl 2                           |             r2 += (r7 << 2);
                                                                 |         }
                                                                 |         if (r7 < r3) {
    0x0004240e str r3, [r2, 8]                                   |             *((r2 + 8)) = r3;
                                                                 |         }
    0x00042410 subs r3, 1                                        |         r3--;
    0x00042412 ldr.w r2, [fp, 0x18]                              |         r2 = *(arg_18h);
    0x00042416 str r3, [r2, 0x58]                                |         *((r2 + 0x58)) = r3;
                                                                 |     }
    0x00042418 add sp, 0x24                                      |     
    0x0004241a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_10:
    0x0004241e ldr r3, [r4]                                      |     r3 = *(r4);
    0x00042420 ldr.w r8, [r3, 8]                                 |     r8 = *((r3 + 8));
    0x00042424 b 0x42382                                         |     goto label_3;
                                                                 | label_12:
    0x00042426 movs r3, 0                                        |     r3 = 0;
    0x00042428 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x0004242a movs r1, 0x2c                                     |     r1 = 0x2c;
    0x0004242c mov r0, fp                                        |     r0 = fp;
    0x0004242e str r3, [sp]                                      |     *(sp) = r3;
    0x00042430 bl 0x18bf8                                        |     r0 = fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00042434 mov r7, r0                                        |     r7 = r0;
    0x00042436 b 0x423c0                                         |     goto label_4;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x42438 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00042438 ()                                      | void fcn_00042438 (int16_t arg_8h, int16_t arg_ch, 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_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_0h_2;
                                                                 |     int16_t var_7ch;
                                                                 |     int16_t var_80h;
                                                                 |     int16_t var_84h;
                                                                 |     int32_t var_84h_2;
                                                                 |     int16_t var_90h;
                                                                 |     int16_t var_94h;
                                                                 |     int16_t var_98h;
                                                                 |     int16_t var_9ch;
                                                                 |     int16_t var_a0h;
                                                                 |     int16_t var_a4h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
    0x00042438 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x0004243c mov fp, r2                                        |     
    0x0004243e ldr.w r2, [pc, 0xb0c]                             |     r2 = *(0x00042f4c);
    0x00042442 sub sp, 0xac                                      |     
    0x00042444 mov lr, fp                                        |     lr = fp;
    0x00042446 mov r4, r1                                        |     r4 = r1;
    0x00042448 ldr.w r3, [pc, 0xb04]                             |     
    0x0004244c mov r5, r0                                        |     r5 = r0;
    0x0004244e add r2, pc                                        |     r2 += pc;
    0x00042450 ldr r6, [r1, 0x34]                                |     r6 = *((r1 + 0x34));
    0x00042452 ldr.w sb, [r0]                                    |     sb = *(r0);
    0x00042456 add.w r8, sp, 0x68                                |     r8 += var_68h;
    0x0004245a ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x0004245c mov ip, r8                                        |     
    0x0004245e ldr r7, [r6, 0x30]                                |     r7 = *((r6 + 0x30));
    0x00042460 ldr r3, [r3]                                      |     r3 = *(0x42f50);
    0x00042462 str r3, [sp, 0xa4]                                |     var_a4h = r3;
    0x00042464 mov.w r3, 0                                       |     r3 = 0;
    0x00042468 ldm.w lr!, {r0, r1, r2, r3}                       |     r0 = *(lr!);
                                                                 |     r1 = *((lr! + 4));
                                                                 |     r2 = *((lr! + 8));
                                                                 |     r3 = *((lr! + 12));
    0x0004246c stm.w ip!, {r0, r1, r2, r3}                       |     *(ip!) = r0;
                                                                 |     *((ip! + 4)) = r1;
                                                                 |     *((ip! + 8)) = r2;
                                                                 |     *((ip! + 12)) = r3;
    0x00042470 ldr.w r3, [lr]                                    |     r3 = *(lr);
    0x00042474 str.w r3, [ip]                                    |     __asm ("str.w r3, [ip]");
                                                                 |     if (r7 == 0) {
    0x00042478 cbz r7, 0x424c6                                   |         goto label_39;
                                                                 |     }
    0x0004247a ldrb r3, [r4, 4]                                  |     r3 = *((r4 + 4));
    0x0004247c cmp r3, 0x75                                      |     
                                                                 |     if (r3 == 0x75) {
    0x0004247e beq 0x4254c                                       |         goto label_40;
                                                                 |     }
    0x00042480 cmp r3, 0x76                                      |     
                                                                 |     if (r3 == 0x76) {
    0x00042482 beq 0x4253c                                       |         goto label_41;
                                                                 |     }
    0x00042484 cmp r3, 0x74                                      |     
                                                                 |     if (r3 == 0x74) {
    0x00042486 beq 0x42544                                       |         goto label_42;
                                                                 |     }
    0x00042488 ldr.w r2, [pc, 0xac8]                             |     
    0x0004248c add r2, pc                                        |     r2 = 0x853e4;
                                                                 | label_1:
    0x0004248e ldr.w r1, [pc, 0xac8]                             |     r1 = *(0x00042f58);
    0x00042492 add r1, pc                                        |     r1 += pc;
                                                                 |     do {
                                                                 | label_0:
    0x00042494 mov r0, r5                                        |         r0 = r5;
    0x00042496 movs r7, 1                                        |         r7 = 1;
    0x00042498 bl 0x1ca34                                        |         fcn_0001ca34 (r0);
                                                                 | label_2:
    0x0004249c ldrd r2, r3, [sp, 0x70]                           |         __asm ("ldrd r2, r3, [var_70h]");
    0x000424a0 strd r2, r3, [fp, 8]                              |         __asm ("strd r2, r3, [fp, 8]");
                                                                 | label_3:
    0x000424a4 ldr.w r2, [pc, 0xab4]                             |         
    0x000424a8 ldr.w r3, [pc, 0xaa4]                             |         r3 = *(0x42f50);
    0x000424ac add r2, pc                                        |         r2 = 0x8540c;
    0x000424ae ldr r3, [r2, r3]                                  |         r3 = *(0x8540c);
    0x000424b0 ldr r2, [r3]                                      |         r2 = *(0x8540c);
    0x000424b2 ldr r3, [sp, 0xa4]                                |         r3 = var_a4h;
    0x000424b4 eors r2, r3                                       |         r2 ^= r3;
    0x000424b6 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x000424ba bne.w 0x43640                                     |             goto label_43;
                                                                 |         }
    0x000424be mov r0, r7                                        |         r0 = r7;
    0x000424c0 add sp, 0xac                                      |         
    0x000424c2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_39:
    0x000424c6 ldr.w sl, [r6, 0x3c]                              |         sl = *((r6 + 0x3c));
    0x000424ca cmp.w sl, 0                                       |         
                                                                 |         if (sl == 0) {
    0x000424ce beq 0x424f2                                       |             goto label_44;
                                                                 |         }
    0x000424d0 ldrb r3, [r4, 4]                                  |         r3 = *((r4 + 4));
    0x000424d2 cmp r3, 0x75                                      |         
                                                                 |         if (r3 == 0x75) {
    0x000424d4 beq.w 0x427a8                                     |             goto label_45;
                                                                 |         }
    0x000424d8 cmp r3, 0x76                                      |         
                                                                 |         if (r3 == 0x76) {
    0x000424da beq.w 0x427a0                                     |             goto label_46;
                                                                 |         }
    0x000424de cmp r3, 0x74                                      |         
                                                                 |         if (r3 == 0x74) {
    0x000424e0 beq.w 0x42798                                     |             goto label_47;
                                                                 |         }
    0x000424e4 ldr.w r2, [pc, 0xa78]                             |         
    0x000424e8 add r2, pc                                        |         r2 = 0x8544c;
                                                                 | label_4:
    0x000424ea ldr.w r1, [pc, 0xa78]                             |         r1 = *(0x00042f64);
    0x000424ee add r1, pc                                        |         r1 += pc;
    0x000424f0 b 0x42494                                         |         
                                                                 |     } while (1);
                                                                 | label_44:
    0x000424f2 ldr r3, [r5, 8]                                   |     r3 = *((r5 + 8));
    0x000424f4 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x000424f6 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000424f8 beq.w 0x427e0                                     |         goto label_48;
                                                                 |     }
                                                                 | label_6:
    0x000424fc ldrb.w r3, [sp, 0x68]                             |     r3 = var_68h;
    0x00042500 cmp r3, 0xc                                       |     
                                                                 |     if (r3 == 0xc) {
    0x00042502 beq.w 0x427b0                                     |         goto label_49;
                                                                 |     }
                                                                 | label_5:
    0x00042506 ldr r3, [r4]                                      |     r3 = *(r4);
    0x00042508 ldr r7, [r3]                                      |     r7 = *(r3);
    0x0004250a ldr r3, [r6]                                      |     r3 = *(r6);
    0x0004250c ldr r2, [r3]                                      |     r2 = *(r3);
    0x0004250e ldrh r3, [r4, 6]                                  |     r3 = *((r4 + 6));
    0x00042510 cmp r7, r2                                        |     
                                                                 |     if (r7 != r2) {
    0x00042512 beq 0x42554                                       |         
    0x00042514 lsls r0, r3, 0x18                                 |         r0 = r3 << 0x18;
                                                                 |         if (r0 < r3) {
    0x00042516 bmi.w 0x42e5c                                     |             goto label_50;
                                                                 |         }
    0x0004251a ldrb r3, [r4, 4]                                  |         r3 = *((r4 + 4));
    0x0004251c cmp r3, 0x75                                      |         
                                                                 |         if (r3 == 0x75) {
    0x0004251e beq.w 0x42ecc                                     |             goto label_51;
                                                                 |         }
    0x00042522 cmp r3, 0x76                                      |         
                                                                 |         if (r3 == 0x76) {
    0x00042524 beq.w 0x42bf0                                     |             goto label_52;
                                                                 |         }
    0x00042528 cmp r3, 0x74                                      |         
                                                                 |         if (r3 == 0x74) {
    0x0004252a beq.w 0x42bf6                                     |             goto label_53;
                                                                 |         }
    0x0004252e ldr.w r2, [pc, 0xa38]                             |         r2 = *(0x00042f68);
    0x00042532 add r2, pc                                        |         r2 += pc;
                                                                 | label_8:
    0x00042534 ldr.w r1, [pc, 0xa34]                             |         
    0x00042538 add r1, pc                                        |         r1 = 0x854a8;
    0x0004253a b 0x42494                                         |         goto label_0;
                                                                 | label_41:
    0x0004253c ldr.w r2, [pc, 0xa30]                             |         
    0x00042540 add r2, pc                                        |         r2 = 0x854b4;
    0x00042542 b 0x4248e                                         |         goto label_1;
                                                                 | label_42:
    0x00042544 ldr.w r2, [pc, 0xa2c]                             |         
    0x00042548 add r2, pc                                        |         r2 = 0x854c0;
    0x0004254a b 0x4248e                                         |         goto label_1;
                                                                 | label_40:
    0x0004254c ldr.w r2, [pc, 0xa28]                             |         
    0x00042550 add r2, pc                                        |         r2 = 0x854cc;
    0x00042552 b 0x4248e                                         |         goto label_1;
                                                                 |     }
    0x00042554 ands r3, r3, 0x800                                |     r3 &= 0x800;
                                                                 |     if (r3 != r3) {
    0x00042558 bne.w 0x42c46                                     |         goto label_54;
                                                                 |     }
    0x0004255c ldr r7, [r4, 0x30]                                |     r7 = *((r4 + 0x30));
    0x0004255e cmp r7, 0                                         |     
                                                                 |     if (r7 != 0) {
    0x00042560 bne.w 0x427ea                                     |         goto label_55;
                                                                 |     }
    0x00042564 ldrb r3, [r4, 4]                                  |     r3 = *((r4 + 4));
    0x00042566 cmp r3, 0x74                                      |     
                                                                 |     if (r3 == 0x74) {
    0x00042568 beq.w 0x43104                                     |         goto label_56;
                                                                 |     }
    0x0004256c subs r3, 0x73                                     |     r3 -= 0x73;
    0x0004256e ands r3, r3, 0xfd                                 |     r3 &= 0xfd;
                                                                 |     if (r3 == r3) {
    0x00042572 beq.w 0x42f9c                                     |         goto label_57;
                                                                 |     }
    0x00042576 str r7, [sp]                                      |     *(sp) = r7;
    0x00042578 mov r3, r7                                        |     r3 = r7;
    0x0004257a ldr r7, [r5, 0x44]                                |     r7 = *((r5 + 0x44));
    0x0004257c movs r1, 0x38                                     |     r1 = 0x38;
    0x0004257e ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x00042580 adds r2, r7, 2                                    |     r2 = r7 + 2;
    0x00042582 str r7, [sp, 0x28]                                |     var_28h = r7;
    0x00042584 str r2, [r5, 0x44]                                |     *((r5 + 0x44)) = r2;
    0x00042586 mov r2, r7                                        |     r2 = r7;
    0x00042588 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0004258c mov r2, r4                                        |     r2 = r4;
    0x0004258e str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
                                                                 |     do {
    0x00042590 mov r3, r2                                        |         r3 = r2;
    0x00042592 ldr r2, [r2, 0x38]                                |         r2 = *((r2 + 0x38));
    0x00042594 cmp r2, 0                                         |         
    0x00042596 bne 0x42590                                       |         
                                                                 |     } while (r2 != 0);
    0x00042598 mov sl, r2                                        |     sl = r2;
    0x0004259a ldrh r2, [r3, 6]                                  |     r2 = *((r3 + 6));
    0x0004259c mov r1, r6                                        |     r1 = r6;
    0x0004259e mov r0, r5                                        |     r0 = r5;
    0x000425a0 orr r2, r2, 8                                     |     r2 |= 8;
    0x000425a4 strh r2, [r3, 6]                                  |     *((r3 + 6)) = r2;
    0x000425a6 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x000425a8 str.w sl, [sp, 0x9c]                              |     __asm ("str.w sl, [var_9ch]");
    0x000425ac strd r3, sl, [sp, 0x94]                           |     __asm ("strd r3, sl, [var_94h]");
    0x000425b0 add r3, sp, 0x90                                  |     r3 += var_90h;
    0x000425b2 mov r2, r3                                        |     r2 = r3;
    0x000425b4 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x000425b6 movs r3, 1                                        |     r3 = 1;
    0x000425b8 strh.w r3, [sp, 0x90]                             |     var_90h = r3;
    0x000425bc ldr.w r3, [r5, 0x1d4]                             |     r3 = *((r5 + 0x1d4));
    0x000425c0 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x000425c2 bl 0x392a8                                        |     r0 = fcn_000392a8 (r0, r1, r2, r3, r4, r5);
    0x000425c6 mov r7, r0                                        |     r7 = r0;
    0x000425c8 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000425ca bne.w 0x4249c                                     |         goto label_2;
                                                                 |     }
    0x000425ce ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x000425d0 movs r1, 0x38                                     |     r1 = 0x38;
    0x000425d2 str.w sl, [sp]                                    |     __asm ("str.w sl, [sp]");
    0x000425d6 ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x000425d8 adds r3, 1                                        |     r3++;
    0x000425da mov r7, r3                                        |     r7 = r3;
    0x000425dc str r3, [sp, 0x30]                                |     var_30h = r3;
    0x000425de mov r2, r7                                        |     r2 = r7;
    0x000425e0 mov r3, sl                                        |     r3 = sl;
    0x000425e2 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000425e6 ldr r3, [r4, 0x3c]                                |     r3 = *((r4 + 0x3c));
    0x000425e8 mov r1, r4                                        |     r1 = r4;
    0x000425ea ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x000425ec str r0, [r4, 0x14]                                |     *((r4 + 0x14)) = r0;
    0x000425ee mov r0, r5                                        |     r0 = r5;
    0x000425f0 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x000425f2 ldr r3, [r4, 0x40]                                |     r3 = *((r4 + 0x40));
    0x000425f4 str.w sl, [r4, 0x34]                              |     __asm ("str.w sl, [r4, 0x34]");
    0x000425f8 str.w sl, [r4, 0x3c]                              |     __asm ("str.w sl, [r4, 0x3c]");
    0x000425fc str r3, [sp, 0x34]                                |     var_34h = r3;
    0x000425fe ldr.w r3, [r5, 0x1d4]                             |     r3 = *((r5 + 0x1d4));
    0x00042602 str.w sl, [r4, 0x40]                              |     __asm ("str.w sl, [r4, 0x40]");
    0x00042606 str r7, [sp, 0x94]                                |     var_94h = r7;
    0x00042608 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x0004260a bl 0x392a8                                        |     fcn_000392a8 (r0, r1, r2, r3, r4, r5);
    0x0004260e ldr r1, [r6, 0x18]                                |     r1 = *((r6 + 0x18));
    0x00042610 mov r7, r0                                        |     r7 = r0;
    0x00042612 ldr r0, [r4, 0x18]                                |     r0 = *((r4 + 0x18));
    0x00042614 ldr r2, [r6, 0x1c]                                |     r2 = *((r6 + 0x1c));
    0x00042616 ldr r3, [r4, 0x1c]                                |     r3 = *((r4 + 0x1c));
    0x00042618 cmp r1, r0                                        |     
    0x0004261a ldr.w sl, [r4, 0x34]                              |     sl = *((r4 + 0x34));
    0x0004261e mov r0, sb                                        |     r0 = sb;
    0x00042620 str r6, [r4, 0x34]                                |     *((r4 + 0x34)) = r6;
    0x00042622 sbcs.w r3, r2, r3                                 |     __asm ("sbcs.w r3, r2, r3");
    0x00042626 it lo                                             |     
                                                                 |     if (r1 < r0) {
    0x00042628 strdlo r1, r2, [r4, 0x18]                         |         __asm ("strdlo r1, r2, [r4, 0x18]");
                                                                 |     }
    0x0004262c ldr r1, [r4, 0x3c]                                |     r1 = *((r4 + 0x3c));
    0x0004262e bl 0x12e68                                        |     fcn_00012e68 (r0);
    0x00042632 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00042634 str r3, [r4, 0x3c]                                |     *((r4 + 0x3c)) = r3;
    0x00042636 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00042638 str r3, [r4, 0x40]                                |     *((r4 + 0x40)) = r3;
    0x0004263a ldrb.w r3, [sp, 0x68]                             |     r3 = var_68h;
    0x0004263e cmp r3, 9                                         |     
                                                                 |     if (r3 == 9) {
    0x00042640 beq.w 0x43580                                     |         goto label_58;
                                                                 |     }
                                                                 | label_33:
    0x00042644 ldr r6, [sp, 0x1c]                                |     r6 = var_1ch;
    0x00042646 ldr r0, [r6, 0x18]                                |     r0 = *((r6 + 0x18));
    0x00042648 bl 0x19ed0                                        |     fcn_00019ed0 (r0);
    0x0004264c str r0, [sp, 0x2c]                                |     var_2ch = r0;
    0x0004264e ldr r0, [r6, 0x18]                                |     r0 = *((r6 + 0x18));
    0x00042650 bl 0x19ed0                                        |     fcn_00019ed0 (r0);
    0x00042654 ldr r3, [r4, 8]                                   |     r3 = *((r4 + 8));
    0x00042656 str r0, [sp, 0x34]                                |     var_34h = r0;
                                                                 |     if (r3 == 0) {
    0x00042658 cbnz r3, 0x42664                                  |         
    0x0004265a ldr r2, [sp, 0x2c]                                |         r2 = var_2ch;
    0x0004265c mov r1, r4                                        |         r1 = r4;
    0x0004265e mov r0, r5                                        |         r0 = r5;
    0x00042660 bl 0x3c4f0                                        |         fcn_0003c4f0 (r0, r1, r2);
                                                                 |     }
    0x00042664 movs r3, 0                                        |     r3 = 0;
    0x00042666 ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x00042668 str r3, [sp]                                      |     *(sp) = r3;
    0x0004266a movs r1, 0x6a                                     |     r1 = 0x6a;
    0x0004266c ldrd r2, r3, [sp, 0x28]                           |     __asm ("ldrd r2, r3, [var_28h]");
    0x00042670 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00042674 ldrb r3, [r5, 0x13]                               |     r3 = *((r5 + 0x13));
    0x00042676 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00042678 beq.w 0x43576                                     |         goto label_59;
                                                                 |     }
    0x0004267c subs r3, 1                                        |     r3--;
    0x0004267e uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x00042680 strb r3, [r5, 0x13]                               |     *((r5 + 0x13)) = r3;
    0x00042682 adds r3, 6                                        |     r3 += 6;
    0x00042684 ldr.w r6, [r5, r3, lsl 2]                         |     offset_0 = r3 << 2;
                                                                 |     r6 = *((r5 + offset_0));
                                                                 | label_32:
    0x00042688 movs r3, 0                                        |     r3 = 0;
    0x0004268a ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x0004268c movs r1, 0x63                                     |     r1 = 0x63;
    0x0004268e str r3, [sp]                                      |     *(sp) = r3;
    0x00042690 ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x00042692 mov r3, r6                                        |     r3 = r6;
    0x00042694 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00042698 movs r3, 0                                        |     r3 = 0;
    0x0004269a str r0, [sp, 0x38]                                |     var_38h = r0;
    0x0004269c strd r6, r3, [sp]                                 |     __asm ("strd r6, r3, [sp]");
    0x000426a0 movs r1, 0x42                                     |     r1 = 0x42;
    0x000426a2 ldrd r2, r3, [sp, 0x30]                           |     __asm ("ldrd r2, r3, [var_30h]");
    0x000426a6 ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x000426a8 bl 0x19a3c                                        |     fcn_00019a3c (r0, r1, r2, r3, r4, r5);
                                                                 |     if (r6 == 0) {
    0x000426ac cbz r6, 0x426d4                                   |         goto label_38;
                                                                 |     }
    0x000426ae ldrb r1, [r5, 0x13]                               |     r1 = *((r5 + 0x13));
    0x000426b0 cmp r1, 7                                         |     
                                                                 |     if (r1 > 7) {
    0x000426b2 bhi 0x426d4                                       |         goto label_38;
                                                                 |     }
    0x000426b4 add.w r3, r5, 0x74                                |     r3 = r5 + 0x74;
    0x000426b8 add.w r0, r5, 0x13c                               |     r0 = r5 + 0x13c;
                                                                 |     do {
    0x000426bc ldr r2, [r3, 0xc]                                 |         r2 = *((r3 + 0xc));
    0x000426be cmp r6, r2                                        |         
                                                                 |         if (r6 == r2) {
    0x000426c0 beq.w 0x43638                                     |             goto label_60;
                                                                 |         }
    0x000426c4 adds r3, 0x14                                     |         r3 += 0x14;
    0x000426c6 cmp r3, r0                                        |         
    0x000426c8 bne 0x426bc                                       |         
                                                                 |     } while (r3 != r0);
    0x000426ca adds r3, r1, 1                                    |     r3 = r1 + 1;
    0x000426cc adds r1, 6                                        |     r1 += 6;
    0x000426ce strb r3, [r5, 0x13]                               |     *((r5 + 0x13)) = r3;
    0x000426d0 str.w r6, [r5, r1, lsl 2]                         |     __asm ("str.w r6, [r5, r1, lsl 2]");
                                                                 | label_38:
    0x000426d4 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x000426d6 mov r1, r4                                        |     r1 = r4;
    0x000426d8 ldr r6, [sp, 0x34]                                |     r6 = var_34h;
    0x000426da mov r0, r5                                        |     r0 = r5;
    0x000426dc ldr r2, [r4]                                      |     r2 = *(r4);
    0x000426de str r3, [sp, 0x10]                                |     var_10h = r3;
    0x000426e0 movs r3, 0                                        |     r3 = 0;
    0x000426e2 strd r3, r3, [sp]                                 |     __asm ("strd r3, r3, [sp]");
    0x000426e6 str.w r8, [sp, 8]                                 |     __asm ("str.w r8, [var_8h]");
    0x000426ea ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x000426ec str r6, [sp, 0xc]                                 |     var_ch = r6;
    0x000426ee bl 0x41964                                        |     fcn_00041964 (r0, r1, r2, r3, r4, r5, r6);
    0x000426f2 ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x000426f4 mvns r3, r6                                       |     r3 = ~r6;
    0x000426f6 ldr r1, [r0, 0x18]                                |     r1 = *((r0 + 0x18));
                                                                 |     if (r3 >= r6) {
    0x000426f8 bmi 0x42704                                       |         
    0x000426fa ldr r2, [r1, 0x70]                                |         r2 = *((r1 + 0x70));
                                                                 |         if (r2 == 0) {
    0x000426fc cbz r2, 0x42704                                   |             goto label_61;
                                                                 |         }
    0x000426fe ldr r0, [r0, 0x20]                                |         r0 = *((r0 + 0x20));
    0x00042700 str.w r0, [r2, r3, lsl 2]                         |         __asm ("str.w r0, [r2, r3, lsl 2]");
                                                                 |     }
                                                                 | label_61:
    0x00042704 ldr r6, [sp, 0x1c]                                |     r6 = var_1ch;
    0x00042706 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x00042708 ldr r2, [r6, 0x20]                                |     r2 = *((r6 + 0x20));
    0x0004270a mov r0, r6                                        |     r0 = r6;
    0x0004270c subs r2, 1                                        |     r2--;
    0x0004270e str r2, [r1, 0x58]                                |     *((r1 + 0x58)) = r2;
    0x00042710 movs r2, 0                                        |     r2 = 0;
    0x00042712 movs r1, 9                                        |     r1 = 9;
    0x00042714 str r2, [sp]                                      |     *(sp) = r2;
    0x00042716 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x00042718 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0004271c ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0004271e ldr r1, [r6, 0x18]                                |     r1 = *((r6 + 0x18));
    0x00042720 mvns r2, r3                                       |     r2 = ~r3;
                                                                 |     if (r2 >= r3) {
    0x00042722 bmi 0x4272e                                       |         
    0x00042724 ldr r3, [r1, 0x70]                                |         r3 = *((r1 + 0x70));
                                                                 |         if (r3 == 0) {
    0x00042726 cbz r3, 0x4272e                                   |             goto label_62;
                                                                 |         }
    0x00042728 ldr r0, [r6, 0x20]                                |         r0 = *((r6 + 0x20));
    0x0004272a str.w r0, [r3, r2, lsl 2]                         |         __asm ("str.w r0, [r3, r2, lsl 2]");
                                                                 |     }
                                                                 | label_62:
    0x0004272e ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x00042730 movs r6, 0                                        |     r6 = 0;
    0x00042732 ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x00042734 ldr r3, [r0, 0x20]                                |     r3 = *((r0 + 0x20));
    0x00042736 mov r8, r0                                        |     r8 = r0;
    0x00042738 subs r3, 1                                        |     r3--;
    0x0004273a str r3, [r1, 0x58]                                |     *((r1 + 0x58)) = r3;
    0x0004273c mov r3, r6                                        |     r3 = r6;
    0x0004273e movs r1, 0x3b                                     |     r1 = 0x3b;
    0x00042740 str r6, [sp]                                      |     *(sp) = r6;
    0x00042742 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00042746 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x00042748 mov r3, r6                                        |     r3 = r6;
    0x0004274a movs r1, 0x3b                                     |     r1 = 0x3b;
    0x0004274c mov r0, r8                                        |     r0 = r8;
    0x0004274e str r6, [sp]                                      |     *(sp) = r6;
    0x00042750 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
                                                                 | label_10:
    0x00042754 ldrb.w r3, [r5, 0x1c2]                            |     r3 = *((r5 + 0x1c2));
    0x00042758 cmp r3, 2                                         |     
                                                                 |     if (r3 == 2) {
    0x0004275a bne 0x42772                                       |         
    0x0004275c ldrb r1, [r4, 4]                                  |         r1 = *((r4 + 4));
    0x0004275e mov r0, r5                                        |         r0 = r5;
    0x00042760 ldrd r2, r3, [sp, 0x20]                           |         __asm ("ldrd r2, r3, [var_24h]");
    0x00042764 subs.w r6, r1, 0x74                               |         r6 = r1 - 0x74;
    0x00042768 it ne                                             |         
                                                                 |         if (r6 == r1) {
    0x0004276a movne r6, 1                                       |             r6 = 1;
                                                                 |         }
    0x0004276c str r6, [sp]                                      |         *(sp) = r6;
    0x0004276e bl 0x1bddc                                        |         fcn_0001bddc (r0, r1);
                                                                 |     }
    0x00042772 ldrh r3, [r4, 6]                                  |     r3 = *((r4 + 6));
    0x00042774 lsls r3, r3, 0x1c                                 |     r3 <<= 0x1c;
                                                                 |     if (r3 < r3) {
    0x00042776 bmi.w 0x42e74                                     |         goto label_63;
                                                                 |     }
    0x00042778 strh r5, [r7, 0x1a]                               |     *((r7 + 0x1a)) = r5;
                                                                 | label_13:
    0x0004277a ldr r3, [sp, 0x70]                                |     r3 = var_70h;
    0x0004277c str.w r3, [fp, 8]                                 |     __asm ("str.w r3, [arg_8h]");
    0x00042780 ldr r3, [sp, 0x74]                                |     r3 = var_74h;
    0x00042782 str.w r3, [fp, 0xc]                               |     __asm ("str.w r3, [arg_ch]");
    0x00042786 cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x0004278a beq.w 0x424a4                                     |         goto label_3;
                                                                 |     }
    0x0004278e mov r1, sl                                        |     r1 = sl;
    0x00042790 mov r0, sb                                        |     r0 = sb;
    0x00042792 bl 0x12df8                                        |     fcn_00012df8 (r0, r1);
    0x00042794 invalid                                           |     
                                                                 | label_47:
    0x00042798 ldr.w r2, [pc, 0x7e0]                             |     
    0x0004279c add r2, pc                                        |     r2 = 0x8571c;
    0x0004279e b 0x424ea                                         |     goto label_4;
                                                                 | label_46:
    0x000427a0 ldr.w r2, [pc, 0x7dc]                             |     
    0x000427a4 add r2, pc                                        |     r2 = 0x85728;
    0x000427a6 b 0x424ea                                         |     goto label_4;
                                                                 | label_45:
    0x000427a8 ldr.w r2, [pc, 0x7d8]                             |     
    0x000427ac add r2, pc                                        |     r2 = 0x85734;
    0x000427ae b 0x424ea                                         |     goto label_4;
                                                                 | label_49:
    0x000427b0 ldr r3, [r4]                                      |     r3 = *(r4);
    0x000427b2 movs r2, 0                                        |     r2 = 0;
    0x000427b4 ldr r7, [sp, 0x1c]                                |     r7 = var_1ch;
    0x000427b6 movs r1, 0x38                                     |     r1 = 0x38;
    0x000427b8 ldr r3, [r3]                                      |     r3 = *(r3);
    0x000427ba mov r0, r7                                        |     r0 = r7;
    0x000427bc str r2, [sp]                                      |     *(sp) = r2;
    0x000427be ldr r2, [sp, 0x6c]                                |     r2 = var_6ch;
    0x000427c0 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000427c4 ldr r3, [r7, 4]                                   |     r3 = *((r7 + 4));
                                                                 |     if (r3 != 0) {
    0x000427c6 cbz r3, 0x427d8                                   |         
    0x000427c8 ldr r2, [r7, 0x20]                                |         r2 = *((r7 + 0x20));
    0x000427ca add.w r2, r2, r2, lsl 2                           |         r2 += (r2 << 2);
    0x000427ce add.w r3, r3, r2, lsl 2                           |         r3 += (r2 << 2);
    0x000427d2 movs r2, 8                                        |         r2 = 8;
    0x000427d4 strb r2, [r3, -0x11]                              |         *((r3 - 0x11)) = r2;
                                                                 |     }
    0x000427d8 movs r3, 0xe                                      |     r3 = 0xe;
    0x000427da strb.w r3, [sp, 0x68]                             |     var_68h = r3;
    0x000427de b 0x42506                                         |     goto label_5;
                                                                 | label_48:
    0x000427e0 mov r0, r5                                        |     r0 = r5;
    0x000427e2 bl 0x192c8                                        |     fcn_000192c8 (r0);
    0x000427e6 str r0, [sp, 0x1c]                                |     var_1ch = r0;
    0x000427e8 b 0x424fc                                         |     goto label_6;
                                                                 | label_55:
    0x000427ea ldr r7, [r5, 8]                                   |     r7 = *((r5 + 8));
    0x000427ec str r3, [sp, 0x28]                                |     var_28h = r3;
    0x000427ee ldr r3, [r5]                                      |     r3 = *(r5);
    0x000427f0 ldr r0, [r7, 0x18]                                |     r0 = *((r7 + 0x18));
    0x000427f2 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x000427f4 bl 0x19ed0                                        |     fcn_00019ed0 (r0);
    0x000427f8 str r0, [sp, 0x2c]                                |     var_2ch = r0;
    0x000427fa ldr r0, [r7, 0x18]                                |     r0 = *((r7 + 0x18));
    0x000427fc bl 0x19ed0                                        |     fcn_00019ed0 (r0);
    0x00042800 ldrb r2, [r4, 4]                                  |     r2 = *((r4 + 4));
    0x00042802 ldr.w sb, [r4, 0x30]                              |     sb = *((r4 + 0x30));
    0x00042806 str r0, [sp, 0x34]                                |     var_34h = r0;
    0x00042808 mov r3, r2                                        |     r3 = r2;
    0x0004280a str r2, [sp, 0x24]                                |     var_24h = r2;
    0x0004280c ldr r2, [r4, 0x34]                                |     r2 = *((r4 + 0x34));
    0x0004280e cmp r3, 0x74                                      |     
    0x00042810 ldr.w r6, [sb]                                    |     r6 = *(sb);
    0x00042814 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00042816 str r2, [sp, 0x1c]                                |     var_1ch = r2;
                                                                 |     if (r3 == 0x74) {
    0x00042818 beq.w 0x433fc                                     |         goto label_64;
                                                                 |     }
    0x0004281c ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0004281e ldrb.w r0, [r3, 0x40]                             |     r0 = *((r3 + 0x40));
    0x00042822 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00042824 bne.w 0x43630                                     |         goto label_65;
                                                                 |     }
    0x00042828 str r7, [sp, 0x30]                                |     var_30h = r7;
    0x0004282a add r3, sp, 0x90                                  |     r3 += var_90h;
    0x0004282c ldr r7, [sp, 0x20]                                |     r7 = var_20h;
    0x0004282e mov r2, r4                                        |     r2 = r4;
    0x00042830 str.w sl, [sp, 0x28]                              |     __asm ("str.w sl, [var_28h]");
    0x00042834 mov r4, sb                                        |     r4 = sb;
    0x00042836 mov.w r8, 1                                       |     r8 = 1;
    0x0004283a mov sl, r3                                        |     sl = r3;
    0x0004283c mov sb, r2                                        |     sb = r2;
    0x0004283e str r3, [sp, 0x38]                                |     var_38h = r3;
                                                                 | label_7:
    0x00042840 ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x00042844 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00042846 cmp r8, r3                                        |     
                                                                 |     if (r8 > r3) {
    0x00042848 bgt 0x4286e                                       |         goto label_66;
                                                                 |     }
    0x0004284a cmp r6, 0                                         |     
    0x0004284c ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
                                                                 |     if (r6 <= 0) {
    0x0004284e ble.w 0x42bfc                                     |         goto label_67;
                                                                 |     }
    0x00042852 movs r2, 0                                        |     r2 = 0;
    0x00042854 b 0x42860                                         |     
                                                                 |     while (r8 != r1) {
    0x00042856 adds r2, 1                                        |         r2++;
    0x00042858 adds r3, 0x14                                     |         r3 += 0x14;
    0x0004285a cmp r2, r6                                        |         
                                                                 |         if (r2 == r6) {
    0x0004285c beq.w 0x42c00                                     |             goto label_68;
                                                                 |         }
    0x00042860 ldrh r1, [r3, 0x10]                               |         r1 = *((r3 + 0x10));
    0x00042862 cmp r8, r1                                        |         
    0x00042864 bne 0x42856                                       |         
                                                                 |     }
                                                                 | label_9:
    0x00042866 add.w r8, r8, 1                                   |     r8++;
    0x0004286a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004286c beq 0x42840                                       |         goto label_7;
                                                                 |     }
                                                                 | label_66:
    0x0004286e ldr.w sl, [sp, 0x28]                              |     sl = var_28h;
    0x00042872 mov r3, sb                                        |     r3 = sb;
    0x00042874 ldr r7, [sp, 0x30]                                |     r7 = var_30h;
    0x00042876 mov sb, r4                                        |     sb = r4;
    0x00042878 mov r4, r3                                        |     r4 = r3;
                                                                 | label_37:
    0x0004287a lsl.w r8, r6, 2                                   |     r8 = r6 << 2;
    0x0004287e ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x00042880 mov r1, r8                                        |     r1 = r8;
    0x00042882 bl 0xd3a0                                         |     fcn_0000d3a0 (r0, r1);
    0x00042886 str r0, [sp, 0x40]                                |     var_40h = r0;
    0x00042888 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004288a beq.w 0x4323c                                     |         goto label_69;
                                                                 |     }
    0x0004288e cmp r6, 0                                         |     
    0x00042890 ldr.w r2, [sb, 4]                                 |     r2 = *((sb + 4));
                                                                 |     if (r6 <= 0) {
    0x00042894 ble.w 0x4360c                                     |         goto label_70;
                                                                 |     }
                                                                 | label_24:
    0x00042898 ldr r1, [sp, 0x40]                                |     r1 = var_40h;
    0x0004289a add.w r0, r1, r8                                  |     r0 = r1 + r8;
                                                                 |     do {
    0x0004289e ldrh r3, [r2, 0x10]                               |         r3 = *((r2 + 0x10));
    0x000428a0 adds r2, 0x14                                     |         r2 += 0x14;
    0x000428a2 subs r3, 1                                        |         r3--;
    0x000428a4 str r3, [r1], 4                                   |         *(r1) = r3;
                                                                 |         r1 += 4;
    0x000428a8 cmp r0, r1                                        |         
    0x000428aa bne 0x4289e                                       |         
                                                                 |     } while (r0 != r1);
    0x000428ac mov r1, r4                                        |     r1 = r4;
    0x000428ae mov r0, r5                                        |     r0 = r5;
    0x000428b0 bl 0x25144                                        |     fcn_00025144 (r0, r1, r2);
    0x000428b4 mov r1, sb                                        |     r1 = sb;
    0x000428b6 str r0, [sp, 0x4c]                                |     var_4ch = r0;
    0x000428b8 movs r2, 0                                        |     r2 = 0;
    0x000428ba ldr r0, [r5]                                      |     r0 = *(r5);
    0x000428bc str.w sb, [r4, 0x30]                              |     __asm ("str.w sb, [r4, 0x30]");
    0x000428c0 bl 0xe3ec                                         |     fcn_0000e3ec (r0, r1, r2);
    0x000428c4 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x000428c6 str r0, [r3, 0x30]                                |     *((r3 + 0x30)) = r0;
    0x000428c8 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x000428ca cmp r3, 0x74                                      |     
    0x000428cc itt eq                                            |     
                                                                 |     if (r3 != 0x74) {
    0x000428ce moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r3 != 0x74) {
    0x000428d0 streq r3, [sp, 0x48]                              |         var_48h = r3;
                                                                 |     }
                                                                 |     if (r3 != 0x74) {
    0x000428d2 bne.w 0x43256                                     |         goto label_36;
                                                                 |     }
                                                                 | label_15:
    0x000428d6 ldr.w r8, [pc, 0x6b0]                             |     
    0x000428da movs r3, 0                                        |     r3 = 0;
    0x000428dc ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x000428de mov r1, r4                                        |     r1 = r4;
    0x000428e0 str r3, [r4, 0x34]                                |     *((r4 + 0x34)) = r3;
    0x000428e2 mov r0, r5                                        |     r0 = r5;
    0x000428e4 add r8, pc                                        |     r8 = 0x85872;
    0x000428e6 str r3, [r2, 0x38]                                |     *((r2 + 0x38)) = r3;
    0x000428e8 mov r3, r8                                        |     r3 = r8;
    0x000428ea ldr r2, [r4, 0x30]                                |     r2 = *((r4 + 0x30));
    0x000428ec bl 0x1f130                                        |     fcn_0001f130 (r0, r1, r2, r3);
    0x000428f0 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x000428f2 ldr r3, [r2, 0x34]                                |     r3 = *((r2 + 0x34));
    0x000428f4 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000428f6 beq.w 0x43462                                     |         goto label_71;
                                                                 |     }
                                                                 | label_26:
    0x000428fa ldr r2, [r4, 8]                                   |     r2 = *((r4 + 8));
                                                                 |     if (r2 == 0) {
    0x000428fc cbnz r2, 0x4290a                                  |         
    0x000428fe ldr r2, [sp, 0x2c]                                |         r2 = var_2ch;
    0x00042900 mov r1, r4                                        |         r1 = r4;
    0x00042902 mov r0, r5                                        |         r0 = r5;
    0x00042904 bl 0x3c4f0                                        |         fcn_0003c4f0 (r0, r1, r2);
    0x00042908 ldr r2, [r4, 8]                                   |         r2 = *((r4 + 8));
                                                                 |     }
    0x0004290a ldr r1, [sp, 0x24]                                |     r1 = var_24h;
    0x0004290c subs r3, r2, 0                                    |     r3 = r2 - 0;
    0x0004290e it ne                                             |     
                                                                 |     if (r3 == r2) {
    0x00042910 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x00042912 cmp r1, 0x74                                      |     
    0x00042914 it ne                                             |     
                                                                 |     if (r1 == 0x74) {
    0x00042916 movne r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00042918 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004291a bne.w 0x4342a                                     |         goto label_72;
                                                                 |     }
    0x0004291e mov sb, r3                                        |     sb = r3;
    0x00042920 str r3, [sp, 0x44]                                |     var_44h = r3;
                                                                 | label_25:
    0x00042922 mov.w r8, 0                                       |     r8 = 0;
    0x00042926 ldr r1, [r4, 0x3c]                                |     r1 = *((r4 + 0x3c));
    0x00042928 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x0004292a bl 0x12e68                                        |     fcn_00012e68 (r0);
    0x0004292e str.w r8, [r4, 0x3c]                              |     __asm ("str.w r8, [r4, 0x3c]");
    0x00042932 ldr r1, [r4, 0x40]                                |     r1 = *((r4 + 0x40));
    0x00042934 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x00042936 bl 0x12e68                                        |     fcn_00012e68 (r0);
    0x0004293a movs r3, 0xd                                      |     r3 = 0xd;
    0x0004293c ldr r2, [r5, 0x48]                                |     r2 = *((r5 + 0x48));
    0x0004293e strh.w r3, [sp, 0x90]                             |     var_90h = r3;
    0x00042942 strh.w r3, [sp, 0x7c]                             |     var_7ch = r3;
    0x00042946 ldr r3, [r7, 0x20]                                |     r3 = *((r7 + 0x20));
    0x00042948 adds r1, r2, 1                                    |     r1 = r2 + 1;
    0x0004294a str.w r8, [r4, 0x40]                              |     __asm ("str.w r8, [r4, 0x40]");
    0x0004294e adds r0, r2, 2                                    |     r0 = r2 + 2;
    0x00042950 str r1, [sp, 0x80]                                |     var_80h = r1;
    0x00042952 adds r3, 1                                        |     r3++;
    0x00042954 str r0, [sp, 0x28]                                |     var_28h = r0;
    0x00042956 str r3, [sp]                                      |     *(sp) = r3;
    0x00042958 adds r3, r2, 4                                    |     r3 = r2 + 4;
    0x0004295a adds r2, 3                                        |     r2 += 3;
    0x0004295c str r3, [sp, 0x58]                                |     var_58h = r3;
    0x0004295e str r3, [r5, 0x48]                                |     *((r5 + 0x48)) = r3;
    0x00042960 mov r3, r8                                        |     r3 = r8;
    0x00042962 str r2, [sp, 0x3c]                                |     var_3ch = r2;
    0x00042964 mov r2, r1                                        |     r2 = r1;
    0x00042966 str r0, [sp, 0x94]                                |     var_94h = r0;
    0x00042968 mov r0, r7                                        |     r0 = r7;
    0x0004296a str r1, [sp, 0x30]                                |     var_30h = r1;
    0x0004296c movs r1, 0x14                                     |     r1 = 0x14;
    0x0004296e strd r8, r8, [sp, 0x84]                           |     __asm ("strd r8, r8, [var_84h]");
    0x00042972 strd r8, r8, [sp, 0x98]                           |     __asm ("strd r8, r8, [var_98h]");
    0x00042976 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0004297a ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0004297c str r0, [sp, 0x50]                                |     var_50h = r0;
    0x0004297e mov r0, r5                                        |     r0 = r5;
    0x00042980 mov r1, r3                                        |     r1 = r3;
    0x00042982 str.w sb, [r3, 8]                                 |     __asm ("str.w sb, [r3, 8]");
    0x00042986 ldr.w r3, [r5, 0x1d4]                             |     r3 = *((r5 + 0x1d4));
    0x0004298a add.w sb, sp, 0x7c                                |     sb += var_7ch;
    0x0004298e mov r2, sb                                        |     r2 = sb;
    0x00042990 str r3, [sp, 0x60]                                |     var_60h = r3;
    0x00042992 bl 0x392a8                                        |     fcn_000392a8 (r0, r1, r2, r3, r4, r5);
    0x00042996 mov r3, r8                                        |     r3 = r8;
    0x00042998 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x0004299c ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x0004299e movs r1, 0x15                                     |     r1 = 0x15;
    0x000429a0 mov r0, r7                                        |     r0 = r7;
    0x000429a2 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000429a6 ldr r3, [r7, 0x20]                                |     r3 = *((r7 + 0x20));
    0x000429a8 mov r0, r7                                        |     r0 = r7;
    0x000429aa ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x000429ac subs r1, r3, 1                                    |     r1 = r3 - 1;
    0x000429ae cmp r2, r3                                        |     
    0x000429b0 ittt lo                                           |     
                                                                 |     if (r2 >= r3) {
    0x000429b2 addlo r8, r2, r2, lsl 2                           |         r8 = r2 + (r2 << 2);
                                                                 |     }
                                                                 |     if (r2 >= r3) {
    0x000429b6 ldrlo r2, [r7, 4]                                 |         r2 = *((r7 + 4));
                                                                 |     }
                                                                 |     if (r2 < r3) {
    0x000429b8 add.w r2, r2, r8, lsl 2                           |         r2 += (r8 << 2);
                                                                 |     }
    0x000429bc mov.w r8, 0                                       |     r8 = 0;
    0x000429c0 it lo                                             |     
                                                                 |     if (r2 >= r3) {
    0x000429c2 strlo r3, [r2, 8]                                 |         *((r2 + 8)) = r3;
                                                                 |     }
    0x000429c4 adds r3, 1                                        |     r3++;
    0x000429c6 ldr r2, [r7, 0x18]                                |     r2 = *((r7 + 0x18));
    0x000429c8 str r1, [r2, 0x58]                                |     *((r2 + 0x58)) = r1;
    0x000429ca movs r1, 0x14                                     |     r1 = 0x14;
    0x000429cc ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x000429ce str r3, [sp]                                      |     *(sp) = r3;
    0x000429d0 movs r3, 0                                        |     r3 = 0;
    0x000429d2 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000429d6 ldr r3, [r4, 8]                                   |     r3 = *((r4 + 8));
    0x000429d8 ldr r1, [sp, 0x44]                                |     r1 = var_44h;
    0x000429da ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x000429dc str r3, [sp, 0x54]                                |     var_54h = r3;
    0x000429de ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
    0x000429e0 str r0, [sp, 0x50]                                |     var_50h = r0;
    0x000429e2 mov r0, r5                                        |     r0 = r5;
    0x000429e4 str r1, [r4, 8]                                   |     *((r4 + 8)) = r1;
    0x000429e6 mov r1, r4                                        |     r1 = r4;
    0x000429e8 str r3, [sp, 0x44]                                |     var_44h = r3;
    0x000429ea ldr.w r3, [r5, 0x1d4]                             |     r3 = *((r5 + 0x1d4));
    0x000429ee str.w r8, [r4, 0xc]                               |     __asm ("str.w r8, [r4, 0xc]");
    0x000429f2 str r3, [sp, 0x64]                                |     var_64h = r3;
    0x000429f4 bl 0x392a8                                        |     fcn_000392a8 (r0, r1, r2, r3, r4, r5);
    0x000429f8 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x000429fa movs r1, 0x15                                     |     r1 = 0x15;
    0x000429fc ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x000429fe mov r0, r7                                        |     r0 = r7;
    0x00042a00 str r3, [r4, 8]                                   |     *((r4 + 8)) = r3;
    0x00042a02 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x00042a04 str r3, [r4, 0xc]                                 |     *((r4 + 0xc)) = r3;
    0x00042a06 mov r3, r8                                        |     r3 = r8;
    0x00042a08 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x00042a0c bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00042a10 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00042a12 mov r2, sb                                        |     r2 = sb;
    0x00042a14 mov r1, r4                                        |     r1 = r4;
    0x00042a16 mov r0, r5                                        |     r0 = r5;
    0x00042a18 strd sl, r3, [sp, 8]                              |     __asm ("strd sl, r3, [var_8h]");
    0x00042a1c ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00042a1e str r3, [sp, 4]                                   |     var_4h = r3;
    0x00042a20 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00042a22 str r3, [sp]                                      |     *(sp) = r3;
    0x00042a24 mov r3, fp                                        |     r3 = fp;
    0x00042a26 bl 0x19f18                                        |     fcn_00019f18 (r0, r1, r2, r3, r4, r5, r6);
    0x00042a2a ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00042a2c str r0, [sp, 0x44]                                |     var_44h = r0;
    0x00042a2e subs r3, 0x73                                     |     r3 -= 0x73;
    0x00042a30 cmp r3, 1                                         |     
    0x00042a32 str r3, [sp, 0x54]                                |     var_54h = r3;
                                                                 |     if (r3 < 1) {
    0x00042a34 bls.w 0x4339a                                     |         goto label_73;
                                                                 |     }
    0x00042a38 cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x00042a3c beq.w 0x433f4                                     |         goto label_74;
                                                                 |     }
    0x00042a40 ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x00042a44 subs r3, 1                                        |     r3--;
    0x00042a46 str.w r3, [sl]                                    |     __asm ("str.w r3, [sl]");
    0x00042a4a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00042a4c beq.w 0x43426                                     |         goto label_75;
                                                                 |     }
    0x00042a50 str.w r8, [sp, 0x5c]                              |     __asm ("str.w r8, [var_5ch]");
                                                                 | label_22:
    0x00042a54 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00042a56 subs r3, 0x75                                     |     r3 -= 0x75;
    0x00042a58 cmp r3, 1                                         |     
                                                                 |     if (r3 > 1) {
    0x00042a5a bhi.w 0x432ce                                     |         goto label_21;
                                                                 |     }
    0x00042a5e ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00042a60 mov sl, r3                                        |     sl = r3;
    0x00042a62 str r3, [sp, 0x48]                                |     var_48h = r3;
                                                                 | label_16:
    0x00042a64 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00042a66 cmp r3, 0x76                                      |     
                                                                 |     if (r3 != 0x76) {
    0x00042a68 bne.w 0x431c8                                     |         goto label_76;
                                                                 |     }
    0x00042a6c ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00042a6e mov.w r8, 0                                       |     r8 = 0;
    0x00042a72 ldr r0, [r4, 0x18]                                |     r0 = *((r4 + 0x18));
    0x00042a74 mov sb, sl                                        |     sb = sl;
    0x00042a76 ldr r1, [r3, 0x18]                                |     r1 = *((r3 + 0x18));
    0x00042a78 ldr r2, [r3, 0x1c]                                |     r2 = *((r3 + 0x1c));
    0x00042a7a ldr r3, [r4, 0x1c]                                |     r3 = *((r4 + 0x1c));
    0x00042a7c cmp r1, r0                                        |     
    0x00042a7e mov r0, r7                                        |     r0 = r7;
    0x00042a80 sbcs.w r3, r2, r3                                 |     __asm ("sbcs.w r3, r2, r3");
    0x00042a84 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x00042a86 it lo                                             |     
                                                                 |     if (r1 < r0) {
    0x00042a88 strdlo r1, r2, [r4, 0x18]                         |         __asm ("strdlo r1, r2, [r4, 0x18]");
                                                                 |     }
    0x00042a8c movs r1, 0x11                                     |     r1 = 0x11;
    0x00042a8e ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x00042a90 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x00042a94 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00042a98 ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x00042a9a mov r3, sl                                        |     r3 = sl;
    0x00042a9c movs r1, 0x16                                     |     r1 = 0x16;
    0x00042a9e str r0, [sp, 0x24]                                |     var_24h = r0;
    0x00042aa0 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x00042aa4 mov r0, r7                                        |     r0 = r7;
    0x00042aa6 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00042aaa ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00042aac mov r2, r8                                        |     r2 = r8;
    0x00042aae movs r1, 0x10                                     |     r1 = 0x10;
    0x00042ab0 mov r0, r7                                        |     r0 = r7;
    0x00042ab2 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x00042ab6 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00042aba ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00042abc adds r3, 1                                        |     r3++;
    0x00042abe str r3, [sp, 0x38]                                |     var_38h = r3;
                                                                 | label_14:
    0x00042ac0 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x00042ac2 ldr.w sl, [r7, 0x20]                              |     sl = *((r7 + 0x20));
    0x00042ac6 cmp r3, 1                                         |     
                                                                 |     if (r3 < 1) {
    0x00042ac8 bls.w 0x43386                                     |         goto label_77;
                                                                 |     }
                                                                 | label_20:
    0x00042acc mov.w r8, 0                                       |     r8 = 0;
    0x00042ad0 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x00042ad2 mov r3, sb                                        |     r3 = sb;
    0x00042ad4 movs r1, 0x16                                     |     r1 = 0x16;
    0x00042ad6 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x00042ada mov r0, r7                                        |     r0 = r7;
    0x00042adc bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00042ae0 movs r1, 0x10                                     |     r1 = 0x10;
    0x00042ae2 mov r2, r8                                        |     r2 = r8;
    0x00042ae4 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00042ae6 mov r0, r7                                        |     r0 = r7;
    0x00042ae8 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x00042aec mov.w r8, 0                                       |     r8 = 0;
    0x00042af0 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00042af4 ldr r3, [r7, 0x20]                                |     r3 = *((r7 + 0x20));
    0x00042af6 ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x00042af8 ldr r0, [r7, 0x18]                                |     r0 = *((r7 + 0x18));
    0x00042afa cmp r2, r3                                        |     
    0x00042afc ittt lo                                           |     
                                                                 |     if (r2 >= r3) {
    0x00042afe addlo r1, r2, r2, lsl 2                           |         r1 = r2 + (r2 << 2);
                                                                 |     }
                                                                 |     if (r2 >= r3) {
    0x00042b02 ldrlo r2, [r7, 4]                                 |         r2 = *((r7 + 4));
                                                                 |     }
                                                                 |     if (r2 < r3) {
    0x00042b04 add.w r2, r2, r1, lsl 2                           |         r2 += (r1 << 2);
                                                                 |     }
    0x00042b08 add.w r1, r3, -1                                  |     r1 = r3 + -1;
    0x00042b0c it lo                                             |     
                                                                 |     if (r2 >= r3) {
    0x00042b0e strlo r3, [r2, 8]                                 |         *((r2 + 8)) = r3;
                                                                 |     }
    0x00042b10 str r1, [r0, 0x58]                                |     *((r0 + 0x58)) = r1;
    0x00042b12 movs r1, 0x16                                     |     r1 = 0x16;
    0x00042b14 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00042b16 mov r0, r7                                        |     r0 = r7;
    0x00042b18 ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x00042b1a str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x00042b1e bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00042b22 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x00042b24 mov r3, sb                                        |     r3 = sb;
    0x00042b26 movs r1, 0x16                                     |     r1 = 0x16;
    0x00042b28 mov r0, r7                                        |     r0 = r7;
    0x00042b2a str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x00042b2e bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00042b32 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00042b34 ldr r2, [r7, 0x18]                                |     r2 = *((r7 + 0x18));
    0x00042b36 mvns r1, r3                                       |     r1 = ~r3;
                                                                 |     if (r1 >= r3) {
    0x00042b38 bmi 0x42b44                                       |         
    0x00042b3a ldr r3, [r2, 0x70]                                |         r3 = *((r2 + 0x70));
                                                                 |         if (r3 == 0) {
    0x00042b3c cbz r3, 0x42b44                                   |             goto label_78;
                                                                 |         }
    0x00042b3e ldr r0, [r7, 0x20]                                |         r0 = *((r7 + 0x20));
    0x00042b40 str.w r0, [r3, r1, lsl 2]                         |         __asm ("str.w r0, [r3, r1, lsl 2]");
                                                                 |     }
                                                                 | label_78:
    0x00042b44 ldr r3, [r7, 0x20]                                |     r3 = *((r7 + 0x20));
    0x00042b46 movs r1, 0x28                                     |     r1 = 0x28;
    0x00042b48 mov r0, r7                                        |     r0 = r7;
    0x00042b4a subs r3, 1                                        |     r3--;
    0x00042b4c str r3, [r2, 0x58]                                |     *((r2 + 0x58)) = r3;
    0x00042b4e mvn r2, 0xe                                       |     r2 = ~0xe;
    0x00042b52 ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x00042b54 str r2, [sp, 8]                                   |     var_8h = r2;
    0x00042b56 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00042b58 movs r3, 0                                        |     r3 = 0;
    0x00042b5a mov r2, r3                                        |     r2 = r3;
    0x00042b5c str r3, [sp]                                      |     *(sp) = r3;
    0x00042b5e bl 0x1977c                                        |     fcn_0001977c (r0, r1, r2, r3, r4, r5);
    0x00042b62 ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x00042b64 movs r1, 0x29                                     |     r1 = 0x29;
    0x00042b66 ldr r2, [sp, 0x84]                                |     r2 = var_84h;
    0x00042b68 mov r0, r7                                        |     r0 = r7;
    0x00042b6a strd r6, r3, [sp]                                 |     __asm ("strd r6, r3, [sp]");
    0x00042b6e mvn r3, 5                                         |     r3 = ~5;
    0x00042b72 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00042b74 ldr r3, [sp, 0x98]                                |     r3 = var_98h;
    0x00042b76 bl 0x1977c                                        |     fcn_0001977c (r0, r1, r2, r3, r4, r5);
    0x00042b7a ldr r3, [r7, 4]                                   |     r3 = *((r7 + 4));
                                                                 |     if (r3 != 0) {
    0x00042b7c cbz r3, 0x42b8e                                   |         
    0x00042b7e ldr r2, [r7, 0x20]                                |         r2 = *((r7 + 0x20));
    0x00042b80 add.w r2, r2, r2, lsl 2                           |         r2 += (r2 << 2);
    0x00042b84 add.w r3, r3, r2, lsl 2                           |         r3 += (r2 << 2);
    0x00042b88 movs r2, 1                                        |         r2 = 1;
    0x00042b8a strb r2, [r3, -0x11]                              |         *((r3 - 0x11)) = r2;
                                                                 |     }
    0x00042b8e ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00042b90 movs r1, 0x2a                                     |     r1 = 0x2a;
    0x00042b92 ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x00042b94 mov r0, r7                                        |     r0 = r7;
    0x00042b96 str.w sl, [sp]                                    |     __asm ("str.w sl, [sp]");
    0x00042b9a bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00042b9e ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00042ba0 ldr r2, [r7, 0x18]                                |     r2 = *((r7 + 0x18));
    0x00042ba2 mvns r1, r3                                       |     r1 = ~r3;
                                                                 |     if (r1 >= r3) {
    0x00042ba4 bmi 0x42bb0                                       |         
    0x00042ba6 ldr r3, [r2, 0x70]                                |         r3 = *((r2 + 0x70));
                                                                 |         if (r3 == 0) {
    0x00042ba8 cbz r3, 0x42bb0                                   |             goto label_79;
                                                                 |         }
    0x00042baa ldr r0, [r7, 0x20]                                |         r0 = *((r7 + 0x20));
    0x00042bac str.w r0, [r3, r1, lsl 2]                         |         __asm ("str.w r0, [r3, r1, lsl 2]");
                                                                 |     }
                                                                 | label_79:
    0x00042bb0 ldr r3, [r7, 0x20]                                |     r3 = *((r7 + 0x20));
    0x00042bb2 subs r3, 1                                        |     r3--;
    0x00042bb4 str r3, [r2, 0x58]                                |     *((r2 + 0x58)) = r3;
    0x00042bb6 ldrb.w r3, [fp]                                   |     r3 = *(fp);
    0x00042bba cmp r3, 9                                         |     
                                                                 |     if (r3 == 9) {
    0x00042bbc beq.w 0x4331e                                     |         goto label_80;
                                                                 |     }
                                                                 | label_17:
    0x00042bc0 ldr r1, [r4, 0x34]                                |     r1 = *((r4 + 0x34));
                                                                 |     if (r1 != 0) {
    0x00042bc2 cbz r1, 0x42bca                                   |         
    0x00042bc4 ldr r0, [sp, 0x20]                                |         r0 = var_20h;
    0x00042bc6 bl 0x12df8                                        |         fcn_00012df8 (r0, r1);
                                                                 |     }
    0x00042bca ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00042bcc str r3, [r4, 0x34]                                |     *((r4 + 0x34)) = r3;
    0x00042bce str r4, [r3, 0x38]                                |     *((r3 + 0x38)) = r4;
    0x00042bd0 ldrb.w r3, [r5, 0x1c2]                            |     r3 = *((r5 + 0x1c2));
    0x00042bd4 cmp r3, 2                                         |     
    0x00042bd6 it ne                                             |     
                                                                 |     if (r3 != 2) {
    0x00042bd8 movne r7, 0                                       |         r7 = 0;
                                                                 |         goto label_81;
                                                                 |     }
                                                                 |     if (r3 != 2) {
                                                                 | label_81:
    0x00042bda bne.w 0x424a4                                     |         goto label_3;
                                                                 |     }
    0x00042bde movs r7, 0                                        |     r7 = 0;
    0x00042be0 ldrb r1, [r4, 4]                                  |     r1 = *((r4 + 4));
    0x00042be2 ldrd r2, r3, [sp, 0x60]                           |     __asm ("ldrd r2, r3, [var_60h]");
    0x00042be6 mov r0, r5                                        |     r0 = r5;
    0x00042be8 str r7, [sp]                                      |     *(sp) = r7;
    0x00042bea bl 0x1bddc                                        |     fcn_0001bddc (r0, r1);
    0x00042bee b 0x424a4                                         |     goto label_3;
                                                                 | label_52:
    0x00042bf0 ldr r2, [pc, 0x398]                               |     
    0x00042bf2 add r2, pc                                        |     r2 = 0x85b82;
    0x00042bf4 b 0x42534                                         |     goto label_8;
                                                                 | label_53:
    0x00042bf6 ldr r2, [pc, 0x398]                               |     
    0x00042bf8 add r2, pc                                        |     r2 = 0x85b8e;
    0x00042bfa b 0x42534                                         |     goto label_8;
                                                                 |     if (r7 != 0) {
                                                                 | label_67:
    0x00042bfc bne.w 0x42866                                     |         goto label_9;
                                                                 |     }
                                                                 | label_68:
    0x00042c00 movs r3, 0                                        |     r3 = 0;
    0x00042c02 mov r2, sl                                        |     r2 = sl;
    0x00042c04 movs r1, 0x84                                     |     r1 = 0x84;
    0x00042c06 mov r0, r7                                        |     r0 = r7;
    0x00042c08 strd r3, r3, [sp, 0x90]                           |     __asm ("strd r3, r3, [var_90h]");
    0x00042c0c bl 0xd7ac                                         |     r0 = fcn_0000d7ac (r0, r1, r2, r3);
    0x00042c10 mov r2, r0                                        |     r2 = r0;
    0x00042c12 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00042c14 beq.w 0x435e2                                     |         goto label_82;
                                                                 |     }
    0x00042c18 ldr r3, [r0, 4]                                   |     r3 = *((r0 + 4));
    0x00042c1a mov r1, r4                                        |     r1 = r4;
    0x00042c1c str.w r8, [r0, 8]                                 |     __asm ("str.w r8, [r0, 8]");
    0x00042c20 orr r3, r3, 0x400                                 |     r3 |= 0x400;
    0x00042c24 str r3, [r0, 4]                                   |     *((r0 + 4)) = r3;
    0x00042c26 ldr r0, [r5]                                      |     r0 = *(r5);
    0x00042c28 bl 0x19ba4                                        |     r0 = fcn_00019ba4 (r0, r1, r2);
    0x00042c2c mov r4, r0                                        |     r4 = r0;
                                                                 |     if (r0 != 0) {
    0x00042c2e cbz r0, 0x42c40                                   |         
    0x00042c30 ldr r3, [r0, 4]                                   |         r3 = *((r0 + 4));
    0x00042c32 add.w r2, r6, r6, lsl 2                           |         r2 = r6 + (r6 << 2);
    0x00042c36 adds r6, 1                                        |         r6++;
    0x00042c38 add.w r3, r3, r2, lsl 2                           |         r3 += (r2 << 2);
    0x00042c3c strh.w r8, [r3, 0x10]                             |         *((r3 + 0x10)) = r8;
                                                                 |     }
    0x00042c40 ldrb.w r0, [r7, 0x40]                             |     r0 = *((r7 + 0x40));
    0x00042c44 b 0x42866                                         |     goto label_9;
                                                                 | label_54:
    0x00042c46 ldr r2, [r4, 0x20]                                |     r2 = *((r4 + 0x20));
    0x00042c48 movs r3, 0                                        |     r3 = 0;
    0x00042c4a movs r1, 0x21                                     |     r1 = 0x21;
    0x00042c4c mov r0, r5                                        |     r0 = r5;
    0x00042c4e str r2, [sp, 0x24]                                |     var_24h = r2;
    0x00042c50 ldr r2, [r4, 0x34]                                |     r2 = *((r4 + 0x34));
    0x00042c52 str r3, [sp]                                      |     *(sp) = r3;
    0x00042c54 ldr r6, [r5, 8]                                   |     r6 = *((r5 + 8));
    0x00042c56 str r2, [sp, 0x28]                                |     var_28h = r2;
    0x00042c58 mov r2, r3                                        |     r2 = r3;
    0x00042c5a str r6, [sp, 0x20]                                |     var_20h = r6;
    0x00042c5c bl 0x1cab0                                        |     fcn_0001cab0 (r0);
    0x00042c60 str r0, [sp, 0x2c]                                |     var_2ch = r0;
    0x00042c62 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00042c64 bne.w 0x42e54                                     |         goto label_83;
                                                                 |     }
    0x00042c68 ldr r0, [r6, 0x18]                                |     r0 = *((r6 + 0x18));
    0x00042c6a bl 0x19ed0                                        |     fcn_00019ed0 (r0);
    0x00042c6c invalid                                           |     
    0x00042c70 str r0, [sp, 0x34]                                |     var_34h = r0;
    0x00042c72 str r3, [sp, 0x40]                                |     var_40h = r3;
                                                                 |     if (r3 == 0) {
    0x00042c74 cbnz r3, 0x42c84                                  |         
    0x00042c76 mov r2, r0                                        |         r2 = r0;
    0x00042c78 mov r1, r4                                        |         r1 = r4;
    0x00042c7a mov r0, r5                                        |         r0 = r5;
    0x00042c7c bl 0x3c4f0                                        |         fcn_0003c4f0 (r0, r1, r2);
    0x00042c80 ldr r3, [r4, 8]                                   |         r3 = *((r4 + 8));
    0x00042c82 str r3, [sp, 0x40]                                |         var_40h = r3;
                                                                 |     }
    0x00042c84 ldr r2, [r4, 0x3c]                                |     r2 = *((r4 + 0x3c));
    0x00042c86 movs r3, 0                                        |     r3 = 0;
    0x00042c88 ldr r6, [sp, 0x24]                                |     r6 = var_24h;
    0x00042c8a str r2, [sp, 0x44]                                |     var_44h = r2;
    0x00042c8c ldr r2, [r4, 0x40]                                |     r2 = *((r4 + 0x40));
    0x00042c8e ldr r0, [r6]                                      |     r0 = *(r6);
    0x00042c90 str r3, [r4, 8]                                   |     *((r4 + 8)) = r3;
    0x00042c92 str r2, [sp, 0x48]                                |     var_48h = r2;
    0x00042c94 ldr r2, [r4, 0xc]                                 |     r2 = *((r4 + 0xc));
    0x00042c96 cmp r0, r3                                        |     
    0x00042c98 str r3, [r4, 0x3c]                                |     *((r4 + 0x3c)) = r3;
    0x00042c9a str r3, [r4, 0x40]                                |     *((r4 + 0x40)) = r3;
    0x00042c9c str r2, [sp, 0x4c]                                |     var_4ch = r2;
    0x00042c9e ldr r2, [r4, 0x30]                                |     r2 = *((r4 + 0x30));
    0x00042ca0 str r3, [r4, 0xc]                                 |     *((r4 + 0xc)) = r3;
    0x00042ca2 str r2, [sp, 0x24]                                |     var_24h = r2;
                                                                 |     if (r0 > r3) {
    0x00042ca4 bgt 0x42cb2                                       |         goto label_84;
                                                                 |     }
    0x00042ca6 b.w 0x4362a                                       |     goto label_85;
                                                                 |     do {
    0x00042caa adds r3, 1                                        |         r3++;
    0x00042cac cmp r3, r0                                        |         
                                                                 |         if (r3 == r0) {
    0x00042cae beq.w 0x43332                                     |             goto label_86;
                                                                 |         }
                                                                 | label_84:
    0x00042cb2 add.w r1, r3, r3, lsl 3                           |         r1 = r3 + (r3 << 3);
    0x00042cb6 add.w r1, r6, r1, lsl 3                           |         r1 = r6 + (r1 << 3);
    0x00042cba ldrb.w r2, [r1, 0x2d]                             |         r2 = *((r1 + 0x2d));
    0x00042cbe ubfx r2, r2, 3, 1                                 |         r2 = (r2 >> 3) & ((1 << 1) - 1);
    0x00042cc2 cmp r2, 0                                         |         
    0x00042cc4 beq 0x42caa                                       |         
                                                                 |     } while (r2 == 0);
    0x00042cc6 ldr r3, [r1, 0x30]                                |     r3 = *((r1 + 0x30));
    0x00042cc8 str r3, [sp, 0x30]                                |     var_30h = r3;
                                                                 | label_18:
    0x00042cca ldrd r6, r3, [r5, 0x44]                           |     __asm ("ldrd r6, r3, [r5, 0x44]");
    0x00042cce adds r3, 1                                        |     r3++;
    0x00042cd0 str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x00042cd2 adds r3, r6, 1                                    |     r3 = r6 + 1;
    0x00042cd4 str r3, [r5, 0x44]                                |     *((r5 + 0x44)) = r3;
    0x00042cd6 ldrb r2, [r4, 4]                                  |     r2 = *((r4 + 4));
    0x00042cd8 cmp r2, 0x73                                      |     
                                                                 |     if (r2 == 0x73) {
    0x00042cda beq.w 0x433d4                                     |         goto label_87;
                                                                 |     }
    0x00042cde ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00042ce0 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00042ce2 beq.w 0x43478                                     |         goto label_88;
                                                                 |     }
    0x00042ce6 movs r3, 0                                        |     r3 = 0;
    0x00042ce8 ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x00042cea strd r3, r3, [sp, 0x98]                           |     __asm ("strd r3, r3, [var_98h]");
    0x00042cee movs r3, 7                                        |     r3 = 7;
    0x00042cf0 str r7, [sp]                                      |     *(sp) = r7;
    0x00042cf2 str r6, [sp, 0x94]                                |     var_94h = r6;
    0x00042cf4 str r2, [r5, 0x48]                                |     *((r5 + 0x48)) = r2;
                                                                 | label_23:
    0x00042cf6 movs r1, 0x3a                                     |     r1 = 0x3a;
    0x00042cf8 strh.w r3, [sp, 0x90]                             |     var_90h = r3;
    0x00042cfc ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x00042cfe mov r3, r2                                        |     r3 = r2;
    0x00042d00 ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x00042d02 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00042d06 mov r1, r4                                        |     r1 = r4;
    0x00042d08 mov r0, r5                                        |     r0 = r5;
    0x00042d0a bl 0x25144                                        |     fcn_00025144 (r0, r1, r2);
    0x00042d0e ldr r7, [sp, 0x24]                                |     r7 = var_24h;
    0x00042d10 mvn r2, 5                                         |     r2 = ~5;
    0x00042d14 movs r1, 0x38                                     |     r1 = 0x38;
    0x00042d16 ldr r3, [r7]                                      |     r3 = *(r7);
    0x00042d18 str r2, [sp, 8]                                   |     var_8h = r2;
    0x00042d1a movs r2, 0                                        |     r2 = 0;
    0x00042d1c str r0, [sp, 4]                                   |     var_4h = r0;
    0x00042d1e str r2, [sp]                                      |     *(sp) = r2;
    0x00042d20 adds r3, 2                                        |     r3 += 2;
    0x00042d22 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x00042d24 mov r2, r6                                        |     r2 = r6;
    0x00042d26 bl 0x1977c                                        |     fcn_0001977c (r0, r1, r2, r3, r4, r5);
    0x00042d2a str r7, [sp, 0xa0]                                |     var_a0h = r7;
                                                                 | label_35:
    0x00042d2c ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
                                                                 |     if (r3 != 0) {
    0x00042d2e cbz r3, 0x42d48                                   |         
    0x00042d30 mov r2, r3                                        |         r2 = r3;
    0x00042d32 movs r3, 0                                        |         r3 = 0;
    0x00042d34 str r3, [sp]                                      |         *(sp) = r3;
    0x00042d36 movs r1, 0x38                                     |         r1 = 0x38;
    0x00042d38 ldr r0, [sp, 0x20]                                |         r0 = var_20h;
    0x00042d3a bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00042d3e ldrh r3, [r4, 6]                                  |         r3 = *((r4 + 6));
    0x00042d40 str r0, [r4, 0x10]                                |         *((r4 + 0x10)) = r0;
    0x00042d42 orr r3, r3, 8                                     |         r3 |= 8;
    0x00042d46 strh r3, [r4, 6]                                  |         *((r4 + 6)) = r3;
                                                                 |     }
    0x00042d48 ldr r7, [sp, 0x28]                                |     r7 = var_28h;
    0x00042d4a movs r3, 0                                        |     r3 = 0;
    0x00042d4c add r2, sp, 0x90                                  |     r2 += var_90h;
    0x00042d4e str r3, [r4, 0x30]                                |     *((r4 + 0x30)) = r3;
    0x00042d50 mov r0, r5                                        |     r0 = r5;
    0x00042d52 str r2, [sp, 0x38]                                |     var_38h = r2;
    0x00042d54 mov r1, r7                                        |     r1 = r7;
    0x00042d56 str r3, [r7, 0x38]                                |     *((r7 + 0x38)) = r3;
    0x00042d58 bl 0x392a8                                        |     fcn_000392a8 (r0, r1, r2, r3, r4, r5);
    0x00042d5c str r4, [r7, 0x38]                                |     *((r7 + 0x38)) = r4;
    0x00042d5e mov r7, r0                                        |     r7 = r0;
    0x00042d60 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00042d62 bne 0x42e40                                       |         
    0x00042d64 ldr r3, [sp, 0x34]                                |         r3 = var_34h;
    0x00042d66 mov r2, r6                                        |         r2 = r6;
    0x00042d68 movs r1, 0x6a                                     |         r1 = 0x6a;
    0x00042d6a str r0, [sp]                                      |         *(sp) = r0;
    0x00042d6c ldr r0, [sp, 0x20]                                |         r0 = var_20h;
    0x00042d6e bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00042d72 mov r3, r7                                        |         r3 = r7;
    0x00042d74 str r7, [sp]                                      |         *(sp) = r7;
    0x00042d76 ldr r2, [sp, 0x30]                                |         r2 = var_30h;
    0x00042d78 mov r7, r0                                        |         r7 = r0;
    0x00042d7a movs r1, 0x66                                     |         r1 = 0x66;
    0x00042d7c ldr r0, [sp, 0x20]                                |         r0 = var_20h;
    0x00042d7e bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00042d82 ldr r3, [sp, 0x24]                                |         r3 = var_24h;
    0x00042d84 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00042d86 beq.w 0x434e6                                     |             goto label_89;
                                                                 |         }
    0x00042d8a ldr r3, [r3]                                      |         r3 = *(r3);
    0x00042d8c movs r1, 0x2e                                     |         r1 = 0x2e;
    0x00042d8e ldr r2, [sp, 0x3c]                                |         r2 = var_3ch;
    0x00042d90 ldr r0, [sp, 0x20]                                |         r0 = var_20h;
    0x00042d92 adds r3, 1                                        |         r3++;
    0x00042d94 str r2, [sp]                                      |         *(sp) = r2;
    0x00042d96 mov r2, r6                                        |         r2 = r6;
    0x00042d98 bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
                                                                 | label_28:
    0x00042d9c mov r2, r6                                        |         r2 = r6;
    0x00042d9e ldr r6, [sp, 0x20]                                |         r6 = var_20h;
    0x00042da0 movs r3, 0                                        |         r3 = 0;
    0x00042da2 movs r1, 0x4b                                     |         r1 = 0x4b;
    0x00042da4 str r3, [sp]                                      |         *(sp) = r3;
    0x00042da6 mov r0, r6                                        |         r0 = r6;
    0x00042da8 bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00042dac ldr r0, [r6, 0x18]                                |         r0 = *((r6 + 0x18));
    0x00042dae str r6, [sp, 0x20]                                |         var_20h = r6;
    0x00042db0 bl 0x19ed0                                        |         fcn_00019ed0 (r0);
    0x00042db4 ldr r2, [sp, 0x4c]                                |         r2 = var_4ch;
    0x00042db6 mov r6, r0                                        |         r6 = r0;
    0x00042db8 cmp r2, 0                                         |         
                                                                 |         if (r2 > 0) {
    0x00042dba ble 0x42dc6                                       |             
    0x00042dbc mov r1, r2                                        |             r1 = r2;
    0x00042dbe mov r2, r0                                        |             r2 = r0;
    0x00042dc0 ldr r0, [sp, 0x20]                                |             r0 = var_20h;
    0x00042dc2 bl 0x19b28                                        |             fcn_00019b28 (r0, r1, r2);
                                                                 |         }
    0x00042dc6 ldr r1, [sp, 0x34]                                |         r1 = var_34h;
    0x00042dc8 mov r0, r5                                        |         r0 = r5;
    0x00042dca ldr r2, [r4]                                      |         r2 = *(r4);
    0x00042dcc ldr r3, [sp, 0x30]                                |         r3 = var_30h;
    0x00042dce strd r6, r1, [sp, 0xc]                            |         __asm ("strd r6, r1, [var_10h]");
    0x00042dd2 movs r1, 0                                        |         r1 = 0;
    0x00042dd4 strd r1, r1, [sp]                                 |         __asm ("strd r1, r1, [sp]");
    0x00042dd8 mov r1, r4                                        |         r1 = r4;
    0x00042dda str.w r8, [sp, 8]                                 |         __asm ("str.w r8, [var_8h]");
    0x00042dde bl 0x41964                                        |         fcn_00041964 (r0, r1, r2, r3, r4, r5, r6);
    0x00042de2 ldr r3, [sp, 0x40]                                |         r3 = var_40h;
    0x00042de4 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x00042de6 bne.w 0x43562                                     |             goto label_90;
                                                                 |         }
                                                                 | label_31:
    0x00042dea ldr r2, [sp, 0x20]                                |         r2 = var_20h;
    0x00042dec mvns r6, r6                                       |         r6 = ~r6;
    0x00042dee ldr r1, [r2, 0x18]                                |         r1 = *((r2 + 0x18));
                                                                 |         if (r6 >= r6) {
    0x00042df0 bmi 0x42dfc                                       |             
    0x00042df2 ldr r3, [r1, 0x70]                                |             r3 = *((r1 + 0x70));
                                                                 |             if (r3 == 0) {
    0x00042df4 cbz r3, 0x42dfc                                   |                 goto label_91;
                                                                 |             }
    0x00042df6 ldr r2, [r2, 0x20]                                |             r2 = *((r2 + 0x20));
    0x00042df8 str.w r2, [r3, r6, lsl 2]                         |             __asm ("str.w r2, [r3, r6, lsl 2]");
                                                                 |         }
                                                                 | label_91:
    0x00042dfc ldr r3, [sp, 0x20]                                |         r3 = var_20h;
    0x00042dfe movs r6, 0                                        |         r6 = 0;
    0x00042e00 ldr r2, [sp, 0x38]                                |         r2 = var_38h;
    0x00042e02 mov r0, r5                                        |         r0 = r5;
    0x00042e04 ldr r3, [r3, 0x20]                                |         r3 = *((r3 + 0x20));
    0x00042e06 subs r3, 1                                        |         r3--;
    0x00042e08 str r3, [r1, 0x58]                                |         *((r1 + 0x58)) = r3;
    0x00042e0a mov r1, r4                                        |         r1 = r4;
    0x00042e0c str r6, [r4, 0x34]                                |         *((r4 + 0x34)) = r6;
    0x00042e0e bl 0x392a8                                        |         fcn_000392a8 (r0, r1, r2, r3, r4, r5);
    0x00042e12 ldr r2, [sp, 0x28]                                |         r2 = var_28h;
    0x00042e14 mov r3, r7                                        |         r3 = r7;
    0x00042e16 movs r1, 0x10                                     |         r1 = 0x10;
    0x00042e18 str r2, [r4, 0x34]                                |         *((r4 + 0x34)) = r2;
    0x00042e1a mov r2, r6                                        |         r2 = r6;
    0x00042e1c str r6, [sp]                                      |         *(sp) = r6;
    0x00042e1e ldr r6, [sp, 0x20]                                |         r6 = var_20h;
    0x00042e20 mov r0, r6                                        |         r0 = r6;
    0x00042e22 bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00042e26 ldr r3, [sp, 0x34]                                |         r3 = var_34h;
    0x00042e28 ldr r2, [r6, 0x18]                                |         r2 = *((r6 + 0x18));
    0x00042e2a mvns r1, r3                                       |         r1 = ~r3;
                                                                 |         if (r1 >= r3) {
    0x00042e2c bmi 0x42e38                                       |             
    0x00042e2e ldr r3, [r2, 0x70]                                |             r3 = *((r2 + 0x70));
                                                                 |             if (r3 == 0) {
    0x00042e30 cbz r3, 0x42e38                                   |                 goto label_92;
                                                                 |             }
    0x00042e32 ldr r0, [r6, 0x20]                                |             r0 = *((r6 + 0x20));
    0x00042e34 str.w r0, [r3, r1, lsl 2]                         |             __asm ("str.w r0, [r3, r1, lsl 2]");
                                                                 |         }
                                                                 | label_92:
    0x00042e38 ldr r3, [sp, 0x20]                                |         r3 = var_20h;
    0x00042e3a ldr r3, [r3, 0x20]                                |         r3 = *((r3 + 0x20));
    0x00042e3c subs r3, 1                                        |         r3--;
    0x00042e3e str r3, [r2, 0x58]                                |         *((r2 + 0x58)) = r3;
                                                                 |     }
                                                                 | label_27:
    0x00042e40 ldr r1, [r4, 0x30]                                |     r1 = *((r4 + 0x30));
    0x00042e42 ldr r0, [r5]                                      |     r0 = *(r5);
    0x00042e44 bl 0x12ec8                                        |     fcn_00012ec8 (r0);
    0x00042e48 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00042e4a str r3, [r4, 0x30]                                |     *((r4 + 0x30)) = r3;
    0x00042e4c ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x00042e4e str r3, [r4, 0x3c]                                |     *((r4 + 0x3c)) = r3;
    0x00042e50 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00042e52 str r3, [r4, 0x40]                                |     *((r4 + 0x40)) = r3;
                                                                 | label_83:
    0x00042e54 movs r7, 0                                        |     r7 = 0;
    0x00042e56 strd r7, r7, [sp, 0x20]                           |     __asm ("strd r7, r7, [var_24h]");
    0x00042e5a b 0x42754                                         |     goto label_10;
                                                                 | label_50:
    0x00042e5c ldr r1, [pc, 0x134]                               |     
    0x00042e5e mov r0, r5                                        |     r0 = r5;
    0x00042e60 movs r7, 1                                        |     r7 = 1;
    0x00042e62 add r1, pc                                        |     r1 = 0x85dfa;
    0x00042e64 bl 0x1ca34                                        |     fcn_0001ca34 (r0);
    0x00042e68 ldrd r2, r3, [sp, 0x70]                           |     __asm ("ldrd r2, r3, [var_70h]");
    0x00042e6c strd r2, r3, [fp, 8]                              |     __asm ("strd r2, r3, [fp, 8]");
    0x00042e70 b.w 0x424a4                                       |     goto label_3;
                                                                 | label_63:
    0x00042e74 ldr r3, [r4]                                      |     r3 = *(r4);
    0x00042e76 movs r2, 1                                        |     r2 = 1;
    0x00042e78 mov r0, sb                                        |     r0 = sb;
    0x00042e7a ldr r3, [r3]                                      |     r3 = *(r3);
    0x00042e7c mov r1, r3                                        |     r1 = r3;
    0x00042e7e mov r8, r3                                        |     r8 = r3;
    0x00042e80 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00042e82 bl 0xd9f0                                         |     r0 = fcn_0000d9f0 (r0, r1, r2);
    0x00042e86 mov r6, r0                                        |     r6 = r0;
    0x00042e88 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00042e8a beq.w 0x43472                                     |         goto label_93;
                                                                 |     }
    0x00042e8e mov r3, r8                                        |     r3 = r8;
    0x00042e90 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x00042e92 ble 0x42eda                                       |         goto label_94;
                                                                 |     }
    0x00042e94 add.w r8, r0, 0x10                                |     r8 = r0 + 0x10;
    0x00042e98 movs r2, 0                                        |     r2 = 0;
    0x00042e9a mov r6, r8                                        |     r6 = r8;
    0x00042e9c str r7, [sp, 0x28]                                |     var_28h = r7;
    0x00042e9e ldr.w r8, [sp, 0x20]                              |     r8 = var_20h;
    0x00042ea2 mov r7, r4                                        |     r7 = r4;
    0x00042ea4 str r0, [sp, 0x24]                                |     var_24h = r0;
    0x00042ea6 mov r4, r5                                        |     r4 = r5;
    0x00042ea8 mov r5, r2                                        |     r5 = r2;
    0x00042eaa b 0x42eb2                                         |     
                                                                 |     while (r0 != 0) {
                                                                 | label_11:
    0x00042eac adds r5, 1                                        |         r5++;
    0x00042eae cmp r8, r5                                        |         
                                                                 |         if (r8 == r5) {
    0x00042eb0 beq 0x42ed4                                       |             goto label_95;
                                                                 |         }
    0x00042eb2 mov r2, r5                                        |         r2 = r5;
    0x00042eb4 mov r1, r7                                        |         r1 = r7;
    0x00042eb6 mov r0, r4                                        |         r0 = r4;
    0x00042eb8 bl 0x25110                                        |         fcn_00025110 (r0, r1, r2);
    0x00042ebc str r0, [r6, 4]!                                  |         *((r6 += 4)) = r0;
    0x00042ec0 cmp r0, 0                                         |         
    0x00042ec2 bne 0x42eac                                       |         
                                                                 |     }
    0x00042ec4 ldr.w r2, [sb, 8]                                 |     r2 = *((sb + 8));
    0x00042ec8 str r2, [r6]                                      |     *(r6) = r2;
    0x00042eca b 0x42eac                                         |     goto label_11;
                                                                 | label_51:
    0x00042ecc ldr r2, [pc, 0xc8]                                |     
    0x00042ece add r2, pc                                        |     r2 = 0x85e6a;
    0x00042ed0 b.w 0x42534                                       |     goto label_8;
                                                                 | label_95:
    0x00042ed4 mov r4, r7                                        |     r4 = r7;
    0x00042ed6 ldr r6, [sp, 0x24]                                |     r6 = var_24h;
    0x00042ed8 ldr r7, [sp, 0x28]                                |     r7 = var_28h;
                                                                 | label_94:
    0x00042eda str.w sb, [sp, 0x24]                              |     __asm ("str.w sb, [var_24h]");
    0x00042ede mov sb, r6                                        |     sb = r6;
    0x00042ee0 ldr r6, [sp, 0x20]                                |     r6 = var_20h;
    0x00042ee2 str r7, [sp, 0x20]                                |     var_20h = r7;
    0x00042ee4 ldr r7, [sp, 0x1c]                                |     r7 = var_1ch;
                                                                 | label_12:
    0x00042ee6 add.w r5, r4, 0x10                                |     r5 = r4 + 0x10;
    0x00042eea add.w r8, r4, 0x18                                |     r8 = r4 + 0x18;
                                                                 |     do {
    0x00042eee ldr r1, [r5], 4                                   |         r1 = *(r5);
                                                                 |         r5 += 4;
    0x00042ef2 cmp r1, 0                                         |         
                                                                 |         if (r1 < 0) {
    0x00042ef4 blt 0x42f2c                                       |             goto label_96;
                                                                 |         }
    0x00042ef6 ldr r3, [r7, 0x20]                                |         r3 = *((r7 + 0x20));
    0x00042ef8 mov r0, r7                                        |         r0 = r7;
    0x00042efa cmp r1, r3                                        |         
    0x00042efc ittt lo                                           |         
                                                                 |         if (r1 >= r3) {
    0x00042efe ldrlo r3, [r7, 4]                                 |             r3 = *((r7 + 4));
                                                                 |         }
                                                                 |         if (r1 >= r3) {
    0x00042f00 addlo r2, r1, r1, lsl 2                           |             r2 = r1 + (r1 << 2);
                                                                 |         }
                                                                 |         if (r1 < r3) {
    0x00042f04 add.w r3, r3, r2, lsl 2                           |             r3 += (r2 << 2);
                                                                 |         }
    0x00042f08 mov r2, sb                                        |         r2 = sb;
    0x00042f0a it lo                                             |         
                                                                 |         if (r1 >= r3) {
    0x00042f0c strlo r6, [r3, 8]                                 |             *((r3 + 8)) = r6;
                                                                 |         }
    0x00042f0e ldr.w r3, [sb]                                    |         r3 = *(sb);
    0x00042f12 adds r3, 1                                        |         r3++;
    0x00042f14 str.w r3, [sb]                                    |         __asm ("str.w r3, [sb]");
    0x00042f18 mvn r3, 5                                         |         r3 = ~5;
    0x00042f1c bl 0x1021c                                        |         fcn_0001021c (r0, r1, r2, r3);
    0x00042f20 cmp r8, r5                                        |         
    0x00042f22 mov.w r3, -1                                      |         r3 = -1;
    0x00042f26 str r3, [r5, -0x4]                                |         *((r5 - 0x4)) = r3;
    0x00042f2a bne 0x42eee                                       |         
                                                                 |     } while (r8 != r5);
                                                                 | label_96:
    0x00042f2c ldr r4, [r4, 0x34]                                |     r4 = *((r4 + 0x34));
    0x00042f2e cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x00042f30 bne 0x42ee6                                       |         goto label_12;
                                                                 |     }
    0x00042f32 mov r6, sb                                        |     r6 = sb;
    0x00042f34 ldrd r7, sb, [sp, 0x20]                           |     __asm ("ldrd r7, sb, [var_24h]");
    0x00042f38 ldr r3, [r6]                                      |     r3 = *(r6);
    0x00042f3a subs r3, 1                                        |     r3--;
    0x00042f3c str r3, [r6]                                      |     *(r6) = r3;
    0x00042f3e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00042f40 bne.w 0x4277a                                     |         goto label_13;
                                                                 |     }
    0x00042f44 mov r0, r6                                        |     r0 = r6;
    0x00042f46 blx 0x6050                                        |     fcn_00006050 ();
    0x00042f4a b 0x4277a                                         |     goto label_13;
                                                                 | label_57:
    0x00042f9c ldrb.w r2, [sp, 0x68]                             |     r2 = var_68h;
    0x00042fa0 cmp r2, 1                                         |     
                                                                 |     if (r2 != 1) {
    0x00042fa2 bne.w 0x4335c                                     |         goto label_97;
                                                                 |     }
    0x00042fa6 ldr r3, [sp, 0x6c]                                |     r3 = var_6ch;
    0x00042fa8 str r3, [sp, 0x28]                                |     var_28h = r3;
                                                                 | label_19:
    0x00042faa ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00042fac movs r2, 1                                        |     r2 = 1;
    0x00042fae strh.w r2, [sp, 0x90]                             |     var_90h = r2;
    0x00042fb2 mov.w sl, 0                                       |     sl = 0;
    0x00042fb6 mov r1, r6                                        |     r1 = r6;
    0x00042fb8 mov r0, r5                                        |     r0 = r5;
    0x00042fba str r3, [sp, 0x94]                                |     var_94h = r3;
    0x00042fbc add r3, sp, 0x90                                  |     r3 += var_90h;
    0x00042fbe mov r2, r3                                        |     r2 = r3;
    0x00042fc0 str r3, [sp, 0x38]                                |     var_38h = r3;
    0x00042fc2 ldr.w r3, [r5, 0x1d4]                             |     r3 = *((r5 + 0x1d4));
    0x00042fc6 strd sl, sl, [sp, 0x98]                           |     __asm ("strd sl, sl, [var_98h]");
    0x00042fca str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00042fcc bl 0x392a8                                        |     r0 = fcn_000392a8 (r0, r1, r2, r3, r4, r5);
    0x00042fd0 mov r7, r0                                        |     r7 = r0;
    0x00042fd2 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00042fd4 bne.w 0x4249c                                     |         goto label_2;
                                                                 |     }
    0x00042fd8 ldr r3, [r4, 0x3c]                                |     r3 = *((r4 + 0x3c));
    0x00042fda ldrb r1, [r4, 4]                                  |     r1 = *((r4 + 4));
    0x00042fdc ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x00042fde str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x00042fe0 ldr r3, [r4, 0x40]                                |     r3 = *((r4 + 0x40));
    0x00042fe2 cmp r1, 0x75                                      |     
    0x00042fe4 ite eq                                            |     
                                                                 |     if (r1 != 0x75) {
    0x00042fe6 moveq r1, 2                                       |         r1 = 2;
                                                                 |     }
                                                                 |     if (r1 == 0x75) {
    0x00042fe8 movne r1, 1                                       |         r1 = 1;
                                                                 |     }
    0x00042fea str r0, [r4, 0x34]                                |     *((r4 + 0x34)) = r0;
    0x00042fec str r3, [sp, 0x30]                                |     var_30h = r3;
    0x00042fee ldr.w r3, [r5, 0x1d4]                             |     r3 = *((r5 + 0x1d4));
    0x00042ff2 str r0, [r4, 0x3c]                                |     *((r4 + 0x3c)) = r0;
    0x00042ff4 strb.w r1, [sp, 0x90]                             |     var_90h = r1;
    0x00042ff8 mov r1, r4                                        |     r1 = r4;
    0x00042ffa str r0, [r4, 0x40]                                |     *((r4 + 0x40)) = r0;
    0x00042ffc mov r0, r5                                        |     r0 = r5;
    0x00042ffe str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00043000 bl 0x392a8                                        |     fcn_000392a8 (r0, r1, r2, r3, r4, r5);
    0x00043004 ldr r1, [r4, 0x30]                                |     r1 = *((r4 + 0x30));
    0x00043006 mov r7, r0                                        |     r7 = r0;
    0x00043008 mov r0, sb                                        |     r0 = sb;
    0x0004300a bl 0x12ec8                                        |     fcn_00012ec8 (r0);
    0x0004300e ldrb r3, [r4, 4]                                  |     r3 = *((r4 + 4));
    0x00043010 str.w sl, [r4, 0x30]                              |     __asm ("str.w sl, [r4, 0x30]");
    0x00043014 ldr.w sl, [r4, 0x34]                              |     sl = *((r4 + 0x34));
    0x00043018 cmp r3, 0x73                                      |     
    0x0004301a str r6, [r4, 0x34]                                |     *((r4 + 0x34)) = r6;
                                                                 |     if (r3 == 0x73) {
    0x0004301c bne 0x43030                                       |         
    0x0004301e ldrd r2, r1, [r6, 0x18]                           |         __asm ("ldrd r2, r1, [r6, 0x18]");
    0x00043022 ldr r3, [r4, 0x18]                                |         r3 = *((r4 + 0x18));
    0x00043024 adds r3, r3, r2                                   |         r3 += r2;
    0x00043026 str r3, [r4, 0x18]                                |         *((r4 + 0x18)) = r3;
    0x00043028 ldr r3, [r4, 0x1c]                                |         r3 = *((r4 + 0x1c));
    0x0004302a adc.w r3, r3, r1                                  |         __asm ("adc.w r3, r3, r1");
    0x0004302e str r3, [r4, 0x1c]                                |         *((r4 + 0x1c)) = r3;
                                                                 |     }
    0x00043030 ldr r1, [r4, 0x3c]                                |     r1 = *((r4 + 0x3c));
    0x00043032 mov r0, sb                                        |     r0 = sb;
    0x00043034 bl 0x12e68                                        |     fcn_00012e68 (r0);
    0x00043038 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x0004303a ldrb.w r2, [sp, 0x68]                             |     r2 = var_68h;
    0x0004303e str r3, [r4, 0x3c]                                |     *((r4 + 0x3c)) = r3;
    0x00043040 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00043042 cmp r2, 1                                         |     
    0x00043044 str r3, [r4, 0x40]                                |     *((r4 + 0x40)) = r3;
    0x00043046 mov.w r3, 0                                       |     r3 = 0;
    0x0004304a strd r3, r3, [r4, 8]                              |     __asm ("strd r3, r3, [r4, 8]");
                                                                 |     if (r2 == 1) {
    0x0004304e beq.w 0x42754                                     |         goto label_10;
                                                                 |     }
    0x00043052 cmp r2, 9                                         |     
                                                                 |     if (r2 == 9) {
    0x00043054 beq.w 0x43596                                     |         goto label_98;
                                                                 |     }
                                                                 | label_34:
    0x00043058 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0004305a ldr r0, [r3, 0x18]                                |     r0 = *((r3 + 0x18));
    0x0004305c bl 0x19ed0                                        |     fcn_00019ed0 (r0);
    0x00043060 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00043062 mov r6, r0                                        |     r6 = r0;
    0x00043064 ldr r0, [r3, 0x18]                                |     r0 = *((r3 + 0x18));
    0x00043066 bl 0x19ed0                                        |     fcn_00019ed0 (r0);
    0x0004306a ldr r3, [r4, 8]                                   |     r3 = *((r4 + 8));
    0x0004306c str r0, [sp, 0x2c]                                |     var_2ch = r0;
                                                                 |     if (r3 == 0) {
    0x0004306e cbnz r3, 0x4307a                                  |         
    0x00043070 mov r2, r6                                        |         r2 = r6;
    0x00043072 mov r1, r4                                        |         r1 = r4;
    0x00043074 mov r0, r5                                        |         r0 = r5;
    0x00043076 bl 0x3c4f0                                        |         fcn_0003c4f0 (r0, r1, r2);
                                                                 |     }
    0x0004307a movs r3, 0                                        |     r3 = 0;
    0x0004307c ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x0004307e movs r1, 0x6a                                     |     r1 = 0x6a;
    0x00043080 str r3, [sp]                                      |     *(sp) = r3;
    0x00043082 ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x00043084 mov r3, r6                                        |     r3 = r6;
    0x00043086 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00043088 ldc2 p8, c9, [r7, 0x1c]!                          |     __asm ("ldc2 p8, c9, [r7, 0x1c]!");
    0x0004308c ldr r2, [r4]                                      |     r2 = *(r4);
    0x0004308e ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00043090 ldr r1, [r0, 0x20]                                |     r1 = *((r0 + 0x20));
    0x00043092 mov r0, r5                                        |     r0 = r5;
    0x00043094 str.w r8, [sp, 8]                                 |     __asm ("str.w r8, [var_8h]");
    0x00043098 str r6, [sp, 0x10]                                |     var_10h = r6;
    0x0004309a str r1, [sp, 0x30]                                |     var_30h = r1;
    0x0004309c ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x0004309e str r1, [sp, 0xc]                                 |     var_ch = r1;
    0x000430a0 movs r1, 0                                        |     r1 = 0;
    0x000430a2 strd r1, r1, [sp]                                 |     __asm ("strd r1, r1, [sp]");
    0x000430a6 mov r1, r4                                        |     r1 = r4;
    0x000430a8 bl 0x41964                                        |     fcn_00041964 (r0, r1, r2, r3, r4, r5, r6);
    0x000430ac ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x000430ae ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x000430b0 mvns r3, r3                                       |     r3 = ~r3;
    0x000430b2 ldr r1, [r0, 0x18]                                |     r1 = *((r0 + 0x18));
                                                                 |     if (r3 >= r3) {
    0x000430b4 bmi 0x430c0                                       |         
    0x000430b6 ldr r2, [r1, 0x70]                                |         r2 = *((r1 + 0x70));
                                                                 |         if (r2 == 0) {
    0x000430b8 cbz r2, 0x430c0                                   |             goto label_99;
                                                                 |         }
    0x000430ba ldr r0, [r0, 0x20]                                |         r0 = *((r0 + 0x20));
    0x000430bc str.w r0, [r2, r3, lsl 2]                         |         __asm ("str.w r0, [r2, r3, lsl 2]");
                                                                 |     }
                                                                 | label_99:
    0x000430c0 ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x000430c2 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x000430c4 ldr r2, [r0, 0x20]                                |     r2 = *((r0 + 0x20));
    0x000430c6 mov r8, r0                                        |     r8 = r0;
    0x000430c8 subs r2, 1                                        |     r2--;
    0x000430ca str r2, [r1, 0x58]                                |     *((r1 + 0x58)) = r2;
    0x000430cc movs r2, 0                                        |     r2 = 0;
    0x000430ce movs r1, 9                                        |     r1 = 9;
    0x000430d0 str r2, [sp]                                      |     *(sp) = r2;
    0x000430d2 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x000430d4 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000430d8 mvns r2, r6                                       |     r2 = ~r6;
    0x000430da ldr.w r1, [r8, 0x18]                              |     r1 = *((r8 + 0x18));
                                                                 |     if (r2 >= r6) {
    0x000430de bmi 0x430ec                                       |         
    0x000430e0 ldr r3, [r1, 0x70]                                |         r3 = *((r1 + 0x70));
                                                                 |         if (r3 == 0) {
    0x000430e2 cbz r3, 0x430ec                                   |             goto label_100;
                                                                 |         }
    0x000430e4 ldr.w r0, [r8, 0x20]                              |         r0 = *((r8 + 0x20));
    0x000430e8 str.w r0, [r3, r2, lsl 2]                         |         __asm ("str.w r0, [r3, r2, lsl 2]");
                                                                 |     }
                                                                 | label_100:
    0x000430ec ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x000430ee ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x000430f0 ldr r3, [r0, 0x20]                                |     r3 = *((r0 + 0x20));
    0x000430f2 subs r3, 1                                        |     r3--;
    0x000430f4 str r3, [r1, 0x58]                                |     *((r1 + 0x58)) = r3;
    0x000430f6 movs r3, 0                                        |     r3 = 0;
    0x000430f8 movs r1, 0x3b                                     |     r1 = 0x3b;
    0x000430fa str r3, [sp]                                      |     *(sp) = r3;
    0x000430fc bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00043100 b.w 0x42754                                       |     goto label_10;
                                                                 | label_56:
    0x00043104 ldr r3, [r4, 8]                                   |     r3 = *((r4 + 8));
    0x00043106 mov r2, r8                                        |     r2 = r8;
    0x00043108 mov r1, r6                                        |     r1 = r6;
    0x0004310a mov r0, r5                                        |     r0 = r5;
    0x0004310c str r3, [r6, 8]                                   |     *((r6 + 8)) = r3;
    0x0004310e ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
    0x00043110 str r3, [r6, 0xc]                                 |     *((r6 + 0xc)) = r3;
    0x00043112 ldr r3, [r4, 0x3c]                                |     r3 = *((r4 + 0x3c));
    0x00043114 str r3, [r6, 0x3c]                                |     *((r6 + 0x3c)) = r3;
    0x00043116 ldr r3, [r4, 0x40]                                |     r3 = *((r4 + 0x40));
    0x00043118 str r3, [r6, 0x40]                                |     *((r6 + 0x40)) = r3;
    0x0004311a ldr.w r3, [r5, 0x1d4]                             |     r3 = *((r5 + 0x1d4));
    0x0004311e str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00043120 bl 0x392a8                                        |     fcn_000392a8 (r0, r1, r2, r3, r4, r5);
    0x00043124 strd r7, r7, [r4, 0x3c]                           |     __asm ("strd r7, r7, [r4, 0x3c]");
    0x00043128 mov r7, r0                                        |     r7 = r0;
    0x0004312a cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004312c bne.w 0x4249c                                     |         goto label_2;
                                                                 |     }
    0x00043130 ldr r2, [r6, 8]                                   |     r2 = *((r6 + 8));
    0x00043132 ldr r3, [r6, 0xc]                                 |     r3 = *((r6 + 0xc));
    0x00043134 str r0, [r4, 0x34]                                |     *((r4 + 0x34)) = r0;
    0x00043136 str r2, [sp, 0x28]                                |     var_28h = r2;
    0x00043138 str r2, [r4, 8]                                   |     *((r4 + 8)) = r2;
    0x0004313a str r3, [r4, 0xc]                                 |     *((r4 + 0xc)) = r3;
    0x0004313c cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0004313e bne.w 0x434f8                                     |         goto label_101;
                                                                 |     }
    0x00043142 ldr.w r3, [r5, 0x1d4]                             |     r3 = *((r5 + 0x1d4));
    0x00043146 mov r2, r8                                        |     r2 = r8;
    0x00043148 mov r1, r4                                        |     r1 = r4;
    0x0004314a mov r0, r5                                        |     r0 = r5;
    0x0004314c str r3, [sp, 0x24]                                |     var_24h = r3;
    0x0004314e bl 0x392a8                                        |     fcn_000392a8 (r0, r1, r2, r3, r4, r5);
    0x00043152 ldr r2, [r6, 0x18]                                |     r2 = *((r6 + 0x18));
    0x00043154 mov r7, r0                                        |     r7 = r0;
    0x00043156 ldr r3, [r4, 0x18]                                |     r3 = *((r4 + 0x18));
    0x00043158 ldr r0, [r6, 0x3c]                                |     r0 = *((r6 + 0x3c));
    0x0004315a ldr.w sl, [r4, 0x34]                              |     sl = *((r4 + 0x34));
    0x0004315e adds.w r8, r3, r2                                 |     r8 = r3 + r2;
    0x00043162 ldr r3, [r6, 0x1c]                                |     r3 = *((r6 + 0x1c));
    0x00043164 ldr r2, [r4, 0x1c]                                |     r2 = *((r4 + 0x1c));
    0x00043166 str.w r8, [r4, 0x18]                              |     __asm ("str.w r8, [r4, 0x18]");
    0x0004316a str r6, [r4, 0x34]                                |     *((r4 + 0x34)) = r6;
    0x0004316c adc.w r3, r2, r3                                  |     __asm ("adc.w r3, r2, r3");
    0x00043170 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x00043172 str r3, [r4, 0x1c]                                |     *((r4 + 0x1c)) = r3;
    0x00043174 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00043176 beq.w 0x42754                                     |         goto label_10;
                                                                 |     }
    0x0004317a add r1, sp, 0x90                                  |     r1 += var_90h;
    0x0004317c bl 0x7efc                                         |     r0 = fcn_00007efc (r0, r1);
    0x00043180 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00043182 beq.w 0x42754                                     |         goto label_10;
                                                                 |     }
    0x00043186 ldr r3, [sp, 0x90]                                |     r3 = var_90h;
    0x00043188 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x0004318a ble.w 0x42754                                     |         goto label_10;
                                                                 |     }
    0x0004318e ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x00043190 asrs r2, r3, 0x1f                                 |     r2 = r3 >> 0x1f;
    0x00043192 cmp r3, r8                                        |     
    0x00043194 sbcs.w r1, r2, r1                                 |     __asm ("sbcs.w r1, r2, r1");
                                                                 |     if (r3 >= r8) {
    0x00043198 bhs.w 0x42754                                     |         goto label_10;
                                                                 |     }
                                                                 | label_30:
    0x0004319c strd r3, r2, [r4, 0x18]                           |     __asm ("strd r3, r2, [r4, 0x18]");
                                                                 | label_29:
    0x000431a0 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x000431a2 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000431a4 beq.w 0x42754                                     |         goto label_10;
                                                                 |     }
    0x000431a8 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x000431aa ldr r3, [r1, 0x20]                                |     r3 = *((r1 + 0x20));
    0x000431ac cmp r2, r3                                        |     
    0x000431ae itttt lo                                          |     
                                                                 |     if (r2 >= r3) {
    0x000431b0 ldrlo r1, [r1, 4]                                 |         r1 = *((r1 + 4));
                                                                 |     }
                                                                 |     if (r2 >= r3) {
    0x000431b2 addlo r2, r2, r2, lsl 2                           |         r2 += (r2 << 2);
                                                                 |     }
                                                                 |     if (r2 >= r3) {
    0x000431b6 addlo r2, r1, r2, lsl 2                           |         r2 = r1 + (r2 << 2);
                                                                 |     }
                                                                 |     if (r2 < r3) {
    0x000431ba str r3, [r2, 8]                                   |         *((r2 + 8)) = r3;
                                                                 |     }
    0x000431bc subs r3, 1                                        |     r3--;
    0x000431be ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x000431c0 ldr r2, [r2, 0x18]                                |     r2 = *((r2 + 0x18));
    0x000431c2 str r3, [r2, 0x58]                                |     *((r2 + 0x58)) = r3;
    0x000431c4 b.w 0x42754                                       |     goto label_10;
                                                                 | label_76:
    0x000431c8 mov.w r8, 0                                       |     r8 = 0;
    0x000431cc ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x000431ce ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x000431d0 movs r1, 0x11                                     |     r1 = 0x11;
    0x000431d2 mov r0, r7                                        |     r0 = r7;
    0x000431d4 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x000431d8 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000431dc ldrd r3, r2, [sp, 0x2c]                           |     __asm ("ldrd r3, r2, [var_2ch]");
    0x000431e0 mov sb, r0                                        |     sb = r0;
    0x000431e2 movs r1, 0x16                                     |     r1 = 0x16;
    0x000431e4 mov r0, r7                                        |     r0 = r7;
    0x000431e6 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x000431ea bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000431ee mov r3, sb                                        |     r3 = sb;
    0x000431f0 mov r2, r8                                        |     r2 = r8;
    0x000431f2 movs r1, 0x10                                     |     r1 = 0x10;
    0x000431f4 mov r0, r7                                        |     r0 = r7;
    0x000431f6 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x000431fa bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000431fe ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x00043200 movs r1, 0x11                                     |     r1 = 0x11;
    0x00043202 ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x00043204 mov r0, r7                                        |     r0 = r7;
    0x00043206 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x0004320a bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0004320e ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x00043210 mov r3, sl                                        |     r3 = sl;
    0x00043212 movs r1, 0x16                                     |     r1 = 0x16;
    0x00043214 str r0, [sp, 0x38]                                |     var_38h = r0;
    0x00043216 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x0004321a mov r0, r7                                        |     r0 = r7;
    0x0004321c bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00043220 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00043222 mov r2, r8                                        |     r2 = r8;
    0x00043224 movs r1, 0x10                                     |     r1 = 0x10;
    0x00043226 mov r0, r7                                        |     r0 = r7;
    0x00043228 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x0004322c bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00043230 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00043232 cmp r3, 0x74                                      |     
                                                                 |     if (r3 != 0x74) {
    0x00043234 bne 0x43336                                       |         goto label_102;
                                                                 |     }
    0x00043236 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x00043238 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x0004323a b 0x42ac0                                         |     goto label_14;
                                                                 | label_69:
    0x0004323c ldr.w r8, [sp, 0x40]                              |     r8 = var_40h;
    0x00043240 mov r1, sb                                        |     r1 = sb;
    0x00043242 ldr r0, [r5]                                      |     r0 = *(r5);
    0x00043244 str.w sb, [r4, 0x30]                              |     __asm ("str.w sb, [r4, 0x30]");
    0x00043248 mov r2, r8                                        |     r2 = r8;
    0x0004324a bl 0xe3ec                                         |     fcn_0000e3ec (r0, r1, r2);
    0x0004324e ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00043250 str.w r8, [sp, 0x4c]                              |     __asm ("str.w r8, [var_4ch]");
    0x00043254 str r0, [r3, 0x30]                                |     *((r3 + 0x30)) = r0;
                                                                 | label_36:
    0x00043256 ldr r3, [r4]                                      |     r3 = *(r4);
    0x00043258 mov.w r8, 0                                       |     r8 = 0;
    0x0004325c ldr r1, [r5, 0x48]                                |     r1 = *((r5 + 0x48));
    0x0004325e mov r2, r8                                        |     r2 = r8;
    0x00043260 mov r0, r7                                        |     r0 = r7;
    0x00043262 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00043264 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x00043268 str r3, [sp, 0x28]                                |     var_28h = r3;
    0x0004326a adds r3, 1                                        |     r3++;
    0x0004326c add r3, r1                                        |     r3 += r1;
    0x0004326e adds r1, 1                                        |     r1++;
    0x00043270 str r3, [r5, 0x48]                                |     *((r5 + 0x48)) = r3;
    0x00043272 mov r3, r1                                        |     r3 = r1;
    0x00043274 str r1, [sp, 0x48]                                |     var_48h = r1;
    0x00043276 movs r1, 0x19                                     |     r1 = 0x19;
    0x00043278 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0004327c ldr.w sb, [sp, 0x28]                              |     sb = var_28h;
    0x00043280 movs r2, 1                                        |     r2 = 1;
    0x00043282 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x00043284 mov r1, sb                                        |     r1 = sb;
    0x00043286 bl 0xd9f0                                         |     r0 = fcn_0000d9f0 (r0, r1, r2);
    0x0004328a mov sl, r0                                        |     sl = r0;
    0x0004328c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004328e beq.w 0x428d6                                     |         goto label_15;
                                                                 |     }
    0x00043292 cmp sb, r8                                        |     
    0x00043294 mov r3, sb                                        |     r3 = sb;
                                                                 |     if (sb <= r8) {
    0x00043296 ble.w 0x428d6                                     |         goto label_15;
                                                                 |     }
    0x0004329a str r6, [sp, 0x28]                                |     var_28h = r6;
    0x0004329c add.w sb, r0, 0x10                                |     sb = r0 + 0x10;
    0x000432a0 mov r6, r4                                        |     r6 = r4;
    0x000432a2 mov r4, r3                                        |     r4 = r3;
                                                                 |     do {
    0x000432a4 mov r2, r8                                        |         r2 = r8;
    0x000432a6 mov r1, r6                                        |         r1 = r6;
    0x000432a8 mov r0, r5                                        |         r0 = r5;
    0x000432aa bl 0x25110                                        |         fcn_00025110 (r0, r1, r2);
    0x000432ae ldr.w r3, [sl, 0x10]                              |         r3 = *((sl + 0x10));
    0x000432b2 mov.w r2, 0                                       |         r2 = 0;
    0x000432b6 str r0, [sb, 4]!                                  |         *((sb += 4)) = r0;
    0x000432ba strb.w r2, [r3, r8]                               |         *((r3 + r8)) = r2;
    0x000432be add.w r8, r8, 1                                   |         r8++;
    0x000432c2 cmp r4, r8                                        |         
    0x000432c4 bne 0x432a4                                       |         
                                                                 |     } while (r4 != r8);
    0x000432c6 mov r4, r6                                        |     r4 = r6;
    0x000432c8 ldr r6, [sp, 0x28]                                |     r6 = var_28h;
    0x000432ca b.w 0x428d6                                       |     goto label_15;
                                                                 | label_21:
    0x000432ce mov.w r8, 0                                       |     r8 = 0;
    0x000432d2 ldrd r2, r3, [sp, 0x58]                           |     __asm ("ldrd r2, r3, [var_58h]");
    0x000432d6 movs r1, 0x11                                     |     r1 = 0x11;
    0x000432d8 mov r0, r7                                        |     r0 = r7;
    0x000432da str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x000432de bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000432e2 ldrd r2, r3, [sp, 0x28]                           |     __asm ("ldrd r2, r3, [var_28h]");
    0x000432e6 mov sl, r0                                        |     sl = r0;
    0x000432e8 movs r1, 0x16                                     |     r1 = 0x16;
    0x000432ea mov r0, r7                                        |     r0 = r7;
    0x000432ec str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x000432f0 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000432f4 mov r2, r8                                        |     r2 = r8;
    0x000432f6 mov r3, sl                                        |     r3 = sl;
    0x000432f8 movs r1, 0x10                                     |     r1 = 0x10;
    0x000432fa str r0, [sp, 0x48]                                |     var_48h = r0;
    0x000432fc str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x00043300 mov r0, r7                                        |     r0 = r7;
    0x00043302 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00043306 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x00043308 ldr r3, [r4, 0x18]                                |     r3 = *((r4 + 0x18));
    0x0004330a ldr r2, [r1, 0x18]                                |     r2 = *((r1 + 0x18));
    0x0004330c adds r3, r3, r2                                   |     r3 += r2;
    0x0004330e ldr r2, [r1, 0x1c]                                |     r2 = *((r1 + 0x1c));
    0x00043310 str r3, [r4, 0x18]                                |     *((r4 + 0x18)) = r3;
    0x00043312 ldr r3, [r4, 0x1c]                                |     r3 = *((r4 + 0x1c));
    0x00043314 adc.w r3, r3, r2                                  |     __asm ("adc.w r3, r3, r2");
    0x00043318 str r3, [r4, 0x1c]                                |     *((r4 + 0x1c)) = r3;
    0x0004331a b.w 0x42a64                                       |     goto label_16;
                                                                 | label_80:
    0x0004331e ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
                                                                 |     do {
    0x00043320 mov r3, r1                                        |         r3 = r1;
    0x00043322 ldr r1, [r1, 0x34]                                |         r1 = *((r1 + 0x34));
    0x00043324 cmp r1, 0                                         |         
    0x00043326 bne 0x43320                                       |         
                                                                 |     } while (r1 != 0);
    0x00043328 ldr r2, [r3]                                      |     r2 = *(r3);
    0x0004332a mov r0, r5                                        |     r0 = r5;
    0x0004332c bl 0x1bea8                                        |     fcn_0001bea8 (r0, r1, r2, r3, r4);
    0x00043330 b 0x42bc0                                         |     goto label_17;
                                                                 | label_86:
    0x00043332 str r2, [sp, 0x30]                                |     var_30h = r2;
    0x00043334 b 0x42cca                                         |     goto label_18;
                                                                 | label_102:
    0x00043336 ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x00043338 mov r3, sl                                        |     r3 = sl;
    0x0004333a movs r1, 0x16                                     |     r1 = 0x16;
    0x0004333c mov r0, r7                                        |     r0 = r7;
    0x0004333e str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x00043342 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00043346 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00043348 mov r2, r8                                        |     r2 = r8;
    0x0004334a str r0, [sp, 0x24]                                |     var_24h = r0;
    0x0004334c movs r1, 0x10                                     |     r1 = 0x10;
    0x0004334e mov r0, r7                                        |     r0 = r7;
    0x00043350 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x00043354 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00043358 b.w 0x42ac0                                       |     goto label_14;
                                                                 | label_97:
    0x0004335c str r3, [sp]                                      |     *(sp) = r3;
    0x0004335e movs r1, 0x38                                     |     r1 = 0x38;
    0x00043360 ldr r7, [r5, 0x44]                                |     r7 = *((r5 + 0x44));
    0x00043362 ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x00043364 adds r2, r7, 1                                    |     r2 = r7 + 1;
    0x00043366 str r7, [sp, 0x28]                                |     var_28h = r7;
    0x00043368 str r2, [r5, 0x44]                                |     *((r5 + 0x44)) = r2;
    0x0004336a mov r2, r7                                        |     r2 = r7;
    0x0004336c bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00043370 mov r3, r4                                        |     r3 = r4;
    0x00043372 str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
                                                                 |     do {
    0x00043374 mov r2, r3                                        |         r2 = r3;
    0x00043376 ldr r3, [r3, 0x38]                                |         r3 = *((r3 + 0x38));
    0x00043378 cmp r3, 0                                         |         
    0x0004337a bne 0x43374                                       |         
                                                                 |     } while (r3 != 0);
    0x0004337c ldrh r3, [r2, 6]                                  |     r3 = *((r2 + 6));
    0x0004337e orr r3, r3, 8                                     |     r3 |= 8;
    0x00043382 strh r3, [r2, 6]                                  |     *((r2 + 6)) = r3;
    0x00043384 b 0x42faa                                         |     goto label_19;
                                                                 | label_77:
    0x00043386 movs r1, 0                                        |     r1 = 0;
    0x00043388 ldrd r2, r3, [sp, 0x58]                           |     __asm ("ldrd r2, r3, [var_58h]");
    0x0004338c str r1, [sp]                                      |     *(sp) = r1;
    0x0004338e mov r0, r7                                        |     r0 = r7;
    0x00043390 movs r1, 0x11                                     |     r1 = 0x11;
    0x00043392 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00043396 b.w 0x42acc                                       |     goto label_20;
                                                                 | label_73:
    0x0004339a ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x0004339c mov r1, r4                                        |     r1 = r4;
    0x0004339e ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x000433a0 mov r0, r5                                        |     r0 = r5;
    0x000433a2 str r3, [sp, 4]                                   |     var_4h = r3;
    0x000433a4 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x000433a6 strd sl, r3, [sp, 8]                              |     __asm ("strd sl, r3, [var_8h]");
    0x000433aa ldr r3, [sp, 0x58]                                |     r3 = var_58h;
    0x000433ac str r3, [sp]                                      |     *(sp) = r3;
    0x000433ae mov r3, fp                                        |     r3 = fp;
    0x000433b0 bl 0x19f18                                        |     fcn_00019f18 (r0, r1, r2, r3, r4, r5, r6);
    0x000433b4 str r0, [sp, 0x5c]                                |     var_5ch = r0;
    0x000433b6 cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x000433ba beq 0x432ce                                       |         goto label_21;
                                                                 |     }
    0x000433bc ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x000433c0 subs r3, 1                                        |     r3--;
    0x000433c2 str.w r3, [sl]                                    |     __asm ("str.w r3, [sl]");
    0x000433c6 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000433c8 bne 0x432ce                                       |         goto label_21;
                                                                 |     }
                                                                 |     do {
    0x000433ca mov r0, sl                                        |         r0 = sl;
    0x000433cc blx 0x6050                                        |         fcn_00006050 ();
    0x000433d0 b.w 0x42a54                                       |         goto label_22;
                                                                 | label_87:
    0x000433d4 ldr r1, [sp, 0x24]                                |         r1 = var_24h;
    0x000433d6 adds r2, r6, 2                                    |         r2 = r6 + 2;
    0x000433d8 cmp r1, 0                                         |         
                                                                 |         if (r1 == 0) {
    0x000433da beq.w 0x435aa                                     |             goto label_103;
                                                                 |         }
    0x000433de str r2, [r5, 0x44]                                |         *((r5 + 0x44)) = r2;
    0x000433e0 ldr r2, [sp, 0x3c]                                |         r2 = var_3ch;
    0x000433e2 str r3, [sp, 0x2c]                                |         var_2ch = r3;
    0x000433e4 movs r3, 0                                        |         r3 = 0;
    0x000433e6 str r7, [sp]                                      |         *(sp) = r7;
    0x000433e8 strd r3, r3, [sp, 0x98]                           |         __asm ("strd r3, r3, [var_98h]");
    0x000433ec movs r3, 8                                        |         r3 = 8;
    0x000433ee str r2, [r5, 0x48]                                |         *((r5 + 0x48)) = r2;
    0x000433f0 str r6, [sp, 0x94]                                |         var_94h = r6;
    0x000433f2 b 0x42cf6                                         |         goto label_23;
                                                                 | label_74:
    0x000433f4 str.w sl, [sp, 0x5c]                              |         __asm ("str.w sl, [var_5ch]");
    0x000433f8 b.w 0x42a54                                       |         goto label_22;
                                                                 | label_64:
    0x000433fc lsl.w r8, r6, 2                                   |         r8 = r6 << 2;
    0x00043400 ldr r0, [sp, 0x20]                                |         r0 = var_20h;
    0x00043402 str r3, [sp, 0x28]                                |         var_28h = r3;
    0x00043404 mov r1, r8                                        |         r1 = r8;
    0x00043406 bl 0xd3a0                                         |         fcn_0000d3a0 (r0, r1);
    0x0004340a ldr r3, [sp, 0x28]                                |         r3 = var_28h;
    0x0004340c str r0, [sp, 0x40]                                |         var_40h = r0;
    0x0004340e cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00043410 beq.w 0x435e8                                     |             goto label_104;
                                                                 |         }
    0x00043414 cmp r6, 0                                         |         
    0x00043416 ldr.w r2, [sb, 4]                                 |         r2 = *((sb + 4));
                                                                 |         if (r6 <= 0) {
    0x0004341a ble.w 0x43644                                     |             goto label_105;
                                                                 |         }
    0x0004341e add r3, sp, 0x90                                  |         r3 += var_90h;
    0x00043420 str r3, [sp, 0x38]                                |         var_38h = r3;
    0x00043422 b.w 0x42898                                       |         goto label_24;
                                                                 | label_75:
    0x00043426 str r3, [sp, 0x5c]                                |         var_5ch = r3;
    0x00043428 b 0x433ca                                         |         
                                                                 |     } while (1);
                                                                 | label_72:
    0x0004342a ldr r1, [r5, 0x48]                                |     r1 = *((r5 + 0x48));
    0x0004342c ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
    0x0004342e adds r0, r1, 2                                    |     r0 = r1 + 2;
    0x00043430 add.w sb, r1, 1                                   |     sb = r1 + 1;
    0x00043434 str r0, [sp, 0x44]                                |     var_44h = r0;
    0x00043436 str r0, [r5, 0x48]                                |     *((r5 + 0x48)) = r0;
                                                                 |     if (r3 != 0) {
    0x00043438 cbz r3, 0x4343c                                   |         
    0x0004343a adds r2, r3, 1                                    |         r2 = r3 + 1;
                                                                 |     }
    0x0004343c mov.w r8, 0                                       |     r8 = 0;
    0x00043440 mov r3, sb                                        |     r3 = sb;
    0x00043442 movs r1, 0x21                                     |     r1 = 0x21;
    0x00043444 mov r0, r7                                        |     r0 = r7;
    0x00043446 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x0004344a bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0004344e ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x00043450 mov r2, sb                                        |     r2 = sb;
    0x00043452 movs r1, 0x21                                     |     r1 = 0x21;
    0x00043454 mov r0, r7                                        |     r0 = r7;
    0x00043456 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x0004345a bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0004345e b.w 0x42922                                       |     goto label_25;
                                                                 | label_71:
    0x00043462 mov r1, r2                                        |     r1 = r2;
    0x00043464 mov r3, r8                                        |     r3 = r8;
    0x00043466 ldr r2, [r2, 0x30]                                |     r2 = *((r2 + 0x30));
    0x00043468 mov r0, r5                                        |     r0 = r5;
    0x0004346a bl 0x1f130                                        |     fcn_0001f130 (r0, r1, r2, r3);
    0x0004346e b.w 0x428fa                                       |     goto label_26;
                                                                 | label_93:
    0x00043472 movs r7, 7                                        |     r7 = 7;
    0x00043474 b.w 0x4277a                                       |     goto label_13;
                                                                 | label_88:
    0x00043478 ldr r1, [sp, 0x3c]                                |     r1 = var_3ch;
    0x0004347a movs r0, 5                                        |     r0 = 5;
    0x0004347c ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x0004347e ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x00043480 str r1, [r5, 0x48]                                |     *((r5 + 0x48)) = r1;
    0x00043482 strd r3, r3, [sp, 0x98]                           |     __asm ("strd r3, r3, [var_98h]");
    0x00043486 mov r3, r1                                        |     r3 = r1;
    0x00043488 str r7, [sp]                                      |     *(sp) = r7;
    0x0004348a movs r1, 0x3a                                     |     r1 = 0x3a;
    0x0004348c strh.w r0, [sp, 0x90]                             |     var_90h = r0;
    0x00043490 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x00043492 str r6, [sp, 0x94]                                |     var_94h = r6;
    0x00043494 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00043498 mov r3, r7                                        |     r3 = r7;
    0x0004349a ldr r7, [sp, 0x24]                                |     r7 = var_24h;
    0x0004349c mov r2, r6                                        |     r2 = r6;
    0x0004349e movs r1, 0x38                                     |     r1 = 0x38;
    0x000434a0 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x000434a2 str r7, [sp]                                      |     *(sp) = r7;
    0x000434a4 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000434a8 mov r3, r7                                        |     r3 = r7;
    0x000434aa str r7, [r4, 0x30]                                |     *((r4 + 0x30)) = r7;
    0x000434ac ldr r7, [sp, 0x28]                                |     r7 = var_28h;
    0x000434ae mov r0, r5                                        |     r0 = r5;
    0x000434b0 str r3, [r7, 0x38]                                |     *((r7 + 0x38)) = r3;
    0x000434b2 add r3, sp, 0x90                                  |     r3 += var_90h;
    0x000434b4 mov r1, r7                                        |     r1 = r7;
    0x000434b6 mov r2, r3                                        |     r2 = r3;
    0x000434b8 str r3, [sp, 0x38]                                |     var_38h = r3;
    0x000434ba bl 0x392a8                                        |     fcn_000392a8 (r0, r1, r2, r3, r4, r5);
    0x000434be str r4, [r7, 0x38]                                |     *((r7 + 0x38)) = r4;
    0x000434c0 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000434c2 bne.w 0x42e40                                     |         goto label_27;
                                                                 |     }
    0x000434c6 ldr r7, [sp, 0x24]                                |     r7 = var_24h;
    0x000434c8 mov r2, r6                                        |     r2 = r6;
    0x000434ca ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x000434cc movs r1, 0x6a                                     |     r1 = 0x6a;
    0x000434ce ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x000434d0 str r7, [sp]                                      |     *(sp) = r7;
    0x000434d2 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000434d6 mov r3, r7                                        |     r3 = r7;
    0x000434d8 str r7, [sp]                                      |     *(sp) = r7;
    0x000434da ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x000434dc mov r7, r0                                        |     r7 = r0;
    0x000434de movs r1, 0x66                                     |     r1 = 0x66;
    0x000434e0 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x000434e2 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
                                                                 | label_89:
    0x000434e6 movs r2, 0                                        |     r2 = 0;
    0x000434e8 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x000434ea str r2, [sp]                                      |     *(sp) = r2;
    0x000434ec movs r1, 0x64                                     |     r1 = 0x64;
    0x000434ee ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x000434f0 mov r2, r6                                        |     r2 = r6;
    0x000434f2 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000434f6 b 0x42d9c                                         |     goto label_28;
                                                                 | label_101:
    0x000434f8 mov r3, r0                                        |     r3 = r0;
    0x000434fa movs r1, 0x89                                     |     r1 = 0x89;
    0x000434fc str r0, [sp]                                      |     *(sp) = r0;
    0x000434fe ldr r0, [sp, 0x1c]                                |     r0 = var_1ch;
    0x00043500 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00043504 ldr.w r3, [r5, 0x1d4]                             |     r3 = *((r5 + 0x1d4));
    0x00043508 mov r2, r8                                        |     r2 = r8;
    0x0004350a str r0, [sp, 0x28]                                |     var_28h = r0;
    0x0004350c mov r1, r4                                        |     r1 = r4;
    0x0004350e mov r0, r5                                        |     r0 = r5;
    0x00043510 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00043512 bl 0x392a8                                        |     fcn_000392a8 (r0, r1, r2, r3, r4, r5);
    0x00043516 ldr r2, [r6, 0x18]                                |     r2 = *((r6 + 0x18));
    0x00043518 mov r7, r0                                        |     r7 = r0;
    0x0004351a ldr r3, [r4, 0x18]                                |     r3 = *((r4 + 0x18));
    0x0004351c ldr r0, [r6, 0x3c]                                |     r0 = *((r6 + 0x3c));
    0x0004351e ldr.w sl, [r4, 0x34]                              |     sl = *((r4 + 0x34));
    0x00043522 adds.w r8, r3, r2                                 |     r8 = r3 + r2;
    0x00043526 ldr r3, [r6, 0x1c]                                |     r3 = *((r6 + 0x1c));
    0x00043528 ldr r2, [r4, 0x1c]                                |     r2 = *((r4 + 0x1c));
    0x0004352a str.w r8, [r4, 0x18]                              |     __asm ("str.w r8, [r4, 0x18]");
    0x0004352e str r6, [r4, 0x34]                                |     *((r4 + 0x34)) = r6;
    0x00043530 adc.w r3, r2, r3                                  |     __asm ("adc.w r3, r2, r3");
    0x00043534 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x00043536 str r3, [r4, 0x1c]                                |     *((r4 + 0x1c)) = r3;
    0x00043538 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004353a beq.w 0x431a0                                     |         goto label_29;
                                                                 |     }
    0x0004353e add r1, sp, 0x90                                  |     r1 += var_90h;
    0x00043540 bl 0x7efc                                         |     r0 = fcn_00007efc (r0, r1);
    0x00043544 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00043546 beq.w 0x431a0                                     |         goto label_29;
                                                                 |     }
    0x0004354a ldr r3, [sp, 0x90]                                |     r3 = var_90h;
    0x0004354c cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x0004354e ble.w 0x431a0                                     |         goto label_29;
                                                                 |     }
    0x00043552 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x00043554 asrs r2, r3, 0x1f                                 |     r2 = r3 >> 0x1f;
    0x00043556 cmp r3, r8                                        |     
    0x00043558 sbcs.w r1, r2, r1                                 |     __asm ("sbcs.w r1, r2, r1");
                                                                 |     if (r3 >= r8) {
    0x0004355c bhs.w 0x431a0                                     |         goto label_29;
                                                                 |     }
    0x00043560 b 0x4319c                                         |     goto label_30;
                                                                 | label_90:
    0x00043562 mov r2, r3                                        |     r2 = r3;
    0x00043564 mov.w r3, -1                                      |     r3 = -1;
    0x00043568 str r3, [sp]                                      |     *(sp) = r3;
    0x0004356a movs r1, 0x89                                     |     r1 = 0x89;
    0x0004356c ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x0004356e ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x00043570 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00043574 b 0x42dea                                         |     goto label_31;
                                                                 | label_59:
    0x00043576 ldr r3, [r5, 0x48]                                |     r3 = *((r5 + 0x48));
    0x00043578 adds r6, r3, 1                                    |     r6 = r3 + 1;
    0x0004357a str r6, [r5, 0x48]                                |     *((r5 + 0x48)) = r6;
    0x0004357c b.w 0x42688                                       |     goto label_32;
                                                                 | label_58:
    0x00043580 mov r1, r4                                        |     r1 = r4;
                                                                 |     do {
    0x00043582 mov r3, r1                                        |         r3 = r1;
    0x00043584 ldr r1, [r1, 0x34]                                |         r1 = *((r1 + 0x34));
    0x00043586 cmp r1, 0                                         |         
    0x00043588 bne 0x43582                                       |         
                                                                 |     } while (r1 != 0);
    0x0004358a ldr r2, [r3]                                      |     r2 = *(r3);
    0x0004358c mov r0, r5                                        |     r0 = r5;
    0x0004358e bl 0x1bea8                                        |     fcn_0001bea8 (r0, r1, r2, r3, r4);
    0x00043592 b.w 0x42644                                       |     goto label_33;
                                                                 | label_98:
    0x00043596 mov r1, r4                                        |     r1 = r4;
                                                                 |     do {
    0x00043598 mov r3, r1                                        |         r3 = r1;
    0x0004359a ldr r1, [r1, 0x34]                                |         r1 = *((r1 + 0x34));
    0x0004359c cmp r1, 0                                         |         
    0x0004359e bne 0x43598                                       |         
                                                                 |     } while (r1 != 0);
    0x000435a0 ldr r2, [r3]                                      |     r2 = *(r3);
    0x000435a2 mov r0, r5                                        |     r0 = r5;
    0x000435a4 bl 0x1bea8                                        |     fcn_0001bea8 (r0, r1, r2, r3, r4);
    0x000435a8 b 0x43058                                         |     goto label_34;
                                                                 | label_103:
    0x000435aa ldr r1, [sp, 0x3c]                                |     r1 = var_3ch;
    0x000435ac movs r0, 6                                        |     r0 = 6;
    0x000435ae str r2, [r5, 0x44]                                |     *((r5 + 0x44)) = r2;
    0x000435b0 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x000435b2 str r1, [r5, 0x48]                                |     *((r5 + 0x48)) = r1;
    0x000435b4 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x000435b6 mov r3, r1                                        |     r3 = r1;
    0x000435b8 strd r2, r2, [sp, 0x98]                           |     __asm ("strd r2, r2, [var_98h]");
    0x000435bc movs r1, 0x3a                                     |     r1 = 0x3a;
    0x000435be ldr r2, [sp, 0x30]                                |     r2 = var_30h;
    0x000435c0 strh.w r0, [sp, 0x90]                             |     var_90h = r0;
    0x000435c4 str r7, [sp]                                      |     *(sp) = r7;
    0x000435c6 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x000435c8 str r6, [sp, 0x94]                                |     var_94h = r6;
    0x000435ca bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000435ce ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x000435d0 mov r3, r7                                        |     r3 = r7;
    0x000435d2 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x000435d4 movs r1, 0x38                                     |     r1 = 0x38;
    0x000435d6 str r2, [sp]                                      |     *(sp) = r2;
    0x000435d8 mov r2, r6                                        |     r2 = r6;
    0x000435da bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000435de b.w 0x42d2c                                       |     goto label_35;
                                                                 | label_82:
    0x000435e2 movs r7, 7                                        |     r7 = 7;
    0x000435e4 b.w 0x424a4                                       |     goto label_3;
                                                                 | label_104:
    0x000435e8 ldr.w r8, [sp, 0x40]                              |     r8 = var_40h;
    0x000435ec mov r1, sb                                        |     r1 = sb;
    0x000435ee ldr r0, [r5]                                      |     r0 = *(r5);
    0x000435f0 str.w sb, [r4, 0x30]                              |     __asm ("str.w sb, [r4, 0x30]");
    0x000435f4 mov r2, r8                                        |     r2 = r8;
    0x000435f6 mov sl, r8                                        |     sl = r8;
    0x000435f8 bl 0xe3ec                                         |     fcn_0000e3ec (r0, r1, r2);
    0x000435fc ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x000435fe strd r8, r8, [sp, 0x48]                           |     __asm ("strd r8, r8, [var_4ch]");
    0x00043602 str r0, [r3, 0x30]                                |     *((r3 + 0x30)) = r0;
    0x00043604 add r3, sp, 0x90                                  |     r3 += var_90h;
    0x00043606 str r3, [sp, 0x38]                                |     var_38h = r3;
    0x00043608 b.w 0x428d6                                       |     goto label_15;
                                                                 | label_70:
    0x0004360c mov r1, r4                                        |     r1 = r4;
    0x0004360e mov r0, r5                                        |     r0 = r5;
    0x00043610 bl 0x25144                                        |     fcn_00025144 (r0, r1, r2);
    0x00043614 mov r1, sb                                        |     r1 = sb;
    0x00043616 str r0, [sp, 0x4c]                                |     var_4ch = r0;
    0x00043618 movs r2, 0                                        |     r2 = 0;
    0x0004361a ldr r0, [r5]                                      |     r0 = *(r5);
    0x0004361c str.w sb, [r4, 0x30]                              |     __asm ("str.w sb, [r4, 0x30]");
    0x00043620 bl 0xe3ec                                         |     fcn_0000e3ec (r0, r1, r2);
    0x00043624 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00043626 str r0, [r3, 0x30]                                |     *((r3 + 0x30)) = r0;
    0x00043628 b 0x43256                                         |     goto label_36;
                                                                 | label_85:
    0x0004362a str r3, [sp, 0x30]                                |     var_30h = r3;
    0x0004362c b.w 0x42cca                                       |     goto label_18;
                                                                 | label_65:
    0x00043630 add r3, sp, 0x90                                  |     r3 += var_90h;
    0x00043632 str r3, [sp, 0x38]                                |     var_38h = r3;
    0x00043634 b.w 0x4287a                                       |     goto label_37;
                                                                 | label_60:
    0x00043638 movs r2, 1                                        |     r2 = 1;
    0x0004363a strb r2, [r3, 6]                                  |     *((r3 + 6)) = r2;
    0x0004363c b.w 0x426d4                                       |     goto label_38;
                                                                 | label_43:
    0x00043640 blx 0x6498                                        |     fcn_00006498 ();
                                                                 | label_105:
    0x00043644 mov r1, r4                                        |     r1 = r4;
    0x00043646 mov r0, r5                                        |     r0 = r5;
    0x00043648 str r3, [sp, 0x28]                                |     var_28h = r3;
    0x0004364a bl 0x25144                                        |     fcn_00025144 (r0, r1, r2);
    0x0004364e ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00043650 mov r1, sb                                        |     r1 = sb;
    0x00043652 str r0, [sp, 0x4c]                                |     var_4ch = r0;
    0x00043654 str.w sb, [r4, 0x30]                              |     __asm ("str.w sb, [r4, 0x30]");
    0x00043658 mov r2, r3                                        |     r2 = r3;
    0x0004365a ldr r0, [r5]                                      |     r0 = *(r5);
    0x0004365c bl 0xe3ec                                         |     fcn_0000e3ec (r0, r1, r2);
    0x00043660 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00043662 str r0, [r3, 0x30]                                |     *((r3 + 0x30)) = r0;
    0x00043664 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
    0x00043666 str r3, [sp, 0x48]                                |     var_48h = r3;
    0x00043668 add r3, sp, 0x90                                  |     r3 += var_90h;
    0x0004366a str r3, [sp, 0x38]                                |     var_38h = r3;
    0x0004366c b.w 0x428d6                                       |     goto label_15;
                                                                 | }


r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x44a2c).
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-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x479a8 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.000479a8 ()                                      | void fcn_000479a8 (int16_t arg_50h, int16_t arg_54h, 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_90h, int16_t arg_98h, int16_t arg_9ch, int16_t arg_b4h) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     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_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;
                                                                 | label_0:
    0x00047608 ldrd r3, r2, [sp, 0x2c]                           |     __asm ("ldrd r3, r2, [var_2ch]");
    0x0004760c lsls r7, r4, 1                                    |     r7 = r4 << 1;
    0x0004760e adds r0, r2, r7                                   |     r0 = r2 + r7;
                                                                 |     do {
    0x00047610 cmp.w r4, 0x1ae                                   |         
                                                                 |         if (r4 >= 0x1ae) {
    0x00047614 bge.w 0x47a6a                                     |             goto label_16;
                                                                 |         }
    0x00047618 ldrsh.w r2, [r0, 0xef0]                           |         r2 = *((r0 + 0xef0));
    0x0004761c cmn.w r2, 0x56                                    |         
                                                                 |         if (r2 == 0x56) {
    0x00047620 beq.w 0x47a6a                                     |             goto label_16;
                                                                 |         }
    0x00047624 adds r1, r2, r3                                   |         r1 = r2 + r3;
    0x00047626 cmp.w r1, 0x5d8                                   |         
                                                                 |         if (r1 <= 0x5d8) {
    0x0004762a bhi 0x4763a                                       |             
    0x0004762c add.w r6, fp, r1                                  |             r6 = fp + r1;
    0x00047630 ldrb.w r6, [r6, 0x658]                            |             r6 = *((r6 + 0x658));
    0x00047634 cmp r6, r3                                        |             
                                                                 |             if (r6 == r3) {
    0x00047636 beq.w 0x47a24                                     |                 goto label_17;
                                                                 |             }
                                                                 |         }
                                                                 |         if (r3 == 0) {
    0x0004763a cbz r3, 0x47660                                   |             goto label_18;
                                                                 |         }
    0x0004763c cmp r3, 0x45                                      |         
                                                                 |         if (r3 > 0x45) {
    0x0004763e bhi 0x4764a                                       |             goto label_19;
                                                                 |         }
    0x00047640 add r3, sb                                        |         r3 += sb;
    0x00047642 ldrb.w r3, [r3, 0xc34]                            |         r3 = *((r3 + 0xc34));
    0x00047646 cmp r3, 0                                         |         
    0x00047648 bne 0x47610                                       |         
                                                                 |     } while (r3 != 0);
                                                                 | label_19:
    0x0004764a adds r2, 0x46                                     |     r2 += 0x46;
                                                                 |     if (r2 >= 0x46) {
    0x0004764c bmi 0x47660                                       |         
    0x0004764e ldr.w r3, [pc, 0xa50]                             |         r3 = *(0x000480a0);
    0x00047652 add r3, pc                                        |         r3 += pc;
    0x00047654 adds r1, r3, r2                                   |         r1 = r3 + r2;
    0x00047656 ldrb.w r1, [r1, 0x658]                            |         r1 = *((r1 + 0x658));
    0x0004765a cmp r1, 0x46                                      |         
                                                                 |         if (r1 == 0x46) {
    0x0004765c beq.w 0x47ab2                                     |             goto label_20;
                                                                 |         }
                                                                 |     }
                                                                 | label_18:
    0x00047660 ldr.w r3, [pc, 0xa40]                             |     
    0x00047664 add r3, pc                                        |     r3 = 0x8f70c;
    0x00047666 add r3, r7                                        |     r3 += r7;
    0x00047668 ldrh.w r1, [r3, 0x154]                            |     r1 = *((r3 + 0x154));
                                                                 | label_1:
    0x0004766c movw r3, 0x281                                    |     r3 = 0x281;
    0x00047670 cmp r1, r3                                        |     
                                                                 |     if (r1 <= r3) {
    0x00047672 ble.w 0x47a36                                     |         goto label_21;
                                                                 |     }
                                                                 |     do {
    0x00047676 cmp.w r1, 0x3c8                                   |         
    0x0004767a ldr.w r6, [sl, 8]                                 |         r6 = *((sl + 8));
                                                                 |         if (r1 > 0x3c8) {
    0x0004767e bgt.w 0x47ad6                                     |             goto label_22;
                                                                 |         }
    0x00047682 subw r3, r1, 0x282                                |         __asm ("subw r3, r1, aav.0x000000ff");
    0x00047686 lsls r4, r5, 4                                    |         r4 = r5 << 4;
    0x00047688 str r3, [sp, 0x20]                                |         var_20h = r3;
    0x0004768a movs r3, 0                                        |         r3 = 0;
    0x0004768c strd r3, r3, [sp, 0x90]                           |         __asm ("strd r3, r3, [sp, 0x90]");
    0x00047690 add r2, sp, 0x90                                  |         r2 += arg_90h;
    0x00047692 str r3, [sp, 0x98]                                |         *(arg_98h) = r3;
    0x00047694 add.w r3, r4, 0xc                                 |         r3 = r4 + 0xc;
    0x00047698 add.w r8, sl, r3                                  |         r8 = sl + r3;
    0x0004769c subw r1, r1, 0x287                                |         __asm ("subw r1, r1, aav.0x000000ff");
    0x000476a0 movw r3, 0x141                                    |         r3 = 0x141;
    0x000476a4 str r2, [sp, 0x24]                                |         var_24h = r2;
    0x000476a6 cmp r1, r3                                        |         
                                                                 |         if (r1 <= r3) {
    0x000476a8 bhi.w 0x479a8                                     |             
                                                                 |             /* switch table (1 cases) at 0x476b0 */
    0x000476ac tbh [pc, r1, lsl 1]                               |             __asm ("tbh [pc, r1, lsl 1]");
                                                                 |         }
                                                                 | label_4:
    0x000479a8 ldr r3, [sp, 0x20]                                |         r3 = var_20h;
    0x000479aa movw r4, 0x281                                    |         r4 = 0x281;
    0x000479ae ldr.w r0, [pc, 0x6f8]                             |         r0 = *(0x000480a8);
    0x000479b2 ldr.w r1, [pc, 0x6f8]                             |         
    0x000479b6 add r0, pc                                        |         r0 += pc;
    0x000479b8 add.w r2, r0, r3, lsl 1                           |         r2 = r0 + (r3 << 1);
    0x000479bc add r1, pc                                        |         r1 = 0x8fa6e;
    0x000479be ldrb.w r3, [r2, 0x739]                            |         r3 = *((r2 + 0x739));
    0x000479c2 ldrb.w r2, [r2, 0x738]                            |         r2 = *((r2 + 0x738));
    0x000479c6 subs r5, r5, r3                                   |         r5 -= r3;
    0x000479c8 lsls r6, r3, 4                                    |         r6 = r3 << 4;
    0x000479ca str.w r5, [sl]                                    |         __asm ("str.w r5, [sl]");
    0x000479ce rsbs r6, r6, 0                                    |         r6 -= ;
    0x000479d0 ldrh.w r6, [r8, r6]                               |         r6 = *((r8 + r6));
    0x000479d4 add.w r0, r0, r6, lsl 1                           |         r0 += (r6 << 1);
    0x000479d8 ldrsh.w r0, [r0, 0x9c8]                           |         r0 = *((r0 + 0x9c8));
    0x000479dc add r0, r2                                        |         r0 += r2;
    0x000479de add.w r1, r1, r0, lsl 1                           |         r1 += (r0 << 1);
    0x000479e2 ldrh.w r1, [r1, 0xc7c]                            |         r1 = *((r1 + 0xc7c));
    0x000479e6 cmp r1, r4                                        |         
                                                                 |         if (r1 > r4) {
    0x000479e8 bgt 0x47a74                                       |             goto label_23;
                                                                 |         }
    0x000479ea cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x000479ec beq 0x47aa8                                       |             goto label_24;
                                                                 |         }
    0x000479ee rsb.w r3, r3, 1                                   |         r3 = 1 - r3;
    0x000479f2 adds r5, 1                                        |         r5++;
    0x000479f4 lsls r3, r3, 4                                    |         r3 <<= 4;
    0x000479f6 str.w r5, [sl]                                    |         __asm ("str.w r5, [sl]");
    0x000479fa strh.w r1, [r8, r3]                               |         *((r8 + r3)) = r1;
    0x000479fe add r3, r8                                        |         r3 += r8;
    0x00047a00 strb r2, [r3, 2]                                  |         *((r3 + 2)) = r2;
    0x00047a02 adds r4, r3, 4                                    |         r4 = r3 + 4;
    0x00047a04 ldr r3, [sp, 0x24]                                |         r3 = var_24h;
    0x00047a06 ldm.w r3, {r0, r1, r2}                            |         r0 = *(r3);
                                                                 |         r1 = *((r3 + 4));
                                                                 |         r2 = *((r3 + 8));
    0x00047a0a stm.w r4, {r0, r1, r2}                            |         *(r4) = r0;
                                                                 |         *((r4 + 4)) = r1;
                                                                 |         *((r4 + 8)) = r2;
                                                                 | label_2:
    0x00047a0e ldr r3, [sp, 0x28]                                |         r3 = var_28h;
    0x00047a10 cmp r3, 0xfe                                      |         
                                                                 |         if (r3 == 0xfe) {
    0x00047a12 beq 0x47a4a                                       |             goto label_3;
                                                                 |         }
    0x00047a14 ldr.w r5, [sl]                                    |         r5 = *(sl);
    0x00047a18 cmp r5, 0                                         |         
                                                                 |         if (r5 < 0) {
    0x00047a1a blt 0x47a4a                                       |             goto label_3;
                                                                 |         }
    0x00047a1c add.w r3, sl, r5, lsl 4                           |         r3 = sl + (r5 << 4);
    0x00047a20 ldrh r4, [r3, 0xc]                                |         r4 = *((r3 + 0xc));
    0x00047a22 b 0x47608                                         |         goto label_0;
                                                                 | label_17:
    0x00047a24 add.w r1, fp, r1, lsl 1                           |         r1 = fp + (r1 << 1);
    0x00047a28 movw r3, 0x281                                    |         r3 = 0x281;
    0x00047a2c ldrh.w r1, [r1, 0xc7c]                            |         r1 = *((r1 + 0xc7c));
    0x00047a30 cmp r1, r3                                        |         
    0x00047a32 bgt.w 0x47676                                     |         
                                                                 |     } while (r1 > r3);
                                                                 | label_21:
    0x00047a36 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00047a38 mov r0, sl                                        |     r0 = sl;
    0x00047a3a ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x00047a3c bl 0x1f0d4                                        |     fcn_0001f0d4 (r0, r1, r2);
    0x00047a40 ldr.w r3, [sl, 4]                                 |     r3 = *((sl + 4));
    0x00047a44 subs r3, 1                                        |     r3--;
    0x00047a46 str.w r3, [sl, 4]                                 |     __asm ("str.w r3, [sl, 4]");
                                                                 | label_3:
    0x00047a4a ldr.w r2, [pc, 0x664]                             |     r2 = *(0x000480b0);
    0x00047a4e ldr.w r3, [pc, 0x63c]                             |     r3 = *(0x4808e);
    0x00047a52 add r2, pc                                        |     r2 += pc;
    0x00047a54 ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x00047a56 ldr r2, [r3]                                      |     r2 = *(0x4808e);
    0x00047a58 ldr r3, [sp, 0xb4]                                |     r3 = *(arg_b4h);
    0x00047a5a eors r2, r3                                       |     r2 ^= r3;
    0x00047a5c mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x00047a60 bne.w 0x4b618                                     |         goto label_25;
                                                                 |     }
    0x00047a64 add sp, 0xbc                                      |     
    0x00047a66 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_16:
    0x00047a6a ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00047a6c add r7, r3                                        |     r7 += r3;
    0x00047a6e ldrh.w r1, [r7, 0x154]                            |     r1 = *((r7 + 0x154));
    0x00047a72 b 0x4766c                                         |     goto label_1;
                                                                 | label_23:
    0x00047a74 cmp r5, 0                                         |     
    0x00047a76 ldr.w r4, [sl, 8]                                 |     r4 = *((sl + 8));
                                                                 |     if (r5 < 0) {
    0x00047a7a blt 0x47aa2                                       |         goto label_26;
                                                                 |     }
    0x00047a7c mov r0, r4                                        |     r0 = r4;
    0x00047a7e b 0x47a84                                         |     
                                                                 |     while (r5 >= 0) {
    0x00047a80 ldr.w r0, [sl, 8]                                 |         r0 = *((sl + 8));
    0x00047a84 add.w r3, sl, r5, lsl 4                           |         r3 = sl + (r5 << 4);
    0x00047a88 adds r2, r5, 1                                    |         r2 = r5 + 1;
    0x00047a8a add.w r2, sl, r2, lsl 4                           |         r2 = sl + (r2 << 4);
    0x00047a8e ldrb r1, [r3, 0xe]                                |         r1 = *((r3 + 0xe));
    0x00047a90 bl 0x13a58                                        |         fcn_00013a58 (r0, r1, r2);
    0x00047a94 ldr.w r5, [sl]                                    |         r5 = *(sl);
    0x00047a98 subs r5, 1                                        |         r5--;
    0x00047a9a cmp r5, 0                                         |         
    0x00047a9c str.w r5, [sl]                                    |         __asm ("str.w r5, [sl]");
    0x00047aa0 bge 0x47a80                                       |         
                                                                 |     }
                                                                 | label_26:
    0x00047aa2 str.w r4, [sl, 8]                                 |     __asm ("str.w r4, [sl, 8]");
    0x00047aa6 b 0x47a0e                                         |     goto label_2;
                                                                 | label_24:
    0x00047aa8 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00047aaa mov r0, sl                                        |     r0 = sl;
    0x00047aac bl 0x1f0d4                                        |     fcn_0001f0d4 (r0, r1, r2);
    0x00047ab0 b 0x47a0e                                         |     goto label_2;
                                                                 | label_20:
    0x00047ab2 add.w r3, r3, r2, lsl 1                           |     r3 += (r2 << 1);
    0x00047ab6 ldrh.w r1, [r3, 0xc7c]                            |     r1 = *((r3 + 0xc7c));
    0x00047aba b 0x4766c                                         |     goto label_1;
                                                                 | label_22:
    0x00047ad6 ldr r4, [sp, 0x3c]                                |     r4 = var_3ch;
    0x00047ad8 add r3, sp, 0x9c                                  |     r3 += arg_9ch;
    0x00047ada ldm.w r4, {r0, r1, r2}                            |     r0 = *(r4);
                                                                 |     r1 = *((r4 + 4));
                                                                 |     r2 = *((r4 + 8));
    0x00047ade stm.w r3, {r0, r1, r2}                            |     *(r3) = r0;
                                                                 |     *((r3 + 4)) = r1;
                                                                 |     *((r3 + 8)) = r2;
    0x00047ae2 mov r2, r3                                        |     r2 = r3;
    0x00047ae4 ldr.w r1, [pc, 0x5cc]                             |     r1 = *(0x000480b4);
    0x00047ae8 mov r0, r6                                        |     r0 = r6;
    0x00047aea add r1, pc                                        |     r1 += pc;
    0x00047aec bl 0x1ca34                                        |     fcn_0001ca34 (r0);
    0x00047af0 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x00047af2 mov r2, r4                                        |     r2 = r4;
    0x00047af4 mov r0, r6                                        |     r0 = r6;
    0x00047af6 str.w r6, [sl, 8]                                 |     __asm ("str.w r6, [sl, 8]");
    0x00047afa bl 0x13a58                                        |     fcn_00013a58 (r0, r1, r2);
    0x00047afe b 0x47a4a                                         |     goto label_3;
                                                                 |     do {
                                                                 | label_5:
    0x000490f2 ldr r1, [sp, 0x4c]                                |         r1 = var_4ch;
    0x000490f4 mov r0, r7                                        |         r0 = r7;
    0x000490f6 bl 0x12c54                                        |         fcn_00012c54 (r0, r1);
    0x000490f8 stc2 p9, c9, [sp, 0x40]!                          |         __asm ("stc2 p9, c9, [sp, 0x40]!");
    0x000490fc mov r0, r7                                        |         r0 = r7;
    0x000490fe bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
    0x00049102 ldr r3, [sp, 0x54]                                |         r3 = *(arg_54h);
    0x00049104 ldr.w r5, [sl]                                    |         r5 = *(sl);
    0x00049108 str r3, [r7, 0x18]                                |         *((r7 + 0x18)) = r3;
    0x0004910a b.w 0x479a8                                       |         goto label_4;
    0x0004a356 movs r3, 0                                        |         r3 = 0;
    0x0004a358 strb.w r3, [r6, 0x1c2]                            |         *((r6 + 0x1c2)) = r3;
    0x0004a35c str.w r3, [r6, 0x1b8]                             |         __asm ("str.w r3, aav.0x000000ff");
    0x0004a360 b.w 0x479a8                                       |         goto label_4;
                                                                 | label_6:
    0x0004ab32 ldr r1, [sp, 0x40]                                |         r1 = var_40h;
    0x0004ab34 mov r0, r6                                        |         r0 = r6;
    0x0004ab36 bl 0x1cc34                                        |         r0 = fcn_0001cc34 (r0, r1);
    0x0004ab3a cmp r0, 0                                         |         
    0x0004ab3c bne.w 0x490f2                                     |         
                                                                 |     } while (r0 != 0);
    0x0004ab40 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x0004ab42 ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
    0x0004ab44 ldr r3, [r3]                                      |     r3 = *(r3);
    0x0004ab46 str r2, [sp, 0x44]                                |     var_44h = r2;
    0x0004ab48 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0004ab4a beq.w 0x4b63e                                     |         goto label_27;
                                                                 |     }
    0x0004ab4e ldr r1, [pc, 0x29c]                               |     
    0x0004ab50 mov r2, r3                                        |     r2 = r3;
    0x0004ab52 mov r0, r6                                        |     r0 = r6;
    0x0004ab54 add r1, pc                                        |     r1 = 0x95946;
    0x0004ab56 bl 0x1ca34                                        |     fcn_0001ca34 (r0);
    0x0004ab5a b.w 0x490f2                                       |     goto label_5;
                                                                 | label_25:
    0x0004b618 blx 0x6498                                        |     fcn_00006498 ();
    0x0004b61c ldr r1, [pc, 0x3e8]                               |     
    0x0004b61e movs r2, 7                                        |     r2 = 7;
    0x0004b620 mov r0, r4                                        |     r0 = r4;
    0x0004b622 add r1, pc                                        |     r1 = 0x9702e;
    0x0004b624 blx 0x5db4                                        |     r0 = fcn_00005db4 ();
    0x0004b628 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004b62a bne.w 0x4ab32                                     |         goto label_6;
                                                                 |     }
    0x0004b62e ldr r1, [pc, 0x3dc]                               |     
    0x0004b630 mov r2, r4                                        |     r2 = r4;
    0x0004b632 mov r0, r6                                        |     r0 = r6;
    0x0004b634 add r1, pc                                        |     r1 = 0x97046;
    0x0004b636 bl 0x1ca34                                        |     fcn_0001ca34 (r0);
    0x0004b63a b.w 0x490f2                                       |     goto label_5;
                                                                 | label_27:
    0x0004b63e ldr r2, [sp, 0x44]                                |     r2 = var_44h;
    0x0004b640 movs r1, 0x1a                                     |     r1 = 0x1a;
    0x0004b642 mov r0, r6                                        |     r0 = r6;
    0x0004b644 str r2, [sp]                                      |     *(sp) = r2;
    0x0004b646 ldr r2, [sp, 0x48]                                |     r2 = var_48h;
    0x0004b648 bl 0x1cab0                                        |     r0 = fcn_0001cab0 (r0);
    0x0004b64c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004b64e bne.w 0x490f2                                     |         goto label_5;
                                                                 |     }
    0x0004b652 ldr r4, [sp, 0x38]                                |     r4 = var_38h;
    0x0004b654 mov r0, r6                                        |     r0 = r6;
    0x0004b656 mov r1, r4                                        |     r1 = r4;
    0x0004b658 bl 0x24200                                        |     fcn_00024200 (r0, r1);
    0x0004b65c str r0, [sp, 0x50]                                |     *(arg_50h) = r0;
    0x0004b65e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004b660 bne.w 0x490f2                                     |         goto label_5;
                                                                 |     }
    0x0004b664 ldrb.w r3, [r4, 0x2c]                             |     r3 = *((r4 + 0x2c));
    0x0004b668 lsls r1, r3, 0x1b                                 |     r1 = r3 << 0x1b;
                                                                 |     if (r1 < r3) {
    0x0004b66a bmi 0x4b6c8                                       |         goto label_28;
                                                                 |     }
    0x0004b66c ldr r1, [r6, 8]                                   |     r1 = *((r6 + 8));
                                                                 | label_9:
    0x0004b66e cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x0004b670 bne 0x4b6ec                                       |         goto label_29;
                                                                 |     }
    0x0004b672 mov r0, r6                                        |     r0 = r6;
    0x0004b674 str r1, [sp, 0x58]                                |     *(arg_58h) = r1;
    0x0004b676 bl 0x192c8                                        |     fcn_000192c8 (r0);
    0x0004b67a ldr r1, [sp, 0x58]                                |     r1 = *(arg_58h);
    0x0004b67c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004b67e beq.w 0x490f2                                     |         goto label_5;
                                                                 |     }
    0x0004b682 mov r0, r6                                        |     r0 = r6;
    0x0004b684 mov r2, r5                                        |     r2 = r5;
    0x0004b686 bl 0x43838                                        |     fcn_00043838 (r0, r1, r2);
    0x0004b68a mov r1, r5                                        |     r1 = r5;
    0x0004b68c mov r0, r6                                        |     r0 = r6;
    0x0004b68e bl 0x18cb0                                        |     fcn_00018cb0 (r0, r1);
                                                                 | label_8:
    0x0004b692 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x0004b694 movs r1, 0                                        |     r1 = 0;
    0x0004b696 ldr r4, [r3]                                      |     r4 = *(r3);
    0x0004b698 mov r3, r4                                        |     r3 = r4;
    0x0004b69a b 0x4b6a0                                         |     
                                                                 |     while (r0 < 0xbf) {
                                                                 | label_7:
    0x0004b69c adds r1, 1                                        |         r1++;
    0x0004b69e mov r3, r2                                        |         r3 = r2;
    0x0004b6a0 adds r2, r3, 1                                    |         r2 = r3 + 1;
    0x0004b6a2 ldrb r0, [r3]                                     |         r0 = *(r3);
                                                                 |         if (r2 == r3) {
    0x0004b6a4 beq 0x4b700                                       |             goto label_30;
                                                                 |         }
                                                                 |         if (r0 == 0) {
    0x0004b6a6 cbz r0, 0x4b700                                   |             goto label_30;
                                                                 |         }
    0x0004b6a8 cmp r0, 0xbf                                      |         
    0x0004b6aa add.w r2, r3, 1                                   |         r2 = r3 + 1;
    0x0004b6ae bls 0x4b69c                                       |         
                                                                 |     }
    0x0004b6b0 ldrb r3, [r3, 1]                                  |     r3 = *((r3 + 1));
    0x0004b6b2 and r3, r3, 0xc0                                  |     r3 &= 0xc0;
    0x0004b6b6 cmp r3, 0x80                                      |     
                                                                 |     if (r3 != 0x80) {
    0x0004b6b8 bne 0x4b69c                                       |         goto label_7;
                                                                 |     }
                                                                 |     do {
    0x0004b6ba ldrb r3, [r2, 1]!                                 |         r3 = *((r2 += 1));
    0x0004b6be and r3, r3, 0xc0                                  |         r3 &= 0xc0;
    0x0004b6c2 cmp r3, 0x80                                      |         
    0x0004b6c4 beq 0x4b6ba                                       |         
                                                                 |     } while (r3 == 0x80);
    0x0004b6c6 b 0x4b69c                                         |     goto label_7;
                                                                 | label_28:
    0x0004b6c8 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x0004b6ca ldr r3, [r3, 0x3c]                                |     r3 = *((r3 + 0x3c));
                                                                 |     do {
    0x0004b6cc cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0004b6ce beq.w 0x4b978                                     |             goto label_31;
                                                                 |         }
    0x0004b6d2 ldr r2, [r3]                                      |         r2 = *(r3);
    0x0004b6d4 cmp r7, r2                                        |         
                                                                 |         if (r7 == r2) {
    0x0004b6d6 beq 0x4b790                                       |             goto label_32;
                                                                 |         }
    0x0004b6d8 ldr r3, [r3, 0x18]                                |         r3 = *((r3 + 0x18));
    0x0004b6da b 0x4b6cc                                         |         
                                                                 |     } while (1);
                                                                 | label_29:
    0x0004b6ec mov r0, r6                                        |     r0 = r6;
    0x0004b6ee mov r2, r5                                        |     r2 = r5;
    0x0004b6f0 movs r1, 0                                        |     r1 = 0;
    0x0004b6f2 bl 0x43838                                        |     fcn_00043838 (r0, r1, r2);
    0x0004b6f6 mov r1, r5                                        |     r1 = r5;
    0x0004b6f8 mov r0, r6                                        |     r0 = r6;
    0x0004b6fa bl 0x18cb0                                        |     fcn_00018cb0 (r0, r1);
    0x0004b6fe b 0x4b692                                         |     goto label_8;
                                                                 | label_30:
    0x0004b700 ldr r3, [r7, 0x18]                                |     r3 = *((r7 + 0x18));
    0x0004b702 str r1, [sp, 0x58]                                |     *(arg_58h) = r1;
    0x0004b704 lsls r3, r3, 0xc                                  |     r3 <<= 0xc;
                                                                 |     if (r3 < r3) {
    0x0004b706 bmi 0x4b7fc                                       |         goto label_33;
                                                                 |     }
                                                                 | label_15:
    0x0004b708 cmp r5, 1                                         |     
                                                                 |     if (r5 == 1) {
    0x0004b70a beq 0x4b78a                                       |         goto label_34;
                                                                 |     }
    0x0004b70c ldr r3, [pc, 0x300]                               |     
    0x0004b70e add r3, pc                                        |     r3 = 0x97122;
                                                                 |     do {
    0x0004b710 ldr r2, [sp, 0x58]                                |         r2 = *(arg_58h);
    0x0004b712 mov r0, r6                                        |         r0 = r6;
    0x0004b714 ldr r5, [sp, 0x48]                                |         r5 = var_48h;
    0x0004b716 str r4, [sp, 0x18]                                |         var_18h = r4;
    0x0004b718 ldr r1, [pc, 0x2f8]                               |         
    0x0004b71a ldr r4, [sp, 0x40]                                |         r4 = var_40h;
    0x0004b71c str r2, [sp, 0x14]                                |         var_14h = r2;
    0x0004b71e mov r2, r5                                        |         r2 = r5;
    0x0004b720 add r1, pc                                        |         r1 = 0x97138;
    0x0004b722 strd r4, r4, [sp, 0xc]                            |         __asm ("strd r4, r4, [sp, 0xc]");
    0x0004b726 strd r4, r4, [sp, 4]                              |         __asm ("strd r4, r4, [sp, 4]");
    0x0004b72a str r4, [sp]                                      |         *(sp) = r4;
    0x0004b72c bl 0x4bf9c                                        |         fcn_0004bf9c (r0);
    0x0004b730 ldr r1, [pc, 0x2e4]                               |         
    0x0004b732 mov r2, r5                                        |         r2 = r5;
    0x0004b734 mov r0, r7                                        |         r0 = r7;
    0x0004b736 add r1, pc                                        |         r1 = 0x97152;
    0x0004b738 bl 0x1401c                                        |         r0 = fcn_0001401c (r0, r1, r2);
                                                                 |         if (r0 != 0) {
    0x0004b73c cbz r0, 0x4b752                                   |             
    0x0004b73e ldr r3, [sp, 0x38]                                |             r3 = var_38h;
    0x0004b740 mov r2, r5                                        |             r2 = r5;
    0x0004b742 ldr r1, [pc, 0x2d8]                               |             
    0x0004b744 mov r0, r6                                        |             r0 = r6;
    0x0004b746 ldr r3, [r3]                                      |             r3 = *(r3);
    0x0004b748 add r1, pc                                        |             r1 = 0x9716a;
    0x0004b74a str r3, [sp]                                      |             *(sp) = r3;
    0x0004b74c mov r3, r4                                        |             r3 = r4;
    0x0004b74e bl 0x4bf9c                                        |             fcn_0004bf9c (r0);
                                                                 |         }
    0x0004b752 ldr r1, [sp, 0x38]                                |         r1 = var_38h;
    0x0004b754 mov r0, r6                                        |         r0 = r6;
    0x0004b756 bl 0x1c24c                                        |         r0 = fcn_0001c24c (r0, r1);
    0x0004b75a mov r4, r0                                        |         r4 = r0;
                                                                 |         if (r0 != 0) {
    0x0004b75c cbz r0, 0x4b776                                   |             
    0x0004b75e ldr r3, [sp, 0x40]                                |             r3 = var_40h;
    0x0004b760 ldr r1, [pc, 0x2bc]                               |             
    0x0004b762 str r0, [sp]                                      |             *(sp) = r0;
    0x0004b764 mov r0, r6                                        |             r0 = r6;
    0x0004b766 mov r2, r3                                        |             r2 = r3;
    0x0004b768 add r1, pc                                        |             r1 = 0x9718c;
    0x0004b76a bl 0x4bf9c                                        |             fcn_0004bf9c (r0);
    0x0004b76e mov r1, r4                                        |             r1 = r4;
    0x0004b770 mov r0, r7                                        |             r0 = r7;
    0x0004b772 bl 0xe12c                                         |             fcn_0000e12c (r0, r1);
                                                                 |         }
    0x0004b776 ldr r3, [r7, 0x18]                                |         r3 = *((r7 + 0x18));
    0x0004b778 lsls r0, r3, 0xc                                  |         r0 = r3 << 0xc;
                                                                 |         if (r0 < r3) {
    0x0004b77a bmi 0x4b854                                       |             goto label_35;
                                                                 |         }
                                                                 | label_10:
    0x0004b77c ldr r1, [sp, 0x38]                                |         r1 = var_38h;
    0x0004b77e mov r0, r6                                        |         r0 = r6;
    0x0004b780 ldr r2, [sp, 0x40]                                |         r2 = var_40h;
    0x0004b782 bl 0x1c2ec                                        |         fcn_0001c2ec (r0, r1, r2);
    0x0004b786 b.w 0x490f2                                       |         goto label_5;
                                                                 | label_34:
    0x0004b78a ldr r3, [pc, 0x298]                               |         
    0x0004b78c add r3, pc                                        |         r3 = 0x971b6;
    0x0004b78e b 0x4b710                                         |         
                                                                 |     } while (1);
                                                                 | label_32:
    0x0004b790 str r3, [sp, 0x58]                                |     *(arg_58h) = r3;
    0x0004b792 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0004b794 ldr r4, [r6, 8]                                   |     r4 = *((r6 + 8));
    0x0004b796 ldr r3, [r3]                                      |     r3 = *(r3);
    0x0004b798 mov r1, r4                                        |     r1 = r4;
    0x0004b79a ldr r3, [r3, 0x4c]                                |     r3 = *((r3 + 0x4c));
    0x0004b79c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004b79e beq.w 0x4b66e                                     |         goto label_9;
                                                                 |     }
    0x0004b7a2 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0004b7a4 beq 0x4b894                                       |         goto label_36;
                                                                 |     }
                                                                 | label_12:
    0x0004b7a6 mov r2, r5                                        |     r2 = r5;
    0x0004b7a8 mov r0, r6                                        |     r0 = r6;
    0x0004b7aa movs r1, 1                                        |     r1 = 1;
    0x0004b7ac bl 0x43838                                        |     fcn_00043838 (r0, r1, r2);
    0x0004b7b0 mov r1, r5                                        |     r1 = r5;
    0x0004b7b2 mov r0, r6                                        |     r0 = r6;
    0x0004b7b4 bl 0x18cb0                                        |     fcn_00018cb0 (r0, r1);
    0x0004b7b8 ldr r3, [r6, 0x48]                                |     r3 = *((r6 + 0x48));
    0x0004b7ba movs r1, 0x61                                     |     r1 = 0x61;
    0x0004b7bc ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x0004b7be mov r0, r4                                        |     r0 = r4;
    0x0004b7c0 adds r3, 1                                        |     r3++;
    0x0004b7c2 str r3, [r6, 0x48]                                |     *((r6 + 0x48)) = r3;
    0x0004b7c4 str r2, [sp, 4]                                   |     var_4h = r2;
    0x0004b7c6 movs r2, 0                                        |     r2 = 0;
    0x0004b7c8 str r2, [sp, 8]                                   |     var_8h = r2;
    0x0004b7ca str r2, [sp]                                      |     *(sp) = r2;
    0x0004b7cc str r3, [sp, 0x5c]                                |     *(arg_5ch) = r3;
    0x0004b7ce bl 0x1977c                                        |     fcn_0001977c (r0, r1, r2, r3, r4, r5);
    0x0004b7d2 ldr r3, [sp, 0x58]                                |     r3 = *(arg_58h);
    0x0004b7d4 mvn r1, 9                                         |     r1 = ~9;
    0x0004b7d8 str r1, [sp, 8]                                   |     var_8h = r1;
    0x0004b7da mov r0, r4                                        |     r0 = r4;
    0x0004b7dc movs r1, 0x99                                     |     r1 = 0x99;
    0x0004b7de str r3, [sp, 4]                                   |     var_4h = r3;
    0x0004b7e0 ldr r3, [sp, 0x5c]                                |     r3 = *(arg_5ch);
    0x0004b7e2 mov r2, r3                                        |     r2 = r3;
    0x0004b7e4 movs r3, 0                                        |     r3 = 0;
    0x0004b7e6 str r3, [sp]                                      |     *(sp) = r3;
    0x0004b7e8 bl 0x1977c                                        |     fcn_0001977c (r0, r1, r2, r3, r4, r5);
    0x0004b7ec ldr.w r3, [r6, 0x198]                             |     r3 = *((r6 + 0x198));
    0x0004b7f0 movs r2, 1                                        |     r2 = 1;
    0x0004b7f2 cmp r3, 0                                         |     
    0x0004b7f4 it eq                                             |     
                                                                 |     if (r3 != 0) {
    0x0004b7f6 moveq r3, r6                                      |         r3 = r6;
                                                                 |     }
    0x0004b7f8 strb r2, [r3, 0x15]                               |     *((r3 + 0x15)) = r2;
    0x0004b7fa b 0x4b692                                         |     goto label_8;
                                                                 | label_33:
    0x0004b7fc ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x0004b7fe ldr r1, [r3, 0x44]                                |     r1 = *((r3 + 0x44));
    0x0004b800 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0004b802 beq 0x4b8a4                                       |         goto label_37;
                                                                 |     }
    0x0004b804 mov r0, r4                                        |     r0 = r4;
    0x0004b806 bl 0x9cb8                                         |     r0 = fcn_00009cb8 (r0);
    0x0004b80a mov r2, r0                                        |     r2 = r0;
                                                                 | label_13:
    0x0004b80c add.w r0, r1, 0x38                                |     r0 = r1 + 0x38;
    0x0004b810 mov r1, r4                                        |     r1 = r4;
    0x0004b812 bl 0x13f5c                                        |     fcn_00013f5c (r0, r1, r2);
    0x0004b816 ldr r3, [pc, 0x210]                               |     
    0x0004b818 str r5, [sp, 0x6c]                                |     *(arg_6ch) = r5;
    0x0004b81a ldr r5, [sp, 0x44]                                |     r5 = var_44h;
    0x0004b81c add r3, pc                                        |     r3 = 0x9724a;
    0x0004b81e str r7, [sp, 0x68]                                |     *(arg_68h) = r7;
    0x0004b820 str r3, [sp, 0x5c]                                |     *(arg_5ch) = r3;
    0x0004b822 mov r7, r0                                        |     r7 = r0;
    0x0004b824 ldr r3, [pc, 0x204]                               |     
    0x0004b826 add r3, pc                                        |     r3 = 0x97256;
    0x0004b828 strd r3, r8, [sp, 0x60]                           |     __asm ("strd r3, r8, [sp, 0x60]");
    0x0004b82c mov r8, r4                                        |     r8 = r4;
                                                                 |     do {
    0x0004b82e cmp r7, 0                                         |         
                                                                 |         if (r7 == 0) {
    0x0004b830 beq 0x4b8b6                                       |             goto label_38;
                                                                 |         }
    0x0004b832 ldr r3, [r7]                                      |         r3 = *(r7);
    0x0004b834 ldr r4, [r6]                                      |         r4 = *(r6);
    0x0004b836 ldr r3, [r3]                                      |         r3 = *(r3);
    0x0004b838 cmp r5, 0                                         |         
                                                                 |         if (r5 == 0) {
    0x0004b83a beq 0x4b8a8                                       |             goto label_39;
                                                                 |         }
    0x0004b83c ldr r1, [sp, 0x5c]                                |         r1 = *(arg_5ch);
    0x0004b83e mov r2, r5                                        |         r2 = r5;
    0x0004b840 mov r0, r4                                        |         r0 = r4;
    0x0004b842 bl 0x1babc                                        |         fcn_0001babc (r0);
    0x0004b846 mov r1, r5                                        |         r1 = r5;
    0x0004b848 mov r5, r0                                        |         r5 = r0;
    0x0004b84a mov r0, r4                                        |         r0 = r4;
    0x0004b84c bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
                                                                 | label_14:
    0x0004b850 ldr r7, [r7, 0xc]                                 |         r7 = *((r7 + 0xc));
    0x0004b852 b 0x4b82e                                         |         
                                                                 |     } while (1);
                                                                 | label_35:
    0x0004b854 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x0004b856 ldr r1, [r3]                                      |     r1 = *(r3);
    0x0004b858 ldr r0, [r3, 0x44]                                |     r0 = *((r3 + 0x44));
                                                                 |     if (r1 == 0) {
    0x0004b85a cbz r1, 0x4b870                                   |         goto label_40;
                                                                 |     }
    0x0004b85c mov r2, r1                                        |     r2 = r1;
                                                                 |     do {
    0x0004b85e mov r3, r2                                        |         r3 = r2;
    0x0004b860 adds r2, 1                                        |         r2++;
    0x0004b862 ldrb r4, [r3]                                     |         r4 = *(r3);
    0x0004b864 cmp r4, 0                                         |         
    0x0004b866 bne 0x4b85e                                       |         
                                                                 |     } while (r4 != 0);
    0x0004b868 subs r3, r3, r1                                   |     r3 -= r1;
    0x0004b86a bic r3, r3, 0xc0000000                            |     r3 = BIT_MASK (r3, 0xc0000000);
    0x0004b86e str r3, [sp, 0x50]                                |     *(arg_50h) = r3;
                                                                 | label_40:
    0x0004b870 ldr r2, [sp, 0x50]                                |     r2 = *(arg_50h);
    0x0004b872 adds r0, 0x38                                     |     r0 += 0x38;
    0x0004b874 bl 0x13f5c                                        |     r0 = fcn_00013f5c (r0, r1, r2);
    0x0004b878 mov r4, r0                                        |     r4 = r0;
                                                                 | label_11:
    0x0004b87a cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0004b87c beq.w 0x4b77c                                     |         goto label_10;
                                                                 |     }
    0x0004b880 ldr r1, [r4]                                      |     r1 = *(r4);
    0x0004b882 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x0004b884 cmp r3, r1                                        |     
                                                                 |     if (r3 != r1) {
    0x0004b886 beq 0x4b890                                       |         
    0x0004b888 ldr r2, [r1]                                      |         r2 = *(r1);
    0x0004b88a mov r0, r6                                        |         r0 = r6;
    0x0004b88c bl 0x1c2ec                                        |         fcn_0001c2ec (r0, r1, r2);
                                                                 |     }
    0x0004b890 ldr r4, [r4, 0xc]                                 |     r4 = *((r4 + 0xc));
    0x0004b892 b 0x4b87a                                         |     goto label_11;
                                                                 | label_36:
    0x0004b894 mov r0, r6                                        |     r0 = r6;
    0x0004b896 bl 0x192c8                                        |     r0 = fcn_000192c8 (r0);
    0x0004b89a mov r4, r0                                        |     r4 = r0;
    0x0004b89c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004b89e beq.w 0x490f2                                     |         goto label_5;
                                                                 |     }
    0x0004b8a2 b 0x4b7a6                                         |     goto label_12;
                                                                 | label_37:
    0x0004b8a4 mov r2, r4                                        |     r2 = r4;
    0x0004b8a6 b 0x4b80c                                         |     goto label_13;
                                                                 | label_39:
    0x0004b8a8 ldr r1, [sp, 0x60]                                |     r1 = *(arg_60h);
    0x0004b8aa mov r2, r3                                        |     r2 = r3;
    0x0004b8ac mov r0, r4                                        |     r0 = r4;
    0x0004b8ae bl 0x1babc                                        |     r0 = fcn_0001babc (r0);
    0x0004b8b2 mov r5, r0                                        |     r5 = r0;
    0x0004b8b4 b 0x4b850                                         |     goto label_14;
                                                                 | label_38:
    0x0004b8b6 mov r3, r5                                        |     r3 = r5;
    0x0004b8b8 mov r4, r8                                        |     r4 = r8;
    0x0004b8ba str r5, [sp, 0x44]                                |     var_44h = r5;
    0x0004b8bc ldr r7, [sp, 0x68]                                |     r7 = *(arg_68h);
    0x0004b8be ldr.w r8, [sp, 0x64]                              |     r8 = *(arg_64h);
    0x0004b8c2 ldr r5, [sp, 0x6c]                                |     r5 = *(arg_6ch);
    0x0004b8c4 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004b8c6 beq.w 0x4b708                                     |         goto label_15;
                                                                 |     }
    0x0004b8ca cmp r5, 1                                         |     
                                                                 |     if (r5 == 1) {
    0x0004b8cc beq 0x4b8f2                                       |         goto label_41;
                                                                 |     }
    0x0004b8ce ldr r3, [pc, 0x160]                               |     
    0x0004b8d0 add r3, pc                                        |     r3 = 0x97306;
                                                                 |     do {
    0x0004b8d2 ldr r2, [sp, 0x44]                                |         r2 = var_44h;
    0x0004b8d4 ldr r0, [sp, 0x40]                                |         r0 = var_40h;
    0x0004b8d6 ldr r1, [pc, 0x15c]                               |         
    0x0004b8d8 str r2, [sp, 8]                                   |         var_8h = r2;
    0x0004b8da strd r4, r0, [sp]                                 |         __asm ("strd r4, r0, [sp]");
    0x0004b8de mov r0, r6                                        |         r0 = r6;
    0x0004b8e0 ldr r2, [sp, 0x48]                                |         r2 = var_48h;
    0x0004b8e2 add r1, pc                                        |         r1 = 0x9731c;
    0x0004b8e4 bl 0x4bf9c                                        |         fcn_0004bf9c (r0);
    0x0004b8e8 ldr r1, [sp, 0x44]                                |         r1 = var_44h;
    0x0004b8ea mov r0, r7                                        |         r0 = r7;
    0x0004b8ec bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
    0x0004b8f0 b 0x4b708                                         |         goto label_15;
                                                                 | label_41:
    0x0004b8f2 ldr r3, [pc, 0x144]                               |         
    0x0004b8f4 add r3, pc                                        |         r3 = 0x97332;
    0x0004b8f6 b 0x4b8d2                                         |         
                                                                 |     } while (1);
                                                                 | label_31:
    0x0004b978 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0004b97a udf 0xff                                          |     __asm ("udf 0xff");
                                                                 | }
    ; assembly                               | /* r2dec pseudo code output */
                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x499b8 */
                                             | #include <stdint.h>
                                             |  
    ; (fcn) fcn.000499b8 ()                  | void fcn_000499b8 (int16_t arg_0h, int16_t arg_90h, int16_t arg_94h, int16_t arg_98h, int16_t arg2, int16_t arg4) {
                                             |     r1 = arg2;
                                             |     r3 = arg4;
    0x000499b8 str r3, [sp]                  |     *(sp) = r3;
    0x000499ba movs r3, 0                    |     r3 = 0;
    0x000499bc mov r2, r3                    |     r2 = r3;
    0x000499be mov r0, r6                    |     r0 = r6;
    0x000499c0 bl 0x1cd60                    |     fcn_0001cd60 (r0, r1, r2, r3, r4);
    0x000499c4 mov r2, r5                    |     r2 = r5;
    0x000499c6 movs r5, 0                    |     r5 = 0;
    0x000499c8 mov r3, r0                    |     r3 = r0;
    0x000499ca movs r1, 0x7a                 |     r1 = 0x7a;
    0x000499cc str r5, [sp]                  |     *(sp) = r5;
    0x000499ce mov r0, r6                    |     r0 = r6;
    0x000499d0 bl 0x1cd60                    |     fcn_0001cd60 (r0, r1, r2, r3, r4);
    0x000499d4 add r4, sl                    |     r4 += sl;
    0x000499d6 mov r3, r0                    |     r3 = r0;
    0x000499d8 mov r2, r7                    |     r2 = r7;
    0x000499da str r5, [sp]                  |     *(sp) = r5;
    0x000499dc mov r0, r6                    |     r0 = r6;
    0x000499de movs r1, 0x7a                 |     r1 = 0x7a;
    0x000499e0 bl 0x1cd60                    |     fcn_0001cd60 (r0, r1, r2, r3, r4);
    0x000499e4 ldrd r3, r2, [r4, 0x10]       |     __asm ("ldrd r3, r2, [r4, 0x10]");
    0x000499e8 ldr.w r5, [sl]                |     r5 = *(sl);
    0x000499ec str r0, [sp, 0x90]            |     *(arg_90h) = r0;
    0x000499ee add r3, r2                    |     r3 += r2;
    0x000499f0 str r3, [sp, 0x98]            |     *(arg_98h) = r3;
    0x000499f2 ldr r3, [r8, -0x3c]           |     r3 = *((r8 - 0x3c));
    0x000499f6 str r3, [sp, 0x94]            |     *(arg_94h) = r3;
    0x000499f8 b.w 0x479a8                   |     return void (*0x479a8)() ();
                                             | }
    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x4c0e4 */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) fcn.0004c0e4 ()                      | void fcn_0004c0e4 (int16_t arg1, int16_t arg2, int16_t arg3) {
                                                 |     int16_t var_0h;
                                                 |     r0 = arg1;
                                                 |     r1 = arg2;
                                                 |     r2 = arg3;
    0x0004c0e4 push {r4, r5, r6, r7, lr}         |     
    0x0004c0e6 mov r6, r2                        |     r6 = r2;
    0x0004c0e8 ldr r2, [r0, 8]                   |     r2 = *((r0 + 8));
    0x0004c0ea sub sp, 0x14                      |     
    0x0004c0ec mov r4, r0                        |     r4 = r0;
    0x0004c0ee mov r7, r1                        |     r7 = r1;
    0x0004c0f0 cmp r2, 0                         |     
                                                 |     if (r2 == 0) {
    0x0004c0f2 beq 0x4c17c                       |         goto label_3;
                                                 |     }
                                                 | label_2:
    0x0004c0f4 ldrb r3, [r4, 0x13]               |     r3 = *((r4 + 0x13));
    0x0004c0f6 cmp r3, 0                         |     
                                                 |     if (r3 == 0) {
    0x0004c0f8 beq 0x4c174                       |         goto label_4;
                                                 |     }
    0x0004c0fa subs r3, 1                        |     r3--;
    0x0004c0fc uxtb r3, r3                       |     r3 = (int8_t) r3;
    0x0004c0fe strb r3, [r4, 0x13]               |     *((r4 + 0x13)) = r3;
    0x0004c100 adds r3, 6                        |     r3 += 6;
    0x0004c102 ldr.w r5, [r4, r3, lsl 2]         |     offset_0 = r3 << 2;
                                                 |     r5 = *((r4 + offset_0));
                                                 | label_1:
    0x0004c106 mov r0, r2                        |     r0 = r2;
    0x0004c108 mov r3, r5                        |     r3 = r5;
    0x0004c10a mov r2, r7                        |     r2 = r7;
    0x0004c10c movs r1, 0x73                     |     r1 = 0x73;
    0x0004c10e str r6, [sp]                      |     *(sp) = r6;
    0x0004c110 bl 0x18bf8                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0004c114 ldr.w r3, [r4, 0x198]             |     r3 = *((r4 + 0x198));
    0x0004c118 movs r2, 1                        |     r2 = 1;
    0x0004c11a cmp r3, 0                         |     
    0x0004c11c it eq                             |     
                                                 |     if (r3 != 0) {
    0x0004c11e moveq r3, r4                      |         r3 = r4;
                                                 |     }
    0x0004c120 cmp r6, 1                         |     
    0x0004c122 strb r2, [r3, 0x15]               |     *((r3 + 0x15)) = r2;
    0x0004c124 ldr r3, [r4]                      |     r3 = *(r4);
    0x0004c126 ldr r2, [r3, 0x10]                |     r2 = *((r3 + 0x10));
    0x0004c128 lsl.w r3, r6, 4                   |     r3 = r6 << 4;
    0x0004c12c ldr r2, [r2, r3]                  |     r2 = *((r2 + r3));
                                                 |     if (r6 == 1) {
    0x0004c12e beq 0x4c16e                       |         goto label_5;
                                                 |     }
    0x0004c130 ldr r3, [pc, 0x58]                |     
    0x0004c132 add r3, pc                        |     r3 = 0x982c2;
                                                 | label_0:
    0x0004c134 ldr r1, [pc, 0x58]                |     
    0x0004c136 mov r0, r4                        |     r0 = r4;
    0x0004c138 strd r5, r5, [sp, 4]              |     __asm ("strd r5, r5, [sp, 4]");
    0x0004c13c str r7, [sp]                      |     *(sp) = r7;
    0x0004c13e add r1, pc                        |     r1 = 0x982d2;
    0x0004c140 bl 0x4bf9c                        |     fcn_0004bf9c (r0);
                                                 |     if (r5 == 0) {
    0x0004c144 cbz r5, 0x4c16a                   |         goto label_6;
                                                 |     }
    0x0004c146 ldrb r0, [r4, 0x13]               |     r0 = *((r4 + 0x13));
    0x0004c148 cmp r0, 7                         |     
                                                 |     if (r0 > 7) {
    0x0004c14a bhi 0x4c16a                       |         goto label_6;
                                                 |     }
    0x0004c14c add.w r3, r4, 0x74                |     r3 = r4 + 0x74;
    0x0004c150 add.w r1, r4, 0x13c               |     r1 = r4 + 0x13c;
                                                 |     do {
    0x0004c154 ldr r2, [r3, 0xc]                 |         r2 = *((r3 + 0xc));
    0x0004c156 cmp r5, r2                        |         
                                                 |         if (r5 == r2) {
    0x0004c158 beq 0x4c184                       |             goto label_7;
                                                 |         }
    0x0004c15a adds r3, 0x14                     |         r3 += 0x14;
    0x0004c15c cmp r3, r1                        |         
    0x0004c15e bne 0x4c154                       |         
                                                 |     } while (r3 != r1);
    0x0004c160 adds r3, r0, 1                    |     r3 = r0 + 1;
    0x0004c162 adds r0, 6                        |     r0 += 6;
    0x0004c164 strb r3, [r4, 0x13]               |     *((r4 + 0x13)) = r3;
    0x0004c166 str.w r5, [r4, r0, lsl 2]         |     __asm ("str.w r5, [r4, r0, lsl 2]");
                                                 |     do {
                                                 | label_6:
    0x0004c16a add sp, 0x14                      |         
    0x0004c16c pop {r4, r5, r6, r7, pc}          |         
                                                 | label_5:
    0x0004c16e ldr r3, [pc, 0x24]                |         
    0x0004c170 add r3, pc                        |         r3 = 0x9830a;
    0x0004c172 b 0x4c134                         |         goto label_0;
                                                 | label_4:
    0x0004c174 ldr r5, [r4, 0x48]                |         r5 = *((r4 + 0x48));
    0x0004c176 adds r5, 1                        |         r5++;
    0x0004c178 str r5, [r4, 0x48]                |         *((r4 + 0x48)) = r5;
    0x0004c17a b 0x4c106                         |         goto label_1;
                                                 | label_3:
    0x0004c17c bl 0x192c8                        |         r0 = fcn_000192c8 (r0);
    0x0004c180 mov r2, r0                        |         r2 = r0;
    0x0004c182 b 0x4c0f4                         |         goto label_2;
                                                 | label_7:
    0x0004c184 movs r2, 1                        |         r2 = 1;
    0x0004c186 strb r2, [r3, 6]                  |         *((r3 + 6)) = r2;
    0x0004c188 b 0x4c16a                         |         
                                                 |     } while (1);
                                                 | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x4c324 */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) fcn.0004c324 ()                                  | void fcn_0004c324 (int16_t arg1, int16_t arg2) {
                                                             |     int16_t var_0h;
                                                             |     int32_t var_0h_2;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
    0x0004c324 ldr r3, [r0]                                  |     r3 = *(r0);
    0x0004c326 push.w {r4, r5, r6, r7, r8, sb, lr}           |     
    0x0004c32a mov r5, r0                                    |     r5 = r0;
    0x0004c32c ldr.w r4, [r0, 0x198]                         |     r4 = *((r0 + 0x198));
    0x0004c330 sub sp, 0xc                                   |     
    0x0004c332 mov sb, r1                                    |     sb = r1;
    0x0004c334 ldr r3, [r3, 0x10]                            |     r3 = *((r3 + 0x10));
    0x0004c336 cmp r4, 0                                     |     
    0x0004c338 it eq                                         |     
                                                             |     if (r4 != 0) {
    0x0004c33a moveq r4, r5                                  |         r4 = r5;
                                                             |     }
    0x0004c33c add.w r3, r3, r1, lsl 4                       |     r3 += (r1 << 4);
    0x0004c340 ldr r6, [r3, 0xc]                             |     r6 = *((r3 + 0xc));
    0x0004c342 bl 0x39214                                    |     fcn_00039214 (r0, r1);
    0x0004c346 ldr.w r3, [r4, 0x148]                         |     r3 = *((r4 + 0x148));
    0x0004c34a movs r2, 1                                    |     r2 = 1;
    0x0004c34c ldr r7, [r5, 0x44]                            |     r7 = *((r5 + 0x44));
    0x0004c34e lsl.w r2, r2, sb                              |     r2 <<= sb;
    0x0004c352 mov r1, sb                                    |     r1 = sb;
    0x0004c354 orrs r3, r2                                   |     r3 |= r2;
    0x0004c356 mov r0, r5                                    |     r0 = r5;
    0x0004c358 str.w r3, [r4, 0x148]                         |     __asm ("str.w r3, aav.0x000000ff");
    0x0004c35c adds r3, r7, 3                                |     r3 = r7 + 3;
    0x0004c35e str r3, [r5, 0x44]                            |     *((r5 + 0x44)) = r3;
    0x0004c360 movs r3, 0                                    |     r3 = 0;
    0x0004c362 mov r2, r7                                    |     r2 = r7;
    0x0004c364 str r3, [sp]                                  |     *(sp) = r3;
    0x0004c366 bl 0x4c198                                    |     fcn_0004c198 (r0, r1, r2, r3, r4, r5);
    0x0004c36a ldr r4, [r6, 0x10]                            |     r4 = *((r6 + 0x10));
    0x0004c36c ldrd r8, r6, [r5, 0x44]                       |     __asm ("ldrd r8, r6, [r5, 0x44]");
                                                             |     if (r4 == 0) {
    0x0004c370 cbz r4, 0x4c38a                               |         goto label_0;
                                                             |     }
    0x0004c372 adds r6, 1                                    |     r6++;
                                                             |     do {
    0x0004c374 ldr r1, [r4, 8]                               |         r1 = *((r4 + 8));
    0x0004c376 mov r3, r7                                    |         r3 = r7;
    0x0004c378 movs r2, 0                                    |         r2 = 0;
    0x0004c37a mov r0, r5                                    |         r0 = r5;
    0x0004c37c strd r6, r8, [sp]                             |         __asm ("strd r6, r8, [sp]");
    0x0004c380 bl 0x2289c                                    |         fcn_0002289c (r0, r1, r2, r3, r4, r5);
    0x0004c384 ldr r4, [r4]                                  |         r4 = *(r4);
    0x0004c386 cmp r4, 0                                     |         
    0x0004c388 bne 0x4c374                                   |         
                                                             |     } while (r4 != 0);
                                                             | label_0:
    0x0004c38a ldr r0, [r5, 8]                               |     r0 = *((r5 + 8));
    0x0004c38c cbz r0, 0x4c3a0                               |     
                                                             |     while (r0 != 0) {
    0x0004c38e movs r3, 0                                    |         r3 = 0;
    0x0004c390 mov r2, sb                                    |         r2 = sb;
    0x0004c392 movs r1, 0x79                                 |         r1 = 0x79;
    0x0004c394 str r3, [sp]                                  |         *(sp) = r3;
    0x0004c396 bl 0x18bf8                                    |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0004c39a add sp, 0xc                                   |         
    0x0004c39c pop.w {r4, r5, r6, r7, r8, sb, pc}            |         
    0x0004c3a0 mov r0, r5                                    |         r0 = r5;
    0x0004c3a2 bl 0x192c8                                    |         r0 = fcn_000192c8 (r0);
    0x0004c3a6 cmp r0, 0                                     |         
    0x0004c3a8 bne 0x4c38e                                   |         
                                                             |     }
    0x0004c3aa add sp, 0xc                                   |     
    0x0004c3ac 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-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x4c3b0 */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) fcn.0004c3b0 ()                                  | void fcn_0004c3b0 (int16_t arg1, int16_t arg2, int16_t arg3) {
                                                             |     int16_t var_0h;
                                                             |     int16_t var_4h;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
                                                             |     r2 = arg3;
    0x0004c3b0 push.w {r4, r5, r6, r7, r8, sb, lr}           |     
    0x0004c3b4 mov r6, r0                                    |     r6 = r0;
    0x0004c3b6 ldr r0, [r1, 0x44]                            |     r0 = *((r1 + 0x44));
    0x0004c3b8 sub sp, 0xc                                   |     
    0x0004c3ba mov sb, r1                                    |     sb = r1;
    0x0004c3bc mov r8, r2                                    |     r8 = r2;
    0x0004c3be ldr r3, [r6]                                  |     r3 = *(r6);
    0x0004c3c0 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x0004c3c2 beq 0x4c476                                   |         goto label_2;
                                                             |     }
    0x0004c3c4 ldr r7, [r3, 0x14]                            |     r7 = *((r3 + 0x14));
    0x0004c3c6 cmp r7, 0                                     |     
                                                             |     if (r7 <= 0) {
    0x0004c3c8 ble 0x4c470                                   |         goto label_3;
                                                             |     }
    0x0004c3ca ldr r3, [r3, 0x10]                            |     r3 = *((r3 + 0x10));
    0x0004c3cc movs r4, 0                                    |     r4 = 0;
    0x0004c3ce b 0x4c3d6                                     |     
                                                             |     while (r0 != r5) {
    0x0004c3d0 adds r4, 1                                    |         r4++;
    0x0004c3d2 cmp r4, r7                                    |         
                                                             |         if (r4 == r7) {
    0x0004c3d4 beq 0x4c3de                                   |             goto label_4;
                                                             |         }
    0x0004c3d6 ldr r5, [r3, 0xc]                             |         r5 = *((r3 + 0xc));
    0x0004c3d8 adds r3, 0x10                                 |         r3 += 0x10;
    0x0004c3da cmp r0, r5                                    |         
    0x0004c3dc bne 0x4c3d0                                   |         
                                                             |     }
                                                             | label_4:
    0x0004c3de movs r7, 1                                    |     r7 = 1;
    0x0004c3e0 lsls r7, r4                                   |     r7 <<= r4;
                                                             | label_1:
    0x0004c3e2 ldr.w r5, [r6, 0x198]                         |     r5 = *((r6 + 0x198));
    0x0004c3e6 mov r1, r4                                    |     r1 = r4;
    0x0004c3e8 mov r0, r6                                    |     r0 = r6;
    0x0004c3ea bl 0x39214                                    |     fcn_00039214 (r0, r1);
    0x0004c3ee cmp r5, 0                                     |     
    0x0004c3f0 it eq                                         |     
                                                             |     if (r5 != 0) {
    0x0004c3f2 moveq r5, r6                                  |         r5 = r6;
                                                             |     }
    0x0004c3f4 ldr.w r3, [r5, 0x148]                         |     r3 = *((r5 + 0x148));
    0x0004c3f8 orrs r3, r7                                   |     r3 |= r7;
    0x0004c3fa str.w r3, [r5, 0x148]                         |     __asm ("str.w r3, aav.0x000000ff");
    0x0004c3fe ldr r5, [r6, 0x44]                            |     r5 = *((r6 + 0x44));
    0x0004c400 adds r3, r5, 3                                |     r3 = r5 + 3;
    0x0004c402 str r3, [r6, 0x44]                            |     *((r6 + 0x44)) = r3;
    0x0004c404 cmp.w r8, 0                                   |     
                                                             |     if (r8 == 0) {
    0x0004c408 beq 0x4c45a                                   |         goto label_5;
                                                             |     }
    0x0004c40a ldr r3, [pc, 0x78]                            |     
    0x0004c40c mov r2, r5                                    |     r2 = r5;
    0x0004c40e mov r1, r4                                    |     r1 = r4;
    0x0004c410 mov r0, r6                                    |     r0 = r6;
    0x0004c412 add r3, pc                                    |     r3 = 0x9889c;
    0x0004c414 str r3, [sp]                                  |     *(sp) = r3;
    0x0004c416 ldr.w r3, [r8]                                |     r3 = *(r8);
    0x0004c41a bl 0x4c198                                    |     fcn_0004c198 (r0, r1, r2, r3, r4, r5);
                                                             | label_0:
    0x0004c41e ldr r0, [r6, 0x48]                            |     r0 = *((r6 + 0x48));
    0x0004c420 mov r3, r5                                    |     r3 = r5;
    0x0004c422 mov r2, r8                                    |     r2 = r8;
    0x0004c424 mov r1, sb                                    |     r1 = sb;
    0x0004c426 adds r0, 1                                    |     r0++;
    0x0004c428 str r0, [sp]                                  |     *(sp) = r0;
    0x0004c42a ldr r0, [r6, 0x44]                            |     r0 = *((r6 + 0x44));
    0x0004c42c str r0, [sp, 4]                               |     var_4h = r0;
    0x0004c42e mov r0, r6                                    |     r0 = r6;
    0x0004c430 bl 0x2289c                                    |     fcn_0002289c (r0, r1, r2, r3, r4, r5);
    0x0004c434 ldr r0, [r6, 8]                               |     r0 = *((r6 + 8));
    0x0004c436 cbz r0, 0x4c44a                               |     
                                                             |     while (r0 != 0) {
    0x0004c438 movs r3, 0                                    |         r3 = 0;
    0x0004c43a mov r2, r4                                    |         r2 = r4;
    0x0004c43c movs r1, 0x79                                 |         r1 = 0x79;
    0x0004c43e str r3, [sp]                                  |         *(sp) = r3;
    0x0004c440 bl 0x18bf8                                    |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0004c444 add sp, 0xc                                   |         
    0x0004c446 pop.w {r4, r5, r6, r7, r8, sb, pc}            |         
    0x0004c44a mov r0, r6                                    |         r0 = r6;
    0x0004c44c bl 0x192c8                                    |         r0 = fcn_000192c8 (r0);
    0x0004c450 cmp r0, 0                                     |         
    0x0004c452 bne 0x4c438                                   |         
                                                             |     }
    0x0004c454 add sp, 0xc                                   |     
    0x0004c456 pop.w {r4, r5, r6, r7, r8, sb, pc}            |     
                                                             | label_5:
    0x0004c45a ldr r3, [pc, 0x2c]                            |     
    0x0004c45c mov r2, r5                                    |     r2 = r5;
    0x0004c45e mov r1, r4                                    |     r1 = r4;
    0x0004c460 mov r0, r6                                    |     r0 = r6;
    0x0004c462 add r3, pc                                    |     r3 = 0x988f0;
    0x0004c464 str r3, [sp]                                  |     *(sp) = r3;
    0x0004c466 ldr.w r3, [sb]                                |     r3 = *(sb);
    0x0004c46a bl 0x4c198                                    |     fcn_0004c198 (r0, r1, r2, r3, r4, r5);
    0x0004c46e b 0x4c41e                                     |     goto label_0;
                                                             | label_3:
    0x0004c470 movs r7, 1                                    |     r7 = 1;
    0x0004c472 movs r4, 0                                    |     r4 = 0;
    0x0004c474 b 0x4c3e2                                     |     goto label_1;
                                                             | label_2:
    0x0004c476 movw r4, 0xbdc0                               |     
    0x0004c47a movs r7, 1                                    |     r7 = 1;
    0x0004c47c movt r4, 0xfff0                               |     r4 = 0xfff0bdc0;
    0x0004c480 lsls r7, r4                                   |     r7 <<= r4;
    0x0004c482 b 0x4c3e2                                     |     goto label_1;
                                                             | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x4d1a8 */
                                                                 | #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.0004d1a8 ()                                      | void fcn_0004d1a8 (int16_t arg_4h, int16_t arg_10h, int16_t arg_14h, int16_t arg_18h, int16_t arg_20h, int16_t arg_24h, int16_t arg_3eh, int16_t arg_3fh, int16_t arg_40h, int16_t arg_42h, int16_t arg_45h, int16_t arg_48h, int16_t arg_50h, int16_t arg_54h, int16_t arg_89h, int16_t arg_8ch, int16_t arg_90h, int16_t arg_94h, int16_t arg_a4h, int16_t arg_c4h, int16_t arg_c8h, int16_t arg_e8h, int16_t arg_11ch, int16_t arg_120h, int16_t arg_124h, int16_t arg_140h, int16_t arg_1bch, int16_t arg_1e0h, int16_t arg_1e8h, int16_t arg_1f0h, int16_t arg_1f4h, int16_t arg_1f8h, int16_t arg_1fch, int16_t arg_200h, int16_t arg_0h, int16_t arg_1ch, int16_t arg_28h, int16_t arg_2ch, int16_t arg_30h, int16_t arg_34h, int16_t arg_38h, int16_t arg_3ch, int16_t arg_44h, int16_t arg_4ch, int16_t arg_58h, int16_t arg_5ch, int16_t arg_64h, int16_t arg_68h, int16_t arg_6ch, 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_98h, int16_t arg_a8h, int16_t arg_ach, int16_t arg_b0h, int16_t arg_b4h, int16_t arg_d8h, int16_t arg_dch, int16_t arg_deh, int16_t arg_e0h, int16_t arg_f4h, int16_t arg_fch, int16_t arg_feh, int16_t arg_100h, int16_t arg_108h, int16_t arg_110h, int16_t arg_114h, int16_t arg_118h, int16_t arg_128h, int16_t arg_12ch, int16_t arg_1ech, int16_t arg1) {
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_40h;
                                                                 |     int16_t var_44h;
                                                                 |     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_1ech;
                                                                 |     r0 = arg1;
    0x0004d1a8 ldr r2, [pc, 0x26c]                               |     
    0x0004d1aa push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x0004d1ae vpush {d8, d9, d10, d11, d12, d13}                |     __asm ("vpush {d8, d9, d10, d11, d12, d13}");
    0x0004d1b2 sub sp, 0x1f4                                     |     
    0x0004d1b4 add r2, pc                                        |     r2 = 0x9a5d0;
    0x0004d1b6 str r2, [sp, 0x78]                                |     var_78h = r2;
    0x0004d1b8 ldr r2, [pc, 0x260]                               |     
    0x0004d1ba ldr r3, [pc, 0x264]                               |     r3 = *(0x4d422);
    0x0004d1bc str r0, [sp, 0x24]                                |     *(arg_24h) = r0;
    0x0004d1be add r2, pc                                        |     
    0x0004d1c0 ldr r3, [r2, r3]                                  |     
    0x0004d1c2 ldrd fp, r2, [r0]                                 |     __asm ("ldrd fp, r2, [r0]");
    0x0004d1c6 ldr r3, [r3]                                      |     r3 = *(0x9a5de);
    0x0004d1c8 str r3, [sp, 0x1ec]                               |     var_1ech = r3;
    0x0004d1ca mov.w r3, 0                                       |     r3 = 0;
    0x0004d1cc lsls r0, r0, 0xc                                  |     r0 <<= 0xc;
    0x0004d1ce ldr r3, [r0, 0x64]                                |     r3 = *((r0 + 0x64));
    0x0004d1d0 str r2, [sp, 0x40]                                |     *(arg_40h) = r2;
    0x0004d1d2 ldr r2, [r0, 8]                                   |     r2 = *((r0 + 8));
    0x0004d1d4 str r2, [sp, 0x44]                                |     var_44h = r2;
    0x0004d1d6 ldr.w r2, [fp, 0x10]                              |     r2 = *(arg_10h);
    0x0004d1da ldr r2, [r2, 0xc]                                 |     r2 = *(0x9a5ea);
    0x0004d1dc ldrb.w r2, [r2, 0x4d]                             |     r2 = *((r2 + 0x4d));
    0x0004d1e0 str r2, [sp, 0x70]                                |     var_70h = r2;
    0x0004d1e2 ldr.w r2, [fp, 0x20]                              |     r2 = *(arg_20h);
    0x0004d1e6 str r2, [sp, 0x68]                                |     var_68h = r2;
    0x0004d1e8 ldr.w r2, [fp, 0x24]                              |     r2 = *(arg_24h);
    0x0004d1ec str r2, [sp, 0x6c]                                |     var_6ch = r2;
                                                                 |     if (r3 != 0) {
    0x0004d1ee cbz r3, 0x4d1f4                                   |         
    0x0004d1f0 bl 0xd1c8                                         |         fcn_0000d1c8 (r0);
                                                                 |     }
    0x0004d1f4 ldr r1, [sp, 0x24]                                |     r1 = *(arg_24h);
    0x0004d1f6 ldr r3, [r1, 0x50]                                |     r3 = *((r1 + 0x50));
    0x0004d1f8 cmp r3, 7                                         |     
                                                                 |     if (r3 == 7) {
    0x0004d1fa beq.w 0x4d50a                                     |         goto label_291;
                                                                 |     }
    0x0004d1fe ldr.w r2, [fp, 0xe8]                              |     r2 = *(arg_e8h);
    0x0004d202 movs r3, 0                                        |     r3 = 0;
    0x0004d204 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x0004d208 str r3, [r1, 0x50]                                |     *((r1 + 0x50)) = r3;
    0x0004d20a str r3, [r1, 0x14]                                |     *((r1 + 0x14)) = r3;
    0x0004d20c vstr d16, [r1, 0x88]                              |     __asm ("vstr d16, [r1, 0x88]");
    0x0004d210 str.w r3, [fp, 0x1bc]                             |     __asm ("str.w r3, [arg_1bch]");
    0x0004d214 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0004d216 bne.w 0x4d428                                     |         goto label_292;
                                                                 |     }
    0x0004d21a ldr.w r3, [fp, 0x11c]                             |     r3 = *(arg_11ch);
    0x0004d21e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004d220 beq.w 0x4d872                                     |         goto label_293;
                                                                 |     }
    0x0004d224 ldr r0, [r1, 0x7c]                                |     r0 = *((r1 + 0x7c));
    0x0004d226 ldr.w r1, [fp, 0x124]                             |     r1 = *(arg_124h);
    0x0004d22a str r1, [sp, 0x74]                                |     var_74h = r1;
    0x0004d22c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004d22e bne.w 0x4d86a                                     |         goto label_294;
                                                                 |     }
                                                                 | label_5:
    0x0004d232 ldr r3, [sp, 0x24]                                |     r3 = *(arg_24h);
    0x0004d234 mov.w r2, 0xca00                                  |     r2 = 0xca00;
    0x0004d238 vldr d10, [pc, 0x1cc]                             |     __asm ("vldr d10, aav.0x000000ff");
    0x0004d23c movt r2, 0x3b9a                                   |     r2 = (r2 & 0xFFFF) | 0x3b9a0000;
    0x0004d240 vldr d9, [pc, 0x1cc]                              |     __asm ("vldr d9, aav.0x000000ff");
    0x0004d244 ldr r3, [r3, 0x4c]                                |     r3 = *((r3 + 0x4c));
    0x0004d246 vmov.i64 d8, 0                                    |     __asm ("vmov.i64 d8, 0");
    0x0004d24a str r2, [sp, 0x8c]                                |     *(arg_8ch) = r2;
    0x0004d24c movw r2, 0xda3                                    |     
    0x0004d250 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x0004d252 movt r2, 0xbdf2                                   |     r2 = 0xbdf20da3;
    0x0004d256 ldr r3, [pc, 0x1cc]                               |     
    0x0004d258 str r2, [sp, 0x84]                                |     var_84h = r2;
    0x0004d25a add r3, pc                                        |     r3 = 0x9a684;
    0x0004d25c str r3, [sp, 0x88]                                |     var_88h = r3;
    0x0004d25e movs r3, 0                                        |     r3 = 0;
    0x0004d260 str r3, [sp, 0x80]                                |     var_80h = r3;
    0x0004d262 str r3, [sp, 0x7c]                                |     var_7ch = r3;
    0x0004d264 str r3, [sp, 0x38]                                |     var_38h = r3;
    0x0004d266 str r3, [sp, 0x30]                                |     var_30h = r3;
    0x0004d268 str r3, [sp, 0x64]                                |     var_64h = r3;
                                                                 | label_2:
    0x0004d26a ldrb.w r4, [fp, 0x40]                             |     r4 = *(arg_40h);
    0x0004d26e cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x0004d270 bne.w 0x4d4ec                                     |         goto label_6;
                                                                 |     }
    0x0004d274 ldr r3, [sp, 0x30]                                |     r3 = *(arg_30h);
    0x0004d276 ldr r2, [sp, 0x40]                                |     r2 = *(arg_40h);
    0x0004d278 adds r3, 1                                        |     r3++;
    0x0004d27a str r3, [sp, 0x30]                                |     *(arg_30h) = r3;
    0x0004d27c ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004d27e add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004d282 add.w r2, r2, r3, lsl 2                           |     r2 += (r3 << 2);
    0x0004d286 ldrb r3, [r2, 2]                                  |     r3 = *((r2 + 2));
    0x0004d288 str r2, [sp, 0x20]                                |     *(arg_20h) = r2;
    0x0004d28a lsls r1, r3, 0x1e                                 |     r1 = r3 << 0x1e;
                                                                 |     if (r1 >= r3) {
    0x0004d28c bpl 0x4d2ae                                       |         goto label_295;
                                                                 |     }
    0x0004d28e ldr r3, [r2, 8]                                   |     r3 = *((r2 + 8));
    0x0004d290 ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004d292 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004d296 add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0004d29a movw r2, 0x2460                                   |     r2 = 0x2460;
    0x0004d29e str r3, [sp, 0x38]                                |     *(arg_38h) = r3;
    0x0004d2a0 ldrh r3, [r3, 0x1c]                               |     r3 = *((r3 + 0x1c));
    0x0004d2a2 tst r2, r3                                        |     
    0x0004d2a4 bne.w 0x4d3fc                                     |     
                                                                 |     while (1) {
    0x0004d2a8 ldr r2, [sp, 0x38]                                |         r2 = *(arg_38h);
    0x0004d2aa movs r3, 4                                        |         r3 = 4;
    0x0004d2ac strh r3, [r2, 0x1c]                               |         *((r2 + 0x1c)) = r3;
                                                                 | label_295:
    0x0004d2ae ldr r3, [sp, 0x20]                                |         r3 = *(arg_20h);
    0x0004d2b0 ldrb.w r8, [r3]                                   |         r8 = *(r3);
    0x0004d2b4 add.w sb, r8, -1                                  |         sb = r8 + -1;
    0x0004d2b8 cmp.w sb, 0x9b                                    |         
                                                                 |         if (sb > 0x9b) {
    0x0004d2bc bhi.w 0x540ee                                     |             goto label_296;
                                                                 |         }
                                                                 |         /* switch table (157 cases) at 0x4d2c4 */
    0x0004d2c0 tbh [pc, sb, lsl 1]                               |         __asm ("tbh [pc, sb, lsl 1]");
    0x0004d3fc ldr r0, [sp, 0x38]                                |         r0 = *(arg_38h);
    0x0004d3fe bl 0xfe84                                         |         fcn_0000fe84 (r0);
    0x0004d402 b 0x4d2a8                                         |         
                                                                 |     }
                                                                 | label_292:
    0x0004d428 str r3, [sp, 0x30]                                |     var_30h = r3;
    0x0004d42a str r3, [sp, 0x64]                                |     var_64h = r3;
    0x0004d42c str r3, [sp, 0x1c]                                |     var_1ch = r3;
                                                                 | label_8:
    0x0004d42e ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x0004d430 movs r4, 9                                        |     r4 = 9;
    0x0004d432 ldr.w r3, [pc, 0xb4c]                             |     
    0x0004d436 mov r1, fp                                        |     r1 = fp;
    0x0004d438 ldr.w r2, [pc, 0xb48]                             |     r2 = *(0x0004df84);
    0x0004d43c str r4, [r0, 0x50]                                |     *((r0 + 0x50)) = r4;
    0x0004d43e adds r0, 0x2c                                     |     r0 += 0x2c;
    0x0004d440 add r3, pc                                        |     r3 = 0x9b3c6;
    0x0004d442 add r2, pc                                        |     r2 += pc;
    0x0004d444 bl 0x1c9d0                                        |     fcn_0001c9d0 (r0, r1);
    0x0004d448 mov r0, r4                                        |     r0 = r4;
                                                                 | label_1:
    0x0004d44a ldr r4, [sp, 0x24]                                |     r4 = *((sp + 0x24));
    0x0004d44c ldr.w r1, [pc, 0xb38]                             |     r1 = *(0x0004df88);
    0x0004d450 ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004d452 ldr r3, [r4, 0x2c]                                |     r3 = *((r4 + 0x2c));
    0x0004d454 str r0, [r4, 0x50]                                |     *((r4 + 0x50)) = r0;
    0x0004d456 add r1, pc                                        |     r1 += pc;
    0x0004d458 str r3, [sp]                                      |     *(sp) = r3;
    0x0004d45a ldr.w r3, [r4, 0xa8]                              |     r3 = *((r4 + 0xa8));
    0x0004d45e blx 0x6820                                        |     fcn_00006820 ();
    0x0004d462 mov r0, r4                                        |     r0 = r4;
    0x0004d464 bl 0x335d0                                        |     fcn_000335d0 (r0);
                                                                 | label_3:
    0x0004d468 ldr r3, [sp, 0x64]                                |     r3 = *(arg_64h);
    0x0004d46a movs r4, 1                                        |     r4 = 1;
    0x0004d46c cbnz r3, 0x4d4b4                                  |     
                                                                 |     while (r4 == 1) {
                                                                 | label_0:
    0x0004d46e ldr r3, [sp, 0x68]                                |         r3 = *(arg_68h);
    0x0004d470 ldr r1, [sp, 0x24]                                |         r1 = *((sp + 0x24));
    0x0004d472 ldr r0, [sp, 0x30]                                |         r0 = *(arg_30h);
    0x0004d474 str.w r3, [fp, 0x20]                              |         __asm ("str.w r3, [arg_20h]");
    0x0004d478 ldr r3, [sp, 0x6c]                                |         r3 = *(arg_6ch);
    0x0004d47a ldr r2, [r1, 0x64]                                |         r2 = *((r1 + 0x64));
    0x0004d47c str.w r3, [fp, 0x24]                              |         __asm ("str.w r3, [fp, 0x24]");
    0x0004d480 ldr r3, [r1, 0x7c]                                |         r3 = *((r1 + 0x7c));
    0x0004d482 add r3, r0                                        |         r3 += r0;
    0x0004d484 str r3, [r1, 0x7c]                                |         *((r1 + 0x7c)) = r3;
                                                                 |         if (r2 != 0) {
    0x0004d486 cbz r2, 0x4d48e                                   |             
    0x0004d488 mov r0, r1                                        |             r0 = r1;
    0x0004d48a bl 0x11824                                        |             fcn_00011824 (r0);
                                                                 |         }
    0x0004d48e ldr.w r2, [pc, 0xafc]                             |         r2 = *(0x0004df8c);
    0x0004d492 ldr.w r3, [pc, 0xafc]                             |         r3 = *(0x4df92);
    0x0004d496 add r2, pc                                        |         r2 += pc;
    0x0004d498 ldr r3, [r2, r3]                                  |         r3 = *((r2 + r3));
    0x0004d49a ldr r2, [r3]                                      |         r2 = *(0x4df92);
    0x0004d49c ldr r3, [sp, 0x1ec]                               |         r3 = *(arg_1ech);
    0x0004d49e eors r2, r3                                       |         r2 ^= r3;
    0x0004d4a0 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0004d4a4 bne.w 0x53f26                                     |             goto label_297;
                                                                 |         }
    0x0004d4a8 mov r0, r4                                        |         r0 = r4;
    0x0004d4aa add sp, 0x1f4                                     |         
    0x0004d4ac vpop {d8, d9, d10, d11, d12, d13}                 |         __asm ("vpop {d8, d9, d10, d11, d12, d13}");
    0x0004d4b0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
    0x0004d4b4 subs r4, r3, 1                                    |         r4 = r3 - 1;
    0x0004d4b6 ldr.w r3, [fp, 0x10]                              |         r3 = *(arg_10h);
    0x0004d4ba add.w r3, r3, r4, lsl 4                           |         r3 += (r4 << 4);
    0x0004d4be ldr r0, [r3, 0xc]                                 |         r0 = *((r3 + 0xc));
    0x0004d4c0 bl 0x1386c                                        |         fcn_0001386c (r0);
    0x0004d4c4 cmp r4, 1                                         |         
    0x0004d4c6 beq 0x4d46e                                       |         
                                                                 |     }
    0x0004d4c8 ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x0004d4cc movs r4, 1                                        |     r4 = 1;
    0x0004d4ce ldr r0, [r3, 0x1c]                                |     r0 = *((r3 + 0x1c));
    0x0004d4d0 bl 0x1386c                                        |     fcn_0001386c (r0);
    0x0004d4d4 b 0x4d46e                                         |     goto label_0;
                                                                 | label_15:
    0x0004d4d6 bic r3, r3, 0x1c00                                |     r3 = BIT_MASK (r3, 0x1c00);
    0x0004d4da orr r3, r3, 0x1000                                |     r3 |= 0x1000;
    0x0004d4de strh r3, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r3;
                                                                 | label_16:
    0x0004d4e0 mov r0, r4                                        |     r0 = r4;
    0x0004d4e2 bl 0x17410                                        |     r0 = fcn_00017410 (r0);
    0x0004d4e6 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004d4e8 beq.w 0x4e75e                                     |         goto label_298;
                                                                 |     }
                                                                 | label_6:
    0x0004d4ec ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004d4ee add.w r4, r3, 0x2c                                |     r4 = r3 + 0x2c;
                                                                 |     do {
                                                                 | label_24:
    0x0004d4f2 ldr.w r2, [pc, 0xaa0]                             |         
    0x0004d4f6 movs r3, 1                                        |         r3 = 1;
    0x0004d4f8 mov r0, r4                                        |         r0 = r4;
    0x0004d4fa mov r1, fp                                        |         r1 = fp;
    0x0004d4fc strb.w r3, [fp, 0x40]                             |         *(arg_40h) = r3;
    0x0004d500 add r2, pc                                        |         r2 = 0x9b49a;
    0x0004d502 bl 0x1c9d0                                        |         fcn_0001c9d0 (r0, r1);
    0x0004d506 movs r0, 7                                        |         r0 = 7;
    0x0004d508 b 0x4d44a                                         |         goto label_1;
                                                                 | label_291:
    0x0004d50a ldr r3, [sp, 0x24]                                |         r3 = *(arg_24h);
    0x0004d50c add.w r4, r3, 0x2c                                |         r4 = r3 + 0x2c;
    0x0004d510 movs r3, 0                                        |         r3 = 0;
    0x0004d512 str r3, [sp, 0x30]                                |         var_30h = r3;
    0x0004d514 str r3, [sp, 0x64]                                |         var_64h = r3;
    0x0004d516 str r3, [sp, 0x1c]                                |         var_1ch = r3;
    0x0004d518 b 0x4d4f2                                         |         
                                                                 |     } while (1);
    0x0004d51a ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004d51c ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004d51e ldr r7, [r3, 4]                                   |     r7 = *((r3 + 4));
    0x0004d520 ldr r4, [r3, 0xc]                                 |     r4 = *((r3 + 0xc));
    0x0004d522 add.w r7, r7, r7, lsl 2                           |     r7 += (r7 << 2);
    0x0004d526 add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0004d52a add.w r7, r2, r7, lsl 3                           |     r7 = r2 + (r7 << 3);
    0x0004d52e add.w r4, r2, r4, lsl 3                           |     r4 = r2 + (r4 << 3);
    0x0004d532 ldrb r2, [r3, 3]                                  |     r2 = *((r3 + 3));
    0x0004d534 ldrh r5, [r7, 0x1c]                               |     r5 = *((r7 + 0x1c));
    0x0004d536 ldrh r6, [r4, 0x1c]                               |     r6 = *((r4 + 0x1c));
    0x0004d538 orr.w r3, r5, r6                                  |     r3 = r5 | r6;
    0x0004d53c lsls r0, r3, 0x1f                                 |     r0 = r3 << 0x1f;
                                                                 |     if (r0 < r3) {
    0x0004d53e bmi.w 0x50fa6                                     |         goto label_299;
                                                                 |     }
    0x0004d542 ands r8, r2, 0x67                                 |     r8 = r2 & 0x67;
    0x0004d546 it eq                                             |     
                                                                 |     if (r8 != r2) {
    0x0004d548 moveq r3, r5                                      |         r3 = r5;
                                                                 |     }
                                                                 |     if (r8 != r2) {
    0x0004d54a bne.w 0x52c28                                     |         goto label_300;
                                                                 |     }
                                                                 | label_171:
    0x0004d54e lsls r2, r3, 0x11                                 |     r2 = r3 << 0x11;
                                                                 |     if (r2 < r3) {
    0x0004d550 bmi.w 0x52c1e                                     |         goto label_301;
                                                                 |     }
                                                                 | label_170:
    0x0004d554 ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0004d556 lsls r3, r3, 0x11                                 |     r3 <<= 0x11;
                                                                 |     if (r3 < r3) {
    0x0004d558 bmi.w 0x52c14                                     |         goto label_302;
                                                                 |     }
                                                                 | label_169:
    0x0004d55c ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004d55e mov r1, r7                                        |     r1 = r7;
    0x0004d560 mov r0, r4                                        |     r0 = r4;
    0x0004d562 ldr r2, [r2, 0x10]                                |     r2 = *((r2 + 0x10));
    0x0004d564 bl 0x21bfc                                        |     fcn_00021bfc (r0, r1, r2);
    0x0004d568 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004d56a mov r3, r0                                        |     r3 = r0;
    0x0004d56c ldrb.w r8, [r2]                                   |     r8 = *(r2);
    0x0004d570 ldrb r2, [r2, 3]                                  |     r2 = *((r2 + 3));
                                                                 | label_158:
    0x0004d572 sub.w r8, r8, 0x4e                                |     r8 -= 0x4e;
    0x0004d576 cmp.w r8, 4                                       |     
                                                                 |     if (r8 > 4) {
    0x0004d57a bhi.w 0x51656                                     |         goto label_303;
                                                                 |     }
                                                                 |     /* switch table (6 cases) at 0x4d582 */
    0x0004d57e tbh [pc, r8, lsl 1]                               |     __asm ("tbh [pc, r8, lsl 1]");
    0x0004d58c ldr r7, [sp, 0x20]                                |     r7 = *(arg_20h);
    0x0004d58e ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004d590 ldr r6, [r7, 4]                                   |     r6 = *((r7 + 4));
    0x0004d592 add.w r6, r6, r6, lsl 2                           |     r6 += (r6 << 2);
    0x0004d594 lsls r6, r0, 0x1a                                 |     r6 = r0 << 0x1a;
    0x0004d596 add.w r6, r3, r6, lsl 3                           |     r6 = r3 + (r6 << 3);
    0x0004d59a mov r0, r6                                        |     r0 = r6;
    0x0004d59c bl 0xa31c                                         |     fcn_0000a31c (r0);
    0x0004d5a0 ldr r5, [r7, 8]                                   |     r5 = *((r7 + 8));
    0x0004d5a2 mov sl, r0                                        |     sl = r0;
    0x0004d5a4 ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004d5a6 add.w r5, r5, r5, lsl 2                           |     r5 += (r5 << 2);
    0x0004d5aa add.w r5, r3, r5, lsl 3                           |     r5 = r3 + (r5 << 3);
    0x0004d5ac lsls r5, r0, 0x17                                 |     r5 = r0 << 0x17;
    0x0004d5ae mov r0, r5                                        |     r0 = r5;
    0x0004d5b0 bl 0xa31c                                         |     fcn_0000a31c (r0);
    0x0004d5b4 ldr r3, [r7, 0xc]                                 |     r3 = *((r7 + 0xc));
    0x0004d5b6 mov sb, r0                                        |     sb = r0;
    0x0004d5b8 ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004d5ba add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004d5be add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0004d5c2 ldrh r2, [r5, 0x1c]                               |     r2 = *((r5 + 0x1c));
    0x0004d5c4 str r3, [sp, 0x38]                                |     *(arg_38h) = r3;
    0x0004d5c6 ldrh r3, [r6, 0x1c]                               |     r3 = *((r6 + 0x1c));
    0x0004d5c8 orrs r3, r2                                       |     r3 |= r2;
    0x0004d5ca lsls r0, r3, 0x1f                                 |     r0 = r3 << 0x1f;
                                                                 |     if (r0 < r3) {
    0x0004d5cc bmi.w 0x51c08                                     |         goto label_290;
                                                                 |     }
    0x0004d5d0 and.w r3, sl, sb                                  |     r3 = sl & sb;
    0x0004d5d4 lsls r1, r3, 0x1d                                 |     r1 = r3 << 0x1d;
                                                                 |     if (r1 >= r3) {
    0x0004d5d6 bpl.w 0x514b8                                     |         goto label_304;
                                                                 |     }
    0x0004d5da sub.w r8, r8, 0x59                                |     r8 -= 0x59;
    0x0004d5de ldrd r2, r3, [r6, 0x10]                           |     __asm ("ldrd r2, r3, [r6, 0x10]");
    0x0004d5e2 ldrd r0, r1, [r5, 0x10]                           |     __asm ("ldrd r0, r1, [r5, 0x10]");
    0x0004d5e6 cmp.w r8, 3                                       |     
                                                                 |     if (r8 > 3) {
    0x0004d5ea bhi.w 0x540b6                                     |         goto label_305;
                                                                 |     }
                                                                 |     /* switch table (5 cases) at 0x4d5f2 */
    0x0004d5ee tbh [pc, r8, lsl 1]                               |     __asm ("tbh [pc, r8, lsl 1]");
    0x0004d5fa ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004d5fc ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004d5fe ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0004d600 adds r3, 1                                        |     r3++;
    0x0004d602 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004d604 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x0004d606 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004d60a add.w r6, r1, r3, lsl 3                           |     r6 = r1 + (r3 << 3);
    0x0004d60e ldrd r3, r2, [r2, 8]                              |     __asm ("ldrd r3, r2, [r2, 8]");
    0x0004d612 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004d616 add.w r2, r2, r2, lsl 2                           |     r2 += (r2 << 2);
    0x0004d61a add.w r0, r1, r3, lsl 3                           |     r0 = r1 + (r3 << 3);
    0x0004d61e add.w r1, r1, r2, lsl 3                           |     r1 += (r2 << 3);
    0x0004d622 ldrh r3, [r6, 0x1c]                               |     r3 = *((r6 + 0x1c));
    0x0004d624 ldrh r2, [r0, 0x1c]                               |     r2 = *((r0 + 0x1c));
    0x0004d626 str r1, [sp, 0x38]                                |     *(arg_38h) = r1;
    0x0004d628 orrs r3, r2                                       |     r3 |= r2;
    0x0004d62a lsls r7, r3, 0x1f                                 |     r7 = r3 << 0x1f;
                                                                 |     if (r7 < r3) {
    0x0004d62c bmi.w 0x50ec6                                     |         goto label_306;
                                                                 |     }
    0x0004d630 bl 0xa1d8                                         |     r0 = fcn_0000a1d8 (r0);
    0x0004d634 mov r4, r0                                        |     r4 = r0;
    0x0004d636 mov r0, r6                                        |     r0 = r6;
    0x0004d638 mov r5, r1                                        |     r5 = r1;
    0x0004d63a bl 0xa1d8                                         |     fcn_0000a1d8 (r0);
    0x0004d63e cmp.w r8, 0x55                                    |     
    0x0004d642 mov r3, r0                                        |     r3 = r0;
    0x0004d644 mov r2, r1                                        |     r2 = r1;
    0x0004d646 itt eq                                            |     
                                                                 |     if (r8 != 0x55) {
    0x0004d648 andeq r4, r0                                      |         r4 &= r0;
                                                                 |     }
                                                                 |     if (r8 != 0x55) {
    0x0004d64a andeq r5, r1                                      |         r5 &= r1;
                                                                 |     }
                                                                 |     if (r8 != 0x55) {
    0x0004d64c beq 0x4d69e                                       |         
    0x0004d64e cmp.w r8, 0x56                                    |         
    0x0004d652 itt eq                                            |         
                                                                 |         if (r8 != 0x56) {
    0x0004d654 orreq r4, r0                                      |             r4 |= r0;
                                                                 |         }
                                                                 |         if (r8 != 0x56) {
    0x0004d656 orreq r5, r1                                      |             r5 |= r1;
                                                                 |         }
                                                                 |         if (r8 == 0x56) {
    0x0004d658 beq 0x4d69e                                       |             goto label_229;
                                                                 |         }
    0x0004d65a orrs.w r1, r3, r2                                 |         r1 = r3 | r2;
                                                                 |         if (r1 == r3) {
    0x0004d65e beq 0x4d69e                                       |             goto label_229;
                                                                 |         }
    0x0004d660 cmp r2, 0                                         |         
                                                                 |         if (r2 < 0) {
    0x0004d662 blt.w 0x537d2                                     |             goto label_307;
                                                                 |         }
    0x0004d666 cmp r3, 0x40                                      |         
    0x0004d668 sbcs r2, r2, 0                                    |         __asm ("sbcs r2, r2, 0");
                                                                 |         if (r3 >= 0x40) {
    0x0004d66c bge.w 0x537ea                                     |             goto label_308;
                                                                 |         }
                                                                 | label_228:
    0x0004d670 cmp.w r8, 0x57                                    |         
                                                                 |         if (r8 == 0x57) {
    0x0004d674 beq.w 0x53bfc                                     |             goto label_309;
                                                                 |         }
    0x0004d678 rsb.w r2, r3, 0x20                                |         r2 = 0x20 - r3;
    0x0004d67c lsrs r4, r3                                       |         r4 >>= r3;
    0x0004d67e lsl.w r2, r5, r2                                  |         r2 = r5 << r2;
    0x0004d682 cmp r5, 0                                         |         
    0x0004d684 orr.w r4, r4, r2                                  |         r4 |= r2;
    0x0004d688 sub.w r2, r3, 0x20                                |         r2 = r3 - 0x20;
    0x0004d68c lsr.w r2, r5, r2                                  |         r2 = r5 >> r2;
    0x0004d690 orr.w r4, r4, r2                                  |         r4 |= r2;
    0x0004d694 lsr.w r2, r5, r3                                  |         r2 = r5 >> r3;
                                                                 |         if (r5 < 0) {
    0x0004d698 blt.w 0x53ca0                                     |             goto label_310;
                                                                 |         }
                                                                 | label_256:
    0x0004d69c mov r5, r2                                        |         r5 = r2;
                                                                 |     }
                                                                 | label_229:
    0x0004d69e ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x0004d6a0 ldrh r3, [r2, 0x1c]                               |     r3 = *((r2 + 0x1c));
    0x0004d6a2 strd r4, r5, [r2, 0x10]                           |     __asm ("strd r4, r5, [r2, 0x10]");
    0x0004d6a6 bic r3, r3, 0x4180                                |     r3 = BIT_MASK (r3, 0x4180);
    0x0004d6aa bic r3, r3, 0x7f                                  |     r3 = BIT_MASK (r3, 0x7f);
    0x0004d6ae orr r3, r3, 4                                     |     r3 |= 4;
    0x0004d6b2 strh r3, [r2, 0x1c]                               |     *((r2 + 0x1c)) = r3;
    0x0004d6b4 b 0x4d26a                                         |     goto label_2;
    0x0004d6b6 ldr r0, [sp, 0x20]                                |     r0 = *(arg_20h);
    0x0004d6b8 cmp.w r8, 0x70                                    |     
    0x0004d6bc ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004d6be add r4, sp, 0xb0                                  |     r4 += arg_b0h;
    0x0004d6c0 mov.w r8, -1                                      |     r8 = -1;
    0x0004d6c4 it hi                                             |     
                                                                 |     if (r8 <= 0x70) {
    0x0004d6c6 movhi r8, 0                                       |         r8 = 0;
                                                                 |     }
    0x0004d6ca ldr r2, [r0, 4]                                   |     r2 = *((r0 + 4));
    0x0004d6cc ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004d6ce ldr r1, [r0, 0x10]                                |     r1 = *((r0 + 0x10));
    0x0004d6d0 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x0004d6d4 ldr.w r3, [r3, r2, lsl 2]                         |     offset_0 = r2 << 2;
                                                                 |     r3 = *((r3 + offset_0));
    0x0004d6d8 ldr r2, [r3, 8]                                   |     r2 = *((r3 + 8));
    0x0004d6da strb.w r8, [r4, 6]                                |     *((r4 + 6)) = r8;
    0x0004d6de ldr r5, [r3]                                      |     r5 = *(r3);
    0x0004d6e0 ldr r3, [r0, 0xc]                                 |     r3 = *((r0 + 0xc));
    0x0004d6e2 str r2, [r4]                                      |     *(r4) = r2;
    0x0004d6e4 ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004d6e6 strh r1, [r4, 4]                                  |     *((r4 + 4)) = r1;
    0x0004d6e8 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004d6ec vstr d16, [sp, 0xa8]                              |     __asm ("vstr d16, [sp, 0xa8]");
    0x0004d6f0 add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0004d6f4 str r3, [r4, 8]                                   |     *((r4 + 8)) = r3;
    0x0004d6f6 ldrb.w r8, [r5, 0x51]                             |     r8 = *((r5 + 0x51));
    0x0004d6fa cmp.w r8, 1                                       |     
                                                                 |     if (r8 == 1) {
    0x0004d6fe beq.w 0x50b1c                                     |         goto label_311;
                                                                 |     }
                                                                 | label_44:
    0x0004d702 blx 0x5fe8                                        |     fcn_00005fe8 ();
    0x0004d706 ldr.w r1, [pc, 0x890]                             |     r1 = *(0x0004df98);
    0x0004d70a movw r2, 0xdcf                                    |     
    0x0004d70e movs r4, 0                                        |     r4 = 0;
    0x0004d710 movs r6, 0xb                                      |     r6 = 0xb;
    0x0004d712 add.w r3, r0, 0x14                                |     r3 = r0 + 0x14;
    0x0004d716 movt r2, 1                                        |     r2 = 0x10dcf;
    0x0004d71a add r1, pc                                        |     r1 += pc;
    0x0004d71c movs r0, 0xb                                      |     r0 = 0xb;
    0x0004d71e blx 0x6820                                        |     fcn_00006820 ();
                                                                 | label_45:
    0x0004d722 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004d724 ldrb r3, [r3]                                     |     r3 = *(r3);
    0x0004d726 lsls r7, r3, 0x1f                                 |     r7 = r3 << 0x1f;
    0x0004d728 ite mi                                            |     
                                                                 |     if (r7 < r3) {
    0x0004d72a rsbmi r4, r4, 0                                   |         __asm ("rsbmi r4, r4, 0");
                                                                 |     }
                                                                 |     if (r7 < r3) {
    0x0004d72c addpl r4, 1                                       |         r4++;
                                                                 |     }
    0x0004d72e cmp r4, 0                                         |     
                                                                 |     if (r4 <= 0) {
    0x0004d730 ble.w 0x4dbae                                     |         goto label_20;
                                                                 |     }
                                                                 | label_68:
    0x0004d734 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004d736 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0004d738 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
                                                                 | label_12:
    0x0004d73a cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004d73c beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
                                                                 | label_7:
    0x0004d740 mov sb, r6                                        |     sb = r6;
                                                                 | label_25:
    0x0004d742 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004d744 ldr r0, [r3, 0x2c]                                |     r0 = *((r3 + 0x2c));
                                                                 | label_34:
    0x0004d746 ldr r4, [sp, 0x24]                                |     r4 = *((sp + 0x24));
    0x0004d748 ldr.w r1, [pc, 0x850]                             |     r1 = *(0x0004df9c);
    0x0004d74c str r0, [sp]                                      |     *(sp) = r0;
    0x0004d74e mov r0, sb                                        |     r0 = sb;
    0x0004d750 ldr.w r3, [r4, 0xa8]                              |     r3 = *((r4 + 0xa8));
    0x0004d754 ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004d756 add r1, pc                                        |     r1 += pc;
    0x0004d758 str.w sb, [r4, 0x50]                              |     __asm ("str.w sb, [r4, 0x50]");
    0x0004d75c blx 0x6820                                        |     fcn_00006820 ();
    0x0004d760 mov r0, r4                                        |     r0 = r4;
    0x0004d762 bl 0x335d0                                        |     fcn_000335d0 (r0);
    0x0004d766 movw r3, 0xc0a                                    |     r3 = 0xc0a;
    0x0004d76a cmp sb, r3                                        |     
                                                                 |     if (sb != r3) {
    0x0004d76c bne.w 0x4d468                                     |         goto label_3;
                                                                 |     }
                                                                 | label_155:
    0x0004d770 movs r3, 1                                        |     r3 = 1;
    0x0004d772 strb.w r3, [fp, 0x40]                             |     *(arg_40h) = r3;
    0x0004d776 b 0x4d468                                         |     goto label_3;
    0x0004d778 ldr r1, [sp, 0x20]                                |     r1 = *(arg_20h);
    0x0004d77a mov r5, r8                                        |     r5 = r8;
    0x0004d77c ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004d77e ldr r2, [r1, 4]                                   |     r2 = *((r1 + 4));
    0x0004d780 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004d782 ldr.w r4, [r3, r2, lsl 2]                         |     offset_1 = r2 << 2;
                                                                 |     r4 = *((r3 + offset_1));
    0x0004d786 movs r3, 0                                        |     r3 = 0;
    0x0004d788 ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004d78a strb r3, [r4, 0x19]                               |     *((r4 + 0x19)) = r3;
    0x0004d78c ldr r3, [r1, 0xc]                                 |     r3 = *((r1 + 0xc));
    0x0004d78e add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004d792 add.w r6, r2, r3, lsl 3                           |     r6 = r2 + (r3 << 3);
    0x0004d796 ldrb r2, [r4, 0x1c]                               |     r2 = *((r4 + 0x1c));
    0x0004d798 ldrh r3, [r6, 0x1c]                               |     r3 = *((r6 + 0x1c));
    0x0004d79a lsls r1, r2, 0x1d                                 |     r1 = r2 << 0x1d;
                                                                 |     if (r1 < r2) {
    0x0004d79c bmi.w 0x50e98                                     |         goto label_312;
                                                                 |     }
    0x0004d7a0 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004d7a2 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x0004d7a4 tst.w r8, 1                                       |     
    0x0004d7a8 ldr r1, [r2, 0x10]                                |     r1 = *((r2 + 0x10));
    0x0004d7aa ldr r2, [r4, 8]                                   |     r2 = *((r4 + 8));
    0x0004d7ac str r6, [r7, 8]                                   |     *((r7 + 8)) = r6;
    0x0004d7ae strh r1, [r7, 4]                                  |     *((r7 + 4)) = r1;
    0x0004d7b0 str r2, [r7]                                      |     *(r7) = r2;
    0x0004d7b2 ite ne                                            |     
                                                                 |     if ((r8 & 1) == 0) {
    0x0004d7b4 movne r2, -1                                      |         r2 = -1;
                                                                 |     }
                                                                 |     if ((r8 & 1) == 0) {
    0x0004d7b8 movs r2, 1                                        |         r2 = 1;
                                                                 |     }
    0x0004d7ba strb r2, [r7, 6]                                  |     *((r7 + 6)) = r2;
    0x0004d7bc lsls r2, r3, 0x11                                 |     r2 = r3 << 0x11;
                                                                 |     if (r2 < r3) {
    0x0004d7be bmi.w 0x52c00                                     |         goto label_313;
                                                                 |     }
                                                                 | label_168:
    0x0004d7c2 movs r3, 0                                        |     r3 = 0;
    0x0004d7c4 add.w sl, sp, 0xb0                                |     sl += arg_b0h;
    0x0004d7c8 ldr r0, [r4]                                      |     r0 = *(r4);
    0x0004d7ca mov r1, r7                                        |     r1 = r7;
    0x0004d7cc str r3, [sp]                                      |     *(sp) = r3;
    0x0004d7ce movs r2, 0                                        |     r2 = 0;
    0x0004d7d0 movs r3, 0                                        |     r3 = 0;
    0x0004d7d2 str.w sl, [sp, 4]                                 |     __asm ("str.w sl, [arg_4h]");
    0x0004d7d6 bl 0x2e9e8                                        |     r0 = fcn_0002e9e8 (r0, r1, r2, r3, r4, r5, r6);
    0x0004d7da mov r6, r0                                        |     r6 = r0;
    0x0004d7dc cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004d7de bne.w 0x528f6                                     |         goto label_207;
                                                                 |     }
    0x0004d7e2 strb r0, [r4, 0x1a]                               |     *((r4 + 0x1a)) = r0;
    0x0004d7e4 ldr.w r3, [sl]                                    |     r3 = *(sl);
                                                                 | label_125:
    0x0004d7e8 cmp r5, 0x3d                                      |     
    0x0004d7ea mov.w r2, 0                                       |     r2 = 0;
    0x0004d7ee strb r2, [r4, 0x1b]                               |     *((r4 + 0x1b)) = r2;
    0x0004d7f0 str r2, [r4, 0x44]                                |     *((r4 + 0x44)) = r2;
                                                                 |     if (r5 <= 0x3d) {
    0x0004d7f2 ble.w 0x520e6                                     |         goto label_314;
                                                                 |     }
    0x0004d7f6 cmp r3, r2                                        |     
                                                                 |     if (r3 < r2) {
    0x0004d7f8 blt.w 0x528e0                                     |         goto label_315;
                                                                 |     }
                                                                 | label_126:
    0x0004d7fc cmp r5, 0x3f                                      |     
    0x0004d7fe it eq                                             |     
                                                                 |     if (r5 == 0x3f) {
    0x0004d800 cmpeq r3, 0                                       |         __asm ("cmpeq r3, 0");
                                                                 |     }
                                                                 |     if (r5 == 0x3f) {
    0x0004d802 beq.w 0x528e0                                     |         goto label_315;
                                                                 |     }
    0x0004d806 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004d808 adds r3, 1                                        |     r3++;
    0x0004d80a str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004d80c b 0x4d26a                                         |     goto label_2;
    0x0004d80e ldr r1, [sp, 0x20]                                |     r1 = *(arg_20h);
    0x0004d810 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004d812 ldr r2, [r1, 4]                                   |     r2 = *((r1 + 4));
    0x0004d814 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004d816 ldr r6, [r1, 0xc]                                 |     r6 = *((r1 + 0xc));
    0x0004d818 ldr.w r4, [r3, r2, lsl 2]                         |     offset_2 = r2 << 2;
                                                                 |     r4 = *((r3 + offset_2));
    0x0004d81c ldr r3, [r1, 0x10]                                |     r3 = *((r1 + 0x10));
    0x0004d81e ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004d820 add.w r6, r6, r6, lsl 2                           |     r6 += (r6 << 2);
    0x0004d824 ldr.w sl, [r4, 8]                                 |     sl = *((r4 + 8));
    0x0004d828 cmp r3, 0                                         |     
    0x0004d82a add.w r6, r2, r6, lsl 3                           |     r6 = r2 + (r6 << 3);
                                                                 |     if (r3 <= 0) {
    0x0004d82e ble.w 0x50eda                                     |         goto label_316;
                                                                 |     }
    0x0004d832 uxth r5, r3                                       |     r5 = (int16_t) r3;
    0x0004d834 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x0004d836 str.w sl, [r7]                                    |     __asm ("str.w sl, [r7]");
    0x0004d83a strh r3, [r7, 4]                                  |     *((r7 + 4)) = r3;
    0x0004d83c str r6, [r7, 8]                                   |     *((r7 + 8)) = r6;
    0x0004d83e cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x0004d840 beq.w 0x53a80                                     |         goto label_317;
                                                                 |     }
    0x0004d844 movs r5, 0                                        |     r5 = 0;
    0x0004d846 mov r0, r6                                        |     r0 = r6;
    0x0004d848 mov r8, r5                                        |     r8 = r5;
    0x0004d84a b 0x4d85c                                         |     
                                                                 |     while (r3 >= r3) {
                                                                 | label_4:
    0x0004d84c ldrh r3, [r7, 4]                                  |         r3 = *((r7 + 4));
    0x0004d84e adds r5, 1                                        |         r5++;
    0x0004d850 add.w r8, r8, 0x28                                |         r8 += 0x28;
    0x0004d854 cmp r3, r5                                        |         
                                                                 |         if (r3 <= r5) {
    0x0004d856 ble.w 0x51d3c                                     |             goto label_318;
                                                                 |         }
    0x0004d85a ldr r0, [r7, 8]                                   |         r0 = *((r7 + 8));
    0x0004d85c add r0, r8                                        |         r0 += r8;
    0x0004d85e ldrh r3, [r0, 0x1c]                               |         r3 = *((r0 + 0x1c));
    0x0004d860 lsls r3, r3, 0x11                                 |         r3 <<= 0x11;
    0x0004d862 bpl 0x4d84c                                       |         
                                                                 |     }
    0x0004d864 bl 0x173c0                                        |     fcn_000173c0 (r0);
    0x0004d868 b 0x4d84c                                         |     goto label_4;
                                                                 | label_294:
    0x0004d86a bl 0x5debc                                        |     fcn_0005debc (r0, r1, r2);
    0x0004d86e str r1, [sp, 0x74]                                |     var_74h = r1;
    0x0004d870 b 0x4d232                                         |     goto label_5;
                                                                 | label_293:
    0x0004d872 str r3, [sp, 0x74]                                |     var_74h = r3;
    0x0004d874 b 0x4d232                                         |     goto label_5;
    0x0004d876 ldr r0, [sp, 0x20]                                |     r0 = *(arg_20h);
    0x0004d878 cmp.w r8, 0x49                                    |     
    0x0004d87c ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004d87e ldr r3, [r0, 8]                                   |     r3 = *((r0 + 8));
    0x0004d880 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004d884 add.w r1, r2, r3, lsl 3                           |     r1 = r2 + (r3 << 3);
    0x0004d888 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004d88a ldr r2, [r0, 4]                                   |     r2 = *((r0 + 4));
    0x0004d88c ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004d88e ldr.w r4, [r3, r2, lsl 2]                         |     offset_3 = r2 << 2;
                                                                 |     r4 = *((r3 + offset_3));
    0x0004d892 ldr r3, [r0, 0xc]                                 |     r3 = *((r0 + 0xc));
    0x0004d894 itete eq                                          |     
                                                                 |     if (r8 != 0x49) {
    0x0004d896 ldreq r2, [sp, 0x44]                              |         r2 = *(arg_44h);
                                                                 |     }
                                                                 |     if (r8 == 0x49) {
    0x0004d898 movne sb, r3                                      |         sb = r3;
                                                                 |     }
                                                                 |     if (r8 != 0x49) {
    0x0004d89a addeq r3, r3, r3, lsl 2                           |         r3 += (r3 << 2);
                                                                 |     }
                                                                 |     if (r8 != 0x49) {
    0x0004d89e asrs r5, r3, 0x1f                                 |         r5 = r3 >> 0x1f;
                                                                 |     }
    0x0004d8a0 itt eq                                            |     
                                                                 |     if (r8 != 0x49) {
    0x0004d8a2 addeq r3, r2, r3, lsl 3                           |         r3 = r2 + (r3 << 3);
                                                                 |     }
                                                                 |     if (r8 == 0x49) {
    0x0004d8a6 ldrd sb, r5, [r3, 0x10]                           |         __asm ("ldrd sb, r5, [r3, 0x10]");
                                                                 |     }
    0x0004d8aa ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004d8ac ldrb r3, [r3, 3]                                  |     r3 = *((r3 + 3));
    0x0004d8ae lsls r7, r3, 0x1f                                 |     r7 = r3 << 0x1f;
    0x0004d8b0 itttt mi                                          |     
                                                                 |     if (r7 >= r3) {
    0x0004d8b2 ldrmi r0, [sp, 0x24]                              |         r0 = *((sp + 0x24));
                                                                 |     }
                                                                 |     if (r7 >= r3) {
    0x0004d8b4 ldrmi r2, [r0, 0x5c]                              |         r2 = *((r0 + 0x5c));
                                                                 |     }
                                                                 |     if (r7 >= r3) {
    0x0004d8b6 addmi r2, 1                                       |         r2++;
                                                                 |     }
                                                                 |     if (r7 >= r3) {
    0x0004d8b8 strmi r2, [r0, 0x5c]                              |         *((r0 + 0x5c)) = r2;
                                                                 |     }
    0x0004d8ba lsls r6, r3, 0x1e                                 |     r6 = r3 << 0x1e;
    0x0004d8bc ldrh r2, [r1, 0x1c]                               |     r2 = *((r1 + 0x1c));
    0x0004d8be itt mi                                            |     
                                                                 |     if (r6 < r3) {
    0x0004d8c0 strdmi sb, r5, [fp, 0x20]                         |         __asm ("strdmi sb, r5, [fp, 0x20]");
                                                                 |     }
                                                                 |     if (r6 < r3) {
    0x0004d8c4 strd sb, r5, [sp, 0x68]                           |         __asm ("strd sb, r5, [sp, 0x68]");
                                                                 |     }
    0x0004d8c8 lsls r0, r2, 0x1f                                 |     r0 = r2 << 0x1f;
    0x0004d8ca ldr r0, [r4]                                      |     r0 = *(r4);
    0x0004d8cc iteet mi                                          |     
                                                                 |     if (r0 >= r2) {
    0x0004d8ce movmi r7, 0                                       |         r7 = 0;
                                                                 |     }
                                                                 |     if (r0 < r2) {
    0x0004d8d0 ldrpl r6, [r1, 4]                                 |         r6 = *((r1 + 4));
                                                                 |     }
                                                                 |     if (r0 < r2) {
    0x0004d8d2 ldrpl r7, [r1, 0x18]                              |         r7 = *((r1 + 0x18));
                                                                 |     }
                                                                 |     if (r0 >= r2) {
    0x0004d8d4 movmi r6, r7                                      |         r6 = r7;
                                                                 |     }
    0x0004d8d6 itt mi                                            |     
                                                                 |     if (r0 >= r2) {
    0x0004d8d8 strmi r7, [r1, 4]                                 |         *((r1 + 4)) = r7;
                                                                 |     }
                                                                 |     if (r0 >= r2) {
    0x0004d8da strmi r7, [r1, 0x18]                              |         *((r1 + 0x18)) = r7;
                                                                 |     }
    0x0004d8dc ands ip, r3, 0x10                                 |     
    0x0004d8e0 it ne                                             |     
                                                                 |     if (ip == r3) {
    0x0004d8e2 ldrne ip, [r4, 0xc]                               |         ip = *((r4 + 0xc));
                                                                 |     }
    0x0004d8e6 ands r2, r2, 0x4000                               |     r2 &= 0x4000;
    0x0004d8ea it ne                                             |     
                                                                 |     if (r2 == r2) {
    0x0004d8ec ldrne r2, [r1, 0x10]                              |         r2 = *((r1 + 0x10));
                                                                 |     }
    0x0004d8ee ubfx r3, r3, 3, 1                                 |     r3 = (r3 >> 3) & ((1 << 1) - 1);
    0x0004d8f2 ldr r1, [sp, 0x1c]                                |     r1 = *(arg_1ch);
    0x0004d8f4 strd r3, ip, [sp, 0xc]                            |     __asm ("strd r3, ip, [sp, 0xc]");
    0x0004d8f8 mov r3, r5                                        |     r3 = r5;
    0x0004d8fa strd r7, r2, [sp, 4]                              |     __asm ("strd r7, r2, [sp, 4]");
    0x0004d8fe mov r2, sb                                        |     r2 = sb;
    0x0004d900 str r6, [sp]                                      |     *(sp) = r6;
    0x0004d902 add.w r8, r1, 1                                   |     r8 = r1 + 1;
    0x0004d906 movs r1, 0                                        |     r1 = 0;
    0x0004d908 bl 0x32b00                                        |     fcn_00032b00 (r0, r1, r2, r3, r4, r5, r6);
    0x0004d90c movs r3, 0                                        |     r3 = 0;
    0x0004d90e mov r6, r0                                        |     r6 = r0;
    0x0004d910 strh r3, [r4, 0x1a]                               |     *((r4 + 0x1a)) = r3;
    0x0004d912 str r3, [r4, 0x44]                                |     *((r4 + 0x44)) = r3;
    0x0004d914 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004d916 bne.w 0x50ed0                                     |         goto label_319;
                                                                 |     }
    0x0004d91a ldr.w r7, [fp, 0xc8]                              |     r7 = *(arg_c8h);
    0x0004d91e cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x0004d920 beq.w 0x52bf8                                     |         goto label_320;
                                                                 |     }
    0x0004d924 ldr r1, [sp, 0x20]                                |     r1 = *(arg_20h);
    0x0004d926 ldr r3, [r1, 0x10]                                |     r3 = *((r1 + 0x10));
    0x0004d928 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004d92a beq.w 0x52d2c                                     |         goto label_321;
                                                                 |     }
    0x0004d92e ldrsb.w r2, [r4, 0x18]                            |     r2 = *((r4 + 0x18));
    0x0004d932 ldrb r1, [r1, 3]                                  |     r1 = *((r1 + 3));
    0x0004d934 ldr.w r0, [fp, 0xc4]                              |     r0 = *(arg_c4h);
    0x0004d938 str.w r8, [sp, 0x1c]                              |     __asm ("str.w r8, [arg_1ch]");
    0x0004d93c tst.w r1, 4                                       |     
    0x0004d940 ldr.w r1, [fp, 0x10]                              |     r1 = *(arg_10h);
    0x0004d944 lsl.w r2, r2, 4                                   |     r2 <<= 4;
    0x0004d948 ldr r2, [r1, r2]                                  |     r2 = *((r1 + r2));
    0x0004d94a ite ne                                            |     
                                                                 |     if ((r1 & 4) == 0) {
    0x0004d94c movne r1, 0x17                                    |         r1 = 0x17;
                                                                 |     }
                                                                 |     if ((r1 & 4) != 0) {
    0x0004d94e moveq r1, 0x12                                    |         r1 = 0x12;
                                                                 |     }
    0x0004d950 strd sb, r5, [sp]                                 |     __asm ("strd sb, r5, [sp]");
    0x0004d954 blx r7                                            |     uint32_t (*r7)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
    0x0004d956 b 0x4d26a                                         |     goto label_2;
    0x0004d958 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004d95a ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004d95c ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004d95e add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004d962 add.w r0, r2, r3, lsl 3                           |     r0 = r2 + (r3 << 3);
    0x0004d966 ldrh r3, [r0, 0x1c]                               |     r3 = *((r0 + 0x1c));
    0x0004d968 lsls r1, r3, 0x1f                                 |     r1 = r3 << 0x1f;
    0x0004d96a it mi                                             |     
                                                                 |     if (r1 >= r3) {
    0x0004d96c movmi r4, 6                                       |         r4 = 6;
                                                                 |     }
                                                                 |     if (r1 >= r3) {
    0x0004d96e bpl.w 0x51fc4                                     |         goto label_322;
                                                                 |     }
                                                                 | label_122:
    0x0004d972 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004d974 ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004d976 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0004d978 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004d97c add.w r0, r2, r3, lsl 3                           |     r0 = r2 + (r3 << 3);
    0x0004d980 ldrh r3, [r0, 0x1c]                               |     r3 = *((r0 + 0x1c));
    0x0004d982 lsls r2, r3, 0x1f                                 |     r2 = r3 << 0x1f;
    0x0004d984 it mi                                             |     
                                                                 |     if (r2 >= r3) {
    0x0004d986 movmi r3, 2                                       |         r3 = 2;
                                                                 |     }
                                                                 |     if (r2 >= r3) {
    0x0004d988 bpl.w 0x51fe8                                     |         goto label_323;
                                                                 |     }
                                                                 | label_124:
    0x0004d98c cmp.w r8, 0x48                                    |     
    0x0004d990 add r3, r4                                        |     r3 += r4;
                                                                 |     if (r8 == 0x48) {
    0x0004d992 beq.w 0x51fd8                                     |         goto label_324;
                                                                 |     }
    0x0004d996 ldr.w r2, [pc, 0x608]                             |     r2 = *(0x0004dfa0);
    0x0004d99a add r2, pc                                        |     r2 += pc;
    0x0004d99c add r3, r2                                        |     r3 += r2;
    0x0004d99e ldrb.w r2, [r3, 0xc38]                            |     r2 = *((r3 + 0xc38));
                                                                 | label_123:
    0x0004d9a2 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004d9a4 cmp r2, 2                                         |     
    0x0004d9a6 ldr r1, [sp, 0x1c]                                |     r1 = *(arg_1ch);
    0x0004d9a8 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x0004d9aa add.w r1, r1, 1                                   |     r1++;
    0x0004d9ae str r1, [sp, 0x1c]                                |     *(arg_1ch) = r1;
    0x0004d9b0 ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0004d9b2 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004d9b6 add.w r3, r1, r3, lsl 3                           |     r3 = r1 + (r3 << 3);
    0x0004d9ba str r3, [sp, 0x38]                                |     *(arg_38h) = r3;
    0x0004d9bc ldrsh.w r3, [r3, 0x1c]                            |     r3 = *((r3 + 0x1c));
    0x0004d9c0 bic r3, r3, 0x4180                                |     r3 = BIT_MASK (r3, 0x4180);
    0x0004d9c4 bic r3, r3, 0x7f                                  |     r3 = BIT_MASK (r3, 0x7f);
                                                                 |     if (r2 == 2) {
    0x0004d9c8 beq.w 0x51ff8                                     |         goto label_325;
                                                                 |     }
    0x0004d9cc ldr r1, [sp, 0x38]                                |     r1 = *(arg_38h);
    0x0004d9ce orr r3, r3, 4                                     |     r3 |= 4;
    0x0004d9d2 str r2, [r1, 0x10]                                |     *((r1 + 0x10)) = r2;
    0x0004d9d4 asrs r2, r2, 0x1f                                 |     r2 >>= 0x1f;
    0x0004d9d6 strh r3, [r1, 0x1c]                               |     *((r1 + 0x1c)) = r3;
    0x0004d9d8 str r2, [r1, 0x14]                                |     *((r1 + 0x14)) = r2;
    0x0004d9da b 0x4d26a                                         |     goto label_2;
    0x0004d9dc ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004d9de movs r7, 1                                        |     r7 = 1;
    0x0004d9e0 ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x0004d9e2 ldrd r1, r2, [r3, 4]                              |     __asm ("ldrd r1, r2, [r3, 4]");
    0x0004d9e6 mov.w r3, -1                                      |     r3 = -1;
    0x0004d9ea str r7, [sp]                                      |     *(sp) = r7;
    0x0004d9ec bl 0x2e430                                        |     r0 = fcn_0002e430 (r0, r1, r2, r3, r4, r5);
    0x0004d9f0 mov r4, r0                                        |     r4 = r0;
    0x0004d9f2 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004d9f4 beq.w 0x4d4ec                                     |         goto label_6;
                                                                 |     }
    0x0004d9f8 ldrb r3, [r0, 0x1c]                               |     r3 = *((r0 + 0x1c));
    0x0004d9fa mov r2, fp                                        |     r2 = fp;
    0x0004d9fc strb r7, [r0, 0x19]                               |     *((r0 + 0x19)) = r7;
    0x0004d9fe movs r1, 0                                        |     r1 = 0;
    0x0004da00 orr r3, r3, 1                                     |     r3 |= 1;
    0x0004da04 strb r3, [r0, 0x1c]                               |     *((r0 + 0x1c)) = r3;
    0x0004da06 movw r3, 0x41e                                    |     r3 = 0x41e;
    0x0004da0a ldr.w r0, [fp]                                    |     r0 = *(fp);
    0x0004da0e str r3, [sp, 4]                                   |     *(arg_4h) = r3;
    0x0004da10 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004da12 ldrb r3, [r3, 3]                                  |     r3 = *((r3 + 3));
    0x0004da14 orr r3, r3, 5                                     |     r3 |= 5;
    0x0004da18 str r3, [sp]                                      |     *(sp) = r3;
    0x0004da1a adds r3, r4, 4                                    |     r3 = r4 + 4;
    0x0004da1c bl 0x385bc                                        |     r0 = fcn_000385bc (r0, r1, r2, r3, r4, r5);
    0x0004da20 mov r6, r0                                        |     r6 = r0;
    0x0004da22 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004da24 beq.w 0x51c90                                     |         goto label_326;
                                                                 |     }
                                                                 | label_101:
    0x0004da28 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004da2a ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004da2c ldrb r3, [r3, 3]                                  |     r3 = *((r3 + 3));
    0x0004da2e adds r2, 1                                        |     r2++;
    0x0004da30 str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004da32 ldrb r2, [r4, 0x1c]                               |     r2 = *((r4 + 0x1c));
    0x0004da34 subs r3, 8                                        |     r3 -= 8;
    0x0004da36 it ne                                             |     
                                                                 |     if (r3 == 8) {
    0x0004da38 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x0004da3a bfi r2, r3, 3, 1                                  |     value_4 = BIT_MASK (3, 1);
                                                                 |     value_5 = r3 & value_4;
                                                                 |     value_4 = ~value_4;
                                                                 |     r2 &= value_4;
                                                                 |     r2 |= value_5;
    0x0004da3e strb r2, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r2;
    0x0004da40 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004da42 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004da46 b 0x4d740                                         |     goto label_7;
    0x0004da48 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004da4a ldrb.w r3, [r3, 0x58]                             |     r3 = *((r3 + 0x58));
    0x0004da4e ands r2, r3, 0x20                                 |     r2 = r3 & 0x20;
                                                                 |     if (r2 != r3) {
    0x0004da52 bne.w 0x5052a                                     |         goto label_327;
                                                                 |     }
    0x0004da56 ldr r1, [sp, 0x20]                                |     r1 = *(arg_20h);
    0x0004da58 cmp.w r8, 0x36                                    |     
    0x0004da5c ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x0004da60 it ne                                             |     
                                                                 |     if (r8 == 0x36) {
    0x0004da62 movne r5, r2                                      |         r5 = r2;
                                                                 |     }
    0x0004da64 ldr r4, [r1, 0xc]                                 |     r4 = *((r1 + 0xc));
    0x0004da66 ldr r6, [r1, 8]                                   |     r6 = *((r1 + 8));
    0x0004da68 add.w r3, r3, r4, lsl 4                           |     r3 += (r4 << 4);
    0x0004da6c ldr r7, [r3, 4]                                   |     r7 = *((r3 + 4));
                                                                 |     if (r8 == 0x36) {
    0x0004da6e bne 0x4da86                                       |         
    0x0004da70 ldr r3, [r3, 0xc]                                 |         r3 = *((r3 + 0xc));
    0x0004da72 movs r5, 1                                        |         r5 = 1;
    0x0004da74 ldr r1, [sp, 0x24]                                |         r1 = *((sp + 0x24));
    0x0004da76 ldrb.w r3, [r3, 0x4c]                             |         r3 = *((r3 + 0x4c));
    0x0004da7a ldrb.w r2, [r1, 0x57]                             |         r2 = *((r1 + 0x57));
    0x0004da7e cmp r2, r3                                        |         
    0x0004da80 it hi                                             |         
                                                                 |         if (r2 > r3) {
    0x0004da82 strbhi r3, [r1, 0x57]                             |             *((r1 + 0x57)) = r3;
                                                                 |             goto label_23;
                                                                 |         }
                                                                 |     }
                                                                 | label_23:
    0x0004da86 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004da88 ldrb r3, [r3, 3]                                  |     r3 = *((r3 + 3));
    0x0004da8a lsls r1, r3, 0x1e                                 |     r1 = r3 << 0x1e;
                                                                 |     if (r1 < r3) {
    0x0004da8c bmi.w 0x5245c                                     |         goto label_328;
                                                                 |     }
                                                                 | label_140:
    0x0004da90 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004da92 ldrsb.w r3, [r3, 1]                               |     r3 = *((r3 + 1));
    0x0004da96 adds r2, r3, 6                                    |     r2 = r3 + 6;
                                                                 |     if (r2 == r3) {
    0x0004da98 beq.w 0x52448                                     |         goto label_329;
                                                                 |     }
    0x0004da9c adds r3, 0xe                                      |     r3 += 0xe;
    0x0004da9e itete eq                                          |     
                                                                 |     if (r3 != 0xe) {
    0x0004daa0 ldreq r3, [sp, 0x20]                              |         r3 = *(arg_20h);
                                                                 |     }
                                                                 |     if (r3 == 0xe) {
    0x0004daa2 movne r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (r3 != 0xe) {
    0x0004daa4 moveq r8, 0                                       |         r8 = 0;
                                                                 |     }
                                                                 |     if (r3 != 0xe) {
    0x0004daa8 mov r8, r2                                        |         r8 = r2;
                                                                 |     }
    0x0004daaa it eq                                             |     
                                                                 |     if (r3 != 0xe) {
    0x0004daac ldreq r2, [r3, 0x10]                              |         r2 = *((r3 + 0x10));
                                                                 |     }
                                                                 | label_139:
    0x0004daae ldr r1, [sp, 0x20]                                |     r1 = *(arg_20h);
    0x0004dab0 mov.w sb, 1                                       |     sb = 1;
    0x0004dab4 mov r3, r4                                        |     r3 = r4;
    0x0004dab6 ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x0004dab8 ldr r1, [r1, 4]                                   |     r1 = *((r1 + 4));
    0x0004daba str.w sb, [sp]                                    |     __asm ("str.w sb, [sp]");
    0x0004dabe bl 0x2e430                                        |     r0 = fcn_0002e430 (r0, r1, r2, r3, r4, r5);
    0x0004dac2 mov r4, r0                                        |     r4 = r0;
    0x0004dac4 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004dac6 beq.w 0x4d4ec                                     |         goto label_6;
                                                                 |     }
    0x0004daca ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004dacc mov r1, r6                                        |     r1 = r6;
    0x0004dace strb.w sb, [r0, 0x19]                             |     *((r0 + 0x19)) = sb;
    0x0004dad2 mov r2, r5                                        |     r2 = r5;
    0x0004dad4 str r6, [r0, 0x20]                                |     *((r0 + 0x20)) = r6;
    0x0004dad6 mov r0, r7                                        |     r0 = r7;
    0x0004dad8 adds r3, 1                                        |     r3++;
    0x0004dada str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004dadc ldrb r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0004dade orr r3, r3, 8                                     |     r3 |= 8;
    0x0004dae2 strb r3, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r3;
    0x0004dae4 ldr r3, [r4]                                      |     r3 = *(r4);
    0x0004dae6 str r3, [sp]                                      |     *(sp) = r3;
    0x0004dae8 mov r3, r8                                        |     r3 = r8;
    0x0004daea bl 0x119f0                                        |     fcn_000119f0 (r0, r1, r2, r3, r4);
    0x0004daee ldr r1, [sp, 0x20]                                |     r1 = *(arg_20h);
    0x0004daf0 mov r6, r0                                        |     r6 = r0;
    0x0004daf2 str.w r8, [r4, 8]                                 |     __asm ("str.w r8, [r4, 8]");
    0x0004daf6 ldr r2, [r4]                                      |     r2 = *(r4);
    0x0004daf8 ldrb r3, [r1, 3]                                  |     r3 = *((r1 + 3));
    0x0004dafa and r3, r3, 1                                     |     r3 &= 1;
    0x0004dafe strb.w r3, [r2, 0x52]                             |     *((r2 + 0x52)) = r3;
    0x0004db02 ldrsb.w r3, [r1, 1]                               |     r3 = *((r1 + 1));
    0x0004db06 ldrb r2, [r4, 0x1c]                               |     r2 = *((r4 + 0x1c));
    0x0004db08 adds r3, 6                                        |     r3 += 6;
    0x0004db0a it ne                                             |     
                                                                 |     if (r3 == 6) {
    0x0004db0c movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x0004db0e bfi r2, r3, 2, 1                                  |     value_6 = BIT_MASK (2, 1);
                                                                 |     value_7 = r3 & value_6;
                                                                 |     value_6 = ~value_6;
                                                                 |     r2 &= value_6;
                                                                 |     r2 |= value_7;
    0x0004db12 strb r2, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r2;
    0x0004db14 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004db16 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004db1a b 0x4d740                                         |     goto label_7;
    0x0004db1c ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004db1e ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0004db20 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x0004db22 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004db26 add.w r0, r1, r3, lsl 3                           |     r0 = r1 + (r3 << 3);
    0x0004db2a ldrh r3, [r0, 0x1c]                               |     r3 = *((r0 + 0x1c));
    0x0004db2c lsls r7, r3, 0x1f                                 |     r7 = r3 << 0x1f;
                                                                 |     if (r7 >= r3) {
    0x0004db2e bpl.w 0x51e9e                                     |         goto label_330;
                                                                 |     }
    0x0004db32 ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x0004db34 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004db36 beq.w 0x5125e                                     |         goto label_331;
                                                                 |     }
                                                                 | label_114:
    0x0004db3a ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004db3c ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0004db3e str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004db40 b.w 0x4d26a                                       |     goto label_2;
    0x0004db44 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004db46 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0004db48 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004db4a ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004db4c ldr.w r4, [r3, r2, lsl 2]                         |     offset_8 = r2 << 2;
                                                                 |     r4 = *((r3 + offset_8));
                                                                 | label_9:
    0x0004db50 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004db52 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x0004db54 ldr r0, [r4]                                      |     r0 = *(r4);
    0x0004db56 mov r1, r7                                        |     r1 = r7;
    0x0004db58 ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x0004db5a str r3, [sp, 0xd8]                                |     *(arg_d8h) = r3;
    0x0004db5c ldr r3, [r2, 0x10]                                |     r3 = *((r2 + 0x10));
    0x0004db5e blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0004db60 mov r6, r0                                        |     r6 = r0;
                                                                 | label_28:
    0x0004db62 movs r3, 0                                        |     r3 = 0;
    0x0004db64 str r3, [r4, 0x44]                                |     *((r4 + 0x44)) = r3;
    0x0004db66 ldr r3, [r7]                                      |     r3 = *(r7);
    0x0004db68 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004db6a bne.w 0x50652                                     |         goto label_332;
                                                                 |     }
    0x0004db6e ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004db70 strb r3, [r4, 0x19]                               |     *((r4 + 0x19)) = r3;
    0x0004db72 ldr r1, [sp, 0x24]                                |     r1 = *((sp + 0x24));
    0x0004db74 ldrb r3, [r2, 3]                                  |     r3 = *((r2 + 3));
    0x0004db76 ldr r2, [r2, 8]                                   |     r2 = *((r2 + 8));
    0x0004db78 add.w r3, r1, r3, lsl 2                           |     r3 = r1 + (r3 << 2);
    0x0004db7c subs r2, 1                                        |     r2--;
    0x0004db7e str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004db80 ldr r2, [r3, 0x6c]                                |     r2 = *((r3 + 0x6c));
    0x0004db82 adds r2, 1                                        |     r2++;
    0x0004db84 str r2, [r3, 0x6c]                                |     *((r3 + 0x6c)) = r2;
                                                                 | label_37:
    0x0004db86 movs r3, 0                                        |     r3 = 0;
    0x0004db88 strb r3, [r4, 0x1a]                               |     *((r4 + 0x1a)) = r3;
                                                                 | label_11:
    0x0004db8a ldr.w r3, [fp, 0xe8]                              |     r3 = *(arg_e8h);
    0x0004db8e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004db90 bne.w 0x4d42e                                     |         goto label_8;
                                                                 |     }
    0x0004db94 ldr.w r4, [fp, 0x11c]                             |     r4 = *(arg_11ch);
    0x0004db98 ldr r2, [sp, 0x30]                                |     r2 = *(arg_30h);
    0x0004db9a ldr r1, [sp, 0x74]                                |     r1 = *(arg_74h);
    0x0004db9c subs r3, r4, 0                                    |     r3 = r4 - 0;
    0x0004db9e it ne                                             |     
                                                                 |     if (r3 == r4) {
    0x0004dba0 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x0004dba2 cmp r2, r1                                        |     
    0x0004dba4 it lo                                             |     
                                                                 |     if (r2 >= r1) {
    0x0004dba6 movlo r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x0004dba8 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004dbaa bne.w 0x50620                                     |         goto label_333;
                                                                 |     }
                                                                 | label_20:
    0x0004dbae ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004dbb0 adds r3, 1                                        |     r3++;
    0x0004dbb2 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004dbb4 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004dbb6 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004dbba b 0x4d740                                         |     goto label_7;
    0x0004dbbc ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004dbbe ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0004dbc0 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004dbc2 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004dbc4 ldr.w r4, [r3, r2, lsl 2]                         |     offset_9 = r2 << 2;
                                                                 |     r4 = *((r3 + offset_9));
    0x0004dbc8 cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x0004dbca bne 0x4db50                                       |         goto label_9;
                                                                 |     }
    0x0004dbcc ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004dbce adds r3, 1                                        |     r3++;
    0x0004dbd0 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004dbd2 b.w 0x4d26a                                       |     goto label_2;
    0x0004dbd6 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x0004dbd8 movs r3, 0                                        |     r3 = 0;
    0x0004dbda str r3, [r7]                                      |     *(r7) = r3;
    0x0004dbdc cmp.w r8, 0x77                                    |     
    0x0004dbe0 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004dbe2 ite eq                                            |     
                                                                 |     if (r8 != 0x77) {
    0x0004dbe4 moveq r5, 1                                       |         r5 = 1;
                                                                 |     }
                                                                 |     if (r8 == 0x77) {
    0x0004dbe6 movne r5, 2                                       |         r5 = 2;
                                                                 |     }
    0x0004dbe8 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0004dbea ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x0004dbee add.w r3, r3, r2, lsl 4                           |     r3 += (r2 << 4);
    0x0004dbf2 ldr r4, [r3, 4]                                   |     r4 = *((r3 + 4));
    0x0004dbf4 mov r0, r4                                        |     r0 = r4;
    0x0004dbf6 bl 0xd140                                         |     fcn_0000d140 (r0);
    0x0004dbfa mov r2, r5                                        |     r2 = r5;
    0x0004dbfc mov r1, r7                                        |     r1 = r7;
    0x0004dbfe mov r0, r4                                        |     r0 = r4;
    0x0004dc00 bl 0x3496c                                        |     fcn_0003496c (r0, r1, r2, r3);
    0x0004dc04 ldrb r3, [r4, 9]                                  |     r3 = *((r4 + 9));
    0x0004dc06 mov r6, r0                                        |     r6 = r0;
                                                                 |     if (r3 != 0) {
    0x0004dc08 cbz r3, 0x4dc1c                                   |         
    0x0004dc0a ldr r5, [r4, 0xc]                                 |         r5 = *((r4 + 0xc));
    0x0004dc0c subs r5, 1                                        |         r5--;
    0x0004dc0e str r5, [r4, 0xc]                                 |         *((r4 + 0xc)) = r5;
                                                                 |         if (r5 != 0) {
    0x0004dc10 cbnz r5, 0x4dc1c                                  |             goto label_334;
                                                                 |         }
    0x0004dc12 ldr r3, [r4, 4]                                   |         r3 = *((r4 + 4));
    0x0004dc14 ldr r0, [r3, 0x38]                                |         r0 = *((r3 + 0x38));
    0x0004dc16 blx 0x63dc                                        |         fcn_000063dc ();
    0x0004dc1a strb r5, [r4, 0xa]                                |         *((r4 + 0xa)) = r5;
                                                                 |     }
                                                                 | label_334:
    0x0004dc1c ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004dc1e ldr r3, [r7]                                      |     r3 = *(r7);
    0x0004dc20 adds r2, 1                                        |     r2++;
    0x0004dc22 str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004dc24 ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x0004dc26 str r3, [r2, 0x10]                                |     *((r2 + 0x10)) = r3;
    0x0004dc28 asrs r3, r3, 0x1f                                 |     r3 >>= 0x1f;
    0x0004dc2a str r3, [r2, 0x14]                                |     *((r2 + 0x14)) = r3;
    0x0004dc2c cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004dc2e beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004dc32 b 0x4d740                                         |     goto label_7;
    0x0004dc34 ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x0004dc36 ldr r1, [sp, 0x20]                                |     r1 = *(arg_20h);
    0x0004dc38 ldr r3, [r0, 0x38]                                |     r3 = *((r0 + 0x38));
    0x0004dc3a ldr r2, [r1, 4]                                   |     r2 = *((r1 + 4));
    0x0004dc3c ldr r4, [r1, 8]                                   |     r4 = *((r1 + 8));
    0x0004dc3e ldr.w r5, [r3, r2, lsl 2]                         |     offset_10 = r2 << 2;
                                                                 |     r5 = *((r3 + offset_10));
    0x0004dc42 ldrb r3, [r1, 3]                                  |     r3 = *((r1 + 3));
    0x0004dc44 ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004dc46 add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0004dc4a ldr r7, [r5]                                      |     r7 = *(r5);
    0x0004dc4c lsls r6, r3, 0x1f                                 |     r6 = r3 << 0x1f;
    0x0004dc4e it mi                                             |     
                                                                 |     if (r6 >= r3) {
    0x0004dc50 ldrmi r3, [r0, 0x5c]                              |         r3 = *((r0 + 0x5c));
                                                                 |     }
    0x0004dc52 add.w r4, r2, r4, lsl 3                           |     r4 = r2 + (r4 << 3);
    0x0004dc56 itt mi                                            |     
                                                                 |     if (r6 >= r3) {
    0x0004dc58 addmi r3, 1                                       |         r3++;
                                                                 |     }
                                                                 |     if (r6 >= r3) {
    0x0004dc5a strmi r3, [r0, 0x5c]                              |         *((r0 + 0x5c)) = r3;
                                                                 |     }
    0x0004dc5c ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0004dc5e lsls r0, r3, 0x11                                 |     r0 = r3 << 0x11;
                                                                 |     if (r0 < r3) {
    0x0004dc60 bmi.w 0x51ed2                                     |         goto label_335;
                                                                 |     }
                                                                 | label_116:
    0x0004dc64 ldr.w r8, [r5, 0x40]                              |     r8 = *((r5 + 0x40));
    0x0004dc68 ldr r2, [r4, 0x18]                                |     r2 = *((r4 + 0x18));
    0x0004dc6a cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x0004dc6e beq.w 0x511ca                                     |         goto label_336;
                                                                 |     }
    0x0004dc72 asrs r0, r2, 0x1f                                 |     r0 = r2 >> 0x1f;
    0x0004dc74 mov r3, r2                                        |     r3 = r2;
    0x0004dc76 movs r7, 0                                        |     r7 = 0;
                                                                 |     do {
    0x0004dc78 lsrs r3, r3, 7                                    |         r3 >>= 7;
    0x0004dc7a adds r7, 1                                        |         r7++;
    0x0004dc7c cmp r7, 8                                         |         
    0x0004dc7e orr.w r3, r3, r0, lsl 25                          |         r3 |= (r0 << 25);
    0x0004dc82 lsr.w r0, r0, 7                                   |         r0 >>= 7;
    0x0004dc86 orr.w r6, r3, r0                                  |         r6 = r3 | r0;
    0x0004dc8a ite gt                                            |         
                                                                 |         if (r7 <= 8) {
    0x0004dc8c movgt r1, 0                                       |             r1 = 0;
                                                                 |         }
                                                                 |         if (r7 > 8) {
    0x0004dc8e movle r1, 1                                       |             r1 = 1;
                                                                 |         }
    0x0004dc90 cmp r6, 0                                         |         
    0x0004dc92 it eq                                             |         
                                                                 |         if (r6 != 0) {
    0x0004dc94 moveq r1, 0                                       |             r1 = 0;
                                                                 |         }
    0x0004dc96 cmp r1, 0                                         |         
    0x0004dc98 bne 0x4dc78                                       |         
                                                                 |     } while (r1 != 0);
    0x0004dc9a ldr.w r3, [r8, 0x10]                              |     r3 = *((r8 + 0x10));
    0x0004dc9e add r7, r2                                        |     r7 += r2;
    0x0004dca0 add.w r1, r2, 0xc                                 |     r1 = r2 + 0xc;
    0x0004dca4 mov r0, fp                                        |     r0 = fp;
    0x0004dca6 add r3, r7                                        |     r3 += r7;
    0x0004dca8 str.w r3, [r8, 0x10]                              |     __asm ("str.w r3, [r8, 0x10]");
    0x0004dcac bl 0xd3a0                                         |     fcn_0000d3a0 (r0, r1);
    0x0004dcb0 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004dcb2 mov r7, r0                                        |     r7 = r0;
    0x0004dcb4 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004dcb6 beq.w 0x50b0e                                     |         goto label_337;
                                                                 |     }
    0x0004dcba adds r0, 0xc                                      |     r0 += 0xc;
    0x0004dcbc adds r3, 1                                        |     r3++;
    0x0004dcbe ldr r2, [r4, 0x18]                                |     r2 = *((r4 + 0x18));
    0x0004dcc0 ldr r1, [r4, 4]                                   |     r1 = *((r4 + 4));
    0x0004dcc2 str r0, [r7]                                      |     *(r7) = r0;
    0x0004dcc4 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004dcc6 blx 0x6214                                        |     fcn_00006214 ();
    0x0004dcca ldr r3, [r4, 0x18]                                |     r3 = *((r4 + 0x18));
    0x0004dccc ldr.w r2, [r8, 0x20]                              |     r2 = *((r8 + 0x20));
    0x0004dcd0 str r3, [r7, 4]                                   |     *((r7 + 4)) = r3;
    0x0004dcd2 ldr.w r3, [r8, 0x30]                              |     r3 = *((r8 + 0x30));
    0x0004dcd6 cmp r2, 0                                         |     
    0x0004dcd8 str r3, [r7, 8]                                   |     *((r7 + 8)) = r3;
    0x0004dcda str.w r7, [r8, 0x30]                              |     __asm ("str.w r7, [r8, 0x30]");
                                                                 |     if (r2 <= 0) {
    0x0004dcde ble.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004dce2 ldr.w r3, [r8, 0x10]                              |     r3 = *((r8 + 0x10));
    0x0004dce6 cmp r2, r3                                        |     
                                                                 |     if (r2 < r3) {
    0x0004dce8 blt 0x4dd00                                       |         goto label_338;
                                                                 |     }
    0x0004dcea ldr.w r2, [r8, 0x1c]                              |     r2 = *((r8 + 0x1c));
    0x0004dcee cmp r3, r2                                        |     
                                                                 |     if (r3 <= r2) {
    0x0004dcf0 ble.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004dcf4 ldr r3, [pc, 0x2ac]                               |     
    0x0004dcf6 add r3, pc                                        |     
    0x0004dcf8 ldr r3, [r3, 0x74]                                |     r3 = *(0x9bd12);
    0x0004dcfa cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004dcfc beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
                                                                 | label_338:
    0x0004dd00 mov r1, r5                                        |     r1 = r5;
    0x0004dd02 mov r0, fp                                        |     r0 = fp;
    0x0004dd04 bl 0x30960                                        |     r0 = fcn_00030960 (r0, r1);
    0x0004dd08 mov r6, r0                                        |     r6 = r0;
    0x0004dd0a movs r3, 0                                        |     r3 = 0;
    0x0004dd0c str.w r3, [r8, 0x10]                              |     __asm ("str.w r3, [r8, 0x10]");
    0x0004dd10 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004dd12 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004dd16 b 0x4d740                                         |     goto label_7;
    0x0004dd18 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004dd1a ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0004dd1c ldrd r2, r3, [r3, 4]                              |     __asm ("ldrd r2, r3, [r3, 4]");
    0x0004dd20 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004dd24 add.w r3, r1, r3, lsl 3                           |     r3 = r1 + (r3 << 3);
    0x0004dd28 str r3, [sp, 0x38]                                |     *(arg_38h) = r3;
    0x0004dd2a ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004dd2c ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004dd2e ldr.w r8, [r3, r2, lsl 2]                         |     offset_11 = r2 << 2;
                                                                 |     r8 = *((r3 + offset_11));
    0x0004dd32 mov r0, r8                                        |     r0 = r8;
    0x0004dd34 ldr.w r5, [r8]                                    |     r5 = *(r8);
    0x0004dd38 bl 0x2f33c                                        |     r0 = fcn_0002f33c (r0);
    0x0004dd3c mov r6, r0                                        |     r6 = r0;
    0x0004dd3e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004dd40 bne.w 0x528f6                                     |         goto label_207;
                                                                 |     }
    0x0004dd44 ldrb.w r3, [r8, 0x1c]                             |     r3 = *((r8 + 0x1c));
    0x0004dd48 lsls r7, r3, 0x1d                                 |     r7 = r3 << 0x1d;
                                                                 |     if (r7 >= r3) {
    0x0004dd4a bpl.w 0x50f82                                     |         goto label_339;
                                                                 |     }
    0x0004dd4e add r4, sp, 0xb0                                  |     r4 += arg_b0h;
    0x0004dd50 mov r0, r5                                        |     r0 = r5;
    0x0004dd52 mov r1, r4                                        |     r1 = r4;
    0x0004dd54 bl 0xb570                                         |     fcn_0000b570 (r0, r1);
    0x0004dd58 ldr r4, [sp, 0xb0]                                |     r4 = *(arg_b0h);
    0x0004dd5a ldr.w r3, [fp, 0x58]                              |     r3 = *(arg_58h);
    0x0004dd5e cmp r3, r4                                        |     
                                                                 |     if (r3 <= r4) {
    0x0004dd60 blo.w 0x4f592                                     |         goto label_30;
                                                                 |     }
                                                                 | label_56:
    0x0004dd64 ldr r0, [sp, 0x38]                                |     r0 = *(arg_38h);
    0x0004dd66 movs r2, 0                                        |     r2 = 0;
    0x0004dd68 mov r1, r4                                        |     r1 = r4;
    0x0004dd6a bl 0x172d4                                        |     r0 = fcn_000172d4 (r0, r1, r2);
    0x0004dd6e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004dd70 bne.w 0x4d4ec                                     |         goto label_6;
                                                                 |     }
    0x0004dd74 ldr r1, [sp, 0x38]                                |     r1 = *(arg_38h);
    0x0004dd76 ldrb.w r2, [r8, 0x1c]                             |     r2 = *((r8 + 0x1c));
    0x0004dd7a ldrh r3, [r1, 0x1c]                               |     r3 = *((r1 + 0x1c));
    0x0004dd7c ldr r7, [r1, 4]                                   |     r7 = *((r1 + 4));
    0x0004dd7e str r4, [r1, 0x18]                                |     *((r1 + 0x18)) = r4;
    0x0004dd80 bic r3, r3, 0x4180                                |     r3 = BIT_MASK (r3, 0x4180);
    0x0004dd84 bic r3, r3, 0x7f                                  |     r3 = BIT_MASK (r3, 0x7f);
    0x0004dd88 orr r3, r3, 0x10                                  |     r3 |= 0x10;
    0x0004dd8c strh r3, [r1, 0x1c]                               |     *((r1 + 0x1c)) = r3;
    0x0004dd8e ands r1, r2, 4                                    |     r1 = r2 & 4;
                                                                 |     if (r1 != r2) {
    0x0004dd92 bne.w 0x51d4a                                     |         goto label_340;
                                                                 |     }
    0x0004dd96 mov r3, r7                                        |     r3 = r7;
    0x0004dd98 mov r2, r4                                        |     r2 = r4;
    0x0004dd9a mov r0, r5                                        |     r0 = r5;
    0x0004dd9c str r1, [sp]                                      |     *(sp) = r1;
    0x0004dd9e bl 0x2d6d4                                        |     r0 = fcn_0002d6d4 (r0, r1, r2, r3, r4);
    0x0004dda2 mov r6, r0                                        |     r6 = r0;
                                                                 | label_104:
    0x0004dda4 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004dda6 ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x0004dda8 adds r3, 1                                        |     r3++;
    0x0004ddaa str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004ddac movs r3, 1                                        |     r3 = 1;
    0x0004ddae strb r3, [r2, 0x1e]                               |     *((r2 + 0x1e)) = r3;
    0x0004ddb0 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004ddb2 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004ddb6 b 0x4d740                                         |     goto label_7;
    0x0004ddb8 ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x0004ddba ldr r3, [r2, 0x74]                                |     r3 = *((r2 + 0x74));
    0x0004ddbc adds r3, 1                                        |     r3++;
    0x0004ddbe str r3, [r2, 0x74]                                |     *((r2 + 0x74)) = r3;
    0x0004ddc0 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004ddc2 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0004ddc4 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004ddc6 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004ddc8 ldr.w r3, [r3, r2, lsl 2]                         |     offset_12 = r2 << 2;
                                                                 |     r3 = *((r3 + offset_12));
    0x0004ddcc str r3, [sp, 0x48]                                |     *(arg_48h) = r3;
    0x0004ddce ldr r3, [r3, 0x40]                                |     r3 = *((r3 + 0x40));
    0x0004ddd0 str r3, [sp, 0x4c]                                |     *(arg_4ch) = r3;
    0x0004ddd2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004ddd4 beq.w 0x51bb0                                     |         goto label_341;
                                                                 |     }
    0x0004ddd8 ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x0004ddda vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x0004ddde vstr d16, [sp, 0xa8]                              |     __asm ("vstr d16, [sp, 0xa8]");
    0x0004dde2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004dde4 beq.w 0x51d82                                     |         goto label_342;
                                                                 |     }
    0x0004dde8 ldr r1, [sp, 0x48]                                |     r1 = *(arg_48h);
    0x0004ddea mov r0, fp                                        |     r0 = fp;
    0x0004ddec bl 0x30960                                        |     r0 = fcn_00030960 (r0, r1);
    0x0004ddf0 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004ddf2 bne.w 0x51272                                     |         goto label_343;
                                                                 |     }
    0x0004ddf6 ldr r3, [sp, 0x4c]                                |     r3 = *(arg_4ch);
    0x0004ddf8 ldr r2, [r3, 0x18]                                |     r2 = *((r3 + 0x18));
    0x0004ddfa cmp r2, 0x10                                      |     
    0x0004ddfc mov r3, r2                                        |     r3 = r2;
    0x0004ddfe it ge                                             |     
                                                                 |     if (r2 < 0x10) {
    0x0004de00 movge r3, 0x10                                    |         r3 = 0x10;
                                                                 |     }
    0x0004de02 cmp r2, 2                                         |     
                                                                 |     if (r2 <= 2) {
    0x0004de04 ble.w 0x531a8                                     |         goto label_344;
                                                                 |     }
    0x0004de08 movs r4, 2                                        |     r4 = 2;
                                                                 |     do {
    0x0004de0a lsls r4, r4, 1                                    |         r4 <<= 1;
    0x0004de0c cmp r3, r4                                        |         
    0x0004de0e bgt 0x4de0a                                       |         
                                                                 |     } while (r3 > r4);
    0x0004de10 movs r1, 0x34                                     |     r1 = 0x34;
    0x0004de12 mov r5, r4                                        |     r5 = r4;
    0x0004de14 mul r1, r4, r1                                    |     r1 = r4 * r1;
                                                                 | label_200:
    0x0004de18 mov r0, fp                                        |     r0 = fp;
    0x0004de1a bl 0xdb58                                         |     fcn_0000db58 (r0, r1);
    0x0004de1e ldr r2, [sp, 0x4c]                                |     r2 = *(arg_4ch);
    0x0004de20 str r0, [r2, 0x24]                                |     *((r2 + 0x24)) = r0;
    0x0004de22 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004de24 beq.w 0x5355c                                     |         goto label_345;
                                                                 |     }
    0x0004de28 add.w r5, r5, r5, lsl 1                           |     r5 += (r5 << 1);
    0x0004de2c ldr r2, [sp, 0x4c]                                |     r2 = *(arg_4ch);
    0x0004de2e mov sl, fp                                        |     sl = fp;
    0x0004de30 add.w r3, r0, r5, lsl 4                           |     r3 = r0 + (r5 << 4);
    0x0004de34 str r4, [r2, 0x14]                                |     *((r2 + 0x14)) = r4;
    0x0004de36 str r3, [r2, 0x28]                                |     *((r2 + 0x28)) = r3;
    0x0004de38 movs r3, 0                                        |     r3 = 0;
    0x0004de3a str r3, [sp, 0x50]                                |     *(arg_50h) = r3;
    0x0004de3c add r3, sp, 0xb0                                  |     r3 += arg_b0h;
    0x0004de3e ldr r2, [r2, 0x18]                                |     r2 = *((r2 + 0x18));
    0x0004de40 str r3, [sp, 0x3c]                                |     *(arg_3ch) = r3;
    0x0004de42 b 0x4de84                                         |     
                                                                 |     while (r0 != 0) {
    0x0004de44 ldrd r3, r2, [r8, 8]                              |         __asm ("ldrd r3, r2, [r8, 8]");
    0x0004de48 mov sl, fp                                        |         sl = fp;
    0x0004de4a mov fp, r0                                        |         
                                                                 | label_10:
    0x0004de4c strd r3, r2, [r7, 8]                              |         __asm ("strd r3, r2, [r7, 8]");
                                                                 | label_91:
    0x0004de50 ldr r3, [sp, 0x4c]                                |         r3 = *(arg_4ch);
    0x0004de52 ldr r3, [r3, 0x18]                                |         r3 = *((r3 + 0x18));
                                                                 | label_95:
    0x0004de54 ldr r7, [sp, 0x50]                                |         r7 = *(arg_50h);
    0x0004de56 ldr r2, [sp, 0x58]                                |         r2 = *(arg_58h);
                                                                 | label_90:
    0x0004de58 cmp r3, 0x10                                      |         
                                                                 |         if (r3 <= 0x10) {
    0x0004de5a ble.w 0x52762                                     |             goto label_346;
                                                                 |         }
    0x0004de5e ldr r3, [sp, 0x4c]                                |         r3 = *(arg_4ch);
    0x0004de60 vmov.i32 d16, 0                                   |         __asm ("vmov.i32 d16, 0");
    0x0004de64 ldr r1, [r3, 0x2c]                                |         r1 = *((r3 + 0x2c));
    0x0004de66 str r2, [r3, 0x18]                                |         *((r3 + 0x18)) = r2;
    0x0004de68 str r7, [r3, 0x2c]                                |         *((r3 + 0x2c)) = r7;
    0x0004de6a str r1, [sp, 0x50]                                |         *(arg_50h) = r1;
    0x0004de6c ldrd r0, r1, [sp, 0xa8]                           |         __asm ("ldrd r0, r1, [arg_a8h]");
    0x0004de70 vstr d16, [r3, 8]                                 |         __asm ("vstr d16, [r3, 8]");
    0x0004de74 strd r0, r1, [r3]                                 |         __asm ("strd r0, r1, [r3]");
    0x0004de78 vstr d16, [sp, 0xa8]                              |         __asm ("vstr d16, [sp, 0xa8]");
    0x0004de7c cmp.w fp, 0                                       |         
                                                                 |         if (fp != 0) {
    0x0004de80 bne.w 0x5272a                                     |             goto label_347;
                                                                 |         }
                                                                 | label_102:
    0x0004de84 movs r3, 0                                        |         r3 = 0;
    0x0004de86 mov fp, sl                                        |         
    0x0004de88 str r3, [sp, 0x58]                                |         *(arg_58h) = r3;
    0x0004de8a add r3, sp, 0xd8                                  |         r3 += arg_d8h;
    0x0004de8c str r3, [sp, 0x54]                                |         *(arg_54h) = r3;
                                                                 | label_92:
    0x0004de8e ldr r3, [sp, 0x58]                                |         r3 = *(arg_58h);
    0x0004de90 cmp.w r2, r3, lsl 4                               |         
                                                                 |         if (r2 <= r3) {
    0x0004de94 ble.w 0x51d00                                     |             goto label_348;
                                                                 |         }
    0x0004de98 ldr r0, [sp, 0x54]                                |         r0 = *(arg_54h);
    0x0004de9a movs r2, 0x28                                     |         r2 = 0x28;
    0x0004de9c movs r1, 0                                        |         r1 = 0;
    0x0004de9e mov.w sl, 0                                       |         sl = 0;
    0x0004dea2 blx 0x5fcc                                        |         fcn_00005fcc ();
    0x0004dea6 ldr r3, [sp, 0x48]                                |         r3 = *(arg_48h);
    0x0004dea8 strd sl, sl, [sp, 0x28]                           |         __asm ("strd sl, sl, [sp, 0x28]");
    0x0004deac ldr r7, [r3, 0x40]                                |         r7 = *((r3 + 0x40));
    0x0004deae add r3, sp, 0xb4                                  |         r3 += arg_b4h;
    0x0004deb0 str r3, [sp, 0x34]                                |         *(arg_34h) = r3;
    0x0004deb2 ldrd r5, sb, [r7, 8]                              |         __asm ("ldrd r5, sb, [r7, 8]");
                                                                 | label_88:
    0x0004deb6 ldr.w r3, [fp, 0x10]                              |         r3 = *(arg_10h);
    0x0004deba movs r1, 0x80                                     |         r1 = 0x80;
    0x0004debc ldr r2, [r7, 0x2c]                                |         r2 = *((r7 + 0x2c));
    0x0004debe mov r0, fp                                        |         r0 = fp;
    0x0004dec0 ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x0004dec2 ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x0004dec4 ldr r4, [r3, 0x20]                                |         r4 = *((r3 + 0x20));
    0x0004dec6 ldr r3, [r7, 0x24]                                |         r3 = *((r7 + 0x24));
    0x0004dec8 add.w r8, r3, sl                                  |         r8 = r3 + sl;
    0x0004decc str.w r2, [r8, 0x18]                              |         __asm ("str.w r2, [r8, 0x18]");
    0x0004ded0 str.w r5, [r3, sl]                                |         __asm ("str.w r5, [r3, sl]");
    0x0004ded4 str.w r1, [r8, 0x10]                              |         __asm ("str.w r1, [r8, 0x10]");
    0x0004ded8 str.w sb, [r8, 4]                                 |         __asm ("str.w sb, [r8, 4]");
    0x0004dedc bl 0xd3a0                                         |         fcn_0000d3a0 (r0, r1);
    0x0004dee0 mov r1, r4                                        |         r1 = r4;
    0x0004dee2 str.w r0, [r8, 0x1c]                              |         __asm ("str.w r0, [r8, 0x1c]");
    0x0004dee6 str.w r4, [r8, 0x28]                              |         __asm ("str.w r4, [r8, 0x28]");
    0x0004deea mov r0, fp                                        |         r0 = fp;
    0x0004deec bl 0xd3a0                                         |         r0 = fcn_0000d3a0 (r0, r1);
    0x0004def0 mov r6, r0                                        |         r6 = r0;
    0x0004def2 str.w r0, [r8, 0x24]                              |         __asm ("str.w r0, [r8, 0x24]");
    0x0004def6 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x0004def8 beq.w 0x51ace                                     |             goto label_349;
                                                                 |         }
    0x0004defc asrs r3, r4, 0x1f                                 |         r3 = r4 >> 0x1f;
    0x0004defe mov r2, r4                                        |         r2 = r4;
    0x0004df00 mov r0, r5                                        |         r0 = r5;
    0x0004df02 mov r1, sb                                        |         r1 = sb;
    0x0004df04 bl 0x5e500                                        |         fcn_0005e500 (r0, r1, r2, r3);
    0x0004df08 ldrd r0, r3, [r7]                                 |         __asm ("ldrd r0, r3, [r7]");
    0x0004df0c mov r1, r2                                        |         r1 = r2;
                                                                 |         if (r2 == 0) {
    0x0004df0e cbz r2, 0x4df34                                   |             goto label_350;
                                                                 |         }
    0x0004df10 subs r2, r4, r2                                   |         r2 = r4 - r2;
    0x0004df12 add r1, r6                                        |         r1 += r6;
    0x0004df14 adds.w ip, r2, r5                                 |         
    0x0004df18 adc.w r4, sb, r2, asr 31                          |         __asm ("adc.w r4, sb, r2, asr 31");
    0x0004df1c cmp r0, ip                                        |         
    0x0004df1e sbcs r3, r4                                       |         __asm ("sbcs r3, r4");
    0x0004df20 it lt                                             |         
                                                                 |         if (r0 >= ip) {
    0x0004df22 sublt r2, r0, r5                                  |             r2 = r0 - r5;
                                                                 |         }
    0x0004df24 ldr r0, [r7, 0x2c]                                |         r0 = *((r7 + 0x2c));
    0x0004df26 ldr r3, [r0]                                      |         r3 = *(r0);
    0x0004df28 strd r5, sb, [sp]                                 |         __asm ("strd r5, sb, [sp]");
    0x0004df2c ldr r3, [r3, 8]                                   |         r3 = *((r3 + 8));
    0x0004df2e blx r3                                            |         r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0004df30 cmp r0, 0                                         |         
    0x0004df32 bne 0x4de44                                       |         
                                                                 |     }
                                                                 | label_350:
    0x0004df34 ldr r6, [sp, 0x3c]                                |     r6 = *(arg_3ch);
    0x0004df36 mov r1, r8                                        |     r1 = r8;
    0x0004df38 ldrd r4, r5, [r7]                                 |     __asm ("ldrd r4, r5, [r7]");
    0x0004df3c mov r0, fp                                        |     r0 = fp;
    0x0004df3e mov r2, r6                                        |     r2 = r6;
    0x0004df40 strd r4, r5, [r8, 8]                              |     __asm ("strd r4, r5, [r8, 8]");
    0x0004df44 bl 0x1a3d0                                        |     fcn_0001a3d0 (r0, r1, r2);
    0x0004df48 ldr r2, [sp, 0x34]                                |     r2 = *(arg_34h);
    0x0004df4a ldr r4, [r6]                                      |     r4 = *(r6);
    0x0004df4c ldr.w r3, [r8]                                    |     r3 = *(r8);
    0x0004df50 ldr r6, [r2]                                      |     r6 = *(r2);
    0x0004df52 ldr r1, [sp, 0x28]                                |     r1 = *(arg_28h);
    0x0004df54 ldr.w r2, [r8, 4]                                 |     r2 = *((r8 + 4));
    0x0004df58 adds r3, r4, r3                                   |     r3 = r4 + r3;
    0x0004df5a str.w r3, [r8, 8]                                 |     __asm ("str.w r3, [r8, 8]");
    0x0004df5e adc.w r2, r6, r2                                  |     __asm ("adc.w r2, r6, r2");
    0x0004df62 adds r4, r1, r4                                   |     r4 = r1 + r4;
    0x0004df64 ldr r1, [sp, 0x2c]                                |     r1 = *(arg_2ch);
    0x0004df66 str.w r2, [r8, 0xc]                               |     __asm ("str.w r2, [r8, 0xc]");
    0x0004df6a adc.w r6, r6, r1                                  |     __asm ("adc.w r6, r6, r1");
    0x0004df6e strd r4, r6, [sp, 0x28]                           |     __asm ("strd r4, r6, [sp, 0x28]");
    0x0004df72 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004df74 beq.w 0x51914                                     |         goto label_351;
                                                                 |     }
    0x0004df78 mov sl, fp                                        |     sl = fp;
    0x0004df7a mov fp, r0                                        |     
    0x0004df7c b 0x4de4c                                         |     goto label_10;
    0x0004dfa8 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004dfaa ldr r4, [r3, 4]                                   |     r4 = *((r3 + 4));
    0x0004dfac ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004dfae add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0004dfb2 add.w r4, r3, r4, lsl 3                           |     r4 = r3 + (r4 << 3);
    0x0004dfb6 ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0004dfb8 lsls r2, r3, 0x1a                                 |     r2 = r3 << 0x1a;
                                                                 |     if (r2 < r3) {
    0x0004dfba bmi.w 0x50c10                                     |         goto label_352;
                                                                 |     }
                                                                 | label_48:
    0x0004dfbe mov r0, r4                                        |     r0 = r4;
    0x0004dfc0 bl 0xfdb8                                         |     fcn_0000fdb8 (r0);
    0x0004dfc4 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004dfc6 movs r6, 0                                        |     r6 = 0;
    0x0004dfc8 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0004dfca subs r3, 1                                        |     r3--;
    0x0004dfcc str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004dfce b 0x4db8a                                         |     goto label_11;
    0x0004dfd0 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004dfd2 ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004dfd4 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x0004dfd6 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004dfda add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0004dfde ldrh r3, [r3, 0x1c]                               |     r3 = *((r3 + 0x1c));
    0x0004dfe0 lsls r3, r3, 0x1f                                 |     r3 <<= 0x1f;
                                                                 |     if (r3 >= r3) {
    0x0004dfe2 bpl.w 0x50e56                                     |         goto label_353;
                                                                 |     }
    0x0004dfe6 ldr r6, [sp, 0x20]                                |     r6 = *(arg_20h);
    0x0004dfe8 ldr r3, [r6, 4]                                   |     r3 = *((r6 + 4));
    0x0004dfea cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004dfec bne.w 0x5386e                                     |         goto label_354;
                                                                 |     }
    0x0004dff0 ldr r5, [sp, 0x24]                                |     r5 = *((sp + 0x24));
    0x0004dff2 ldr.w r0, [r5, 0xb0]                              |     r0 = *((r5 + 0xb0));
    0x0004dff6 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004dff8 beq.w 0x53b06                                     |         goto label_355;
                                                                 |     }
    0x0004dffc ldr.w r3, [r5, 0xb8]                              |     r3 = *((r5 + 0xb8));
    0x0004e000 ldr r1, [r5, 0x5c]                                |     r1 = *((r5 + 0x5c));
    0x0004e002 ldr r4, [r0, 4]                                   |     r4 = *((r0 + 4));
    0x0004e004 subs r2, r3, 1                                    |     r2 = r3 - 1;
    0x0004e006 ldr.w r3, [fp, 0x54]                              |     r3 = *(arg_54h);
    0x0004e00a str.w r2, [r5, 0xb8]                              |     __asm ("str.w r2, [r5, 0xb8]");
    0x0004e00e str.w r4, [r5, 0xb0]                              |     __asm ("str.w r4, [r5, 0xb0]");
    0x0004e012 add r3, r1                                        |     r3 += r1;
    0x0004e014 strd r1, r3, [fp, 0x50]                           |     __asm ("strd r1, r3, [fp, 0x50]");
    0x0004e018 bl 0x7cc0                                         |     fcn_00007cc0 (r0);
    0x0004e01c ldr.w r2, [fp, 0x20]                              |     r2 = *(arg_20h);
    0x0004e020 ldr r3, [r6, 8]                                   |     r3 = *((r6 + 8));
    0x0004e022 str r2, [sp, 0x68]                                |     *(arg_68h) = r2;
    0x0004e024 ldr.w r2, [fp, 0x24]                              |     r2 = *((fp + 0x24));
    0x0004e028 cmp r3, 4                                         |     
    0x0004e02a str r2, [sp, 0x6c]                                |     *(arg_6ch) = r2;
                                                                 |     if (r3 == 4) {
    0x0004e02c beq.w 0x51c7a                                     |         goto label_356;
                                                                 |     }
    0x0004e030 adds r3, r0, 1                                    |     r3 = r0 + 1;
    0x0004e032 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e034 ldr r3, [r5, 4]                                   |     r3 = *((r5 + 4));
    0x0004e036 str r3, [sp, 0x40]                                |     *(arg_40h) = r3;
                                                                 | label_100:
    0x0004e038 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004e03a ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0004e03c str r3, [sp, 0x44]                                |     *(arg_44h) = r3;
    0x0004e03e b.w 0x4d26a                                       |     goto label_2;
    0x0004e042 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e044 ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004e046 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004e048 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004e04c add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0004e050 movs r2, 0x80                                     |     r2 = 0x80;
    0x0004e052 strh r2, [r3, 0x1c]                               |     *((r3 + 0x1c)) = r2;
    0x0004e054 ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x0004e056 adds r3, 1                                        |     r3++;
    0x0004e058 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e05a b.w 0x4d26a                                       |     goto label_2;
    0x0004e05e ldr r1, [sp, 0x20]                                |     r1 = *(arg_20h);
    0x0004e060 ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004e062 ldr r3, [r1, 4]                                   |     r3 = *((r1 + 4));
    0x0004e064 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004e068 add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0004e06c ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004e06e str r2, [r3, 0x10]                                |     *((r3 + 0x10)) = r2;
    0x0004e070 asrs r2, r2, 0x1f                                 |     r2 >>= 0x1f;
    0x0004e072 str r2, [r3, 0x14]                                |     *((r3 + 0x14)) = r2;
    0x0004e074 ldr r2, [r1, 8]                                   |     r2 = *((r1 + 8));
    0x0004e076 str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004e078 movs r2, 4                                        |     r2 = 4;
    0x0004e07a strh r2, [r3, 0x1c]                               |     *((r3 + 0x1c)) = r2;
    0x0004e07c b.w 0x4d26a                                       |     goto label_2;
    0x0004e080 ldr r3, [sp, 0x80]                                |     r3 = *(arg_80h);
    0x0004e082 cmp r3, 0                                         |     
    0x0004e084 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
                                                                 |     if (r3 < 0) {
    0x0004e086 blt.w 0x511c2                                     |         goto label_357;
                                                                 |     }
    0x0004e08a ite eq                                            |     
                                                                 |     if (r3 != 0) {
    0x0004e08c ldreq r3, [r3, 8]                                 |         r3 = *((r3 + 8));
                                                                 |     }
                                                                 |     if (r3 == 0) {
    0x0004e08e ldrne r3, [r3, 0xc]                               |         r3 = *((r3 + 0xc));
                                                                 |     }
    0x0004e090 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e092 b.w 0x4d26a                                       |     goto label_2;
    0x0004e096 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004e098 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004e09a adds r3, 1                                        |     r3++;
    0x0004e09c str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e09e ldrb r3, [r2, 3]                                  |     r3 = *((r2 + 3));
    0x0004e0a0 ldrd r6, r5, [r2, 0xc]                            |     __asm ("ldrd r6, r5, [r2, 0xc]");
    0x0004e0a4 ldrd r7, r8, [r2, 4]                              |     __asm ("ldrd r7, r8, [r2, 4]");
    0x0004e0a8 tst.w r3, 1                                       |     
    0x0004e0ac ldr r3, [sp, 0x7c]                                |     r3 = *(arg_7ch);
    0x0004e0ae it eq                                             |     
                                                                 |     if ((r3 & 1) != 0) {
    0x0004e0b0 moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x0004e0b2 cmp r6, 0                                         |     
                                                                 |     if (r6 <= 0) {
    0x0004e0b4 ble.w 0x53768                                     |         goto label_358;
                                                                 |     }
    0x0004e0b8 add.w sb, r5, 0x10                                |     sb = r5 + 0x10;
    0x0004e0bc str.w fp, [sp, 0x28]                              |     __asm ("str.w fp, [arg_28h]");
    0x0004e0c0 str r6, [sp, 0x20]                                |     *(arg_20h) = r6;
    0x0004e0c2 movs r4, 0                                        |     r4 = 0;
    0x0004e0c4 mov r6, r5                                        |     r6 = r5;
    0x0004e0c6 ldr.w fp, [sp, 0x44]                              |     fp = *(arg_44h);
    0x0004e0ca mov r5, r3                                        |     r5 = r3;
    0x0004e0cc b 0x4e0d8                                         |     
                                                                 |     while (r0 == 0) {
    0x0004e0ce ldr r3, [sp, 0x20]                                |         r3 = *(arg_20h);
    0x0004e0d0 adds r4, 1                                        |         r4++;
    0x0004e0d2 cmp r3, r4                                        |         
                                                                 |         if (r3 == r4) {
    0x0004e0d4 beq.w 0x51d30                                     |             goto label_359;
                                                                 |         }
    0x0004e0d8 mov r0, r4                                        |         r0 = r4;
                                                                 |         if (r5 != 0) {
    0x0004e0da cbz r5, 0x4e0e0                                   |             
    0x0004e0dc ldr.w r0, [r5, r4, lsl 2]                         |             offset_13 = r4 << 2;
                                                                 |             r0 = *((r5 + offset_13));
                                                                 |         }
    0x0004e0e0 ldr r2, [r6, 0x10]                                |         r2 = *((r6 + 0x10));
    0x0004e0e2 add.w r1, r0, r8                                  |         r1 = r0 + r8;
    0x0004e0e6 add r0, r7                                        |         r0 += r7;
    0x0004e0e8 add.w r1, r1, r1, lsl 2                           |         r1 += (r1 << 2);
    0x0004e0ec add.w r0, r0, r0, lsl 2                           |         r0 += (r0 << 2);
    0x0004e0f0 ldrb.w sl, [r2, r4]                               |         sl = *((r2 + r4));
    0x0004e0f4 add.w r1, fp, r1, lsl 3                           |         r1 = fp + (r1 << 3);
    0x0004e0f8 ldr r2, [sb, 4]!                                  |         r2 = *((sb += 4));
    0x0004e0fc add.w r0, fp, r0, lsl 3                           |         r0 = fp + (r0 << 3);
    0x0004e100 bl 0x21bfc                                        |         r0 = fcn_00021bfc (r0, r1, r2);
    0x0004e104 cmp r0, 0                                         |         
    0x0004e106 beq 0x4e0ce                                       |         
                                                                 |     }
    0x0004e108 ldr.w fp, [sp, 0x28]                              |     fp = *(arg_28h);
    0x0004e10c str r0, [sp, 0x80]                                |     *(arg_80h) = r0;
    0x0004e10e cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x0004e112 beq.w 0x52722                                     |         goto label_360;
                                                                 |     }
    0x0004e116 rsbs r3, r0, 0                                    |     r3 = r0 - ;
    0x0004e118 str r3, [sp, 0x80]                                |     *(arg_80h) = r3;
    0x0004e11a movs r3, 0                                        |     r3 = 0;
    0x0004e11c str r3, [sp, 0x7c]                                |     *(arg_7ch) = r3;
    0x0004e11e b.w 0x4d26a                                       |     goto label_2;
    0x0004e122 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e124 ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x0004e126 str r3, [sp, 0x7c]                                |     *(arg_7ch) = r3;
    0x0004e128 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004e12a adds r3, 1                                        |     r3++;
    0x0004e12c str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e12e b.w 0x4d26a                                       |     goto label_2;
    0x0004e132 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e134 ldr r4, [r3, 4]                                   |     r4 = *((r3 + 4));
    0x0004e136 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004e138 adds r3, 1                                        |     r3++;
    0x0004e13a add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0004e13e str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e140 ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004e142 add.w r4, r3, r4, lsl 3                           |     r4 = r3 + (r4 << 3);
    0x0004e146 ldrh r5, [r4, 0x1c]                               |     r5 = *((r4 + 0x1c));
    0x0004e148 lsls r1, r5, 0x1d                                 |     r1 = r5 << 0x1d;
                                                                 |     if (r1 >= r5) {
    0x0004e14a bpl.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004e14e mov r0, r4                                        |     r0 = r4;
    0x0004e150 bl 0xa29c                                         |     fcn_0000a29c (r0);
    0x0004e154 and r3, r5, 0xbe00                                |     r3 = r5 & 0xbe00;
    0x0004e158 vstr d0, [r4, 8]                                  |     __asm ("vstr d0, [r4, 8]");
    0x0004e15c orr r3, r3, 8                                     |     r3 |= 8;
    0x0004e160 strh r3, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r3;
    0x0004e162 b.w 0x4d26a                                       |     goto label_2;
    0x0004e166 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e168 ldr r4, [r3, 4]                                   |     r4 = *((r3 + 4));
    0x0004e16a ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004e16c add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0004e170 add.w r4, r3, r4, lsl 3                           |     r4 = r3 + (r4 << 3);
    0x0004e174 ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0004e176 lsls r6, r3, 0x1d                                 |     r6 = r3 << 0x1d;
                                                                 |     if (r6 >= r3) {
    0x0004e178 bpl.w 0x51e44                                     |         goto label_361;
                                                                 |     }
                                                                 | label_110:
    0x0004e17c ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004e17e and r3, r3, 0xbe00                                |     r3 &= 0xbe00;
    0x0004e182 orr r3, r3, 4                                     |     r3 |= 4;
    0x0004e186 strh r3, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r3;
    0x0004e188 adds r2, 1                                        |     r2++;
    0x0004e18a str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004e18c b.w 0x4d26a                                       |     goto label_2;
    0x0004e190 ldr r5, [sp, 0x20]                                |     r5 = *(arg_20h);
    0x0004e192 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004e194 ldr r4, [r5, 4]                                   |     r4 = *((r5 + 4));
    0x0004e196 adds r3, 1                                        |     r3++;
    0x0004e198 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e19a ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004e19c add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0004e1a0 add.w r4, r3, r4, lsl 3                           |     r4 = r3 + (r4 << 3);
    0x0004e1a4 mov r0, r4                                        |     r0 = r4;
    0x0004e1a6 bl 0xc318                                         |     fcn_0000c318 (r0, r1);
    0x0004e1aa ldr r2, [r5, 8]                                   |     r2 = *((r5 + 8));
    0x0004e1ac ldr r3, [r4, 0x10]                                |     r3 = *((r4 + 0x10));
    0x0004e1ae adds r3, r3, r2                                   |     r3 += r2;
    0x0004e1b0 str r3, [r4, 0x10]                                |     *((r4 + 0x10)) = r3;
    0x0004e1b2 ldr r3, [r4, 0x14]                                |     r3 = *((r4 + 0x14));
    0x0004e1b4 adc.w r3, r3, r2, asr 31                          |     __asm ("adc.w r3, r3, r2, asr 31");
    0x0004e1b8 str r3, [r4, 0x14]                                |     *((r4 + 0x14)) = r3;
    0x0004e1ba b.w 0x4d26a                                       |     goto label_2;
    0x0004e1be ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e1c0 ldr r4, [r3, 4]                                   |     r4 = *((r3 + 4));
    0x0004e1c2 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004e1c4 adds r3, 1                                        |     r3++;
    0x0004e1c6 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e1c8 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0004e1ca beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004e1ce ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004e1d0 add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0004e1d4 movw r2, 0x2460                                   |     r2 = 0x2460;
    0x0004e1d8 add.w r4, r3, r4, lsl 3                           |     r4 = r3 + (r4 << 3);
    0x0004e1dc ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0004e1de tst r2, r3                                        |     
                                                                 |     if ((r2 & r3) != 0) {
    0x0004e1e0 bne.w 0x52e40                                     |         goto label_362;
                                                                 |     }
    0x0004e1e4 ldr r1, [r4, 0x24]                                |     r1 = *((r4 + 0x24));
                                                                 |     if (r1 != 0) {
    0x0004e1e6 cbz r1, 0x4e1f2                                   |         
    0x0004e1e8 ldr r0, [r4]                                      |         r0 = *(r4);
    0x0004e1ea bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
    0x0004e1ee movs r3, 0                                        |         r3 = 0;
    0x0004e1f0 str r3, [r4, 0x24]                                |         *((r4 + 0x24)) = r3;
                                                                 |     }
    0x0004e1f2 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x0004e1f6 movs r3, 0                                        |     r3 = 0;
    0x0004e1f8 str r3, [r4, 4]                                   |     *((r4 + 4)) = r3;
    0x0004e1fa movs r3, 4                                        |     r3 = 4;
    0x0004e1fc strh r3, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r3;
    0x0004e1fe vstr d16, [r4, 0x10]                              |     __asm ("vstr d16, [r4, 0x10]");
    0x0004e202 b.w 0x4d26a                                       |     goto label_2;
    0x0004e206 ldr r3, [sp, 0x74]                                |     r3 = *(arg_74h);
    0x0004e208 ldr r1, [sp, 0x30]                                |     r1 = *(arg_30h);
    0x0004e20a ldr.w r2, [fp, 0x11c]                             |     r2 = *(arg_11ch);
    0x0004e20e cmp r1, r3                                        |     
    0x0004e210 ite lo                                            |     
                                                                 |     if (r1 >= r3) {
    0x0004e212 movlo r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r1 < r3) {
    0x0004e214 movhs r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x0004e216 cmp r2, 0                                         |     
    0x0004e218 it eq                                             |     
                                                                 |     if (r2 != 0) {
    0x0004e21a moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x0004e21c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004e21e bne.w 0x51184                                     |         goto label_363;
                                                                 |     }
                                                                 | label_63:
    0x0004e222 ldr r1, [sp, 0x24]                                |     r1 = *((sp + 0x24));
    0x0004e224 ldrd r2, r3, [r1, 0x90]                           |     __asm ("ldrd r2, r3, [r1, 0x90]");
    0x0004e228 ldr r1, [r1]                                      |     r1 = *(r1);
    0x0004e22a cmp r2, 1                                         |     
    0x0004e22c sbcs r3, r3, 0                                    |     __asm ("sbcs r3, r3, 0");
                                                                 |     if (r2 >= 1) {
    0x0004e230 bge.w 0x51196                                     |         goto label_364;
                                                                 |     }
    0x0004e234 ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x0004e236 movs r1, 1                                        |     r1 = 1;
    0x0004e238 bl 0x2ce80                                        |     r0 = fcn_0002ce80 (r0, r1);
    0x0004e23c mov sb, r0                                        |     sb = r0;
    0x0004e23e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004e240 beq.w 0x53c26                                     |         goto label_365;
                                                                 |     }
    0x0004e244 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004e246 add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x0004e24a ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004e24c ldr r0, [r3, 0x2c]                                |     r0 = *((r3 + 0x2c));
    0x0004e24e b.w 0x50538                                       |     goto label_39;
    0x0004e252 ldr r7, [sp, 0x20]                                |     r7 = *(arg_20h);
    0x0004e254 ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0004e256 ldr.w r4, [fp, 0x10]                              |     r4 = *(arg_10h);
    0x0004e25a ldr r3, [r7, 0xc]                                 |     r3 = *((r7 + 0xc));
    0x0004e25c add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004e260 add.w r5, r1, r3, lsl 3                           |     r5 = r1 + (r3 << 3);
    0x0004e264 ldr r3, [r7, 4]                                   |     r3 = *((r7 + 4));
    0x0004e266 mov r0, r5                                        |     r0 = r5;
    0x0004e268 add.w r4, r4, r3, lsl 4                           |     r4 += (r3 << 4);
    0x0004e26c bl 0xc318                                         |     fcn_0000c318 (r0, r1);
    0x0004e270 ldr r2, [r5, 0x10]                                |     r2 = *((r5 + 0x10));
    0x0004e272 ldr r1, [r7, 8]                                   |     r1 = *((r7 + 8));
    0x0004e274 ldr r0, [r4, 4]                                   |     r0 = *((r4 + 4));
    0x0004e276 bl 0x2c060                                        |     fcn_0002c060 (r0, r1, r2);
    0x0004e27a ldr r3, [r7, 8]                                   |     r3 = *((r7 + 8));
    0x0004e27c mov r6, r0                                        |     r6 = r0;
    0x0004e27e cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x0004e280 beq.w 0x51e2e                                     |         goto label_366;
                                                                 |     }
    0x0004e284 cmp r3, 2                                         |     
    0x0004e286 ittt eq                                           |     
                                                                 |     if (r3 != 2) {
    0x0004e288 ldreq r3, [r4, 0xc]                               |         r3 = *((r4 + 0xc));
                                                                 |     }
                                                                 |     if (r3 != 2) {
    0x0004e28a ldreq r2, [r5, 0x10]                              |         r2 = *((r5 + 0x10));
                                                                 |     }
                                                                 |     if (r3 != 2) {
    0x0004e28c strbeq r2, [r3, 0x4c]                             |         *((r3 + 0x4c)) = r2;
                                                                 |     }
                                                                 | label_109:
    0x0004e290 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e292 ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004e294 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004e296 adds r2, 1                                        |     r2++;
    0x0004e298 str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004e29a cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x0004e29c bne.w 0x4d73a                                     |         goto label_12;
                                                                 |     }
    0x0004e2a0 ldr.w r3, [fp, 4]                                 |     r3 = *(arg_4h);
                                                                 |     if (r3 == 0) {
    0x0004e2a4 cbz r3, 0x4e2b8                                   |         goto label_367;
                                                                 |     }
                                                                 |     do {
    0x0004e2a6 ldrb.w r2, [r3, 0x58]                             |         r2 = *((r3 + 0x58));
    0x0004e2aa orr r2, r2, 0x20                                  |         r2 |= 0x20;
    0x0004e2ae strb.w r2, [r3, 0x58]                             |         *((r3 + 0x58)) = r2;
    0x0004e2b2 ldr r3, [r3, 0x34]                                |         r3 = *((r3 + 0x34));
    0x0004e2b4 cmp r3, 0                                         |         
    0x0004e2b6 bne 0x4e2a6                                       |         
                                                                 |     } while (r3 != 0);
                                                                 | label_367:
    0x0004e2b8 ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x0004e2ba ldrb.w r3, [r2, 0x58]                             |     r3 = *((r2 + 0x58));
    0x0004e2be bfc r3, 5, 1                                      |     value_14 = BIT_MASK (1, );
                                                                 |     value_14 = ~value_14;
                                                                 |     r3 &= value_14;
    0x0004e2c2 strb.w r3, [r2, 0x58]                             |     *((r2 + 0x58)) = r3;
    0x0004e2c6 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004e2c8 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004e2cc b.w 0x4d740                                       |     goto label_7;
    0x0004e2d0 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004e2d2 adds r3, 1                                        |     r3++;
    0x0004e2d4 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e2d6 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e2d8 ldr r5, [r3, 0x10]                                |     r5 = *((r3 + 0x10));
    0x0004e2da ldr r4, [r3, 4]                                   |     r4 = *((r3 + 4));
    0x0004e2dc ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004e2de ldrb r1, [r5], 1                                  |     r1 = *(r5);
                                                                 |     r5++;
    0x0004e2e2 add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0004e2e6 add.w r4, r3, r4, lsl 3                           |     r4 = r3 + (r4 << 3);
    0x0004e2ea cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0004e2ec beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004e2f0 ldr r6, [sp, 0x70]                                |     r6 = *(arg_70h);
                                                                 |     do {
    0x0004e2f2 mov r0, r4                                        |         r0 = r4;
    0x0004e2f4 mov r2, r6                                        |         r2 = r6;
    0x0004e2f6 bl 0x25cf0                                        |         fcn_00025cf0 (r0, r1, r2);
    0x0004e2fa ldrb r1, [r5], 1                                  |         r1 = *(r5);
                                                                 |         r5++;
    0x0004e2fe adds r4, 0x28                                     |         r4 += 0x28;
    0x0004e300 cmp r1, 0                                         |         
    0x0004e302 bne 0x4e2f2                                       |         
                                                                 |     } while (r1 != 0);
    0x0004e304 b.w 0x4d26a                                       |     goto label_2;
    0x0004e308 ldr r1, [sp, 0x20]                                |     r1 = *(arg_20h);
    0x0004e30a ldr r7, [sp, 0x24]                                |     r7 = *((sp + 0x24));
    0x0004e30c ldr r2, [r1, 4]                                   |     r2 = *((r1 + 4));
    0x0004e30e ldr r3, [r7, 0x38]                                |     r3 = *((r7 + 0x38));
    0x0004e310 ldr r5, [r1, 0xc]                                 |     r5 = *((r1 + 0xc));
    0x0004e312 ldr.w r4, [r3, r2, lsl 2]                         |     offset_15 = r2 << 2;
                                                                 |     r4 = *((r3 + offset_15));
    0x0004e316 ldr r3, [r1, 8]                                   |     r3 = *((r1 + 8));
    0x0004e318 ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004e31a add.w r5, r5, r5, lsl 2                           |     r5 += (r5 << 2);
    0x0004e31e ldrsh.w r6, [r4, 0x14]                            |     r6 = *((r4 + 0x14));
    0x0004e322 mov r0, r4                                        |     r0 = r4;
    0x0004e324 str r3, [sp, 0x28]                                |     *(arg_28h) = r3;
    0x0004e326 add.w r8, r4, 0x58                                |     r8 = r4 + 0x58;
    0x0004e32a ldr r3, [r4]                                      |     r3 = *(r4);
    0x0004e32c str r6, [sp, 0x48]                                |     *(arg_48h) = r6;
    0x0004e32e add.w r5, r2, r5, lsl 3                           |     r5 = r2 + (r5 << 3);
    0x0004e332 str r3, [sp, 0x2c]                                |     *(arg_2ch) = r3;
    0x0004e334 bl 0x2f33c                                        |     fcn_0002f33c (r0);
    0x0004e338 add.w r3, r8, r6, lsl 2                           |     r3 = r8 + (r6 << 2);
    0x0004e33c mov r6, r0                                        |     r6 = r0;
    0x0004e33e str r3, [sp, 0x3c]                                |     *(arg_3ch) = r3;
    0x0004e340 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004e342 bne.w 0x528f6                                     |         goto label_207;
                                                                 |     }
    0x0004e346 ldr r2, [r7, 0x48]                                |     r2 = *((r7 + 0x48));
    0x0004e348 ldr r3, [r4, 0x44]                                |     r3 = *((r4 + 0x44));
    0x0004e34a cmp r3, r2                                        |     
                                                                 |     if (r3 == r2) {
    0x0004e34c beq.w 0x51e1c                                     |         goto label_368;
                                                                 |     }
                                                                 | label_107:
    0x0004e350 ldrb r3, [r4, 0x19]                               |     r3 = *((r4 + 0x19));
    0x0004e352 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004e354 bne.w 0x51168                                     |         goto label_369;
                                                                 |     }
    0x0004e358 ldrb r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0004e35a lsls r1, r3, 0x1d                                 |     r1 = r3 << 0x1d;
                                                                 |     if (r1 < r3) {
    0x0004e35c bmi.w 0x528bc                                     |         goto label_370;
                                                                 |     }
    0x0004e360 ldr.w sb, [sp, 0x2c]                              |     sb = *(arg_2ch);
    0x0004e364 add r7, sp, 0xb0                                  |     r7 += arg_b0h;
    0x0004e366 mov r1, r7                                        |     r1 = r7;
    0x0004e368 mov r0, sb                                        |     r0 = sb;
    0x0004e36a bl 0xb838                                         |     fcn_0000b838 (r0, r1);
    0x0004e36e ldrh.w r1, [sb, 0x2c]                             |     r1 = *((sb + 0x2c));
    0x0004e372 ldr.w r2, [sb, 0x20]                              |     r2 = *((sb + 0x20));
    0x0004e376 ldr r3, [sp, 0xb0]                                |     r3 = *(arg_b0h);
    0x0004e378 ldrh.w r7, [sb, 0x2e]                             |     r7 = *((sb + 0x2e));
    0x0004e37c add r2, r1                                        |     r2 += r1;
    0x0004e37e str r2, [r4, 0x54]                                |     *((r4 + 0x54)) = r2;
    0x0004e380 str r3, [r4, 0x48]                                |     *((r4 + 0x48)) = r3;
                                                                 | label_152:
    0x0004e382 ldr.w r2, [fp, 0x58]                              |     r2 = *(arg_58h);
    0x0004e386 cmp r7, r3                                        |     
    0x0004e388 mov r1, r7                                        |     r1 = r7;
    0x0004e38a it hs                                             |     
                                                                 |     if (r7 < r3) {
    0x0004e38c movhs r1, r3                                      |         r1 = r3;
                                                                 |     }
    0x0004e38e str r1, [r4, 0x4c]                                |     *((r4 + 0x4c)) = r1;
    0x0004e390 cmp r2, r3                                        |     
                                                                 |     if (r2 <= r3) {
    0x0004e392 blo.w 0x4f592                                     |         goto label_30;
                                                                 |     }
    0x0004e396 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004e398 ldr r0, [r4, 0x54]                                |     r0 = *((r4 + 0x54));
    0x0004e39a ldr r2, [r3, 0x48]                                |     r2 = *((r3 + 0x48));
                                                                 | label_173:
    0x0004e39c str r2, [r4, 0x44]                                |     *((r4 + 0x44)) = r2;
    0x0004e39e add.w sl, sp, 0x94                                |     sl += arg_94h;
    0x0004e3a2 ldrb r3, [r0]                                     |     r3 = *(r0);
    0x0004e3a4 lsls r2, r3, 0x18                                 |     r2 = r3 << 0x18;
                                                                 |     if (r2 < r3) {
    0x0004e3a6 bmi.w 0x52c50                                     |         goto label_371;
                                                                 |     }
    0x0004e3aa movs r0, 1                                        |     r0 = 1;
    0x0004e3ac str.w r3, [sl]                                    |     __asm ("str.w r3, [sl]");
                                                                 | label_172:
    0x0004e3b0 ldr r1, [sp, 0x48]                                |     r1 = *(arg_48h);
    0x0004e3b2 movs r2, 0                                        |     r2 = 0;
    0x0004e3b4 str r0, [r4, 0x50]                                |     *((r4 + 0x50)) = r0;
    0x0004e3b6 strh r2, [r4, 0x16]                               |     *((r4 + 0x16)) = r2;
    0x0004e3b8 str.w r3, [r8, r1, lsl 2]                         |     __asm ("str.w r3, [r8, r1, lsl 2]");
    0x0004e3bc ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x0004e3c0 cmp r3, r7                                        |     
    0x0004e3c2 itt hi                                            |     
                                                                 |     if (r3 <= r7) {
    0x0004e3c4 strhi r2, [r4, 0x54]                              |         *((r4 + 0x54)) = r2;
                                                                 |     }
                                                                 |     if (r3 <= r7) {
    0x0004e3c6 strhi r2, [r4, 0x4c]                              |         *((r4 + 0x4c)) = r2;
                                                                 |     }
    0x0004e3c8 movw r2, 0x8003                                   |     
    0x0004e3cc movt r2, 1                                        |     r2 = 0x18003;
    0x0004e3d0 cmp r3, r2                                        |     
                                                                 |     if (r3 > r2) {
    0x0004e3d2 bhi.w 0x5237a                                     |         goto label_372;
                                                                 |     }
    0x0004e3d6 ldr r2, [r4, 0x48]                                |     r2 = *((r4 + 0x48));
    0x0004e3d8 cmp r3, r2                                        |     
                                                                 |     if (r3 > r2) {
    0x0004e3da bhi.w 0x5237a                                     |         goto label_372;
                                                                 |     }
    0x0004e3de movs r3, 0                                        |     r3 = 0;
                                                                 | label_108:
    0x0004e3e0 ldr r2, [sp, 0x28]                                |     r2 = *(arg_28h);
    0x0004e3e2 cmp r6, r2                                        |     
                                                                 |     if (r6 > r2) {
    0x0004e3e4 bgt.w 0x52202                                     |         goto label_373;
                                                                 |     }
    0x0004e3e8 ldr r1, [sp, 0x48]                                |     r1 = *(arg_48h);
    0x0004e3ea ldr r2, [r4, 0x50]                                |     r2 = *((r4 + 0x50));
    0x0004e3ec ldr.w r1, [r8, r1, lsl 2]                         |     offset_16 = r1 << 2;
                                                                 |     r1 = *((r8 + offset_16));
    0x0004e3f0 cmp r2, r1                                        |     
                                                                 |     if (r2 <= r1) {
    0x0004e3f2 blo.w 0x52d34                                     |         goto label_374;
                                                                 |     }
                                                                 | label_131:
    0x0004e3f6 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e3f8 ldrsb.w r2, [r3, 1]                               |     r2 = *((r3 + 1));
    0x0004e3fc ldrh r3, [r5, 0x1c]                               |     r3 = *((r5 + 0x1c));
    0x0004e3fe adds r2, 8                                        |     r2 += 8;
    0x0004e400 ittt ne                                           |     
                                                                 |     if (r2 == 8) {
    0x0004e402 andne r3, r3, 0xbe00                              |         r3 &= 0xbe00;
                                                                 |     }
                                                                 |     if (r2 == 8) {
    0x0004e406 orrne r3, r3, 1                                   |         r3 |= 1;
                                                                 |     }
                                                                 |     if (r2 != 8) {
    0x0004e40a strh r3, [r5, 0x1c]                               |         *((r5 + 0x1c)) = r3;
                                                                 |     }
                                                                 |     if (r2 == 8) {
    0x0004e40c beq.w 0x53f40                                     |         goto label_375;
                                                                 |     }
                                                                 | label_278:
    0x0004e410 and r3, r3, 0x1000                                |     r3 &= 0x1000;
                                                                 | label_62:
    0x0004e414 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004e416 bne.w 0x52930                                     |         goto label_376;
                                                                 |     }
                                                                 | label_156:
    0x0004e41a ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004e41c adds r3, 1                                        |     r3++;
    0x0004e41e str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e420 b.w 0x4d26a                                       |     goto label_2;
    0x0004e424 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004e426 ldr r0, [sp, 0x20]                                |     r0 = *(arg_20h);
    0x0004e428 ldr.w r2, [r3, 0xc8]                              |     r2 = *((r3 + 0xc8));
    0x0004e42c ldr r3, [r0, 4]                                   |     r3 = *((r0 + 4));
    0x0004e42e ldrb r1, [r2, r3]                                 |     r1 = *((r2 + r3));
    0x0004e430 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0004e432 beq.w 0x50e48                                     |         goto label_377;
                                                                 |     }
    0x0004e436 ldr r3, [r0, 8]                                   |     r3 = *((r0 + 8));
    0x0004e438 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e43a b.w 0x4d26a                                       |     goto label_2;
    0x0004e43e ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e440 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0004e442 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004e444 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004e446 ldr.w r3, [r3, r2, lsl 2]                         |     offset_17 = r2 << 2;
                                                                 |     r3 = *((r3 + offset_17));
    0x0004e44a ldr r4, [r3]                                      |     r4 = *(r3);
    0x0004e44c ldr r6, [r4, 0x44]                                |     r6 = *((r4 + 0x44));
    0x0004e44e mov r5, r6                                        |     r5 = r6;
    0x0004e450 mov r7, r6                                        |     r7 = r6;
    0x0004e452 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x0004e454 bne.w 0x50d8c                                     |         goto label_378;
                                                                 |     }
                                                                 | label_52:
    0x0004e458 ldr r3, [sp, 0x38]                                |     r3 = *(arg_38h);
    0x0004e45a strd r5, r7, [r3, 0x10]                           |     __asm ("strd r5, r7, [r3, 0x10]");
    0x0004e45e ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004e460 adds r3, 1                                        |     r3++;
    0x0004e462 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e464 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004e466 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004e46a b.w 0x4d740                                       |     goto label_7;
    0x0004e46e ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004e470 ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0004e472 ldr r4, [r2, 4]                                   |     r4 = *((r2 + 4));
    0x0004e474 ldr r3, [r2, 8]                                   |     r3 = *((r2 + 8));
    0x0004e476 add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0004e47a add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004e47e add.w r4, r1, r4, lsl 3                           |     r4 = r1 + (r4 << 3);
    0x0004e482 add.w r3, r4, r3, lsl 3                           |     r3 = r4 + (r3 << 3);
    0x0004e486 subs r3, 0x28                                     |     r3 -= 0x28;
    0x0004e488 str r3, [sp, 0x28]                                |     *(arg_28h) = r3;
    0x0004e48a ldrd r3, r6, [r2, 0xc]                            |     __asm ("ldrd r3, r6, [r2, 0xc]");
    0x0004e48e add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004e492 add.w r3, r1, r3, lsl 3                           |     r3 = r1 + (r3 << 3);
    0x0004e496 str r3, [sp, 0x38]                                |     *(arg_38h) = r3;
    0x0004e498 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004e49a ldrb.w r8, [r3, 0x57]                             |     r8 = *((r3 + 0x57));
    0x0004e49e cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x0004e4a0 bne.w 0x510b0                                     |         goto label_379;
                                                                 |     }
                                                                 | label_60:
    0x0004e4a4 ldr.w r2, [pc, 0xb80]                             |     r2 = *(0x0004f028);
    0x0004e4a8 movs r3, 0                                        |     r3 = 0;
    0x0004e4aa str.w fp, [sp, 0x34]                              |     __asm ("str.w fp, [arg_34h]");
    0x0004e4ae mov r6, r3                                        |     r6 = r3;
    0x0004e4b0 ldr.w sb, [sp, 0x28]                              |     sb = *(arg_28h);
    0x0004e4b4 mov sl, r3                                        |     sl = r3;
    0x0004e4b6 add r2, pc                                        |     r2 += pc;
    0x0004e4b8 mov r7, r3                                        |     r7 = r3;
    0x0004e4ba mov fp, r3                                        |     
    0x0004e4bc mov r5, r2                                        |     r5 = r2;
    0x0004e4be b 0x4e4f4                                         |     
                                                                 |     while (r2 > 0xb) {
    0x0004e4c0 sub.w r1, r2, 0xc                                 |         r1 = r2 - 0xc;
    0x0004e4c4 lsrs r1, r1, 1                                    |         r1 >>= 1;
                                                                 |         if (r0 != 0) {
    0x0004e4c6 cbz r0, 0x4e4d8                                   |             
                                                                 | label_13:
    0x0004e4c8 orrs.w r0, r7, fp                                 |             r0 = r7 | fp;
                                                                 |             if (r0 != r7) {
    0x0004e4cc bne.w 0x50640                                     |                 goto label_380;
                                                                 |             }
    0x0004e4d0 ldr.w r0, [sb, 0x10]                              |             r0 = *((sb + 0x10));
    0x0004e4d4 add sl, r0                                        |             sl += r0;
    0x0004e4d6 subs r1, r1, r0                                   |             r1 -= r0;
                                                                 |         }
                                                                 | label_36:
    0x0004e4d8 adds r7, r1, r7                                   |         r7 = r1 + r7;
    0x0004e4da adc.w fp, fp, r1, asr 31                          |         __asm ("adc.w fp, fp, r1, asr 31");
    0x0004e4de cmp r2, 0x7f                                      |         
    0x0004e4e0 it ls                                             |         
                                                                 |         if (r2 > 0x7f) {
    0x0004e4e2 movls r1, 1                                       |             r1 = 1;
                                                                 |         }
                                                                 |         if (r2 > 0x7f) {
    0x0004e4e4 bhi.w 0x505f2                                     |             goto label_381;
                                                                 |         }
                                                                 | label_14:
    0x0004e4e8 sub.w sb, sb, 0x28                                |         sb -= 0x28;
    0x0004e4ec add r6, r1                                        |         r6 += r1;
    0x0004e4ee cmp r4, sb                                        |         
                                                                 |         if (r4 > sb) {
    0x0004e4f0 bhi.w 0x5066c                                     |             goto label_382;
                                                                 |         }
    0x0004e4f4 mov r1, r8                                        |         r1 = r8;
    0x0004e4f6 mov r0, sb                                        |         r0 = sb;
    0x0004e4f8 bl 0x7cfc                                         |         r0 = fcn_00007cfc (r0, r1);
    0x0004e4fc mov r2, r0                                        |         r2 = r0;
    0x0004e4fe ldrh.w r0, [sb, 0x1c]                             |         r0 = *((sb + 0x1c));
    0x0004e502 cmp r2, 0xb                                       |         
    0x0004e504 and r0, r0, 0x4000                                |         r0 &= 0x4000;
    0x0004e508 bhi 0x4e4c0                                       |         
                                                                 |     }
    0x0004e50a adds r1, r5, r2                                   |     r1 = r5 + r2;
    0x0004e50c ldrb.w r1, [r1, 0xa6c]                            |     r1 = *((r1 + 0xa6c));
    0x0004e510 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004e512 bne 0x4e4c8                                       |         goto label_13;
                                                                 |     }
    0x0004e514 adds r1, r1, r7                                   |     r1 += r7;
    0x0004e516 mov r7, r1                                        |     r7 = r1;
    0x0004e518 adc fp, fp, 0                                     |     __asm ("adc fp, fp, 0");
    0x0004e51c movs r1, 1                                        |     r1 = 1;
    0x0004e51e b 0x4e4e8                                         |     goto label_14;
    0x0004e520 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004e522 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x0004e524 adds r3, 1                                        |     r3++;
    0x0004e526 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e528 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e52a ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0004e52c ldr r1, [r3, 0xc]                                 |     r1 = *((r3 + 0xc));
    0x0004e52e ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x0004e532 add.w r3, r3, r2, lsl 4                           |     r3 += (r2 << 4);
    0x0004e536 mov r2, r7                                        |     r2 = r7;
    0x0004e538 ldr r0, [r3, 4]                                   |     r0 = *((r3 + 4));
    0x0004e53a bl 0x11954                                        |     fcn_00011954 (r0, r1, r2);
    0x0004e53e ldr r3, [sp, 0xd8]                                |     r3 = *(arg_d8h);
    0x0004e540 ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x0004e542 str r3, [r2, 0x10]                                |     *((r2 + 0x10)) = r3;
    0x0004e544 asrs r3, r3, 0x1f                                 |     r3 >>= 0x1f;
    0x0004e546 str r3, [r2, 0x14]                                |     *((r2 + 0x14)) = r3;
    0x0004e548 b.w 0x4d26a                                       |     goto label_2;
    0x0004e54c ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e54e ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x0004e550 ldr r4, [r3, 8]                                   |     r4 = *((r3 + 8));
    0x0004e552 ldr r3, [r4]                                      |     r3 = *(r4);
    0x0004e554 ldr r5, [r3, 0x34]                                |     r5 = *((r3 + 0x34));
    0x0004e556 cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x0004e558 bne.w 0x510dc                                     |         goto label_383;
                                                                 |     }
    0x0004e55c ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004e55e adds r3, 1                                        |     r3++;
    0x0004e560 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e562 b.w 0x4d26a                                       |     goto label_2;
    0x0004e566 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e568 ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004e56a ldr r1, [sp, 0x38]                                |     r1 = *(arg_38h);
    0x0004e56c ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x0004e56e adds r2, 1                                        |     r2++;
    0x0004e570 str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004e572 ldrd r2, r3, [r3]                                 |     __asm ("ldrd r2, r3, [r3]");
    0x0004e576 strd r2, r3, [r1, 0x10]                           |     __asm ("strd r2, r3, [r1, 0x10]");
    0x0004e57a b.w 0x4d26a                                       |     goto label_2;
    0x0004e57e ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004e580 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e582 adds r2, 1                                        |     r2++;
    0x0004e584 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004e586 str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004e588 ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x0004e58a str r3, [r2, 0x10]                                |     *((r2 + 0x10)) = r3;
    0x0004e58c asrs r3, r3, 0x1f                                 |     r3 >>= 0x1f;
    0x0004e58e str r3, [r2, 0x14]                                |     *((r2 + 0x14)) = r3;
    0x0004e590 b.w 0x4d26a                                       |     goto label_2;
    0x0004e594 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e596 ldr r1, [sp, 0x1c]                                |     r1 = *(arg_1ch);
    0x0004e598 ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004e59a ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004e59c add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004e5a0 add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0004e5a4 asrs r2, r1, 0x1f                                 |     r2 = r1 >> 0x1f;
    0x0004e5a6 str r2, [r3, 0x14]                                |     *((r3 + 0x14)) = r2;
    0x0004e5a8 ldr r2, [r3, 0x10]                                |     r2 = *((r3 + 0x10));
    0x0004e5aa str r1, [r3, 0x10]                                |     *((r3 + 0x10)) = r1;
    0x0004e5ac adds r2, 1                                        |     r2++;
    0x0004e5ae str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004e5b0 movs r2, 4                                        |     r2 = 4;
    0x0004e5b2 strh r2, [r3, 0x1c]                               |     *((r3 + 0x1c)) = r2;
    0x0004e5b4 b.w 0x4d26a                                       |     goto label_2;
    0x0004e5b8 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e5ba movs r1, 0x80                                     |     r1 = 0x80;
    0x0004e5bc ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004e5be ldr r0, [sp, 0x40]                                |     r0 = *(arg_40h);
    0x0004e5c0 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004e5c2 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004e5c6 add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0004e5ca ldr r2, [r3, 0x10]                                |     r2 = *((r3 + 0x10));
    0x0004e5cc add.w r2, r2, r2, lsl 2                           |     r2 += (r2 << 2);
    0x0004e5d0 add.w r2, r0, r2, lsl 2                           |     r2 = r0 + (r2 << 2);
    0x0004e5d4 ldr r2, [r2, 8]                                   |     r2 = *((r2 + 8));
    0x0004e5d6 strh r1, [r3, 0x1c]                               |     *((r3 + 0x1c)) = r1;
    0x0004e5d8 str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004e5da b.w 0x4d26a                                       |     goto label_2;
    0x0004e5de ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004e5e0 ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0004e5e2 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x0004e5e4 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004e5e8 add.w r1, r1, r3, lsl 3                           |     r1 += (r3 << 3);
    0x0004e5ec ldrd r2, r3, [r2, 8]                              |     __asm ("ldrd r2, r3, [r2, 8]");
    0x0004e5f0 str r1, [sp, 0x38]                                |     *(arg_38h) = r1;
    0x0004e5f2 subs r3, 1                                        |     r3--;
    0x0004e5f4 str r3, [r1, 0x10]                                |     *((r1 + 0x10)) = r3;
    0x0004e5f6 asrs r3, r3, 0x1f                                 |     r3 >>= 0x1f;
    0x0004e5f8 str r3, [r1, 0x14]                                |     *((r1 + 0x14)) = r3;
    0x0004e5fa movs r3, 4                                        |     r3 = 4;
    0x0004e5fc strh r3, [r1, 0x1c]                               |     *((r1 + 0x1c)) = r3;
    0x0004e5fe cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0004e600 beq.w 0x50d82                                     |         goto label_384;
                                                                 |     }
    0x0004e604 str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004e606 b.w 0x4d26a                                       |     goto label_2;
    0x0004e60a ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004e60c ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004e60e ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0004e610 adds r3, 1                                        |     r3++;
    0x0004e612 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e614 ldrd r3, r2, [r2, 4]                              |     __asm ("ldrd r3, r2, [r2, 4]");
    0x0004e618 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004e61c add.w r2, r2, r2, lsl 2                           |     r2 += (r2 << 2);
    0x0004e620 add.w r0, r1, r3, lsl 3                           |     r0 = r1 + (r3 << 3);
    0x0004e624 add.w r2, r1, r2, lsl 3                           |     r2 = r1 + (r2 << 3);
    0x0004e628 ldrh r3, [r0, 0x1c]                               |     r3 = *((r0 + 0x1c));
    0x0004e62a str r2, [sp, 0x38]                                |     *(arg_38h) = r2;
    0x0004e62c ands r4, r3, 1                                    |     r4 = r3 & 1;
                                                                 |     if (r4 != r3) {
    0x0004e630 bne.w 0x50d78                                     |         goto label_385;
                                                                 |     }
    0x0004e634 bl 0xa1d8                                         |     fcn_0000a1d8 (r0);
    0x0004e638 ldr r3, [sp, 0x38]                                |     r3 = *(arg_38h);
    0x0004e63a orrs r0, r1                                       |     r0 |= r1;
    0x0004e63c movw r2, 0x2460                                   |     r2 = 0x2460;
    0x0004e640 ite eq                                            |     
                                                                 |     if (r0 != r1) {
    0x0004e642 moveq r5, 1                                       |         r5 = 1;
                                                                 |     }
                                                                 |     if (r0 == r1) {
    0x0004e644 movne r5, 0                                       |         r5 = 0;
                                                                 |     }
    0x0004e646 ldrh r3, [r3, 0x1c]                               |     r3 = *((r3 + 0x1c));
    0x0004e648 tst r2, r3                                        |     
                                                                 |     if ((r2 & r3) != 0) {
    0x0004e64a bne.w 0x52bd0                                     |         goto label_386;
                                                                 |     }
                                                                 | label_166:
    0x0004e64e ldr r6, [sp, 0x38]                                |     r6 = *(arg_38h);
    0x0004e650 ldr r1, [r6, 0x24]                                |     r1 = *((r6 + 0x24));
                                                                 |     if (r1 != 0) {
    0x0004e652 cbz r1, 0x4e65e                                   |         
    0x0004e654 ldr r0, [r6]                                      |         r0 = *(r6);
    0x0004e656 bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
    0x0004e65a movs r3, 0                                        |         r3 = 0;
    0x0004e65c str r3, [r6, 0x24]                                |         *((r6 + 0x24)) = r3;
                                                                 |     }
    0x0004e65e ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x0004e660 movs r3, 0                                        |     r3 = 0;
    0x0004e662 str r3, [r2, 4]                                   |     *((r2 + 4)) = r3;
    0x0004e664 movs r3, 4                                        |     r3 = 4;
    0x0004e666 strd r5, r4, [r2, 0x10]                           |     __asm ("strd r5, r4, [r2, 0x10]");
    0x0004e66a strh r3, [r2, 0x1c]                               |     *((r2 + 0x1c)) = r3;
    0x0004e66c b.w 0x4d26a                                       |     goto label_2;
    0x0004e670 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004e672 ldrd r6, r3, [r2, 4]                              |     __asm ("ldrd r6, r3, [r2, 4]");
    0x0004e676 ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004e678 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004e67c add.w r6, r6, r6, lsl 2                           |     r6 += (r6 << 2);
    0x0004e680 add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0004e684 add.w r6, r2, r6, lsl 3                           |     r6 = r2 + (r6 << 3);
    0x0004e688 str r3, [sp, 0x38]                                |     *(arg_38h) = r3;
    0x0004e68a movw r2, 0x2460                                   |     r2 = 0x2460;
    0x0004e68e ldrh r3, [r3, 0x1c]                               |     r3 = *((r3 + 0x1c));
    0x0004e690 tst r2, r3                                        |     
                                                                 |     if ((r2 & r3) != 0) {
    0x0004e692 bne.w 0x51f90                                     |         goto label_387;
                                                                 |     }
                                                                 | label_119:
    0x0004e696 ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x0004e698 mov r3, r6                                        |     r3 = r6;
    0x0004e69a add.w r7, r6, 0x20                                |     r7 = r6 + 0x20;
                                                                 |     do {
    0x0004e69e ldr r5, [r3]                                      |         r5 = *(r3);
    0x0004e6a0 adds r3, 0x10                                     |         r3 += 0x10;
    0x0004e6a2 ldr r4, [r3, -0xc]                                |         r4 = *((r3 - 0xc));
    0x0004e6a6 adds r2, 0x10                                     |         r2 += 0x10;
    0x0004e6a8 ldr r0, [r3, -0x8]                                |         r0 = *((r3 - 0x8));
    0x0004e6ac ldr r1, [r3, -0x4]                                |         r1 = *((r3 - 0x4));
    0x0004e6b0 cmp r3, r7                                        |         
    0x0004e6b2 str r5, [r2, -0x10]                               |         *((r2 - 0x10)) = r5;
    0x0004e6b6 str r4, [r2, -0xc]                                |         *((r2 - 0xc)) = r4;
    0x0004e6ba str r0, [r2, -0x8]                                |         *((r2 - 0x8)) = r0;
    0x0004e6be str r1, [r2, -0x4]                                |         *((r2 - 0x4)) = r1;
    0x0004e6c2 bne 0x4e69e                                       |         
                                                                 |     } while (r3 != r7);
    0x0004e6c4 ldr r3, [r3]                                      |     r3 = *(r3);
    0x0004e6c6 str r3, [r2]                                      |     *(r2) = r3;
    0x0004e6c8 ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004e6ca ldrh r3, [r6, 0x1c]                               |     r3 = *((r6 + 0x1c));
    0x0004e6cc ldr r1, [sp, 0x38]                                |     r1 = *(arg_38h);
    0x0004e6ce adds r2, 1                                        |     r2++;
    0x0004e6d0 lsls r4, r3, 0x14                                 |     r4 = r3 << 0x14;
    0x0004e6d2 str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004e6d4 mov.w r2, 0                                       |     r2 = 0;
    0x0004e6d8 str r2, [r1, 0x20]                                |     *((r1 + 0x20)) = r2;
                                                                 |     if (r4 < r3) {
    0x0004e6da bmi.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004e6de ldrh r3, [r1, 0x1c]                               |     r3 = *((r1 + 0x1c));
    0x0004e6e0 bic r3, r3, 0x1c00                                |     r3 = BIT_MASK (r3, 0x1c00);
    0x0004e6e4 orr r3, r3, 0x1000                                |     r3 |= 0x1000;
    0x0004e6e8 strh r3, [r1, 0x1c]                               |     *((r1 + 0x1c)) = r3;
    0x0004e6ea b.w 0x4d26a                                       |     goto label_2;
    0x0004e6ee ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004e6f0 movw r6, 0x2460                                   |     r6 = 0x2460;
    0x0004e6f4 ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0004e6f6 movs r5, 0                                        |     r5 = 0;
    0x0004e6f8 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x0004e6fa add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004e6fe add.w r8, r1, r3, lsl 3                           |     r8 = r1 + (r3 << 3);
    0x0004e702 ldrd r3, sb, [r2, 8]                              |     __asm ("ldrd r3, sb, [r2, 8]");
    0x0004e706 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004e70a add.w r4, r1, r3, lsl 3                           |     r4 = r1 + (r3 << 3);
    0x0004e70e ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0004e710 tst r6, r3                                        |     
                                                                 |     if ((r6 & r3) != 0) {
    0x0004e712 bne 0x4e778                                       |         goto label_388;
                                                                 |     }
                                                                 | label_17:
    0x0004e714 mov r3, r8                                        |     r3 = r8;
    0x0004e716 mov r2, r4                                        |     r2 = r4;
    0x0004e718 add.w lr, r8, 0x20                                |     lr = r8 + 0x20;
                                                                 |     do {
    0x0004e71c ldr.w ip, [r3]                                    |         ip = *(r3);
    0x0004e720 adds r3, 0x10                                     |         r3 += 0x10;
    0x0004e722 ldr r7, [r3, -0xc]                                |         r7 = *((r3 - 0xc));
    0x0004e726 adds r2, 0x10                                     |         r2 += 0x10;
    0x0004e728 ldr r0, [r3, -0x8]                                |         r0 = *((r3 - 0x8));
    0x0004e72c ldr r1, [r3, -0x4]                                |         r1 = *((r3 - 0x4));
    0x0004e730 cmp r3, lr                                        |         
    0x0004e732 str ip, [r2, -0x10]                               |         *((r2 - 0x10)) = ip;
    0x0004e736 str r7, [r2, -0xc]                                |         *((r2 - 0xc)) = r7;
    0x0004e73a str r0, [r2, -0x8]                                |         *((r2 - 0x8)) = r0;
    0x0004e73e str r1, [r2, -0x4]                                |         *((r2 - 0x4)) = r1;
    0x0004e742 bne 0x4e71c                                       |         
                                                                 |     } while (r3 != lr);
    0x0004e744 ldr r3, [r3]                                      |     r3 = *(r3);
    0x0004e746 str r3, [r2]                                      |     *(r2) = r3;
    0x0004e748 ldrh.w r3, [r8, 0x1c]                             |     r3 = *((r8 + 0x1c));
    0x0004e74c str r5, [r4, 0x20]                                |     *((r4 + 0x20)) = r5;
    0x0004e74e tst.w r3, 0x800                                   |     
    0x0004e752 ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
                                                                 |     if ((r3 & 0x800) == 0) {
    0x0004e754 beq.w 0x4d4d6                                     |         goto label_15;
                                                                 |     }
    0x0004e758 lsls r7, r3, 0x13                                 |     r7 = r3 << 0x13;
                                                                 |     if (r7 < r3) {
    0x0004e75a bmi.w 0x4d4e0                                     |         goto label_16;
                                                                 |     }
                                                                 | label_298:
    0x0004e75e cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x0004e762 beq.w 0x50b00                                     |         goto label_389;
                                                                 |     }
    0x0004e766 ldrh.w r3, [r4, 0x44]                             |     r3 = *((r4 + 0x44));
    0x0004e76a adds r4, 0x28                                     |     r4 += 0x28;
    0x0004e76c add.w r8, r8, 0x28                                |     r8 += 0x28;
    0x0004e770 add.w sb, sb, -1                                  |     sb += -1;
    0x0004e774 tst r6, r3                                        |     
                                                                 |     if ((r6 & r3) == 0) {
    0x0004e776 beq 0x4e714                                       |         goto label_17;
                                                                 |     }
                                                                 | label_388:
    0x0004e778 mov r0, r4                                        |     r0 = r4;
    0x0004e77a bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x0004e77e b 0x4e714                                         |     goto label_17;
    0x0004e780 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004e782 mov.w sl, 0x80                                    |     sl = 0x80;
    0x0004e786 ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0004e788 ldr r3, [r2, 8]                                   |     r3 = *((r2 + 8));
    0x0004e78a ldr r4, [r2, 4]                                   |     r4 = *((r2 + 4));
    0x0004e78c ldr r2, [r2, 0xc]                                 |     r2 = *((r2 + 0xc));
    0x0004e78e add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004e792 add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0004e794 lsls r4, r0, 0x12                                 |     r4 = r0 << 0x12;
    0x0004e796 mov r8, r2                                        |     r8 = r2;
    0x0004e798 add.w r3, r1, r3, lsl 3                           |     r3 = r1 + (r3 << 3);
    0x0004e79c str r2, [sp, 0x20]                                |     *(arg_20h) = r2;
    0x0004e79e add.w r4, r1, r4, lsl 3                           |     r4 = r1 + (r4 << 3);
    0x0004e7a2 mov sb, r3                                        |     sb = r3;
    0x0004e7a4 str r3, [sp, 0x28]                                |     *(arg_28h) = r3;
                                                                 | label_18:
    0x0004e7a6 ldrh.w r3, [sb, 0x1c]                             |     r3 = *((sb + 0x1c));
    0x0004e7aa movw r2, 0x2460                                   |     r2 = 0x2460;
    0x0004e7ae tst r2, r3                                        |     
                                                                 |     if ((r2 & r3) != 0) {
    0x0004e7b0 bne.w 0x505e8                                     |         goto label_390;
                                                                 |     }
                                                                 | label_35:
    0x0004e7b4 ldr.w ip, [sb, 0x24]                              |     ip = *((sb + 0x24));
    0x0004e7b8 mov r3, r4                                        |     r3 = r4;
    0x0004e7ba mov r2, sb                                        |     r2 = sb;
    0x0004e7bc add.w r0, r4, 0x20                                |     r0 = r4 + 0x20;
                                                                 |     do {
    0x0004e7c0 ldr r7, [r3]                                      |         r7 = *(r3);
    0x0004e7c2 adds r3, 0x10                                     |         r3 += 0x10;
    0x0004e7c4 ldr r6, [r3, -0xc]                                |         r6 = *((r3 - 0xc));
    0x0004e7c8 adds r2, 0x10                                     |         r2 += 0x10;
    0x0004e7ca ldr r5, [r3, -0x8]                                |         r5 = *((r3 - 0x8));
    0x0004e7ce ldr r1, [r3, -0x4]                                |         r1 = *((r3 - 0x4));
    0x0004e7d2 cmp r3, r0                                        |         
    0x0004e7d4 str r7, [r2, -0x10]                               |         *((r2 - 0x10)) = r7;
    0x0004e7d8 str r6, [r2, -0xc]                                |         *((r2 - 0xc)) = r6;
    0x0004e7dc str r5, [r2, -0x8]                                |         *((r2 - 0x8)) = r5;
    0x0004e7e0 str r1, [r2, -0x4]                                |         *((r2 - 0x4)) = r1;
    0x0004e7e4 bne 0x4e7c0                                       |         
                                                                 |     } while (r3 != r0);
    0x0004e7e6 ldr r1, [r3]                                      |     r1 = *(r3);
    0x0004e7e8 subs.w r8, r8, 1                                  |     r8--;
    0x0004e7ec ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004e7ee add.w sb, sb, 0x28                                |     sb += 0x28;
    0x0004e7f2 add.w r4, r4, 0x28                                |     r4 += 0x28;
    0x0004e7f6 str r1, [r2]                                      |     *(r2) = r1;
    0x0004e7f8 str r3, [r2, 4]                                   |     *((r2 + 4)) = r3;
    0x0004e7fa mov.w r3, 0                                       |     r3 = 0;
    0x0004e7fe str ip, [r4, -0x4]                                |     *((r4 - 0x4)) = ip;
    0x0004e802 strh sl, [r4, -0xc]                               |     *((r4 - 0xc)) = sl;
    0x0004e806 str r3, [r4, -0x8]                                |     *((r4 - 0x8)) = r3;
                                                                 |     if (r8 != r8) {
    0x0004e80a bne 0x4e7a6                                       |         goto label_18;
                                                                 |     }
    0x0004e80c ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e80e ldr r2, [sp, 0x28]                                |     r2 = *(arg_28h);
    0x0004e810 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004e814 add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0004e818 str r3, [sp, 0x38]                                |     *(arg_38h) = r3;
    0x0004e81a ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004e81c adds r3, 1                                        |     r3++;
    0x0004e81e str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e820 b.w 0x4d26a                                       |     goto label_2;
    0x0004e824 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e826 ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x0004e828 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004e82a ldr r2, [r2, 0x3c]                                |     r2 = *((r2 + 0x3c));
    0x0004e82c add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004e830 lsls r3, r3, 3                                    |     r3 <<= 3;
    0x0004e832 subs r3, 0x28                                     |     r3 -= 0x28;
    0x0004e834 adds r7, r2, r3                                   |     r7 = r2 + r3;
    0x0004e836 ldrh r1, [r7, 0x1c]                               |     r1 = *((r7 + 0x1c));
    0x0004e838 tst.w r1, 0x12                                    |     
                                                                 |     if ((r1 & 0x12) != 0) {
    0x0004e83c bne.w 0x51fa4                                     |         goto label_391;
                                                                 |     }
                                                                 | label_121:
    0x0004e840 ldr r3, [sp, 0x38]                                |     r3 = *(arg_38h);
    0x0004e842 movw r2, 0x2460                                   |     r2 = 0x2460;
    0x0004e846 ldrh r3, [r3, 0x1c]                               |     r3 = *((r3 + 0x1c));
    0x0004e848 tst r2, r3                                        |     
                                                                 |     if ((r2 & r3) != 0) {
    0x0004e84a bne.w 0x51f9a                                     |         goto label_392;
                                                                 |     }
                                                                 | label_120:
    0x0004e84e ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x0004e850 mov r3, r7                                        |     r3 = r7;
    0x0004e852 add.w r6, r7, 0x20                                |     r6 = r7 + 0x20;
                                                                 |     do {
    0x0004e856 ldr r5, [r3]                                      |         r5 = *(r3);
    0x0004e858 adds r3, 0x10                                     |         r3 += 0x10;
    0x0004e85a ldr r4, [r3, -0xc]                                |         r4 = *((r3 - 0xc));
    0x0004e85e adds r2, 0x10                                     |         r2 += 0x10;
    0x0004e860 ldr r0, [r3, -0x8]                                |         r0 = *((r3 - 0x8));
    0x0004e864 ldr r1, [r3, -0x4]                                |         r1 = *((r3 - 0x4));
    0x0004e868 cmp r3, r6                                        |         
    0x0004e86a str r5, [r2, -0x10]                               |         *((r2 - 0x10)) = r5;
    0x0004e86e str r4, [r2, -0xc]                                |         *((r2 - 0xc)) = r4;
    0x0004e872 str r0, [r2, -0x8]                                |         *((r2 - 0x8)) = r0;
    0x0004e876 str r1, [r2, -0x4]                                |         *((r2 - 0x4)) = r1;
    0x0004e87a bne 0x4e856                                       |         
                                                                 |     } while (r3 != r6);
    0x0004e87c ldr r3, [r3]                                      |     r3 = *(r3);
    0x0004e87e str r3, [r2]                                      |     *(r2) = r3;
    0x0004e880 ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004e882 ldrh r3, [r7, 0x1c]                               |     r3 = *((r7 + 0x1c));
    0x0004e884 ldr r1, [sp, 0x38]                                |     r1 = *(arg_38h);
    0x0004e886 adds r2, 1                                        |     r2++;
    0x0004e888 lsls r3, r3, 0x14                                 |     r3 <<= 0x14;
    0x0004e88a str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004e88c mov.w r2, 0                                       |     r2 = 0;
    0x0004e890 str r2, [r1, 0x20]                                |     *((r1 + 0x20)) = r2;
                                                                 |     if (r3 < r3) {
    0x0004e892 bmi.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004e896 ldrh r3, [r1, 0x1c]                               |     r3 = *((r1 + 0x1c));
    0x0004e898 bic r3, r3, 0x1c00                                |     r3 = BIT_MASK (r3, 0x1c00);
    0x0004e89c orr r3, r3, 0x800                                 |     r3 |= 0x800;
    0x0004e8a0 strh r3, [r1, 0x1c]                               |     *((r1 + 0x1c)) = r3;
    0x0004e8a2 b.w 0x4d26a                                       |     goto label_2;
    0x0004e8a6 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004e8a8 ldr r4, [sp, 0x38]                                |     r4 = *(arg_38h);
    0x0004e8aa adds r3, 1                                        |     r3++;
    0x0004e8ac str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e8ae mov r0, r4                                        |     r0 = r4;
    0x0004e8b0 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e8b2 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0004e8b4 ldr r1, [r3, 0x10]                                |     r1 = *((r3 + 0x10));
    0x0004e8b6 movs r3, 0                                        |     r3 = 0;
    0x0004e8b8 str r3, [sp]                                      |     *(sp) = r3;
    0x0004e8ba bl 0x17978                                        |     fcn_00017978 (r0, r1, r2, r3, r4);
    0x0004e8be ldr r2, [sp, 0x70]                                |     r2 = *(arg_70h);
    0x0004e8c0 strb r2, [r4, 0x1e]                               |     *((r4 + 0x1e)) = r2;
    0x0004e8c2 b.w 0x4d26a                                       |     goto label_2;
    0x0004e8c6 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e8c8 ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004e8ca ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004e8cc adds r2, 1                                        |     r2++;
    0x0004e8ce str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004e8d0 ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004e8d2 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004e8d6 add.w r2, r2, r3, lsl 3                           |     r2 += (r3 << 3);
    0x0004e8da ldrh r3, [r2, 0x1c]                               |     r3 = *((r2 + 0x1c));
    0x0004e8dc str r2, [sp, 0x38]                                |     *(arg_38h) = r2;
    0x0004e8de bic r3, r3, 0x80                                  |     r3 = BIT_MASK (r3, 0x80);
    0x0004e8e2 orr r3, r3, 1                                     |     r3 |= 1;
    0x0004e8e6 strh r3, [r2, 0x1c]                               |     *((r2 + 0x1c)) = r3;
    0x0004e8e8 b.w 0x4d26a                                       |     goto label_2;
    0x0004e8ec ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004e8ee movw r6, 0x101                                    |     r6 = 0x101;
    0x0004e8f2 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004e8f4 ldr r4, [sp, 0x38]                                |     r4 = *(arg_38h);
    0x0004e8f6 adds r3, 1                                        |     r3++;
    0x0004e8f8 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e8fa ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x0004e8fc cmp r3, 0                                         |     
    0x0004e8fe ldrd r2, r3, [r2, 8]                              |     __asm ("ldrd r2, r3, [r2, 8]");
    0x0004e902 it eq                                             |     
                                                                 |     if (r3 != 0) {
    0x0004e904 moveq r6, 1                                       |         r6 = 1;
                                                                 |     }
    0x0004e906 strh r6, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r6;
    0x0004e908 sub.w r8, r3, r2                                  |     r8 = r3 - r2;
    0x0004e90c cmp.w r8, 0                                       |     
                                                                 |     if (r8 <= 0) {
    0x0004e910 ble.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004e914 mov r5, r8                                        |     r5 = r8;
    0x0004e916 movw r7, 0x2460                                   |     r7 = 0x2460;
    0x0004e91a b 0x4e924                                         |     
                                                                 |     while ((r7 & r3) == 0) {
                                                                 | label_19:
    0x0004e91c subs r5, 1                                        |         r5--;
    0x0004e91e strh r6, [r4, 0x1c]                               |         *((r4 + 0x1c)) = r6;
                                                                 |         if (r5 == 1) {
    0x0004e920 beq.w 0x507b6                                     |             goto label_393;
                                                                 |         }
    0x0004e924 ldrh.w r3, [r4, 0x44]                             |         r3 = *((r4 + 0x44));
    0x0004e928 adds r4, 0x28                                     |         r4 += 0x28;
    0x0004e92a tst r7, r3                                        |         
    0x0004e92c beq 0x4e91c                                       |         
                                                                 |     }
    0x0004e92e mov r0, r4                                        |     r0 = r4;
    0x0004e930 bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x0004e934 b 0x4e91c                                         |     goto label_19;
    0x0004e936 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e938 movs r6, 0                                        |     r6 = 0;
    0x0004e93a ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
                                                                 | label_31:
    0x0004e93c ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004e93e ldr r1, [sp, 0x38]                                |     r1 = *(arg_38h);
    0x0004e940 ldr r2, [r2, 0x10]                                |     r2 = *((r2 + 0x10));
    0x0004e942 str r3, [r1, 0x18]                                |     *((r1 + 0x18)) = r3;
    0x0004e944 ldr r3, [sp, 0x70]                                |     r3 = *(arg_70h);
    0x0004e946 str r2, [r1, 4]                                   |     *((r1 + 4)) = r2;
    0x0004e948 ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004e94a strb r3, [r1, 0x1e]                               |     *((r1 + 0x1e)) = r3;
    0x0004e94c movw r3, 0xa02                                    |     r3 = 0xa02;
    0x0004e950 strh r3, [r1, 0x1c]                               |     *((r1 + 0x1c)) = r3;
    0x0004e952 adds r2, 1                                        |     r2++;
    0x0004e954 str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004e956 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004e958 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004e95c b.w 0x4d740                                       |     goto label_7;
    0x0004e960 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004e962 ldr r1, [sp, 0x24]                                |     r1 = *((sp + 0x24));
    0x0004e964 adds r3, 1                                        |     r3++;
    0x0004e966 ldr r2, [r1, 0x5c]                                |     r2 = *((r1 + 0x5c));
    0x0004e968 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e96a ldr.w r3, [fp, 0x54]                              |     r3 = *(arg_54h);
    0x0004e96e str.w r2, [fp, 0x50]                              |     __asm ("str.w r2, [arg_50h]");
    0x0004e972 add r3, r2                                        |     r3 += r2;
    0x0004e974 str.w r3, [fp, 0x54]                              |     __asm ("str.w r3, [arg_54h]");
    0x0004e978 movs r3, 0                                        |     r3 = 0;
    0x0004e97a str r3, [r1, 0x5c]                                |     *((r1 + 0x5c)) = r3;
    0x0004e97c b.w 0x4d26a                                       |     goto label_2;
    0x0004e980 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004e982 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0004e984 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004e986 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004e988 ldr.w r4, [r3, r2, lsl 2]                         |     offset_18 = r2 << 2;
                                                                 |     r4 = *((r3 + offset_18));
    0x0004e98c movs r3, 1                                        |     r3 = 1;
    0x0004e98e ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x0004e990 ldr r5, [r4]                                      |     r5 = *(r4);
    0x0004e992 mov r0, r4                                        |     r0 = r4;
    0x0004e994 strh r3, [r2, 0x1c]                               |     *((r2 + 0x1c)) = r3;
    0x0004e996 bl 0x2f33c                                        |     r0 = fcn_0002f33c (r0);
    0x0004e99a mov r6, r0                                        |     r6 = r0;
    0x0004e99c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004e99e bne.w 0x528f6                                     |         goto label_207;
                                                                 |     }
    0x0004e9a2 ldrb r4, [r4, 0x19]                               |     r4 = *((r4 + 0x19));
    0x0004e9a4 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0004e9a6 beq.w 0x52004                                     |         goto label_394;
                                                                 |     }
    0x0004e9aa ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004e9ac adds r3, 1                                        |     r3++;
    0x0004e9ae str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004e9b0 b.w 0x4d26a                                       |     goto label_2;
    0x0004e9b4 ldr r4, [sp, 0x20]                                |     r4 = *(arg_20h);
    0x0004e9b6 movs r3, 0                                        |     r3 = 0;
    0x0004e9b8 str r3, [sp, 0xd8]                                |     *(arg_d8h) = r3;
    0x0004e9ba add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x0004e9bc ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x0004e9c0 ldr r2, [r4, 8]                                   |     r2 = *((r4 + 8));
    0x0004e9c2 ldr r1, [r4, 4]                                   |     r1 = *((r4 + 4));
    0x0004e9c4 add.w r3, r3, r2, lsl 4                           |     r3 += (r2 << 4);
    0x0004e9c8 ldr r0, [r3, 4]                                   |     r0 = *((r3 + 4));
    0x0004e9ca ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
    0x0004e9cc cmp r3, 0                                         |     
    0x0004e9ce ite ne                                            |     
                                                                 |     if (r3 == 0) {
    0x0004e9d0 movne r2, r7                                      |         r2 = r7;
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x0004e9d2 moveq r2, 0                                       |         r2 = 0;
                                                                 |     }
    0x0004e9d4 bl 0x301ec                                        |     fcn_000301ec (r0, r1, r2);
    0x0004e9d8 ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
    0x0004e9da mov r6, r0                                        |     r6 = r0;
    0x0004e9dc cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004e9de beq.w 0x4dbae                                     |         goto label_20;
                                                                 |     }
    0x0004e9e2 ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x0004e9e4 ldr r1, [sp, 0xd8]                                |     r1 = *(arg_d8h);
    0x0004e9e6 ldr r2, [r0, 0x5c]                                |     r2 = *((r0 + 0x5c));
    0x0004e9e8 add r2, r1                                        |     r2 += r1;
    0x0004e9ea str r2, [r0, 0x5c]                                |     *((r0 + 0x5c)) = r2;
                                                                 |     if (r3 <= 0) {
    0x0004e9ec ble.w 0x4dbae                                     |         goto label_20;
                                                                 |     }
    0x0004e9f0 ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004e9f2 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004e9f6 add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0004e9fa ldr r2, [r3, 0x10]                                |     r2 = *((r3 + 0x10));
    0x0004e9fc adds r2, r2, r1                                   |     r2 += r1;
    0x0004e9fe str r2, [r3, 0x10]                                |     *((r3 + 0x10)) = r2;
    0x0004ea00 ldr r2, [r3, 0x14]                                |     r2 = *((r3 + 0x14));
    0x0004ea02 adc.w r2, r2, r1, asr 31                          |     __asm ("adc.w r2, r2, r1, asr 31");
    0x0004ea06 str r2, [r3, 0x14]                                |     *((r3 + 0x14)) = r2;
    0x0004ea08 b.w 0x4dbae                                       |     goto label_20;
    0x0004ea0c ldr.w r3, [fp, 4]                                 |     r3 = *(arg_4h);
    0x0004ea10 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004ea12 beq.w 0x527b2                                     |         goto label_395;
                                                                 |     }
    0x0004ea16 ldr r0, [sp, 0x84]                                |     r0 = *(arg_84h);
    0x0004ea18 movs r1, 0                                        |     r1 = 0;
    0x0004ea1a b 0x4ea24                                         |     
                                                                 |     while (r2 != r0) {
                                                                 | label_21:
    0x0004ea1c ldr r3, [r3, 0x34]                                |         r3 = *((r3 + 0x34));
    0x0004ea1e cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0004ea20 beq.w 0x507c6                                     |             goto label_396;
                                                                 |         }
    0x0004ea24 ldr r2, [r3, 0x28]                                |         r2 = *((r3 + 0x28));
    0x0004ea26 cmp r2, r0                                        |         
    0x0004ea28 bne 0x4ea1c                                       |         
                                                                 |     }
    0x0004ea2a ldrb.w r2, [r3, 0x59]                             |     r2 = *((r3 + 0x59));
    0x0004ea2e lsls r5, r2, 0x1e                                 |     r5 = r2 << 0x1e;
                                                                 |     if (r5 >= r2) {
    0x0004ea30 bpl 0x4ea1c                                       |         goto label_21;
                                                                 |     }
    0x0004ea32 ldrb.w r2, [r3, 0x58]                             |     r2 = *((r3 + 0x58));
    0x0004ea36 ubfx r2, r2, 2, 2                                 |     r2 = (r2 >> 2) & ((1 << 2) - 1);
    0x0004ea3a cmp r2, 1                                         |     
                                                                 |     if (r2 > 1) {
    0x0004ea3c bhi 0x4ea1c                                       |         goto label_21;
                                                                 |     }
    0x0004ea3e ldr r2, [r3, 0x4c]                                |     r2 = *((r3 + 0x4c));
    0x0004ea40 cmp r2, 0                                         |     
    0x0004ea42 it ge                                             |     
                                                                 |     if (r2 < 0) {
    0x0004ea44 addge r1, 1                                       |         r1++;
                                                                 |     }
    0x0004ea46 b 0x4ea1c                                         |     goto label_21;
    0x0004ea48 ldr r1, [sp, 0x20]                                |     r1 = *(arg_20h);
    0x0004ea4a ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x0004ea4c ldr r2, [r1, 4]                                   |     r2 = *((r1 + 4));
    0x0004ea4e ldr r3, [r0, 0x38]                                |     r3 = *((r0 + 0x38));
    0x0004ea50 ldr r6, [r0, 0xc]                                 |     r6 = *((r0 + 0xc));
    0x0004ea52 ldr.w r7, [r3, r2, lsl 2]                         |     offset_19 = r2 << 2;
                                                                 |     r7 = *((r3 + offset_19));
    0x0004ea56 ldr r2, [r1, 0xc]                                 |     r2 = *((r1 + 0xc));
    0x0004ea58 ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004ea5a ldr.w sb, [r7, 0x24]                              |     sb = *((r7 + 0x24));
    0x0004ea5e add.w r2, r2, r2, lsl 2                           |     r2 += (r2 << 2);
    0x0004ea62 ldr.w r4, [sb]                                    |     r4 = *(sb);
    0x0004ea66 add.w r2, r3, r2, lsl 3                           |     r2 = r3 + (r2 << 3);
    0x0004ea6a ldr r3, [r2, 0x38]                                |     r3 = *((r2 + 0x38));
    0x0004ea6c ldr r1, [r2, 0x10]                                |     r1 = *((r2 + 0x10));
    0x0004ea6e ldr.w r8, [r4]                                    |     r8 = *(r4);
    0x0004ea72 cmp r3, 0                                         |     
    0x0004ea74 ittt gt                                           |     
                                                                 |     if (r3 <= 0) {
    0x0004ea76 addgt r5, r6, r3, lsl 2                           |         r5 = r6 + (r3 << 2);
                                                                 |     }
                                                                 |     if (r3 <= 0) {
    0x0004ea7a addgt r2, 0x50                                    |         r2 += 0x50;
                                                                 |     }
                                                                 |     if (r3 > 0) {
    0x0004ea7c mov r0, r6                                        |         r0 = r6;
                                                                 |     }
                                                                 |     if (r3 <= 0) {
    0x0004ea7e ble 0x4ea8c                                       |         goto label_397;
                                                                 |     }
                                                                 |     do {
    0x0004ea80 str r2, [r0], 4                                   |         *(r0) = r2;
                                                                 |         r0 += 4;
    0x0004ea84 cmp r5, r0                                        |         
    0x0004ea86 add.w r2, r2, 0x28                                |         r2 += 0x28;
    0x0004ea8a bne 0x4ea80                                       |         
                                                                 |     } while (r5 != r0);
                                                                 | label_397:
    0x0004ea8c ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x0004ea8e ldr r5, [sp, 0x20]                                |     r5 = *(arg_20h);
    0x0004ea90 ldrb.w r0, [r2, 0x58]                             |     r0 = *((r2 + 0x58));
    0x0004ea94 ldr r2, [r5, 0x10]                                |     r2 = *((r5 + 0x10));
    0x0004ea96 movs r5, 1                                        |     r5 = 1;
    0x0004ea98 str r6, [sp]                                      |     *(sp) = r6;
    0x0004ea9a bfi r0, r5, 2, 2                                  |     value_20 = BIT_MASK (2, 2);
                                                                 |     value_21 = r5 & value_20;
                                                                 |     value_20 = ~value_20;
                                                                 |     r0 &= value_20;
                                                                 |     r0 |= value_21;
    0x0004ea9e ldr r5, [sp, 0x24]                                |     r5 = *((sp + 0x24));
    0x0004eaa0 strb.w r0, [r5, 0x58]                             |     *((r5 + 0x58)) = r0;
    0x0004eaa4 mov r0, sb                                        |     r0 = sb;
    0x0004eaa6 ldr.w r5, [r8, 0x20]                              |     r5 = *((r8 + 0x20));
    0x0004eaaa blx r5                                            |     uint32_t (*r5)(uint32_t) (r0);
    0x0004eaac ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x0004eaae mov r6, r0                                        |     r6 = r0;
    0x0004eab0 ldrb.w r3, [r2, 0x58]                             |     r3 = *((r2 + 0x58));
    0x0004eab4 ldr r5, [r2]                                      |     r5 = *(r2);
    0x0004eab6 ldr r1, [r2, 0x2c]                                |     r1 = *((r2 + 0x2c));
    0x0004eab8 bfc r3, 2, 2                                      |     value_22 = BIT_MASK (2, );
                                                                 |     value_22 = ~value_22;
                                                                 |     r3 &= value_22;
    0x0004eabc strb.w r3, [r2, 0x58]                             |     *((r2 + 0x58)) = r3;
    0x0004eac0 mov r0, r5                                        |     r0 = r5;
    0x0004eac2 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x0004eac6 ldr r1, [r4, 8]                                   |     r1 = *((r4 + 8));
    0x0004eac8 mov r0, r5                                        |     r0 = r5;
    0x0004eaca bl 0xd418                                         |     fcn_0000d418 (r0, r1);
    0x0004eace ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004ead0 str r0, [r3, 0x2c]                                |     *((r3 + 0x2c)) = r0;
    0x0004ead2 ldr r0, [r4, 8]                                   |     r0 = *((r4 + 8));
    0x0004ead4 blx 0x6050                                        |     fcn_00006050 ();
    0x0004ead8 movs r3, 0                                        |     r3 = 0;
    0x0004eada str r3, [r4, 8]                                   |     *((r4 + 8)) = r3;
    0x0004eadc cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x0004eade bne.w 0x50540                                     |         goto label_398;
                                                                 |     }
    0x0004eae2 ldr.w r3, [r8, 0x28]                              |     r3 = *((r8 + 0x28));
    0x0004eae6 mov r0, sb                                        |     r0 = sb;
    0x0004eae8 blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0004eaea cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004eaec beq.w 0x50540                                     |         goto label_398;
                                                                 |     }
    0x0004eaf0 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004eaf2 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0004eaf4 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004eaf6 b.w 0x50546                                       |     goto label_399;
    0x0004eafa ldrb.w r3, [fp, 0x3e]                             |     r3 = *(arg_3eh);
    0x0004eafe ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x0004eb00 add.w sl, r2, 0x2c                                |     sl = r2 + 0x2c;
    0x0004eb02 lsrs r4, r5, 8                                    |     r4 = r5 >> 8;
    0x0004eb04 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004eb06 beq.w 0x52966                                     |         goto label_400;
                                                                 |     }
    0x0004eb0a ldr.w r3, [fp, 0x8c]                              |     r3 = *(arg_8ch);
    0x0004eb0e cmp r3, 1                                         |     
                                                                 |     if (r3 > 1) {
    0x0004eb10 bgt.w 0x514a8                                     |         goto label_401;
                                                                 |     }
    0x0004eb14 ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x0004eb18 ldr.w r0, [fp, 0x18]                              |     r0 = *(arg_18h);
    0x0004eb1c ldr.w r1, [fp, 0xa4]                              |     r1 = *(arg_a4h);
    0x0004eb20 ldr r4, [r3, 4]                                   |     r4 = *((r3 + 4));
    0x0004eb22 movs r3, 0                                        |     r3 = 0;
    0x0004eb24 str.w r3, [fp, 0xa4]                              |     __asm ("str.w r3, [arg_a4h]");
    0x0004eb28 str r1, [sp, 0x34]                                |     *(arg_34h) = r1;
    0x0004eb2a ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x0004eb2c ldrb.w r2, [fp, 0x3f]                             |     r2 = *(arg_3fh);
    0x0004eb30 ldr.w r5, [fp, 0x14]                              |     r5 = *(arg_14h);
    0x0004eb34 ldr r1, [r3]                                      |     r1 = *(r3);
    0x0004eb36 bic r3, r0, 0xa0000                               |     r3 = BIT_MASK (r0, 0xa0000);
    0x0004eb3a orr r3, r3, 0x200000                              |     r3 |= 0x200000;
    0x0004eb3e cmp r2, 1                                         |     
    0x0004eb40 orr r3, r3, 0x2800                                |     r3 |= 0x2800;
    0x0004eb44 str r0, [sp, 0x20]                                |     *(arg_20h) = r0;
    0x0004eb46 str.w r3, [fp, 0x18]                              |     __asm ("str.w r3, [arg_18h]");
    0x0004eb4a ldr.w r3, [fp, 0x50]                              |     r3 = *(arg_50h);
    0x0004eb4e ldrb r7, [r1, 0xf]                                |     r7 = *((r1 + 0xf));
    0x0004eb50 str r3, [sp, 0x28]                                |     *(arg_28h) = r3;
    0x0004eb52 ldr.w r3, [fp, 0x54]                              |     r3 = *(arg_54h);
    0x0004eb56 str r3, [sp, 0x2c]                                |     *(arg_2ch) = r3;
                                                                 |     if (r2 == 1) {
    0x0004eb58 beq.w 0x52976                                     |         goto label_402;
                                                                 |     }
    0x0004eb5c ldr.w r2, [pc, 0x4cc]                             |     
    0x0004eb60 add r2, pc                                        |     r2 = 0x9db90;
                                                                 | label_157:
    0x0004eb62 mov r1, sl                                        |     r1 = sl;
    0x0004eb64 mov r0, fp                                        |     r0 = fp;
    0x0004eb66 bl 0x54c38                                        |     fcn_00054c38 (r0, r1, r2);
    0x0004eb6a ldr.w r3, [fp, 0x14]                              |     r3 = *(arg_14h);
    0x0004eb6e mov r6, r0                                        |     r6 = r0;
    0x0004eb70 cmp r5, r3                                        |     
                                                                 |     if (r5 >= r3) {
    0x0004eb72 bge.w 0x524fe                                     |         goto label_403;
                                                                 |     }
    0x0004eb76 ldr.w r2, [fp, 0x10]                              |     r2 = *(arg_10h);
    0x0004eb7a add.w r3, r3, 0x10000000                          |     r3 += 0x10000000;
    0x0004eb7e subs r3, 1                                        |     r3--;
    0x0004eb80 add.w sb, r2, r3, lsl 4                           |     sb = r2 + (r3 << 4);
    0x0004eb84 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004eb86 bne.w 0x4ed30                                     |         goto label_233;
                                                                 |     }
    0x0004eb8a mov r3, sb                                        |     r3 = sb;
                                                                 | label_143:
    0x0004eb8c ldr r5, [r3, 4]                                   |     r5 = *((r3 + 4));
    0x0004eb8e mov r0, r5                                        |     r0 = r5;
    0x0004eb90 bl 0x33408                                        |     fcn_00033408 (r0);
    0x0004eb94 mov r0, r4                                        |     r0 = r4;
    0x0004eb96 bl 0xd140                                         |     fcn_0000d140 (r0);
    0x0004eb9a ldr r2, [r4, 4]                                   |     r2 = *((r4 + 4));
    0x0004eb9c ldrb r3, [r4, 9]                                  |     r3 = *((r4 + 9));
    0x0004eb9e ldrd r8, r1, [r2, 0x20]                           |     __asm ("ldrd r8, r1, [r2, 0x20]");
    0x0004eba2 str r1, [sp, 0x3c]                                |     *(arg_3ch) = r1;
                                                                 |     if (r3 != 0) {
    0x0004eba4 cbz r3, 0x4ebb2                                   |         
    0x0004eba6 ldr r3, [r4, 0xc]                                 |         r3 = *((r4 + 0xc));
    0x0004eba8 subs r6, r3, 1                                    |         r6 = r3 - 1;
    0x0004ebaa str r6, [r4, 0xc]                                 |         *((r4 + 0xc)) = r6;
    0x0004ebac cmp r6, 0                                         |         
                                                                 |         if (r6 == 0) {
    0x0004ebae beq.w 0x53b90                                     |             goto label_404;
                                                                 |         }
                                                                 |     }
                                                                 | label_252:
    0x0004ebb2 ldr.w r3, [fp, 0x48]                              |     r3 = *(arg_48h);
    0x0004ebb6 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004ebb8 bne.w 0x5353c                                     |         goto label_405;
                                                                 |     }
                                                                 | label_214:
    0x0004ebbc ldr.w r2, [pc, 0x470]                             |     
    0x0004ebc0 mov r1, sl                                        |     r1 = sl;
    0x0004ebc2 mov r0, fp                                        |     r0 = fp;
    0x0004ebc4 add r2, pc                                        |     r2 = 0x9dbf8;
    0x0004ebc6 bl 0x54c38                                        |     r0 = fcn_00054c38 (r0, r1, r2);
    0x0004ebca mov r6, r0                                        |     r6 = r0;
    0x0004ebcc cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004ebce bne.w 0x4ed30                                     |         goto label_233;
                                                                 |     }
    0x0004ebd2 ldr.w r2, [pc, 0x460]                             |     r2 = *(0x0004f034);
    0x0004ebd6 mov r1, sl                                        |     r1 = sl;
    0x0004ebd8 mov r0, fp                                        |     r0 = fp;
    0x0004ebda add r2, pc                                        |     r2 += pc;
    0x0004ebdc bl 0x54c38                                        |     r0 = fcn_00054c38 (r0, r1, r2);
    0x0004ebe0 mov r6, r0                                        |     r6 = r0;
    0x0004ebe2 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004ebe4 bne.w 0x4ed30                                     |         goto label_233;
                                                                 |     }
    0x0004ebe8 movs r1, 2                                        |     r1 = 2;
    0x0004ebea mov r0, r4                                        |     r0 = r4;
    0x0004ebec bl 0x30bcc                                        |     r0 = fcn_00030bcc (r0, r1);
    0x0004ebf0 mov r6, r0                                        |     r6 = r0;
    0x0004ebf2 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004ebf4 bne.w 0x4ed30                                     |         goto label_233;
                                                                 |     }
    0x0004ebf8 ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x0004ebfa ldr r2, [r3]                                      |     r2 = *(r3);
    0x0004ebfc ldr r1, [r3, 0x20]                                |     r1 = *((r3 + 0x20));
    0x0004ebfe movs r3, 0                                        |     r3 = 0;
    0x0004ec00 ldrb r2, [r2, 5]                                  |     r2 = *((r2 + 5));
    0x0004ec02 cmp r2, 5                                         |     
    0x0004ec04 ldr r2, [sp, 0x3c]                                |     r2 = *(arg_3ch);
    0x0004ec06 it eq                                             |     
                                                                 |     if (r2 != 5) {
    0x0004ec08 streq r0, [fp, 0x48]                              |         *(arg_48h) = r0;
                                                                 |     }
    0x0004ec0c mov r0, r5                                        |     r0 = r5;
    0x0004ec0e sub.w r8, r8, r2                                  |     r8 -= r2;
    0x0004ec12 mov r2, r8                                        |     r2 = r8;
    0x0004ec14 bl 0x12250                                        |     r0 = fcn_00012250 (r0, r1, r2, r3);
    0x0004ec18 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004ec1a bne.w 0x5392e                                     |         goto label_406;
                                                                 |     }
    0x0004ec1e cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x0004ec20 beq.w 0x5391a                                     |         goto label_407;
                                                                 |     }
                                                                 | label_232:
    0x0004ec24 ldrb.w r3, [fp, 0x40]                             |     r3 = *(arg_40h);
    0x0004ec28 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004ec2a bne.w 0x5392e                                     |         goto label_406;
                                                                 |     }
    0x0004ec2e ldrsb.w r1, [fp, 0x42]                            |     r1 = *(arg_42h);
    0x0004ec32 cmp r1, 0                                         |     
                                                                 |     if (r1 < 0) {
    0x0004ec34 blt.w 0x53fc0                                     |         goto label_408;
                                                                 |     }
                                                                 | label_280:
    0x0004ec38 mov r0, r5                                        |     r0 = r5;
    0x0004ec3a bl 0x118b4                                        |     fcn_000118b4 (r0, r1);
    0x0004ec3e ldr r2, [pc, 0x3f8]                               |     
    0x0004ec40 mov r1, sl                                        |     r1 = sl;
    0x0004ec42 mov r0, fp                                        |     r0 = fp;
    0x0004ec44 add r2, pc                                        |     r2 = 0x9dc82;
    0x0004ec46 bl 0x54cf8                                        |     r0 = fcn_00054cf8 (r0, r1, r2);
    0x0004ec4a mov r6, r0                                        |     r6 = r0;
    0x0004ec4c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004ec4e bne 0x4ed30                                       |         goto label_233;
                                                                 |     }
    0x0004ec50 ldr r2, [pc, 0x3e8]                               |     
    0x0004ec52 mov r1, sl                                        |     r1 = sl;
    0x0004ec54 mov r0, fp                                        |     r0 = fp;
    0x0004ec56 add r2, pc                                        |     r2 = 0x9dc96;
    0x0004ec58 bl 0x54cf8                                        |     r0 = fcn_00054cf8 (r0, r1, r2);
    0x0004ec5c mov r6, r0                                        |     r6 = r0;
    0x0004ec5e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004ec60 bne 0x4ed30                                       |         goto label_233;
                                                                 |     }
    0x0004ec62 ldr r2, [pc, 0x3dc]                               |     
    0x0004ec64 mov r1, sl                                        |     r1 = sl;
    0x0004ec66 mov r0, fp                                        |     r0 = fp;
    0x0004ec68 add r2, pc                                        |     r2 = 0x9dcae;
    0x0004ec6a bl 0x54cf8                                        |     r0 = fcn_00054cf8 (r0, r1, r2);
    0x0004ec6e mov r6, r0                                        |     r6 = r0;
    0x0004ec70 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004ec72 bne 0x4ed30                                       |         goto label_233;
                                                                 |     }
    0x0004ec74 ldr r2, [pc, 0x3cc]                               |     
    0x0004ec76 mov r1, sl                                        |     r1 = sl;
    0x0004ec78 mov r0, fp                                        |     r0 = fp;
    0x0004ec7a add r2, pc                                        |     r2 = 0x9dcc2;
    0x0004ec7c bl 0x54cf8                                        |     r0 = fcn_00054cf8 (r0, r1, r2);
    0x0004ec80 mov r6, r0                                        |     r6 = r0;
    0x0004ec82 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004ec84 bne 0x4ed30                                       |         goto label_233;
                                                                 |     }
    0x0004ec86 ldr r2, [pc, 0x3c0]                               |     
    0x0004ec88 mov r1, sl                                        |     r1 = sl;
    0x0004ec8a mov r0, fp                                        |     r0 = fp;
    0x0004ec8c add r2, pc                                        |     r2 = 0x9dcda;
    0x0004ec8e bl 0x54cf8                                        |     r0 = fcn_00054cf8 (r0, r1, r2);
    0x0004ec92 mov r6, r0                                        |     r6 = r0;
    0x0004ec94 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004ec96 bne 0x4ed30                                       |         goto label_233;
                                                                 |     }
    0x0004ec98 ldr r2, [pc, 0x3b0]                               |     
    0x0004ec9a mov r1, sl                                        |     r1 = sl;
    0x0004ec9c mov r0, fp                                        |     r0 = fp;
    0x0004ec9e add r2, pc                                        |     r2 = 0x9dcee;
    0x0004eca0 bl 0x54cf8                                        |     r0 = fcn_00054cf8 (r0, r1, r2);
    0x0004eca4 mov r6, r0                                        |     r6 = r0;
    0x0004eca6 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004eca8 bne 0x4ed30                                       |         goto label_233;
                                                                 |     }
    0x0004ecaa ldr r2, [pc, 0x3a4]                               |     
    0x0004ecac mov r1, sl                                        |     r1 = sl;
    0x0004ecae mov r0, fp                                        |     r0 = fp;
    0x0004ecb0 add r2, pc                                        |     r2 = 0x9dd06;
    0x0004ecb2 bl 0x54c38                                        |     r0 = fcn_00054c38 (r0, r1, r2);
    0x0004ecb6 mov r6, r0                                        |     r6 = r0;
    0x0004ecb8 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004ecba bne 0x4ed30                                       |         goto label_233;
                                                                 |     }
    0x0004ecbc ldr.w sl, [pc, 0x394]                             |     sl = *(0x0004f054);
    0x0004ecc0 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x0004ecc2 add sl, pc                                        |     sl += pc;
                                                                 |     do {
    0x0004ecc4 ldrb.w r1, [sl]                                   |         r1 = *(sl);
    0x0004ecc8 mov r2, r7                                        |         r2 = r7;
    0x0004ecca mov r0, r4                                        |         r0 = r4;
    0x0004eccc str r1, [sp, 0x3c]                                |         *(arg_3ch) = r1;
    0x0004ecce bl 0x11954                                        |         fcn_00011954 (r0, r1, r2);
    0x0004ecd2 ldr r3, [r7]                                      |         r3 = *(r7);
    0x0004ecd4 mov r0, r5                                        |         r0 = r5;
    0x0004ecd6 ldrb.w r2, [sl, 1]                                |         r2 = *((sl + 1));
    0x0004ecda ldr r1, [sp, 0x3c]                                |         r1 = *(arg_3ch);
    0x0004ecdc add r2, r3                                        |         r2 += r3;
    0x0004ecde bl 0x2c060                                        |         r0 = fcn_0002c060 (r0, r1, r2);
    0x0004ece2 mov r3, r0                                        |         r3 = r0;
    0x0004ece4 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x0004ece6 bne.w 0x53fe6                                     |             goto label_409;
                                                                 |         }
    0x0004ecea adds r6, 2                                        |         r6 += 2;
    0x0004ecec add.w sl, sl, 2                                   |         sl += 2;
    0x0004ecf0 cmp r6, 0xa                                       |         
    0x0004ecf2 bne 0x4ecc4                                       |         
                                                                 |     } while (r6 != 0xa);
    0x0004ecf4 mov r1, r5                                        |     r1 = r5;
    0x0004ecf6 mov r0, r4                                        |     r0 = r4;
    0x0004ecf8 bl 0x3484c                                        |     r0 = fcn_0003484c (r0, r1);
    0x0004ecfc mov r3, r0                                        |     r3 = r0;
    0x0004ecfe cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004ed00 bne.w 0x53fe6                                     |         goto label_409;
                                                                 |     }
    0x0004ed04 mov r0, r5                                        |     r0 = r5;
    0x0004ed06 bl 0x33408                                        |     r0 = fcn_00033408 (r0);
    0x0004ed0a mov r3, r0                                        |     r3 = r0;
    0x0004ed0c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004ed0e bne.w 0x53fe6                                     |         goto label_409;
                                                                 |     }
    0x0004ed12 mov r0, r5                                        |     r0 = r5;
    0x0004ed14 bl 0x11880                                        |     r0 = fcn_00011880 (r0);
    0x0004ed18 mov r1, r0                                        |     r1 = r0;
    0x0004ed1a mov r0, r4                                        |     r0 = r4;
    0x0004ed1c bl 0x118b4                                        |     fcn_000118b4 (r0, r1);
    0x0004ed20 ldr r3, [r5, 4]                                   |     r3 = *((r5 + 4));
    0x0004ed22 mov r2, r8                                        |     r2 = r8;
    0x0004ed24 mov r0, r4                                        |     r0 = r4;
    0x0004ed26 ldr r1, [r3, 0x20]                                |     r1 = *((r3 + 0x20));
    0x0004ed28 movs r3, 1                                        |     r3 = 1;
    0x0004ed2a bl 0x12250                                        |     r0 = fcn_00012250 (r0, r1, r2, r3);
    0x0004ed2e mov r6, r0                                        |     r6 = r0;
                                                                 | label_233:
    0x0004ed30 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004ed32 mov.w r2, -1                                      |     r2 = -1;
    0x0004ed36 mov r0, r4                                        |     r0 = r4;
    0x0004ed38 mov r1, r2                                        |     r1 = r2;
    0x0004ed3a str.w r3, [fp, 0x18]                              |     __asm ("str.w r3, [arg_18h]");
    0x0004ed3e ldr r3, [sp, 0x28]                                |     r3 = *(arg_28h);
    0x0004ed40 str.w r3, [fp, 0x50]                              |     __asm ("str.w r3, [arg_50h]");
    0x0004ed44 ldr r3, [sp, 0x2c]                                |     r3 = *(arg_2ch);
    0x0004ed46 str.w r3, [fp, 0x54]                              |     __asm ("str.w r3, [arg_54h]");
    0x0004ed4a ldr r3, [sp, 0x34]                                |     r3 = *(arg_34h);
    0x0004ed4c str.w r3, [fp, 0xa4]                              |     __asm ("str.w r3, [arg_a4h]");
    0x0004ed50 movs r3, 1                                        |     r3 = 1;
    0x0004ed52 bl 0x12250                                        |     fcn_00012250 (r0, r1, r2, r3);
    0x0004ed56 movs r3, 1                                        |     r3 = 1;
    0x0004ed58 strb.w r3, [fp, 0x3e]                             |     *(arg_3eh) = r3;
    0x0004ed5c cmp.w sb, 0                                       |     
                                                                 |     if (sb != 0) {
    0x0004ed60 beq 0x4ed74                                       |         
    0x0004ed62 ldr.w r0, [sb, 4]                                 |         r0 = *((sb + 4));
    0x0004ed66 bl 0x2dcf4                                        |         fcn_0002dcf4 (r0);
    0x0004ed6a movs r3, 0                                        |         r3 = 0;
    0x0004ed6c str.w r3, [sb, 4]                                 |         __asm ("str.w r3, [sb, 4]");
    0x0004ed70 str.w r3, [sb, 0xc]                               |         __asm ("str.w r3, [sb, 0xc]");
                                                                 |     }
                                                                 | label_159:
    0x0004ed74 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004ed76 mov r0, fp                                        |     r0 = fp;
    0x0004ed78 adds r3, 1                                        |     r3++;
    0x0004ed7a str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004ed7c bl 0x13968                                        |     fcn_00013968 (r0);
    0x0004ed80 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004ed82 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004ed86 b.w 0x4d740                                       |     goto label_7;
    0x0004ed8a ldr r1, [sp, 0x20]                                |     r1 = *(arg_20h);
    0x0004ed8c ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x0004ed90 ldr r2, [r1, 4]                                   |     r2 = *((r1 + 4));
    0x0004ed92 ldr r5, [r1, 0xc]                                 |     r5 = *((r1 + 0xc));
    0x0004ed94 add.w r3, r3, r2, lsl 4                           |     r3 += (r2 << 4);
    0x0004ed98 ldr.w r8, [r3, 4]                                 |     r8 = *((r3 + 4));
    0x0004ed9c ldr.w r3, [r8, 4]                                 |     r3 = *((r8 + 4));
    0x0004eda0 ldr r4, [r3]                                      |     r4 = *(r3);
    0x0004eda2 ldrb.w sb, [r4, 5]                                |     sb = *((r4 + 5));
    0x0004eda6 ldrb r3, [r4, 0x10]                               |     r3 = *((r4 + 0x10));
    0x0004eda8 cmp.w r5, -1                                      |     
    0x0004edac it eq                                             |     
                                                                 |     if (r5 != -1) {
    0x0004edae moveq r5, sb                                      |         r5 = sb;
                                                                 |     }
    0x0004edb0 cmp r3, 2                                         |     
                                                                 |     if (r3 > 2) {
    0x0004edb2 bhi.w 0x5143a                                     |         goto label_410;
                                                                 |     }
    0x0004edb6 ldr r3, [r4, 0x40]                                |     r3 = *((r4 + 0x40));
    0x0004edb8 ldr r3, [r3]                                      |     r3 = *(r3);
                                                                 |     if (r3 != 0) {
    0x0004edba cbz r3, 0x4edca                                   |         
    0x0004edbc ldrd r2, r3, [r4, 0x48]                           |         __asm ("ldrd r2, r3, [r4, 0x48]");
    0x0004edc0 cmp r2, 1                                         |         
    0x0004edc2 sbcs r3, r3, 0                                    |         __asm ("sbcs r3, r3, 0");
                                                                 |         if (r2 >= 1) {
    0x0004edc6 bge.w 0x5143a                                     |             goto label_410;
                                                                 |         }
                                                                 |     }
                                                                 | label_72:
    0x0004edca ldrb r3, [r4, 0xf]                                |     r3 = *((r4 + 0xf));
    0x0004edcc cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004edce beq.w 0x50fdc                                     |         goto label_411;
                                                                 |     }
    0x0004edd2 cmp r5, 5                                         |     
                                                                 |     if (r5 == 5) {
    0x0004edd4 beq.w 0x51fbe                                     |         goto label_412;
                                                                 |     }
                                                                 | label_57:
    0x0004edd8 cmp r5, sb                                        |     
                                                                 |     if (r5 == sb) {
    0x0004edda beq.w 0x51fbe                                     |         goto label_412;
                                                                 |     }
    0x0004edde cmp.w sb, 5                                       |     
    0x0004ede2 itt ne                                            |     
                                                                 |     if (sb == 5) {
    0x0004ede4 movne sb, r5                                      |         sb = r5;
                                                                 |     }
                                                                 |     if (sb == 5) {
    0x0004ede6 movne r6, 0                                       |         r6 = 0;
                                                                 |     }
                                                                 |     if (sb == 5) {
    0x0004ede8 beq.w 0x52768                                     |         goto label_413;
                                                                 |     }
                                                                 | label_58:
    0x0004edec mov r1, sb                                        |     r1 = sb;
    0x0004edee mov r0, r4                                        |     r0 = r4;
    0x0004edf0 bl 0x2b6fc                                        |     fcn_0002b6fc (r0, r1);
    0x0004edf4 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004edf6 cmp r0, 6                                         |     
    0x0004edf8 ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0004edfa ldr r2, [r3, 8]                                   |     r2 = *((r3 + 8));
    0x0004edfc add.w r2, r2, r2, lsl 2                           |     r2 += (r2 << 2);
    0x0004ee00 add.w r2, r1, r2, lsl 3                           |     r2 = r1 + (r2 << 3);
    0x0004ee04 mov r1, r2                                        |     r1 = r2;
    0x0004ee06 str r2, [sp, 0x38]                                |     *(arg_38h) = r2;
    0x0004ee08 movw r2, 0xa02                                    |     r2 = 0xa02;
    0x0004ee0c strh r2, [r1, 0x1c]                               |     *((r1 + 0x1c)) = r2;
                                                                 |     if (r0 == 6) {
    0x0004ee0e beq.w 0x5312c                                     |         goto label_414;
                                                                 |     }
    0x0004ee12 ldr r2, [pc, 0x244]                               |     
    0x0004ee14 add r2, pc                                        |     r2 = 0x9de72;
    0x0004ee16 add.w r3, r2, r0, lsl 2                           |     r3 = r2 + (r0 << 2);
    0x0004ee1a ldr.w r1, [r3, 0x5c8]                             |     r1 = *((r3 + 0x5c8));
    0x0004ee1e ldr r3, [sp, 0x38]                                |     r3 = *(arg_38h);
    0x0004ee20 str r1, [r3, 4]                                   |     *((r3 + 4)) = r1;
                                                                 |     if (r1 == 0) {
    0x0004ee22 cbz r1, 0x4ee3c                                   |         goto label_191;
                                                                 |     }
    0x0004ee24 ldrb r3, [r1]                                     |     r3 = *(r1);
    0x0004ee26 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004ee28 beq.w 0x53126                                     |         goto label_415;
                                                                 |     }
    0x0004ee2c mov r3, r1                                        |     r3 = r1;
                                                                 |     do {
    0x0004ee2e ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x0004ee32 cmp r2, 0                                         |         
    0x0004ee34 bne 0x4ee2e                                       |         
                                                                 |     } while (r2 != 0);
    0x0004ee36 subs r3, r3, r1                                   |     r3 -= r1;
    0x0004ee38 bic r1, r3, 0xc0000000                            |     r1 = BIT_MASK (r3, 0xc0000000);
                                                                 | label_191:
    0x0004ee3c ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004ee3e ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x0004ee40 adds r3, 1                                        |     r3++;
    0x0004ee42 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004ee44 movs r3, 1                                        |     r3 = 1;
    0x0004ee46 strb r3, [r2, 0x1e]                               |     *((r2 + 0x1e)) = r3;
    0x0004ee48 ldr r3, [sp, 0x70]                                |     r3 = *(arg_70h);
    0x0004ee4a str r1, [r2, 0x18]                                |     *((r2 + 0x18)) = r1;
    0x0004ee4c cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x0004ee4e beq.w 0x4d73a                                     |         goto label_12;
                                                                 |     }
    0x0004ee52 mov r1, r3                                        |     r1 = r3;
    0x0004ee54 mov r0, r2                                        |     r0 = r2;
    0x0004ee56 bl 0x17460                                        |     fcn_00017460 (r0, r1);
    0x0004ee5a cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004ee5c beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004ee60 b.w 0x4d740                                       |     goto label_7;
    0x0004ee64 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004ee66 add r5, sp, 0x124                                 |     r5 += arg_124h;
    0x0004ee68 mov.w r0, -1                                      |     r0 = -1;
    0x0004ee6c movs r4, 0                                        |     r4 = 0;
    0x0004ee6e str r4, [sp, 0x120]                               |     *(arg_120h) = r4;
    0x0004ee70 mov sl, r5                                        |     sl = r5;
    0x0004ee72 ldrd r1, r2, [r3, 4]                              |     __asm ("ldrd r1, r2, [r3, 4]");
    0x0004ee76 add r3, sp, 0x128                                 |     r3 += arg_128h;
    0x0004ee78 str r3, [sp]                                      |     *(sp) = r3;
    0x0004ee7a mov r3, r5                                        |     r3 = r5;
    0x0004ee7c strd r0, r0, [sp, 0x124]                          |     __asm ("strd r0, r0, aav.0x000000ff");
    0x0004ee80 mov r0, fp                                        |     r0 = fp;
    0x0004ee82 bl 0x2a468                                        |     r0 = fcn_0002a468 (r0, r1, r2, r3, r4);
    0x0004ee86 cmp r0, 5                                         |     
    0x0004ee88 mov r6, r0                                        |     r6 = r0;
    0x0004ee8a itttt eq                                          |     
                                                                 |     if (r0 != 5) {
    0x0004ee8c moveq r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r0 != 5) {
    0x0004ee8e moveq r6, r4                                      |         r6 = r4;
                                                                 |     }
                                                                 |     if (r0 != 5) {
    0x0004ee90 moveq r2, r3                                      |         r2 = r3;
                                                                 |     }
                                                                 |     if (r0 != 5) {
    0x0004ee92 streq r3, [sp, 0x120]                             |         *(arg_120h) = r3;
                                                                 |     }
    0x0004ee94 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004ee96 movw r8, 0x2460                                   |     r8 = 0x2460;
    0x0004ee9a it ne                                             |     
                                                                 |     if (r0 == 5) {
    0x0004ee9c ldrne r2, [sp, 0x120]                             |         r2 = *(arg_120h);
                                                                 |     }
    0x0004ee9e add.w sb, sp, 0x12c                               |     sb += arg_12ch;
    0x0004eea2 str r6, [sp, 0x20]                                |     *(arg_20h) = r6;
    0x0004eea4 movs r7, 0                                        |     r7 = 0;
    0x0004eea6 ldr r4, [r3, 0xc]                                 |     r4 = *((r3 + 0xc));
    0x0004eea8 mov r6, sb                                        |     r6 = sb;
    0x0004eeaa ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004eeac mov r5, r2                                        |     r5 = r2;
    0x0004eeae asr.w sb, r5, 0x1f                                |     sb = r5 >> 0x1f;
    0x0004eeb2 add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0004eeb6 add.w r4, r3, r4, lsl 3                           |     r4 = r3 + (r4 << 3);
    0x0004eeba ldrh r2, [r4, 0x1c]                               |     r2 = *((r4 + 0x1c));
    0x0004eebc tst.w r8, r2                                      |     
                                                                 |     if ((r8 & r2) != 0) {
    0x0004eec0 bne 0x4eef4                                       |         goto label_416;
                                                                 |     }
                                                                 |     do {
                                                                 | label_22:
    0x0004eec2 ldr r1, [r4, 0x24]                                |         r1 = *((r4 + 0x24));
                                                                 |         if (r1 != 0) {
    0x0004eec4 cbz r1, 0x4eece                                   |             
    0x0004eec6 ldr r0, [r4]                                      |             r0 = *(r4);
    0x0004eec8 bl 0xe12c                                         |             fcn_0000e12c (r0, r1);
    0x0004eecc str r7, [r4, 0x24]                                |             *((r4 + 0x24)) = r7;
                                                                 |         }
    0x0004eece cmp r6, sl                                        |         
    0x0004eed0 mov.w r3, 4                                       |         r3 = 4;
    0x0004eed4 strd r5, sb, [r4, 0x10]                           |         __asm ("strd r5, sb, [r4, 0x10]");
    0x0004eed8 str r7, [r4, 4]                                   |         *((r4 + 4)) = r7;
    0x0004eeda strh r3, [r4, 0x1c]                               |         *((r4 + 0x1c)) = r3;
                                                                 |         if (r6 == sl) {
    0x0004eedc beq.w 0x5065a                                     |             goto label_417;
                                                                 |         }
    0x0004eee0 ldrh.w r2, [r4, 0x44]                             |         r2 = *((r4 + 0x44));
    0x0004eee4 adds r4, 0x28                                     |         r4 += 0x28;
    0x0004eee6 ldr r5, [sl], 4                                   |         r5 = *(sl);
                                                                 |         sl += 4;
    0x0004eeea tst.w r8, r2                                      |         
    0x0004eeee asr.w sb, r5, 0x1f                                |         sb = r5 >> 0x1f;
    0x0004eef2 beq 0x4eec2                                       |         
                                                                 |     } while ((r8 & r2) == 0);
                                                                 | label_416:
    0x0004eef4 mov r0, r4                                        |     r0 = r4;
    0x0004eef6 bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x0004eefa b 0x4eec2                                         |     goto label_22;
    0x0004eefc ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004eefe ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x0004ef00 ldrd r1, r2, [r3, 4]                              |     __asm ("ldrd r1, r2, [r3, 4]");
    0x0004ef04 movs r3, 1                                        |     r3 = 1;
    0x0004ef06 str r3, [sp]                                      |     *(sp) = r3;
    0x0004ef08 mov.w r3, -1                                      |     r3 = -1;
    0x0004ef0c bl 0x2e430                                        |     r0 = fcn_0002e430 (r0, r1, r2, r3, r4, r5);
    0x0004ef10 mov r5, r0                                        |     r5 = r0;
    0x0004ef12 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004ef14 beq.w 0x4d4ec                                     |         goto label_6;
                                                                 |     }
    0x0004ef18 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004ef1a movs r1, 0x38                                     |     r1 = 0x38;
    0x0004ef1c ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x0004ef1e str r3, [r0, 8]                                   |     *((r0 + 8)) = r3;
    0x0004ef20 mov r0, fp                                        |     r0 = fp;
    0x0004ef22 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004ef24 add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x0004ef28 bl 0xdb58                                         |     r0 = fcn_0000db58 (r0, r1);
    0x0004ef2c mov r4, r0                                        |     r4 = r0;
    0x0004ef2e str r0, [r5, 0x40]                                |     *((r5 + 0x40)) = r0;
    0x0004ef30 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004ef32 beq.w 0x50b12                                     |         goto label_418;
                                                                 |     }
    0x0004ef36 ldr r5, [r5, 8]                                   |     r5 = *((r5 + 8));
    0x0004ef38 ldrh r3, [r5, 6]                                  |     r3 = *((r5 + 6));
    0x0004ef3a ldr r0, [r5, 0xc]                                 |     r0 = *((r5 + 0xc));
    0x0004ef3c adds r3, 1                                        |     r3++;
    0x0004ef3e add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004ef42 lsls r1, r3, 3                                    |     r1 = r3 << 3;
    0x0004ef44 adds r1, 0x18                                     |     r1 += 0x18;
    0x0004ef46 bl 0xd3a0                                         |     r0 = fcn_0000d3a0 (r0, r1);
    0x0004ef4a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004ef4c beq.w 0x5370c                                     |         goto label_419;
                                                                 |     }
    0x0004ef50 ldrh r3, [r5, 6]                                  |     r3 = *((r5 + 6));
    0x0004ef52 str r5, [r0]                                      |     *(r0) = r5;
    0x0004ef54 str.w r8, [sp, 0x1c]                              |     __asm ("str.w r8, [arg_1ch]");
    0x0004ef58 adds r3, 1                                        |     r3++;
    0x0004ef5a strh r3, [r0, 4]                                  |     *((r0 + 4)) = r3;
    0x0004ef5c add.w r3, r0, 0x18                                |     r3 = r0 + 0x18;
    0x0004ef60 str r3, [r0, 8]                                   |     *((r0 + 8)) = r3;
    0x0004ef62 str r0, [r4, 0x34]                                |     *((r4 + 0x34)) = r0;
    0x0004ef64 ldrb.w r3, [fp, 0x3f]                             |     r3 = *(arg_3fh);
    0x0004ef68 cmp r3, 1                                         |     
                                                                 |     if (r3 != 1) {
    0x0004ef6a bne.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004ef6e ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x0004ef72 ldr r1, [r3, 4]                                   |     r1 = *((r3 + 4));
    0x0004ef74 ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
    0x0004ef76 ldr r3, [r1, 4]                                   |     r3 = *((r1 + 4));
    0x0004ef78 ldr r2, [r2, 0x50]                                |     r2 = *((r2 + 0x50));
    0x0004ef7a ldr r3, [r3, 0x20]                                |     r3 = *((r3 + 0x20));
    0x0004ef7c cmp r2, 0xa                                       |     
    0x0004ef7e it lt                                             |     
                                                                 |     if (r2 >= 0xa) {
    0x0004ef80 movlt r2, 0xa                                     |         r2 = 0xa;
                                                                 |     }
    0x0004ef82 mul r2, r3, r2                                    |     r2 = r3 * r2;
    0x0004ef86 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004ef8a lsls r3, r3, 1                                    |     r3 <<= 1;
    0x0004ef8c str r2, [r4, 0x20]                                |     *((r4 + 0x20)) = r2;
    0x0004ef8e str r3, [r4, 0x1c]                                |     *((r4 + 0x1c)) = r3;
    0x0004ef90 b.w 0x4d26a                                       |     goto label_2;
    0x0004ef94 ldr r1, [sp, 0x20]                                |     r1 = *(arg_20h);
    0x0004ef96 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004ef98 ldr r2, [r1, 4]                                   |     r2 = *((r1 + 4));
    0x0004ef9a ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004ef9c ldr.w r3, [r3, r2, lsl 2]                         |     offset_23 = r2 << 2;
                                                                 |     r3 = *((r3 + offset_23));
                                                                 |     if (r3 != 0) {
    0x0004efa0 cbz r3, 0x4efac                                   |         
    0x0004efa2 ldr r2, [r3, 0x20]                                |         r2 = *((r3 + 0x20));
    0x0004efa4 ldr r3, [r1, 8]                                   |         r3 = *((r1 + 8));
    0x0004efa6 cmp r2, r3                                        |         
                                                                 |         if (r2 == r3) {
    0x0004efa8 beq.w 0x5135e                                     |             goto label_420;
                                                                 |         }
                                                                 |     }
    0x0004efac ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004efae ldrb.w r3, [r3, 0x58]                             |     r3 = *((r3 + 0x58));
    0x0004efb2 ands r3, r3, 0x20                                 |     r3 &= 0x20;
                                                                 |     if (r3 != r3) {
    0x0004efb6 bne.w 0x5052a                                     |         goto label_327;
                                                                 |     }
    0x0004efba ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004efbc mov r5, r3                                        |     r5 = r3;
    0x0004efbe ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x0004efc2 ldr r4, [r2, 0xc]                                 |     r4 = *((r2 + 0xc));
    0x0004efc4 ldr r6, [r2, 8]                                   |     r6 = *((r2 + 8));
    0x0004efc6 add.w r3, r3, r4, lsl 4                           |     r3 += (r4 << 4);
    0x0004efca ldr r7, [r3, 4]                                   |     r7 = *((r3 + 4));
    0x0004efcc b.w 0x4da86                                       |     goto label_23;
    0x0004efd0 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004efd2 ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004efd4 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004efd6 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004efda add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0004efde ldrh r3, [r3, 0x1c]                               |     r3 = *((r3 + 0x1c));
    0x0004efe0 lsls r6, r3, 0x1f                                 |     r6 = r3 << 0x1f;
    0x0004efe2 itete mi                                          |     
                                                                 |     if (r6 >= r3) {
    0x0004efe4 ldrmi r3, [sp, 0x20]                              |         r3 = *(arg_20h);
                                                                 |     }
                                                                 |     if (r6 < r3) {
    0x0004efe6 ldrpl r3, [sp, 0x1c]                              |         r3 = *(arg_1ch);
                                                                 |     }
                                                                 |     if (r6 >= r3) {
    0x0004efe8 ldrmi r3, [r3, 8]                                 |         r3 = *((r3 + 8));
                                                                 |     }
                                                                 |     if (r6 < r3) {
    0x0004efea addpl r3, 1                                       |         r3++;
                                                                 |     }
    0x0004efec str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004efee b.w 0x4d26a                                       |     goto label_2;
    0x0004eff2 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004eff4 ldr r1, [sp, 0x20]                                |     r1 = *(arg_20h);
    0x0004eff6 adds r3, 1                                        |     r3++;
    0x0004eff8 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004effa ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004effc ldr r2, [r1, 4]                                   |     r2 = *((r1 + 4));
    0x0004effe ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004f000 ldr.w r4, [r3, r2, lsl 2]                         |     offset_24 = r2 << 2;
                                                                 |     r4 = *((r3 + offset_24));
    0x0004f004 movs r3, 0                                        |     r3 = 0;
    0x0004f006 strb r3, [r4, 0x19]                               |     *((r4 + 0x19)) = r3;
    0x0004f008 ldr r0, [r1, 8]                                   |     r0 = *((r1 + 8));
    0x0004f00a ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004f00c add.w r0, r0, r0, lsl 2                           |     r0 += (r0 << 2);
    0x0004f010 add.w r0, r3, r0, lsl 3                           |     r0 = r3 + (r0 << 3);
    0x0004f014 bl 0xa1d8                                         |     fcn_0000a1d8 (r0);
    0x0004f018 mov.w r3, 0x100                                   |     r3 = 0x100;
    0x0004f01c strd r0, r1, [r4, 0x30]                           |     __asm ("strd r0, r1, [r4, 0x30]");
    0x0004f020 strh r3, [r4, 0x1a]                               |     *((r4 + 0x1a)) = r3;
    0x0004f022 b.w 0x4d26a                                       |     goto label_2;
    0x0004f05c ldr r7, [sp, 0x20]                                |     r7 = *(arg_20h);
    0x0004f05e ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f060 ldr r2, [r7, 4]                                   |     r2 = *((r7 + 4));
    0x0004f062 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004f064 ldr.w r4, [r3, r2, lsl 2]                         |     offset_25 = r2 << 2;
                                                                 |     r4 = *((r3 + offset_25));
    0x0004f068 mov r0, r4                                        |     r0 = r4;
    0x0004f06a ldrd r8, sb, [r4, 0x38]                           |     __asm ("ldrd r8, sb, [r4, 0x38]");
    0x0004f06e bl 0x2f33c                                        |     r0 = fcn_0002f33c (r0);
    0x0004f072 mov r6, r0                                        |     r6 = r0;
    0x0004f074 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004f076 bne.w 0x528f6                                     |         goto label_207;
                                                                 |     }
    0x0004f07a ldr r0, [r4]                                      |     r0 = *(r4);
    0x0004f07c bl 0x328ac                                        |     fcn_000328ac (r0, r1);
    0x0004f080 movs r3, 0                                        |     r3 = 0;
    0x0004f082 mov r6, r0                                        |     r6 = r0;
    0x0004f084 str r3, [r4, 0x44]                                |     *((r4 + 0x44)) = r3;
    0x0004f086 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004f088 bne.w 0x50e60                                     |         goto label_421;
                                                                 |     }
    0x0004f08c ldr.w r5, [fp, 0xc8]                              |     r5 = *(arg_c8h);
                                                                 |     if (r5 != 0) {
    0x0004f090 cbz r5, 0x4f0b4                                   |         
    0x0004f092 ldr r3, [r7, 0x10]                                |         r3 = *((r7 + 0x10));
                                                                 |         if (r3 == 0) {
    0x0004f094 cbz r3, 0x4f0b4                                   |             goto label_422;
                                                                 |         }
    0x0004f096 ldrb r2, [r4, 0x1c]                               |         r2 = *((r4 + 0x1c));
    0x0004f098 lsls r2, r2, 0x1d                                 |         r2 <<= 0x1d;
                                                                 |         if (r2 >= r2) {
    0x0004f09a bpl 0x4f0b4                                       |             goto label_422;
                                                                 |         }
    0x0004f09c ldrsb.w r2, [r4, 0x18]                            |         r2 = *((r4 + 0x18));
    0x0004f0a0 ldr.w r1, [fp, 0x10]                              |         r1 = *(arg_10h);
    0x0004f0a4 ldr.w r0, [fp, 0xc4]                              |         r0 = *(arg_c4h);
    0x0004f0a8 lsls r2, r2, 4                                    |         r2 <<= 4;
    0x0004f0aa ldr r2, [r1, r2]                                  |         r2 = *((r1 + r2));
    0x0004f0ac movs r1, 9                                        |         r1 = 9;
    0x0004f0ae strd r8, sb, [sp]                                 |         __asm ("strd r8, sb, [sp]");
    0x0004f0b2 blx r5                                            |         uint32_t (*r5)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
                                                                 |     }
                                                                 | label_422:
    0x0004f0b4 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f0b6 ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004f0b8 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0004f0ba adds r2, 1                                        |     r2++;
    0x0004f0bc str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004f0be lsls r2, r3, 0x1f                                 |     r2 = r3 << 0x1f;
                                                                 |     if (r2 < r3) {
    0x0004f0c0 bmi.w 0x50e70                                     |         goto label_423;
                                                                 |     }
    0x0004f0c4 b.w 0x4d26a                                       |     goto label_2;
    0x0004f0c8 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f0ca mov r0, fp                                        |     r0 = fp;
    0x0004f0cc ldr r1, [r3, 4]                                   |     r1 = *((r3 + 4));
    0x0004f0ce ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004f0d0 adds r3, 1                                        |     r3++;
    0x0004f0d2 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004f0d4 bl 0x4d0f0                                        |     r0 = fcn_0004d0f0 (r0, r1, r2, r3);
    0x0004f0d8 mov r6, r0                                        |     r6 = r0;
    0x0004f0da cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004f0dc beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004f0e0 b.w 0x4d740                                       |     goto label_7;
    0x0004f0e4 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f0e6 ldr r1, [r3, 4]                                   |     r1 = *((r3 + 4));
    0x0004f0e8 cmp r1, 1                                         |     
                                                                 |     if (r1 == 1) {
    0x0004f0ea beq.w 0x51ec8                                     |         goto label_424;
                                                                 |     }
    0x0004f0ee ldr.w r3, [pc, 0xb40]                             |     r3 = *(0x0004fc30);
    0x0004f0f2 add r3, pc                                        |     r3 += pc;
                                                                 | label_115:
    0x0004f0f4 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004f0f6 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x0004f0f8 ldr.w r4, [fp, 0x10]                              |     r4 = *(arg_10h);
    0x0004f0fc ldr r0, [r2, 0x10]                                |     r0 = *((r2 + 0x10));
    0x0004f0fe lsls r2, r1, 4                                    |     r2 = r1 << 4;
    0x0004f100 ldr r2, [r4, r2]                                  |     r2 = *((r4 + r2));
    0x0004f102 str r0, [sp]                                      |     *(sp) = r0;
    0x0004f104 ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x0004f106 str r1, [r7, 8]                                   |     *((r7 + 8)) = r1;
    0x0004f108 ldr.w r1, [pc, 0xb28]                             |     
    0x0004f10c add.w r4, r0, 0x2c                                |     r4 = r0 + 0x2c;
    0x0004f110 str.w fp, [r7]                                    |     __asm ("str.w fp, [r7]");
    0x0004f114 mov r0, fp                                        |     r0 = fp;
    0x0004f116 str r4, [r7, 4]                                   |     *((r7 + 4)) = r4;
    0x0004f118 add r1, pc                                        |     r1 = 0x9ed50;
    0x0004f11a bl 0x1babc                                        |     r0 = fcn_0001babc (r0);
    0x0004f11e mov r8, r0                                        |     r8 = r0;
    0x0004f120 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004f122 beq.w 0x524ce                                     |         goto label_425;
                                                                 |     }
    0x0004f126 ldr.w r2, [pc, 0xb10]                             |     r2 = *(0x0004fc38);
    0x0004f12a movs r5, 0                                        |     r5 = 0;
    0x0004f12c movs r3, 1                                        |     r3 = 1;
    0x0004f12e mov r1, r0                                        |     r1 = r0;
    0x0004f130 strb.w r3, [fp, 0x89]                             |     *(arg_89h) = r3;
    0x0004f134 mov r0, fp                                        |     r0 = fp;
    0x0004f136 str r5, [sp]                                      |     *(sp) = r5;
    0x0004f138 add r2, pc                                        |     r2 += pc;
    0x0004f13a mov r3, r7                                        |     r3 = r7;
    0x0004f13c str r5, [r7, 0xc]                                 |     *((r7 + 0xc)) = r5;
    0x0004f13e blx 0x5f90                                        |     r0 = fcn_00005f90 ();
    0x0004f142 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004f144 beq.w 0x51240                                     |         goto label_426;
                                                                 |     }
    0x0004f148 mov sb, r0                                        |     sb = r0;
    0x0004f14a mov r1, r8                                        |     r1 = r8;
    0x0004f14c mov r0, fp                                        |     r0 = fp;
    0x0004f14e bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x0004f152 strb.w r5, [fp, 0x89]                             |     *(arg_89h) = r5;
                                                                 | label_271:
    0x0004f156 mov r0, fp                                        |     r0 = fp;
    0x0004f158 bl 0x13968                                        |     fcn_00013968 (r0);
    0x0004f15c cmp.w sb, 7                                       |     
                                                                 |     if (sb == 7) {
    0x0004f160 beq.w 0x4d4f2                                     |         goto label_24;
                                                                 |     }
    0x0004f164 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004f166 adds r3, 1                                        |     r3++;
    0x0004f168 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004f16a b.w 0x4d742                                       |     goto label_25;
    0x0004f16e ldr r6, [sp, 0x20]                                |     r6 = *(arg_20h);
    0x0004f170 add.w r8, sp, 0xb0                                |     r8 += arg_b0h;
    0x0004f174 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f176 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x0004f178 mov r1, r7                                        |     r1 = r7;
    0x0004f17a ldr r2, [r6, 4]                                   |     r2 = *((r6 + 4));
    0x0004f17c ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004f17e ldr r0, [r6, 0xc]                                 |     r0 = *((r6 + 0xc));
    0x0004f180 ldr.w r4, [r3, r2, lsl 2]                         |     offset_26 = r2 << 2;
                                                                 |     r4 = *((r3 + offset_26));
    0x0004f184 movs r2, 0                                        |     r2 = 0;
    0x0004f186 ldr r3, [r4, 8]                                   |     r3 = *((r4 + 8));
    0x0004f188 ldr r5, [r4]                                      |     r5 = *(r4);
    0x0004f18a strb.w r2, [sp, 0xde]                             |     *(arg_deh) = r2;
    0x0004f18e str r3, [sp, 0xd8]                                |     *(arg_d8h) = r3;
    0x0004f190 ldr r3, [r6, 8]                                   |     r3 = *((r6 + 8));
    0x0004f192 strd r2, r8, [sp]                                 |     __asm ("strd r2, r8, [sp]");
    0x0004f196 ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004f198 strh.w r0, [sp, 0xdc]                             |     *(arg_dch) = r0;
    0x0004f19c mov r0, r5                                        |     r0 = r5;
    0x0004f19e add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004f1a2 add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0004f1a6 movs r2, 0                                        |     r2 = 0;
    0x0004f1a8 str r3, [sp, 0xe0]                                |     *(arg_e0h) = r3;
    0x0004f1aa movs r3, 0                                        |     r3 = 0;
    0x0004f1ac bl 0x2e9e8                                        |     r0 = fcn_0002e9e8 (r0, r1, r2, r3, r4, r5, r6);
    0x0004f1b0 mov r6, r0                                        |     r6 = r0;
    0x0004f1b2 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004f1b4 bne.w 0x5055c                                     |         goto label_427;
                                                                 |     }
    0x0004f1b8 ldr r3, [sp, 0xb0]                                |     r3 = *(arg_b0h);
    0x0004f1ba cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004f1bc beq.w 0x50554                                     |         goto label_428;
                                                                 |     }
    0x0004f1c0 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004f1c2 str r0, [r4, 0x44]                                |     *((r4 + 0x44)) = r0;
    0x0004f1c4 adds r3, 1                                        |     r3++;
    0x0004f1c6 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004f1c8 b.w 0x4d26a                                       |     goto label_2;
    0x0004f1cc ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f1ce ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0004f1d0 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004f1d2 adds r3, 1                                        |     r3++;
    0x0004f1d4 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004f1d6 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f1d8 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004f1da ldr.w r3, [r3, r2, lsl 2]                         |     offset_27 = r2 << 2;
                                                                 |     r3 = *((r3 + offset_27));
    0x0004f1de ldr r2, [r3, 0x40]                                |     r2 = *((r3 + 0x40));
    0x0004f1e0 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0004f1e2 beq.w 0x526be                                     |         goto label_429;
                                                                 |     }
    0x0004f1e6 mov r1, r2                                        |     r1 = r2;
    0x0004f1e8 mov r0, fp                                        |     r0 = fp;
    0x0004f1ea bl 0xf9cc                                         |     fcn_0000f9cc (r0, r1);
    0x0004f1ee b.w 0x4d26a                                       |     goto label_2;
    0x0004f1f2 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f1f4 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0004f1f6 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004f1f8 bne.w 0x50e92                                     |         goto label_430;
                                                                 |     }
    0x0004f1fc ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004f1fe adds r3, 1                                        |     r3++;
    0x0004f200 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
                                                                 | label_55:
    0x0004f202 ldr.w r3, [fp, 0xa4]                              |     r3 = *(arg_a4h);
    0x0004f206 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004f208 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004f20c ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f20e ldrb.w r3, [r3, 0x59]                             |     r3 = *((r3 + 0x59));
    0x0004f212 lsls r7, r3, 0x1c                                 |     r7 = r3 << 0x1c;
                                                                 |     if (r7 < r3) {
    0x0004f214 bmi.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004f218 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f21a ldr r5, [r3, 0x10]                                |     r5 = *((r3 + 0x10));
    0x0004f21c cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x0004f21e beq.w 0x52cd8                                     |         goto label_431;
                                                                 |     }
                                                                 | label_175:
    0x0004f222 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f224 add r2, sp, 0xa8                                  |     r2 += arg_a8h;
    0x0004f226 add.w sl, sp, 0xb0                                |     sl += arg_b0h;
    0x0004f22a str r2, [sp, 0x48]                                |     *(arg_48h) = r2;
    0x0004f22c movs r2, 1                                        |     r2 = 1;
    0x0004f22e ldr.w sb, [r3]                                    |     sb = *(r3);
    0x0004f232 movs r3, 0                                        |     r3 = 0;
    0x0004f234 str r3, [sp, 0xa8]                                |     *(arg_a8h) = r3;
    0x0004f236 ldr.w r1, [sb, 0x58]                              |     r1 = *((sb + 0x58));
    0x0004f23a strh.w r2, [sl, 0x18]                             |     *((sl + 0x18)) = r2;
    0x0004f23e ldr.w r0, [sb, 0x98]                              |     r0 = *((sb + 0x98));
    0x0004f242 str.w r1, [sl, 0x14]                              |     __asm ("str.w r1, [sl, 0x14]");
    0x0004f246 add r1, sp, 0x12c                                 |     r1 += arg_12ch;
    0x0004f248 strd r1, r1, [sl, 4]                              |     __asm ("strd r1, r1, [sl, 4]");
    0x0004f24c movs r1, 0x64                                     |     r1 = 0x64;
    0x0004f24e cmp r0, r2                                        |     
    0x0004f250 str.w r3, [sl, 0xc]                               |     __asm ("str.w r3, [sl, 0xc]");
    0x0004f254 str.w sb, [sl]                                    |     __asm ("str.w sb, [sl]");
    0x0004f258 str.w r1, [sl, 0x10]                              |     __asm ("str.w r1, [sl, 0x10]");
                                                                 |     if (r0 <= r2) {
    0x0004f25c ble.w 0x53396                                     |         goto label_432;
                                                                 |     }
    0x0004f260 ldrb r3, [r5]                                     |     r3 = *(r5);
    0x0004f262 ldr r6, [sp, 0x88]                                |     r6 = *(arg_88h);
    0x0004f264 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004f266 beq.w 0x5294a                                     |         goto label_208;
                                                                 |     }
                                                                 | label_26:
    0x0004f26a adds r2, r5, 1                                    |     r2 = r5 + 1;
    0x0004f26c b 0x4f274                                         |     
                                                                 |     while (r3 != 0xa) {
    0x0004f26e ldrb r3, [r2], 1                                  |         r3 = *(r2);
                                                                 |         r2++;
                                                                 |         if (r3 == 0) {
    0x0004f272 cbz r3, 0x4f27a                                   |             goto label_433;
                                                                 |         }
    0x0004f274 cmp r3, 0xa                                       |         
    0x0004f276 mov r4, r2                                        |         r4 = r2;
    0x0004f278 bne 0x4f26e                                       |         
                                                                 |     }
                                                                 | label_433:
    0x0004f27a movs r2, 3                                        |     r2 = 3;
    0x0004f27c mov r1, r6                                        |     r1 = r6;
    0x0004f27e mov r0, sl                                        |     r0 = sl;
    0x0004f280 bl 0x1a768                                        |     fcn_0001a768 (r0, r1, r2);
    0x0004f284 subs r2, r4, r5                                   |     r2 = r4 - r5;
    0x0004f286 mov r1, r5                                        |     r1 = r5;
    0x0004f288 mov r0, sl                                        |     r0 = sl;
    0x0004f28a bl 0x1a768                                        |     fcn_0001a768 (r0, r1, r2);
    0x0004f28e ldrb r3, [r4]                                     |     r3 = *(r4);
    0x0004f290 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004f292 beq.w 0x5294a                                     |         goto label_208;
                                                                 |     }
    0x0004f296 mov r5, r4                                        |     r5 = r4;
    0x0004f298 b 0x4f26a                                         |     goto label_26;
    0x0004f29a ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f29c ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0004f29e ldr r4, [r3, 0xc]                                 |     r4 = *((r3 + 0xc));
    0x0004f2a0 ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x0004f2a4 add.w r3, r3, r2, lsl 4                           |     r3 += (r2 << 4);
    0x0004f2a8 ldr r6, [r3, 4]                                   |     r6 = *((r3 + 4));
    0x0004f2aa cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0004f2ac beq.w 0x5105c                                     |         goto label_434;
                                                                 |     }
    0x0004f2b0 ldr r3, [r6, 4]                                   |     r3 = *((r6 + 4));
    0x0004f2b2 mov r0, r6                                        |     r0 = r6;
    0x0004f2b4 ldr r3, [r3, 0x2c]                                |     r3 = *((r3 + 0x2c));
    0x0004f2b6 cmp r4, r3                                        |     
    0x0004f2b8 it lo                                             |     
                                                                 |     if (r4 >= r3) {
    0x0004f2ba movlo r4, r3                                      |         r4 = r3;
                                                                 |     }
    0x0004f2bc bl 0xd140                                         |     fcn_0000d140 (r0);
    0x0004f2c0 ldr r3, [r6, 4]                                   |     r3 = *((r6 + 4));
    0x0004f2c2 cmp r4, 0                                         |     
    0x0004f2c4 ldr r2, [r3]                                      |     r2 = *(r3);
    0x0004f2c6 it gt                                             |     
                                                                 |     if (r4 <= 0) {
    0x0004f2c8 strgt r4, [r2, 0x9c]                              |         *((r2 + 0x9c)) = r4;
                                                                 |     }
                                                                 |     if (r4 <= 0) {
    0x0004f2cc ble.w 0x51066                                     |         goto label_435;
                                                                 |     }
                                                                 | label_59:
    0x0004f2d0 ldrb r2, [r6, 9]                                  |     r2 = *((r6 + 9));
                                                                 |     if (r2 != 0) {
    0x0004f2d2 cbz r2, 0x4f2e0                                   |         
    0x0004f2d4 ldr r5, [r6, 0xc]                                 |         r5 = *((r6 + 0xc));
    0x0004f2d6 subs r5, 1                                        |         r5--;
    0x0004f2d8 str r5, [r6, 0xc]                                 |         *((r6 + 0xc)) = r5;
    0x0004f2da cmp r5, 0                                         |         
                                                                 |         if (r5 == 0) {
    0x0004f2dc beq.w 0x52bc4                                     |             goto label_436;
                                                                 |         }
                                                                 |     }
                                                                 | label_165:
    0x0004f2e0 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004f2e2 adds r3, 1                                        |     r3++;
    0x0004f2e4 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004f2e6 ldr r3, [sp, 0x38]                                |     r3 = *(arg_38h);
    0x0004f2e8 str r4, [r3, 0x10]                                |     *((r3 + 0x10)) = r4;
    0x0004f2ea asrs r4, r4, 0x1f                                 |     r4 >>= 0x1f;
    0x0004f2ec str r4, [r3, 0x14]                                |     *((r3 + 0x14)) = r4;
    0x0004f2ee b.w 0x4d26a                                       |     goto label_2;
    0x0004f2f2 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f2f4 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0004f2f6 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004f2f8 adds r3, 1                                        |     r3++;
    0x0004f2fa str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004f2fc ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x0004f300 add.w r3, r3, r2, lsl 4                           |     r3 += (r2 << 4);
    0x0004f304 ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x0004f306 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004f308 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004f30a ldr r3, [r3, 0x2c]                                |     r3 = *((r3 + 0x2c));
    0x0004f30c str r3, [r2, 0x10]                                |     *((r2 + 0x10)) = r3;
    0x0004f30e movs r3, 0                                        |     r3 = 0;
    0x0004f310 str r3, [r2, 0x14]                                |     *((r2 + 0x14)) = r3;
    0x0004f312 b.w 0x4d26a                                       |     goto label_2;
    0x0004f316 movs r3, 0                                        |     r3 = 0;
    0x0004f318 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004f31a str r3, [sp, 0xb0]                                |     *(arg_b0h) = r3;
    0x0004f31c add.w sl, sp, 0xb0                                |     sl += arg_b0h;
    0x0004f320 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f322 ldr r2, [r2, 4]                                   |     r2 = *((r2 + 4));
    0x0004f324 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x0004f328 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004f32a vstr d16, [sp, 0xd8]                              |     __asm ("vstr d16, [sp, 0xd8]");
    0x0004f32e ldr.w r8, [r3, r2, lsl 2]                         |     offset_28 = r2 << 2;
                                                                 |     r8 = *((r3 + offset_28));
    0x0004f332 ldr.w r0, [r8]                                    |     r0 = *(r8);
    0x0004f336 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004f338 beq.w 0x524be                                     |         goto label_437;
                                                                 |     }
    0x0004f33c ldrb.w r3, [r8, 0x1c]                             |     r3 = *((r8 + 0x1c));
    0x0004f340 lsls r1, r3, 0x1e                                 |     r1 = r3 << 0x1e;
                                                                 |     if (r1 >= r3) {
    0x0004f342 bpl.w 0x51368                                     |         goto label_438;
                                                                 |     }
    0x0004f346 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f348 ldr r6, [r3, 0xc]                                 |     r6 = *((r3 + 0xc));
    0x0004f34a cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004f34c beq.w 0x513a6                                     |         goto label_439;
                                                                 |     }
                                                                 | label_70:
    0x0004f350 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f352 add.w r5, r6, r6, lsl 2                           |     r5 = r6 + (r6 << 2);
    0x0004f356 lsls r5, r5, 3                                    |     r5 <<= 3;
    0x0004f358 ldr.w r3, [r3, 0xb0]                              |     r3 = *((r3 + 0xb0));
    0x0004f35c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004f35e bne.w 0x510cc                                     |         goto label_440;
                                                                 |     }
    0x0004f360 strh r5, [r6, 0x34]                               |     *((r6 + 0x34)) = r5;
    0x0004f362 ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004f364 add r5, r3                                        |     r5 += r3;
                                                                 | label_61:
    0x0004f366 mov r0, r5                                        |     r0 = r5;
    0x0004f368 bl 0xc318                                         |     r0 = fcn_0000c318 (r0, r1);
    0x0004f36c ldrd r1, r0, [r5, 0x10]                           |     __asm ("ldrd r1, r0, [r5, 0x10]");
    0x0004f370 mvn r3, 0x80000000                                |     r3 = ~0x80000000;
    0x0004f374 cmp r0, r3                                        |     
    0x0004f376 it eq                                             |     
                                                                 |     if (r0 == r3) {
    0x0004f378 cmpeq r1, -1                                      |         __asm ("cmpeq r1, -1");
                                                                 |     }
                                                                 |     if (r0 == r3) {
    0x0004f37c beq.w 0x536dc                                     |         goto label_441;
                                                                 |     }
    0x0004f380 ldrb.w r3, [r8, 0x1c]                             |     r3 = *((r8 + 0x1c));
    0x0004f384 lsls r2, r3, 0x1e                                 |     r2 = r3 << 0x1e;
                                                                 |     if (r2 < r3) {
    0x0004f386 bmi.w 0x536dc                                     |         goto label_441;
                                                                 |     }
    0x0004f38a ldrd r2, r3, [sp, 0xd8]                           |     __asm ("ldrd r2, r3, [arg_d8h]");
    0x0004f38e cmp r1, r2                                        |     
    0x0004f390 sbcs.w r4, r0, r3                                 |     __asm ("sbcs.w r4, r0, r3");
                                                                 |     if (r1 >= r2) {
    0x0004f394 blt 0x4f39c                                       |         
    0x0004f396 adds r2, r1, 1                                    |         r2 = r1 + 1;
    0x0004f398 adc r3, r0, 0                                     |         __asm ("adc r3, r0, 0");
                                                                 |     }
    0x0004f39c movs r6, 0                                        |     r6 = 0;
    0x0004f39e strd r2, r3, [r5, 0x10]                           |     __asm ("strd r2, r3, [r5, 0x10]");
                                                                 | label_71:
    0x0004f3a2 ldr r1, [sp, 0x1c]                                |     r1 = *(arg_1ch);
    0x0004f3a4 adds r1, 1                                        |     r1++;
    0x0004f3a6 str r1, [sp, 0x1c]                                |     *(arg_1ch) = r1;
    0x0004f3a8 movs r1, 0                                        |     r1 = 0;
    0x0004f3aa strh.w r1, [r8, 0x1a]                             |     *((r8 + 0x1a)) = r1;
    0x0004f3ae str.w r1, [r8, 0x44]                              |     __asm ("str.w r1, [r8, 0x44]");
    0x0004f3b2 ldr r1, [sp, 0x38]                                |     r1 = *(arg_38h);
    0x0004f3b4 strd r2, r3, [r1, 0x10]                           |     __asm ("strd r2, r3, [r1, 0x10]");
    0x0004f3b8 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004f3ba beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004f3bc add r7, sp, 0x158                                 |     r7 = sp + 0x158;
    0x0004f3be b.w 0x4d740                                       |     goto label_7;
    0x0004f3c2 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f3c4 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0004f3c6 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004f3c8 adds r3, 1                                        |     r3++;
    0x0004f3ca str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004f3cc ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f3ce ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004f3d0 ldr.w r2, [r3, r2, lsl 2]                         |     offset_29 = r2 << 2;
                                                                 |     r2 = *((r3 + offset_29));
    0x0004f3d4 ldrd r3, r1, [r2, 0x28]                           |     __asm ("ldrd r3, r1, [r2, 0x28]");
    0x0004f3d8 adds r0, r3, 1                                    |     r0 = r3 + 1;
    0x0004f3da str r0, [r2, 0x28]                                |     *((r2 + 0x28)) = r0;
    0x0004f3dc adc r0, r1, 0                                     |     __asm ("adc r0, r1, 0");
    0x0004f3e0 str r0, [r2, 0x2c]                                |     *((r2 + 0x2c)) = r0;
    0x0004f3e2 ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x0004f3e4 strd r3, r1, [r2, 0x10]                           |     __asm ("strd r3, r1, [r2, 0x10]");
    0x0004f3e8 b.w 0x4d26a                                       |     goto label_2;
    0x0004f3ec ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004f3ee mov.w r8, 0                                       |     r8 = 0;
    0x0004f3f2 ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0004f3f4 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x0004f3f6 ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x0004f3f8 ldr r2, [r2, 4]                                   |     r2 = *((r2 + 4));
    0x0004f3fa add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004f3fe add.w r5, r1, r3, lsl 3                           |     r5 = r1 + (r3 << 3);
    0x0004f402 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f404 mov r1, r8                                        |     r1 = r8;
    0x0004f406 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004f408 ldr.w r4, [r3, r2, lsl 2]                         |     offset_30 = r2 << 2;
                                                                 |     r4 = *((r3 + offset_30));
    0x0004f40c ldr r0, [r4]                                      |     r0 = *(r4);
    0x0004f40e str.w r8, [sp, 0xd8]                              |     __asm ("str.w r8, [arg_d8h]");
    0x0004f412 ldrd r2, r3, [r5, 0x10]                           |     __asm ("ldrd r2, r3, [r5, 0x10]");
    0x0004f416 strd r8, r7, [sp]                                 |     __asm ("strd r8, r7, [sp]");
    0x0004f41a bl 0x2e9e8                                        |     fcn_0002e9e8 (r0, r1, r2, r3, r4, r5, r6);
    0x0004f41e ldr r3, [sp, 0xd8]                                |     r3 = *(arg_d8h);
    0x0004f420 mov r6, r0                                        |     r6 = r0;
    0x0004f422 ldrd r0, r1, [r5, 0x10]                           |     __asm ("ldrd r0, r1, [r5, 0x10]");
    0x0004f426 strb.w r8, [r4, 0x19]                             |     *((r4 + 0x19)) = r8;
    0x0004f42a cmp r3, r8                                        |     
    0x0004f42c strb.w r8, [r4, 0x1b]                             |     *((r4 + 0x1b)) = r8;
    0x0004f430 ite eq                                            |     
                                                                 |     if (r3 != r8) {
    0x0004f432 moveq r2, 1                                       |         r2 = 1;
                                                                 |     }
                                                                 |     if (r3 == r8) {
    0x0004f434 movne r2, r8                                      |         r2 = r8;
                                                                 |     }
    0x0004f436 strb r2, [r4, 0x1a]                               |     *((r4 + 0x1a)) = r2;
    0x0004f438 ite ne                                            |     
                                                                 |     if (r3 == r8) {
    0x0004f43a ldrne r2, [sp, 0x20]                              |         r2 = *(arg_20h);
                                                                 |     }
                                                                 |     if (r3 != r8) {
    0x0004f43c ldreq r2, [sp, 0x1c]                              |         r2 = *(arg_1ch);
                                                                 |     }
    0x0004f43e strd r0, r1, [r4, 0x38]                           |     __asm ("strd r0, r1, [r4, 0x38]");
    0x0004f442 ite ne                                            |     
                                                                 |     if (r3 == r8) {
    0x0004f444 ldrne r2, [r2, 8]                                 |         r2 = *((r2 + 8));
                                                                 |     }
                                                                 |     if (r3 != r8) {
    0x0004f446 addeq r2, 1                                       |         r2++;
                                                                 |     }
    0x0004f448 str.w r8, [r4, 0x44]                              |     __asm ("str.w r8, [r4, 0x44]");
    0x0004f44c str r3, [r4, 0xc]                                 |     *((r4 + 0xc)) = r3;
    0x0004f44e str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004f450 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004f452 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004f456 b.w 0x4d740                                       |     goto label_7;
    0x0004f45a ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f45c ldr r4, [r3, 4]                                   |     r4 = *((r3 + 4));
    0x0004f45e ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x0004f460 ldr r5, [r3, 8]                                   |     r5 = *((r3 + 8));
    0x0004f462 add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0004f466 ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004f468 add.w r4, r3, r4, lsl 3                           |     r4 = r3 + (r4 << 3);
    0x0004f46c ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0004f46e lsls r3, r3, 0x1e                                 |     r3 <<= 0x1e;
                                                                 |     if (r3 >= r3) {
    0x0004f470 bpl.w 0x512e2                                     |         goto label_442;
                                                                 |     }
    0x0004f474 ldrb r3, [r4, 0x1e]                               |     r3 = *((r4 + 0x1e));
    0x0004f476 cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x0004f478 beq.w 0x512e2                                     |         goto label_442;
                                                                 |     }
    0x0004f47c movs r1, 1                                        |     r1 = 1;
    0x0004f47e mov r0, r4                                        |     r0 = r4;
    0x0004f480 bl 0x17460                                        |     r0 = fcn_00017460 (r0, r1);
    0x0004f484 mov r6, r0                                        |     r6 = r0;
    0x0004f486 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004f488 beq.w 0x512e2                                     |         goto label_442;
                                                                 |     }
                                                                 | label_27:
    0x0004f48c ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004f48e mov sb, r6                                        |     sb = r6;
    0x0004f490 add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x0004f494 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f496 ldr r0, [r3, 0x2c]                                |     r0 = *((r3 + 0x2c));
    0x0004f498 b.w 0x50538                                       |     goto label_39;
    0x0004f49c ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f49e ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0004f4a0 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f4a2 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004f4a4 ldr.w sb, [r3, r2, lsl 2]                         |     offset_31 = r2 << 2;
                                                                 |     sb = *((r3 + offset_31));
    0x0004f4a8 ldrb.w r7, [sb, 0x19]                             |     r7 = *((sb + 0x19));
    0x0004f4ac cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x0004f4ae beq.w 0x51f22                                     |         goto label_443;
                                                                 |     }
    0x0004f4b2 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004f4b4 adds r3, 1                                        |     r3++;
    0x0004f4b6 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004f4b8 b.w 0x4d26a                                       |     goto label_2;
    0x0004f4bc ldr r1, [sp, 0x20]                                |     r1 = *(arg_20h);
    0x0004f4be ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f4c0 ldr r2, [r1, 4]                                   |     r2 = *((r1 + 4));
    0x0004f4c2 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004f4c4 ldr.w r5, [r3, r2, lsl 2]                         |     offset_32 = r2 << 2;
                                                                 |     r5 = *((r3 + offset_32));
    0x0004f4c8 ldr r3, [r1, 0xc]                                 |     r3 = *((r1 + 0xc));
    0x0004f4ca ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004f4cc ldrb.w sb, [r5, 0x19]                             |     sb = *((r5 + 0x19));
    0x0004f4d0 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004f4d4 add.w r4, r2, r3, lsl 3                           |     r4 = r2 + (r3 << 3);
    0x0004f4d8 cmp.w sb, 0                                       |     
                                                                 |     if (sb != 0) {
    0x0004f4dc bne.w 0x50e82                                     |         goto label_444;
                                                                 |     }
    0x0004f4e0 ldr r3, [r5, 0x24]                                |     r3 = *((r5 + 0x24));
    0x0004f4e2 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x0004f4e4 movs r2, 0x48                                     |     r2 = 0x48;
    0x0004f4e6 mov r1, sb                                        |     r1 = sb;
    0x0004f4e8 mov r0, r7                                        |     r0 = r7;
    0x0004f4ea add.w r8, sp, 0xe0                                |     r8 += arg_e0h;
    0x0004f4ee ldr.w sl, [r3]                                    |     sl = *(r3);
    0x0004f4f2 ldr.w r6, [sl]                                    |     r6 = *(sl);
    0x0004f4f6 blx 0x5fcc                                        |     fcn_00005fcc ();
    0x0004f4fa mov r1, r4                                        |     r1 = r4;
    0x0004f4fc mov r0, r8                                        |     r0 = r8;
    0x0004f4fe bl 0xff00                                         |     fcn_0000ff00 (r0, r1);
    0x0004f502 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f504 mov r1, r7                                        |     r1 = r7;
    0x0004f506 ldr r6, [r6, 0x2c]                                |     r6 = *((r6 + 0x2c));
    0x0004f508 ldr r0, [r5, 0x24]                                |     r0 = *((r5 + 0x24));
    0x0004f50a ldr r2, [r3, 8]                                   |     r2 = *((r3 + 8));
    0x0004f50c ldrh.w r3, [sp, 0xfc]                             |     r3 = *(arg_fch);
    0x0004f510 bic r3, r3, 0x4180                                |     r3 = BIT_MASK (r3, 0x4180);
    0x0004f514 bic r3, r3, 0x7f                                  |     r3 = BIT_MASK (r3, 0x7f);
    0x0004f518 orr r3, r3, 1                                     |     r3 |= 1;
    0x0004f51c strh.w r3, [sp, 0xfc]                             |     *(arg_fch) = r3;
    0x0004f520 blx r6                                            |     uint32_t (*r6)(uint32_t) (r3);
    0x0004f522 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f524 mov r6, r0                                        |     r6 = r0;
    0x0004f526 ldr r5, [r3]                                      |     r5 = *(r3);
    0x0004f528 ldr r1, [r3, 0x2c]                                |     r1 = *((r3 + 0x2c));
    0x0004f52a mov r0, r5                                        |     r0 = r5;
    0x0004f52c bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x0004f530 ldr.w r1, [sl, 8]                                 |     r1 = *((sl + 8));
    0x0004f534 mov r0, r5                                        |     r0 = r5;
    0x0004f536 bl 0xd418                                         |     fcn_0000d418 (r0, r1);
    0x0004f53a ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f53c str r0, [r3, 0x2c]                                |     *((r3 + 0x2c)) = r0;
    0x0004f53e ldr.w r0, [sl, 8]                                 |     r0 = *((sl + 8));
    0x0004f542 blx 0x6050                                        |     fcn_00006050 ();
    0x0004f546 ldr r3, [sp, 0x118]                               |     r3 = *(arg_118h);
    0x0004f548 str.w sb, [sl, 8]                                 |     __asm ("str.w sb, [sl, 8]");
    0x0004f54c cmp r3, 0                                         |     
    0x0004f54e it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x0004f550 movne r6, r3                                      |         r6 = r3;
                                                                 |     }
    0x0004f552 ldrh.w r3, [sp, 0xfc]                             |     r3 = *(arg_fch);
    0x0004f556 lsls r1, r3, 0x1e                                 |     r1 = r3 << 0x1e;
                                                                 |     if (r1 < r3) {
    0x0004f558 bpl 0x4f56c                                       |         
    0x0004f55a ldrb.w r3, [sp, 0xfe]                             |         r3 = *(arg_feh);
    0x0004f55e ldr r2, [sp, 0x70]                                |         r2 = *(arg_70h);
    0x0004f560 cmp r3, r2                                        |         
                                                                 |         if (r3 == r2) {
    0x0004f562 beq 0x4f56c                                       |             goto label_445;
                                                                 |         }
    0x0004f564 mov r1, r2                                        |         r1 = r2;
    0x0004f566 mov r0, r8                                        |         r0 = r8;
    0x0004f568 bl 0x17460                                        |         fcn_00017460 (r0, r1);
                                                                 |     }
                                                                 | label_445:
    0x0004f56c mov r1, r8                                        |     r1 = r8;
    0x0004f56e mov r0, r4                                        |     r0 = r4;
    0x0004f570 bl 0xff00                                         |     fcn_0000ff00 (r0, r1);
    0x0004f574 ldrh r2, [r4, 0x1c]                               |     r2 = *((r4 + 0x1c));
    0x0004f576 tst.w r2, 0x12                                    |     
                                                                 |     if ((r2 & 0x12) == 0) {
    0x0004f57a beq.w 0x4dbae                                     |         goto label_20;
                                                                 |     }
    0x0004f57e lsls r2, r2, 0x11                                 |     r2 <<= 0x11;
    0x0004f580 ldr r3, [r4, 0x18]                                |     r3 = *((r4 + 0x18));
    0x0004f582 itt mi                                            |     
                                                                 |     if (r2 >= r2) {
    0x0004f584 ldrmi r2, [r4, 0x10]                              |         r2 = *((r4 + 0x10));
                                                                 |     }
                                                                 |     if (r2 >= r2) {
    0x0004f586 addmi r3, r3, r2                                  |         r3 += r2;
                                                                 |     }
    0x0004f588 ldr r2, [r4]                                      |     r2 = *(r4);
    0x0004f58a ldr r2, [r2, 0x58]                                |     r2 = *((r2 + 0x58));
    0x0004f58c cmp r2, r3                                        |     
                                                                 |     if (r2 >= r3) {
    0x0004f58e bge.w 0x4dbae                                     |         goto label_20;
                                                                 |     }
                                                                 | label_30:
    0x0004f592 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f594 mov r1, fp                                        |     r1 = fp;
    0x0004f596 ldr.w r2, [pc, 0x6a4]                             |     r2 = *(0x0004fc3c);
    0x0004f59a add.w r0, r3, 0x2c                                |     r0 = r3 + 0x2c;
    0x0004f59e add r2, pc                                        |     r2 += pc;
    0x0004f5a0 bl 0x1c9d0                                        |     fcn_0001c9d0 (r0, r1);
    0x0004f5a4 movs r0, 0x12                                     |     r0 = 0x12;
    0x0004f5a6 b.w 0x4d44a                                       |     goto label_1;
    0x0004f5aa ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f5ac add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x0004f5ae mov.w r8, 0                                       |     r8 = 0;
    0x0004f5b2 mov r1, r7                                        |     r1 = r7;
    0x0004f5b4 str.w r8, [r7]                                    |     __asm ("str.w r8, [r7]");
    0x0004f5b8 ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x0004f5ba ldr.w sb, [r3, 8]                                 |     sb = *((r3 + 8));
    0x0004f5be ldr.w r5, [sb]                                    |     r5 = *(sb);
    0x0004f5c2 mov r0, sb                                        |     r0 = sb;
    0x0004f5c4 ldr r3, [r5, 0x18]                                |     r3 = *((r5 + 0x18));
    0x0004f5c6 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x0004f5c8 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f5ca mov r6, r0                                        |     r6 = r0;
    0x0004f5cc ldr r4, [r3]                                      |     r4 = *(r3);
    0x0004f5ce ldr r1, [r3, 0x2c]                                |     r1 = *((r3 + 0x2c));
    0x0004f5d0 mov r0, r4                                        |     r0 = r4;
    0x0004f5d2 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x0004f5d6 ldr.w r1, [sb, 8]                                 |     r1 = *((sb + 8));
    0x0004f5da mov r0, r4                                        |     r0 = r4;
    0x0004f5dc bl 0xd418                                         |     fcn_0000d418 (r0, r1);
    0x0004f5e0 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f5e2 str r0, [r3, 0x2c]                                |     *((r3 + 0x2c)) = r0;
    0x0004f5e4 ldr.w r0, [sb, 8]                                 |     r0 = *((sb + 8));
    0x0004f5e8 blx 0x6050                                        |     fcn_00006050 ();
    0x0004f5ec str.w r8, [sb, 8]                                 |     __asm ("str.w r8, [sb, 8]");
    0x0004f5f0 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x0004f5f2 bne.w 0x4dbae                                     |         goto label_20;
                                                                 |     }
    0x0004f5f6 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f5f8 mov r2, r6                                        |     r2 = r6;
    0x0004f5fa ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x0004f5fc ldr r1, [r3, 4]                                   |     r1 = *((r3 + 4));
    0x0004f5fe ldr r3, [r7]                                      |     r3 = *(r7);
    0x0004f600 str.w sb, [r3]                                    |     __asm ("str.w sb, [r3]");
    0x0004f604 mov.w r3, -1                                      |     r3 = -1;
    0x0004f608 str r6, [sp]                                      |     *(sp) = r6;
    0x0004f60a bl 0x2e430                                        |     r0 = fcn_0002e430 (r0, r1, r2, r3, r4, r5);
    0x0004f60e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004f610 beq.w 0x53150                                     |         goto label_446;
                                                                 |     }
    0x0004f614 ldr r2, [r7]                                      |     r2 = *(r7);
    0x0004f616 str r2, [r0, 0x24]                                |     *((r0 + 0x24)) = r2;
    0x0004f618 b.w 0x4dbae                                       |     goto label_20;
    0x0004f61c ldr r1, [sp, 0x24]                                |     r1 = *((sp + 0x24));
    0x0004f61e movs r2, 2                                        |     r2 = 2;
    0x0004f620 mov r0, fp                                        |     r0 = fp;
    0x0004f622 ldrb.w r3, [r1, 0x58]                             |     r3 = *((r1 + 0x58));
    0x0004f626 bfi r3, r2, 2, 2                                  |     value_33 = BIT_MASK (2, 2);
                                                                 |     value_34 = r2 & value_33;
                                                                 |     value_33 = ~value_33;
                                                                 |     r3 &= value_33;
                                                                 |     r3 |= value_34;
    0x0004f62a ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004f62c strb.w r3, [r1, 0x58]                             |     *((r1 + 0x58)) = r3;
    0x0004f630 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x0004f632 ldr r1, [r2, 0x10]                                |     r1 = *((r2 + 0x10));
    0x0004f634 ldr.w r2, [fp, 0x10]                              |     r2 = *(arg_10h);
    0x0004f638 lsls r3, r3, 4                                    |     r3 <<= 4;
    0x0004f63a ldr r2, [r2, r3]                                  |     r2 = *((r2 + r3));
    0x0004f63c bl 0x1401c                                        |     r0 = fcn_0001401c (r0, r1, r2);
    0x0004f640 mov r7, r0                                        |     r7 = r0;
    0x0004f642 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004f644 beq.w 0x505d0                                     |         goto label_185;
                                                                 |     }
    0x0004f648 ldr r4, [r0, 0x3c]                                |     r4 = *((r0 + 0x3c));
    0x0004f64a cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0004f64c beq.w 0x505d0                                     |         goto label_185;
                                                                 |     }
    0x0004f650 movs r5, 0                                        |     r5 = 0;
    0x0004f652 mov r1, r5                                        |     r1 = r5;
    0x0004f654 str r5, [r0, 0x3c]                                |     *((r0 + 0x3c)) = r5;
                                                                 |     do {
    0x0004f656 ldr r3, [r4]                                      |         r3 = *(r4);
    0x0004f658 mov r2, r4                                        |         r2 = r4;
    0x0004f65a ldr r4, [r4, 0x18]                                |         r4 = *((r4 + 0x18));
    0x0004f65c cmp fp, r3                                        |         
    0x0004f65e iteee ne                                          |         
                                                                 |         if (fp == r3) {
    0x0004f660 ldrne r0, [r3, 0x144]                             |             r0 = *((r3 + 0x144));
                                                                 |         }
                                                                 |         if (fp != r3) {
    0x0004f664 moveq r5, r2                                      |             r5 = r2;
                                                                 |         }
                                                                 |         if (fp != r3) {
    0x0004f666 streq r2, [r7, 0x3c]                              |             *((r7 + 0x3c)) = r2;
                                                                 |         }
                                                                 |         if (fp == r3) {
    0x0004f668 str r1, [r2, 0x18]                                |             *((r2 + 0x18)) = r1;
                                                                 |         }
    0x0004f66a itt ne                                            |         
                                                                 |         if (fp == r3) {
    0x0004f66c strne r0, [r2, 0x18]                              |             *((r2 + 0x18)) = r0;
                                                                 |         }
                                                                 |         if (fp == r3) {
    0x0004f66e strne r2, [r3, 0x144]                             |             *((r3 + 0x144)) = r2;
                                                                 |         }
    0x0004f672 cmp r4, 0                                         |         
    0x0004f674 bne 0x4f656                                       |         
                                                                 |     } while (r4 != 0);
    0x0004f676 ldr r3, [r5, 4]                                   |     r3 = *((r5 + 4));
    0x0004f678 ldr r0, [r5, 8]                                   |     r0 = *((r5 + 8));
    0x0004f67a ldr r3, [r3]                                      |     r3 = *(r3);
    0x0004f67c ldr r3, [r3, 0x14]                                |     r3 = *((r3 + 0x14));
    0x0004f67e blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0004f680 mov r6, r0                                        |     r6 = r0;
    0x0004f682 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004f684 beq.w 0x52e4a                                     |         goto label_447;
                                                                 |     }
    0x0004f688 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004f68a mov sb, r0                                        |     sb = r0;
    0x0004f68c ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x0004f68e adds r3, 1                                        |     r3++;
    0x0004f690 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004f692 ldrb.w r3, [r2, 0x58]                             |     r3 = *((r2 + 0x58));
    0x0004f696 bfi r3, r4, 2, 2                                  |     value_35 = BIT_MASK (2, 2);
                                                                 |     value_36 = r4 & value_35;
                                                                 |     value_35 = ~value_35;
                                                                 |     r3 &= value_35;
                                                                 |     r3 |= value_36;
    0x0004f69a strb.w r3, [r2, 0x58]                             |     *((r2 + 0x58)) = r3;
    0x0004f69e b.w 0x4d742                                       |     goto label_25;
    0x0004f6a2 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004f6a4 mov r0, fp                                        |     r0 = fp;
    0x0004f6a6 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x0004f6a8 ldr r1, [r2, 0x10]                                |     r1 = *((r2 + 0x10));
    0x0004f6aa ldr.w r2, [fp, 0x10]                              |     r2 = *(arg_10h);
    0x0004f6ae lsls r3, r3, 4                                    |     r3 <<= 4;
    0x0004f6b0 ldr r2, [r2, r3]                                  |     r2 = *((r2 + r3));
    0x0004f6b2 bl 0x1401c                                        |     r0 = fcn_0001401c (r0, r1, r2);
    0x0004f6b6 mov r4, r0                                        |     r4 = r0;
    0x0004f6b8 add.w r0, fp, 0x12c                               |     r0 += arg_12ch;
    0x0004f6bc ldr r3, [r4, 0x38]                                |     r3 = *((r4 + 0x38));
    0x0004f6be ldr r5, [r3]                                      |     r5 = *(r3);
    0x0004f6c0 mov r2, r5                                        |     r2 = r5;
                                                                 |     if (r5 == 0) {
    0x0004f6c2 cbz r5, 0x4f6d8                                   |         goto label_448;
                                                                 |     }
    0x0004f6c4 ldrb r2, [r5]                                     |     r2 = *(r5);
                                                                 |     if (r2 == 0) {
    0x0004f6c6 cbz r2, 0x4f6d8                                   |         goto label_448;
                                                                 |     }
    0x0004f6c8 mov r3, r5                                        |     r3 = r5;
                                                                 |     do {
    0x0004f6ca ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x0004f6ce cmp r2, 0                                         |         
    0x0004f6d0 bne 0x4f6ca                                       |         
                                                                 |     } while (r2 != 0);
    0x0004f6d2 subs r3, r3, r5                                   |     r3 -= r5;
    0x0004f6d4 bic r2, r3, 0xc0000000                            |     r2 = BIT_MASK (r3, 0xc0000000);
                                                                 | label_448:
    0x0004f6d8 mov r1, r5                                        |     r1 = r5;
    0x0004f6da bl 0x13f5c                                        |     r0 = fcn_00013f5c (r0, r1, r2);
    0x0004f6de mov r2, r0                                        |     r2 = r0;
    0x0004f6e0 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004f6e2 beq.w 0x52518                                     |         goto label_449;
                                                                 |     }
    0x0004f6e6 ldr r5, [sp, 0x24]                                |     r5 = *((sp + 0x24));
    0x0004f6e8 ldr r3, [r0]                                      |     r3 = *(r0);
    0x0004f6ea mov r0, fp                                        |     r0 = fp;
    0x0004f6ec add.w r1, r5, 0x2c                                |     r1 = r5 + 0x2c;
    0x0004f6f0 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004f6f2 str r1, [sp]                                      |     *(sp) = r1;
    0x0004f6f4 mov r1, r4                                        |     r1 = r4;
    0x0004f6f6 bl 0x1bb0c                                        |     r0 = fcn_0001bb0c (r0, r1, r2, r3, r4, r5, r6);
    0x0004f6fa mov r6, r0                                        |     r6 = r0;
    0x0004f6fc cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004f6fe bne.w 0x5127e                                     |         goto label_450;
                                                                 |     }
    0x0004f702 ldr r3, [r4, 0x3c]                                |     r3 = *((r4 + 0x3c));
                                                                 |     if (r3 != 0) {
    0x0004f704 cbnz r3, 0x4f712                                  |         goto label_451;
                                                                 |     }
    0x0004f706 b.w 0x53b9c                                       |     goto label_452;
                                                                 |     do {
    0x0004f70a ldr r3, [r3, 0x18]                                |         r3 = *((r3 + 0x18));
    0x0004f70c cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0004f70e beq.w 0x529f0                                     |             goto label_453;
                                                                 |         }
                                                                 | label_451:
    0x0004f712 ldr r2, [r3]                                      |         r2 = *(r3);
    0x0004f714 cmp fp, r2                                        |         
    0x0004f716 bne 0x4f70a                                       |         
                                                                 |     } while (fp != r2);
    0x0004f718 mov r0, fp                                        |     r0 = fp;
    0x0004f71a bl 0x184f0                                        |     r0 = fcn_000184f0 (r0);
    0x0004f71e mov r6, r0                                        |     r6 = r0;
    0x0004f720 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004f722 bne.w 0x4f48c                                     |         goto label_27;
                                                                 |     }
    0x0004f726 ldr r3, [r4, 0x3c]                                |     r3 = *((r4 + 0x3c));
                                                                 |     if (r3 != 0) {
    0x0004f728 cbnz r3, 0x4f736                                  |         goto label_454;
                                                                 |     }
    0x0004f72a b.w 0x540d6                                       |     goto label_455;
                                                                 |     do {
    0x0004f72e ldr r3, [r3, 0x18]                                |         r3 = *((r3 + 0x18));
    0x0004f730 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0004f732 beq.w 0x540d6                                     |             goto label_455;
                                                                 |         }
                                                                 | label_454:
    0x0004f736 ldr r2, [r3]                                      |         r2 = *(r3);
    0x0004f738 cmp fp, r2                                        |         
    0x0004f73a bne 0x4f72e                                       |         
                                                                 |     } while (fp != r2);
    0x0004f73c ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004f73e ldr.w r1, [fp, 0x128]                             |     r1 = *(arg_128h);
    0x0004f742 ldr.w r0, [fp, 0x140]                             |     r0 = *(arg_140h);
    0x0004f746 adds r2, 1                                        |     r2++;
    0x0004f748 str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004f74a adds r4, r1, 1                                    |     r4 = r1 + 1;
    0x0004f74c ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
    0x0004f74e str.w r4, [fp, 0x128]                             |     __asm ("str.w r4, [arg_128h]");
    0x0004f752 str.w r3, [r0, r1, lsl 2]                         |     __asm ("str.w r3, [r0, r1, lsl 2]");
    0x0004f756 adds r2, 1                                        |     r2++;
    0x0004f758 str r2, [r3, 0xc]                                 |     *((r3 + 0xc)) = r2;
    0x0004f75a b.w 0x4d26a                                       |     goto label_2;
    0x0004f75e ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f760 ldr r4, [r3, 4]                                   |     r4 = *((r3 + 4));
    0x0004f762 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004f764 adds r3, 1                                        |     r3++;
    0x0004f766 add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0004f76a str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004f76c ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004f76e add.w r4, r3, r4, lsl 3                           |     r4 = r3 + (r4 << 3);
    0x0004f772 ldrh r5, [r4, 0x1c]                               |     r5 = *((r4 + 0x1c));
    0x0004f774 lsls r6, r5, 0x1f                                 |     r6 = r5 << 0x1f;
                                                                 |     if (r6 < r5) {
    0x0004f776 bmi.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004f77a mov r0, r4                                        |     r0 = r4;
    0x0004f77c bl 0xa29c                                         |     fcn_0000a29c (r0);
    0x0004f780 and r3, r5, 0xbe00                                |     r3 = r5 & 0xbe00;
    0x0004f784 vstr d0, [r4, 8]                                  |     __asm ("vstr d0, [r4, 8]");
    0x0004f788 orr r3, r3, 8                                     |     r3 |= 8;
    0x0004f78c strh r3, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r3;
    0x0004f78e b.w 0x4d26a                                       |     goto label_2;
    0x0004f792 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f794 ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004f796 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004f798 adds r2, 1                                        |     r2++;
    0x0004f79a str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004f79c ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004f79e add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004f7a2 add.w r0, r2, r3, lsl 3                           |     r0 = r2 + (r3 << 3);
    0x0004f7a6 ldrh r3, [r0, 0x1c]                               |     r3 = *((r0 + 0x1c));
    0x0004f7a8 lsls r7, r3, 0x1f                                 |     r7 = r3 << 0x1f;
                                                                 |     if (r7 < r3) {
    0x0004f7aa bmi.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004f7ae bl 0xc318                                         |     fcn_0000c318 (r0, r1);
    0x0004f7b2 b.w 0x4d26a                                       |     goto label_2;
    0x0004f7b6 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f7b8 ldr r0, [r3, 4]                                   |     r0 = *((r3 + 4));
    0x0004f7ba ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004f7bc adds r3, 1                                        |     r3++;
    0x0004f7be add.w r0, r0, r0, lsl 2                           |     r0 += (r0 << 2);
    0x0004f7c2 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004f7c4 ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004f7c6 add.w r0, r3, r0, lsl 3                           |     r0 = r3 + (r0 << 3);
    0x0004f7ca bl 0xbb20                                         |     fcn_0000bb20 (r0);
    0x0004f7ce b.w 0x4d26a                                       |     goto label_2;
    0x0004f7d2 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f7d4 ldr r4, [r3, 4]                                   |     r4 = *((r3 + 4));
    0x0004f7d6 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004f7d8 adds r3, 1                                        |     r3++;
    0x0004f7da add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0004f7de str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004f7e0 ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004f7e2 add.w r4, r3, r4, lsl 3                           |     r4 = r3 + (r4 << 3);
    0x0004f7e6 ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0004f7e8 lsls r0, r3, 0x1f                                 |     r0 = r3 << 0x1f;
                                                                 |     if (r0 < r3) {
    0x0004f7ea bmi.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004f7ee lsls r1, r3, 0x1b                                 |     r1 = r3 << 0x1b;
    0x0004f7f0 ittt mi                                           |     
                                                                 |     if (r1 < r3) {
    0x0004f7f2 bicmi r3, r3, 0x1ee                               |         __asm ("bicmi r3, r3, aav.0x000000ff");
                                                                 |     }
                                                                 |     if (r1 < r3) {
    0x0004f7f6 bicmi r3, r3, 1                                   |         __asm ("bicmi r3, r3, 1");
                                                                 |     }
                                                                 |     if (r1 >= r3) {
    0x0004f7fa strh r3, [r4, 0x1c]                               |         *((r4 + 0x1c)) = r3;
                                                                 |         goto label_456;
                                                                 |     }
                                                                 |     if (r1 < r3) {
                                                                 | label_456:
    0x0004f7fc bmi.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004f800 lsls r2, r3, 0x1e                                 |     r2 = r3 << 0x1e;
                                                                 |     if (r2 >= r3) {
    0x0004f802 bmi 0x4f80c                                       |         
    0x0004f804 tst.w r3, 0xc                                     |         
                                                                 |         if ((r3 & 0xc) != 0) {
    0x0004f808 bne.w 0x539c6                                     |             goto label_457;
                                                                 |         }
                                                                 |     }
                                                                 | label_239:
    0x0004f80c and r3, r3, 0xbe00                                |     r3 &= 0xbe00;
    0x0004f810 orr r3, r3, 0x10                                  |     r3 |= 0x10;
    0x0004f814 strh r3, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r3;
    0x0004f816 b.w 0x4d26a                                       |     goto label_2;
    0x0004f81a ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f81c ldr r4, [r3, 4]                                   |     r4 = *((r3 + 4));
    0x0004f81e ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004f820 adds r3, 1                                        |     r3++;
    0x0004f822 add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0004f826 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004f828 ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004f82a add.w r4, r3, r4, lsl 3                           |     r4 = r3 + (r4 << 3);
    0x0004f82e ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0004f830 lsls r2, r3, 0x1f                                 |     r2 = r3 << 0x1f;
                                                                 |     if (r2 < r3) {
    0x0004f832 bmi.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004f836 asrs r2, r3, 3                                    |     r2 = r3 >> 3;
    0x0004f838 and r2, r2, 2                                     |     r2 &= 2;
    0x0004f83c orrs r3, r2                                       |     r3 |= r2;
    0x0004f83e lsls r7, r3, 0x1e                                 |     r7 = r3 << 0x1e;
    0x0004f840 strh r3, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r3;
                                                                 |     if (r7 >= r3) {
    0x0004f842 bmi 0x4f84c                                       |         
    0x0004f844 tst.w r3, 0xc                                     |         
                                                                 |         if ((r3 & 0xc) != 0) {
    0x0004f848 bne.w 0x539fe                                     |             goto label_458;
                                                                 |         }
                                                                 |     }
                                                                 | label_241:
    0x0004f84c lsls r6, r3, 0x11                                 |     r6 = r3 << 0x11;
    0x0004f84e bic r2, r3, 0xc                                   |     r2 = BIT_MASK (r3, 0xc);
    0x0004f852 strh r2, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r2;
                                                                 |     if (r6 < r3) {
    0x0004f854 bmi.w 0x52e92                                     |         goto label_459;
                                                                 |     }
    0x0004f858 bic r3, r3, 0x4000                                |     r3 = BIT_MASK (r3, 0x4000);
    0x0004f85c bic r3, r3, 0x1c                                  |     r3 = BIT_MASK (r3, 0x1c);
    0x0004f860 strh r3, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r3;
    0x0004f862 b.w 0x4d26a                                       |     goto label_2;
    0x0004f866 ldr.w r0, [fp, 0x128]                             |     r0 = *(arg_128h);
    0x0004f86a ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f86c cmp r0, 0                                         |     
    0x0004f86e ldr r4, [r3, 0x10]                                |     r4 = *((r3 + 0x10));
                                                                 |     if (r0 <= 0) {
    0x0004f870 ble.w 0x50570                                     |         goto label_460;
                                                                 |     }
    0x0004f874 ldr.w r3, [fp, 0x140]                             |     r3 = *(arg_140h);
    0x0004f878 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004f87a bne.w 0x50570                                     |         goto label_460;
                                                                 |     }
    0x0004f87e cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x0004f880 bne.w 0x53d82                                     |         goto label_461;
                                                                 |     }
    0x0004f884 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004f886 mov.w sb, 6                                       |     sb = 6;
    0x0004f88a add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x0004f88e ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f890 ldr r0, [r3, 0x2c]                                |     r0 = *((r3 + 0x2c));
    0x0004f892 b.w 0x50538                                       |     goto label_39;
    0x0004f896 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004f898 add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x0004f89c ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f89e ldrb r3, [r3, 0xc]                                |     r3 = *((r3 + 0xc));
                                                                 |     if (r3 == 0) {
    0x0004f8a0 cbnz r3, 0x4f8ac                                  |         
    0x0004f8a2 ldr.w r2, [fp, 0x18]                              |         r2 = *(arg_18h);
    0x0004f8a6 lsls r0, r2, 0x11                                 |         r0 = r2 << 0x11;
                                                                 |         if (r0 < r2) {
    0x0004f8a8 bmi.w 0x512b8                                     |             goto label_462;
                                                                 |         }
                                                                 |     }
    0x0004f8ac ldr r0, [sp, 0x20]                                |     r0 = *(arg_20h);
    0x0004f8ae ldr.w r2, [fp, 0x10]                              |     r2 = *(arg_10h);
    0x0004f8b2 ldr r1, [r0, 4]                                   |     r1 = *((r0 + 4));
    0x0004f8b4 ldr.w sb, [r0, 8]                                 |     sb = *((r0 + 8));
    0x0004f8b8 add.w r2, r2, r1, lsl 4                           |     r2 += (r1 << 4);
    0x0004f8bc ldr r5, [r2, 4]                                   |     r5 = *((r2 + 4));
    0x0004f8be ldrb r2, [r5, 9]                                  |     r2 = *((r5 + 9));
    0x0004f8c0 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0004f8c2 bne.w 0x51452                                     |         goto label_463;
                                                                 |     }
    0x0004f8c6 str.w r8, [sp, 0x1c]                              |     __asm ("str.w r8, [arg_1ch]");
    0x0004f8ca b.w 0x4d26a                                       |     goto label_2;
    0x0004f8ce ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f8d0 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x0004f8d2 mov r0, fp                                        |     r0 = fp;
    0x0004f8d4 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0004f8d6 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f8d8 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004f8da ldr.w r4, [r3, r2, lsl 2]                         |     offset_37 = r2 << 2;
                                                                 |     r4 = *((r3 + offset_37));
    0x0004f8dc ands r2, r4                                       |     r2 &= r4;
    0x0004f8de movs r3, 0                                        |     r3 = 0;
    0x0004f8e0 mov r2, r7                                        |     r2 = r7;
    0x0004f8e2 str r3, [r7]                                      |     *(r7) = r3;
    0x0004f8e4 mov r1, r4                                        |     r1 = r4;
    0x0004f8e6 bl 0x30a88                                        |     r0 = fcn_00030a88 (r0, r1, r2);
    0x0004f8ea mov r6, r0                                        |     r6 = r0;
    0x0004f8ec b.w 0x4db62                                       |     goto label_28;
    0x0004f8f0 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004f8f2 ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0004f8f4 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x0004f8f6 ldr r0, [r2, 0xc]                                 |     r0 = *((r2 + 0xc));
    0x0004f8f8 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004f8fc add.w r3, r1, r3, lsl 3                           |     r3 = r1 + (r3 << 3);
    0x0004f900 ldr r2, [r3, 0x10]                                |     r2 = *((r3 + 0x10));
    0x0004f902 ldr r1, [r3, 0x14]                                |     r1 = *((r3 + 0x14));
    0x0004f904 adds r2, r0, r2                                   |     r2 = r0 + r2;
    0x0004f906 str r2, [r3, 0x10]                                |     *((r3 + 0x10)) = r2;
    0x0004f908 adc.w r1, r1, r0, asr 31                          |     __asm ("adc.w r1, r1, r0, asr 31");
    0x0004f90c orrs r2, r1                                       |     r2 |= r1;
    0x0004f90e str r1, [r3, 0x14]                                |     *((r3 + 0x14)) = r1;
    0x0004f910 itete eq                                          |     
                                                                 |     if (r2 != r1) {
    0x0004f912 ldreq r3, [sp, 0x20]                              |         r3 = *(arg_20h);
                                                                 |     }
                                                                 |     if (r2 == r1) {
    0x0004f914 ldrne r3, [sp, 0x1c]                              |         r3 = *(arg_1ch);
                                                                 |     }
                                                                 |     if (r2 != r1) {
    0x0004f916 ldreq r3, [r3, 8]                                 |         r3 = *((r3 + 8));
                                                                 |     }
                                                                 |     if (r2 == r1) {
    0x0004f918 addne r3, 1                                       |         r3++;
                                                                 |     }
    0x0004f91a str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004f91c b.w 0x4d26a                                       |     goto label_2;
    0x0004f920 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004f922 ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0004f924 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x0004f926 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004f92a add.w r3, r1, r3, lsl 3                           |     r3 = r1 + (r3 << 3);
    0x0004f92e ldr r1, [r2, 0xc]                                 |     r1 = *((r2 + 0xc));
    0x0004f930 ldr r2, [r3, 0x10]                                |     r2 = *((r3 + 0x10));
    0x0004f932 adds r2, r1, r2                                   |     r2 = r1 + r2;
    0x0004f934 str r2, [r3, 0x10]                                |     *((r3 + 0x10)) = r2;
    0x0004f936 ldr r2, [r3, 0x14]                                |     r2 = *((r3 + 0x14));
    0x0004f938 adc.w r2, r2, r1, asr 31                          |     __asm ("adc.w r2, r2, r1, asr 31");
    0x0004f93c cmp r2, 0                                         |     
    0x0004f93e str r2, [r3, 0x14]                                |     *((r3 + 0x14)) = r2;
    0x0004f940 itete lt                                          |     
                                                                 |     if (r2 >= 0) {
    0x0004f942 ldrlt r3, [sp, 0x20]                              |         r3 = *(arg_20h);
                                                                 |     }
                                                                 |     if (r2 < 0) {
    0x0004f944 ldrge r3, [sp, 0x1c]                              |         r3 = *(arg_1ch);
                                                                 |     }
                                                                 |     if (r2 >= 0) {
    0x0004f946 ldrlt r3, [r3, 8]                                 |         r3 = *((r3 + 8));
                                                                 |     }
                                                                 |     if (r2 < 0) {
    0x0004f948 addge r3, 1                                       |         r3++;
                                                                 |     }
    0x0004f94a str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004f94c b.w 0x4d26a                                       |     goto label_2;
    0x0004f950 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f952 ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004f954 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004f956 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004f95a add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0004f95e ldrd r2, r3, [r3, 0x10]                           |     __asm ("ldrd r2, r3, [r3, 0x10]");
    0x0004f962 cmp r2, 1                                         |     
    0x0004f964 sbcs r3, r3, 0                                    |     __asm ("sbcs r3, r3, 0");
    0x0004f968 itete ge                                          |     
                                                                 |     if (r2 < 1) {
    0x0004f96a ldrge r3, [sp, 0x20]                              |         r3 = *(arg_20h);
                                                                 |     }
                                                                 |     if (r2 >= 1) {
    0x0004f96c ldrlt r3, [sp, 0x1c]                              |         r3 = *(arg_1ch);
                                                                 |     }
                                                                 |     if (r2 < 1) {
    0x0004f96e ldrge r3, [r3, 8]                                 |         r3 = *((r3 + 8));
                                                                 |     }
                                                                 |     if (r2 >= 1) {
    0x0004f970 addlt r3, 1                                       |         r3++;
                                                                 |     }
    0x0004f972 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004f974 b.w 0x4d26a                                       |     goto label_2;
    0x0004f978 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f97a ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004f97c add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004f980 lsls r4, r3, 3                                    |     r4 = r3 << 3;
    0x0004f982 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004f984 ldr.w r3, [r3, 0xb0]                              |     r3 = *((r3 + 0xb0));
                                                                 |     if (r3 != 0) {
    0x0004f988 cbnz r3, 0x4f9c4                                  |         goto label_464;
                                                                 |     }
    0x0004f98a ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004f98c add r4, r3                                        |     r4 += r3;
                                                                 | label_29:
    0x0004f98e ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004f990 mov r0, r4                                        |     r0 = r4;
    0x0004f992 adds r3, 1                                        |     r3++;
    0x0004f994 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004f996 bl 0xc318                                         |     fcn_0000c318 (r0, r1);
    0x0004f99a ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f99c ldr r5, [r3, 8]                                   |     r5 = *((r3 + 8));
    0x0004f99e ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004f9a0 add.w r5, r5, r5, lsl 2                           |     r5 += (r5 << 2);
    0x0004f9a4 add.w r5, r3, r5, lsl 3                           |     r5 = r3 + (r5 << 3);
    0x0004f9a8 mov r0, r5                                        |     r0 = r5;
    0x0004f9aa bl 0xc318                                         |     fcn_0000c318 (r0, r1);
    0x0004f9ae ldrd r1, r2, [r5, 0x10]                           |     __asm ("ldrd r1, r2, [r5, 0x10]");
    0x0004f9b2 ldrd r0, r3, [r4, 0x10]                           |     __asm ("ldrd r0, r3, [r4, 0x10]");
    0x0004f9b6 cmp r0, r1                                        |     
    0x0004f9b8 sbcs r3, r2                                       |     __asm ("sbcs r3, r2");
    0x0004f9ba it lt                                             |     
                                                                 |     if (r0 < r1) {
    0x0004f9bc strdlt r1, r2, [r4, 0x10]                         |         __asm ("strdlt r1, r2, [r4, 0x10]");
                                                                 |     }
    0x0004f9c0 b.w 0x4d26a                                       |     goto label_2;
                                                                 |     do {
                                                                 | label_464:
    0x0004f9c4 mov r2, r3                                        |         r2 = r3;
    0x0004f9c6 ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x0004f9c8 cmp r3, 0                                         |         
    0x0004f9ca bne 0x4f9c4                                       |         
                                                                 |     } while (r3 != 0);
    0x0004f9cc ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x0004f9ce add r4, r3                                        |     r4 += r3;
    0x0004f9d0 b 0x4f98e                                         |     goto label_29;
    0x0004f9d2 ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004f9d4 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f9d6 ldr r1, [sp, 0x38]                                |     r1 = *(arg_38h);
    0x0004f9d8 adds r2, 1                                        |     r2++;
    0x0004f9da ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x0004f9dc str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004f9de movs r2, 8                                        |     r2 = 8;
    0x0004f9e0 strh r2, [r1, 0x1c]                               |     *((r1 + 0x1c)) = r2;
    0x0004f9e2 ldrd r2, r3, [r3]                                 |     __asm ("ldrd r2, r3, [r3]");
    0x0004f9e6 strd r2, r3, [r1, 8]                              |     __asm ("strd r2, r3, [r1, 8]");
    0x0004f9ea b.w 0x4d26a                                       |     goto label_2;
    0x0004f9ee ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004f9f0 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004f9f2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004f9f4 beq.w 0x50d62                                     |         goto label_465;
                                                                 |     }
    0x0004f9f8 ldrd r3, r2, [fp, 0x1f0]                          |     __asm ("ldrd r3, r2, [arg_1f0h]");
    0x0004f9fc orrs r3, r2                                       |     r3 |= r2;
                                                                 |     if (r3 == r2) {
    0x0004f9fe beq.w 0x52898                                     |         goto label_466;
                                                                 |     }
    0x0004fa02 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004fa04 adds r3, 1                                        |     r3++;
    0x0004fa06 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004fa08 b.w 0x4d26a                                       |     goto label_2;
    0x0004fa0c ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004fa0e ldr.w r2, [fp, 0x18]                              |     r2 = *(arg_18h);
    0x0004fa12 adds r3, 1                                        |     r3++;
    0x0004fa14 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004fa16 lsls r6, r2, 7                                    |     r6 = r2 << 7;
    0x0004fa18 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004fa1a ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0004fa1c asr.w r1, r3, 0x1f                                |     r1 = r3 >> 0x1f;
                                                                 |     if (r6 < r2) {
    0x0004fa20 bmi.w 0x50d48                                     |         goto label_467;
                                                                 |     }
    0x0004fa24 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004fa26 ldr r2, [r2, 4]                                   |     r2 = *((r2 + 4));
    0x0004fa28 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0004fa2a beq.w 0x5287c                                     |         goto label_468;
                                                                 |     }
    0x0004fa2e ldr.w r2, [fp, 0x1f0]                             |     r2 = *(arg_1f0h);
    0x0004fa32 adds r2, r2, r3                                   |     r2 += r3;
    0x0004fa34 ldr.w r3, [fp, 0x1f4]                             |     r3 = *(arg_1f4h);
    0x0004fa38 str.w r2, [fp, 0x1f0]                             |     __asm ("str.w r2, [arg_1f0h]");
    0x0004fa3c adc.w r3, r1, r3                                  |     __asm ("adc.w r3, r1, r3");
    0x0004fa40 str.w r3, [fp, 0x1f4]                             |     __asm ("str.w r3, [arg_1f4h]");
    0x0004fa44 b.w 0x4d26a                                       |     goto label_2;
    0x0004fa48 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004fa4a movw r4, 0x2460                                   |     r4 = 0x2460;
    0x0004fa4e ldr r5, [r3, 4]                                   |     r5 = *((r3 + 4));
    0x0004fa50 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004fa52 ldr.w r1, [r3, 0xb0]                              |     r1 = *((r3 + 0xb0));
    0x0004fa56 ldr r3, [sp, 0x38]                                |     r3 = *(arg_38h);
    0x0004fa58 ldr r2, [r1, 8]                                   |     r2 = *((r1 + 8));
    0x0004fa5a ldrh r0, [r3, 0x1c]                               |     r0 = *((r3 + 0x1c));
    0x0004fa5c ldr r3, [r1, 0x2c]                                |     r3 = *((r1 + 0x2c));
    0x0004fa5e ldr r7, [r1, 0xc]                                 |     r7 = *((r1 + 0xc));
    0x0004fa60 tst r4, r0                                        |     
    0x0004fa62 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004fa64 lsls r3, r0, 0xe                                  |     r3 = r0 << 0xe;
    0x0004fa66 add.w r2, r2, r3, lsl 2                           |     r2 += (r3 << 2);
    0x0004fa6a ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x0004fa6c add r3, r5                                        |     r3 += r5;
    0x0004fa6e add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004fa72 add.w r7, r7, r3, lsl 3                           |     r7 += (r3 << 3);
                                                                 |     if (r3 != r0) {
    0x0004fa76 bne.w 0x5218e                                     |         goto label_469;
                                                                 |     }
                                                                 | label_129:
    0x0004fa7a ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x0004fa7c mov r3, r7                                        |     r3 = r7;
    0x0004fa7e add.w r6, r7, 0x20                                |     r6 = r7 + 0x20;
                                                                 |     do {
    0x0004fa82 ldr r5, [r3]                                      |         r5 = *(r3);
    0x0004fa84 adds r3, 0x10                                     |         r3 += 0x10;
    0x0004fa86 ldr r4, [r3, -0xc]                                |         r4 = *((r3 - 0xc));
    0x0004fa8a adds r2, 0x10                                     |         r2 += 0x10;
    0x0004fa8c ldr r0, [r3, -0x8]                                |         r0 = *((r3 - 0x8));
    0x0004fa90 ldr r1, [r3, -0x4]                                |         r1 = *((r3 - 0x4));
    0x0004fa94 cmp r3, r6                                        |         
    0x0004fa96 str r5, [r2, -0x10]                               |         *((r2 - 0x10)) = r5;
    0x0004fa9a str r4, [r2, -0xc]                                |         *((r2 - 0xc)) = r4;
    0x0004fa9e str r0, [r2, -0x8]                                |         *((r2 - 0x8)) = r0;
    0x0004faa2 str r1, [r2, -0x4]                                |         *((r2 - 0x4)) = r1;
    0x0004faa6 bne 0x4fa82                                       |         
                                                                 |     } while (r3 != r6);
    0x0004faa8 ldr r3, [r3]                                      |     r3 = *(r3);
    0x0004faaa str r3, [r2]                                      |     *(r2) = r3;
    0x0004faac ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004faae ldrh r3, [r7, 0x1c]                               |     r3 = *((r7 + 0x1c));
    0x0004fab0 ldr r1, [sp, 0x38]                                |     r1 = *(arg_38h);
    0x0004fab2 adds r2, 1                                        |     r2++;
    0x0004fab4 lsls r7, r3, 0x14                                 |     r7 = r3 << 0x14;
    0x0004fab6 str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004fab8 mov.w r2, 0                                       |     r2 = 0;
    0x0004fabc str r2, [r1, 0x20]                                |     *((r1 + 0x20)) = r2;
                                                                 |     if (r7 < r3) {
    0x0004fabe bmi.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004fac2 ldrh r3, [r1, 0x1c]                               |     r3 = *((r1 + 0x1c));
    0x0004fac4 bic r3, r3, 0x1c00                                |     r3 = BIT_MASK (r3, 0x1c00);
    0x0004fac8 orr r3, r3, 0x1000                                |     r3 |= 0x1000;
    0x0004facc strh r3, [r1, 0x1c]                               |     *((r1 + 0x1c)) = r3;
    0x0004face b.w 0x4d26a                                       |     goto label_2;
    0x0004fad2 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004fad4 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0004fad6 ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x0004fada add.w r3, r3, r2, lsl 4                           |     r3 += (r2 << 4);
    0x0004fade ldr r4, [r3, 4]                                   |     r4 = *((r3 + 4));
    0x0004fae0 ldr r5, [r4, 4]                                   |     r5 = *((r4 + 4));
    0x0004fae2 mov r0, r4                                        |     r0 = r4;
    0x0004fae4 bl 0xd140                                         |     fcn_0000d140 (r0);
    0x0004fae8 ldrb r3, [r5, 0x11]                               |     r3 = *((r5 + 0x11));
    0x0004faea cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004faec bne.w 0x50c74                                     |         goto label_470;
                                                                 |     }
                                                                 | label_50:
    0x0004faf0 ldrb r3, [r4, 9]                                  |     r3 = *((r4 + 9));
                                                                 |     if (r3 != 0) {
    0x0004faf2 cbz r3, 0x4fb06                                   |         
    0x0004faf4 ldr r5, [r4, 0xc]                                 |         r5 = *((r4 + 0xc));
    0x0004faf6 subs r5, 1                                        |         r5--;
    0x0004faf8 str r5, [r4, 0xc]                                 |         *((r4 + 0xc)) = r5;
                                                                 |         if (r5 != 0) {
    0x0004fafa cbnz r5, 0x4fb06                                  |             goto label_51;
                                                                 |         }
    0x0004fafc ldr r3, [r4, 4]                                   |         r3 = *((r4 + 4));
    0x0004fafe ldr r0, [r3, 0x38]                                |         r0 = *((r3 + 0x38));
    0x0004fb00 blx 0x63dc                                        |         fcn_000063dc ();
    0x0004fb04 strb r5, [r4, 0xa]                                |         *((r4 + 0xa)) = r5;
                                                                 |     }
                                                                 | label_51:
    0x0004fb06 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004fb08 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0004fb0a str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004fb0c b.w 0x4d26a                                       |     goto label_2;
    0x0004fb10 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004fb12 ldr r4, [r3, 4]                                   |     r4 = *((r3 + 4));
    0x0004fb14 ldr r1, [r3, 0x10]                                |     r1 = *((r3 + 0x10));
    0x0004fb16 ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004fb18 add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0004fb1c add.w r4, r3, r4, lsl 3                           |     r4 = r3 + (r4 << 3);
    0x0004fb20 mov r0, r4                                        |     r0 = r4;
    0x0004fb22 bl 0xe198                                         |     r0 = fcn_0000e198 (r0, r1, r2, r3);
    0x0004fb26 mov r6, r0                                        |     r6 = r0;
    0x0004fb28 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004fb2a bne.w 0x52198                                     |         goto label_471;
                                                                 |     }
                                                                 | label_130:
    0x0004fb2e ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0004fb30 lsls r2, r3, 0x1e                                 |     r2 = r3 << 0x1e;
                                                                 |     if (r2 < r3) {
    0x0004fb32 bpl 0x4fb44                                       |         
    0x0004fb34 ldrb r2, [r4, 0x1e]                               |         r2 = *((r4 + 0x1e));
    0x0004fb36 ldr r1, [sp, 0x70]                                |         r1 = *(arg_70h);
    0x0004fb38 cmp r2, r1                                        |         
                                                                 |         if (r2 == r1) {
    0x0004fb3a beq 0x4fb44                                       |             goto label_472;
                                                                 |         }
    0x0004fb3c mov r0, r4                                        |         r0 = r4;
    0x0004fb3e bl 0x17460                                        |         fcn_00017460 (r0, r1);
    0x0004fb42 ldrh r3, [r4, 0x1c]                               |         r3 = *((r4 + 0x1c));
                                                                 |     }
                                                                 | label_472:
    0x0004fb44 tst.w r3, 0x12                                    |     
                                                                 |     if ((r3 & 0x12) == 0) {
    0x0004fb48 beq.w 0x4dbae                                     |         goto label_20;
                                                                 |     }
    0x0004fb4c lsls r7, r3, 0x11                                 |     r7 = r3 << 0x11;
    0x0004fb4e ldr r2, [r4, 0x18]                                |     r2 = *((r4 + 0x18));
    0x0004fb50 itt mi                                            |     
                                                                 |     if (r7 >= r3) {
    0x0004fb52 ldrmi r3, [r4, 0x10]                              |         r3 = *((r4 + 0x10));
                                                                 |     }
                                                                 |     if (r7 >= r3) {
    0x0004fb54 addmi r2, r2, r3                                  |         r2 += r3;
                                                                 |     }
    0x0004fb56 ldr r3, [r4]                                      |     r3 = *(r4);
    0x0004fb58 ldr r3, [r3, 0x58]                                |     r3 = *((r3 + 0x58));
    0x0004fb5a cmp r3, r2                                        |     
                                                                 |     if (r3 >= r2) {
    0x0004fb5c bge.w 0x4dbae                                     |         goto label_20;
                                                                 |     }
    0x0004fb60 b 0x4f592                                         |     goto label_30;
    0x0004fb62 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004fb64 ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004fb66 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004fb68 adds r2, 1                                        |     r2++;
    0x0004fb6a str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004fb6c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004fb6e beq.w 0x52428                                     |         goto label_473;
                                                                 |     }
    0x0004fb72 ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x0004fb74 ldrb.w r3, [r2, 0x58]                             |     r3 = *((r2 + 0x58));
    0x0004fb78 orr r3, r3, 0x20                                  |     r3 |= 0x20;
    0x0004fb7c strb.w r3, [r2, 0x58]                             |     *((r2 + 0x58)) = r3;
    0x0004fb80 b.w 0x4d26a                                       |     goto label_2;
    0x0004fb84 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004fb86 ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0004fb88 ldrd r2, r3, [r3, 4]                              |     __asm ("ldrd r2, r3, [r3, 4]");
    0x0004fb8c add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004fb90 add.w r3, r1, r3, lsl 3                           |     r3 = r1 + (r3 << 3);
    0x0004fb94 str r3, [sp, 0x38]                                |     *(arg_38h) = r3;
    0x0004fb96 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004fb98 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004fb9a ldr.w r3, [r3, r2, lsl 2]                         |     offset_38 = r2 << 2;
                                                                 |     r3 = *((r3 + offset_38));
    0x0004fb9e ldr r3, [r3, 0x40]                                |     r3 = *((r3 + 0x40));
    0x0004fba0 ldr r2, [r3, 0x28]                                |     r2 = *((r3 + 0x28));
    0x0004fba2 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0004fba4 beq.w 0x5241e                                     |         goto label_474;
                                                                 |     }
    0x0004fba8 ldr r2, [r2, 4]                                   |     r2 = *((r2 + 4));
    0x0004fbaa ldr r3, [r3, 0x24]                                |     r3 = *((r3 + 0x24));
    0x0004fbac add.w r2, r2, r2, lsl 1                           |     r2 += (r2 << 1);
    0x0004fbb0 add.w r3, r3, r2, lsl 4                           |     r3 += (r2 << 4);
    0x0004fbb4 ldr r4, [r3, 0x14]                                |     r4 = *((r3 + 0x14));
    0x0004fbb6 ldr r5, [r3, 0x20]                                |     r5 = *((r3 + 0x20));
    0x0004fbf0 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004fbf2 movs r3, 0x1b                                     |     r3 = 0x1b;
    0x0004fbf4 ldr r1, [r2, 0x10]                                |     r1 = *((r2 + 0x10));
    0x0004fbf6 strb r3, [r2]                                     |     *(r2) = r3;
    0x0004fbf8 mov r3, r1                                        |     r3 = r1;
                                                                 |     if (r1 == 0) {
    0x0004fbfa cbz r1, 0x4fc14                                   |         goto label_475;
                                                                 |     }
    0x0004fbfc ldrb r3, [r1]                                     |     r3 = *(r1);
    0x0004fbfe cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004fc00 beq.w 0x53176                                     |         goto label_476;
                                                                 |     }
    0x0004fc04 mov r3, r1                                        |     r3 = r1;
                                                                 |     do {
    0x0004fc06 ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x0004fc0a cmp r2, 0                                         |         
    0x0004fc0c bne 0x4fc06                                       |         
                                                                 |     } while (r2 != 0);
                                                                 | label_198:
    0x0004fc0e subs r3, r3, r1                                   |     r3 -= r1;
    0x0004fc10 bic r3, r3, 0xc0000000                            |     r3 = BIT_MASK (r3, 0xc0000000);
                                                                 | label_475:
    0x0004fc14 ldr r4, [sp, 0x70]                                |     r4 = *(arg_70h);
    0x0004fc16 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004fc18 cmp r4, 1                                         |     
    0x0004fc1a it eq                                             |     
                                                                 |     if (r4 != 1) {
    0x0004fc1c moveq r6, 0                                       |         r6 = 0;
                                                                 |     }
    0x0004fc1e str r3, [r2, 4]                                   |     *((r2 + 4)) = r3;
                                                                 |     if (r4 != 1) {
    0x0004fc20 bne.w 0x50b84                                     |         goto label_477;
                                                                 |     }
                                                                 | label_47:
    0x0004fc24 ldr.w r2, [fp, 0x58]                              |     r2 = *(arg_58h);
    0x0004fc28 cmp r2, r3                                        |     
                                                                 |     if (r2 >= r3) {
    0x0004fc2a bge.w 0x4e93c                                     |         goto label_31;
                                                                 |     }
    0x0004fc2e b 0x4f592                                         |     goto label_30;
    0x0004fc40 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004fc42 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004fc44 ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0004fc46 adds r3, 1                                        |     r3++;
    0x0004fc48 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004fc4a ldrd r3, r2, [r2, 4]                              |     __asm ("ldrd r3, r2, [r2, 4]");
    0x0004fc4e add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004fc52 add.w r2, r2, r2, lsl 2                           |     r2 += (r2 << 2);
    0x0004fc56 add.w r0, r1, r3, lsl 3                           |     r0 = r1 + (r3 << 3);
    0x0004fc5a add.w r3, r1, r2, lsl 3                           |     r3 = r1 + (r2 << 3);
    0x0004fc5e mov r2, r3                                        |     r2 = r3;
    0x0004fc60 str r3, [sp, 0x38]                                |     *(arg_38h) = r3;
    0x0004fc62 ldrh r3, [r0, 0x1c]                               |     r3 = *((r0 + 0x1c));
    0x0004fc64 lsls r3, r3, 0x1f                                 |     r3 <<= 0x1f;
                                                                 |     if (r3 < r3) {
    0x0004fc66 bmi.w 0x50d3e                                     |         goto label_478;
                                                                 |     }
    0x0004fc6a bl 0xa1d8                                         |     fcn_0000a1d8 (r0);
    0x0004fc6e ldr r3, [sp, 0x38]                                |     r3 = *(arg_38h);
    0x0004fc70 movw r2, 0x2460                                   |     r2 = 0x2460;
    0x0004fc74 mvns r5, r0                                       |     r5 = ~r0;
    0x0004fc76 mvns r4, r1                                       |     r4 = ~r1;
    0x0004fc78 ldrh r3, [r3, 0x1c]                               |     r3 = *((r3 + 0x1c));
    0x0004fc7a tst r2, r3                                        |     
                                                                 |     if ((r2 & r3) != 0) {
    0x0004fc7c bne.w 0x52bba                                     |         goto label_479;
                                                                 |     }
                                                                 | label_164:
    0x0004fc80 ldr r6, [sp, 0x38]                                |     r6 = *(arg_38h);
    0x0004fc82 ldr r1, [r6, 0x24]                                |     r1 = *((r6 + 0x24));
                                                                 |     if (r1 != 0) {
    0x0004fc84 cbz r1, 0x4fc90                                   |         
    0x0004fc86 ldr r0, [r6]                                      |         r0 = *(r6);
    0x0004fc88 bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
    0x0004fc8c movs r3, 0                                        |         r3 = 0;
    0x0004fc8e str r3, [r6, 0x24]                                |         *((r6 + 0x24)) = r3;
                                                                 |     }
    0x0004fc90 ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x0004fc92 movs r3, 0                                        |     r3 = 0;
    0x0004fc94 str r3, [r2, 4]                                   |     *((r2 + 4)) = r3;
    0x0004fc96 movs r3, 4                                        |     r3 = 4;
    0x0004fc98 strd r5, r4, [r2, 0x10]                           |     __asm ("strd r5, r4, [r2, 0x10]");
    0x0004fc9c strh r3, [r2, 0x1c]                               |     *((r2 + 0x1c)) = r3;
    0x0004fc9e b.w 0x4d26a                                       |     goto label_2;
    0x0004fca2 ldr r0, [sp, 0x20]                                |     r0 = *(arg_20h);
    0x0004fca4 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004fca6 ldr r2, [r0, 4]                                   |     r2 = *((r0 + 4));
    0x0004fca8 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004fcaa ldr.w r1, [r3, r2, lsl 2]                         |     offset_39 = r2 << 2;
                                                                 |     r1 = *((r3 + offset_39));
    0x0004fcae mov r2, r0                                        |     r2 = r0;
    0x0004fcb0 ldr r3, [r0, 0xc]                                 |     r3 = *((r0 + 0xc));
    0x0004fcb2 ldr r0, [sp, 0x44]                                |     r0 = *(arg_44h);
    0x0004fcb4 ldr r4, [r2, 0x10]                                |     r4 = *((r2 + 0x10));
    0x0004fcb6 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004fcba add.w r3, r0, r3, lsl 3                           |     r3 = r0 + (r3 << 3);
    0x0004fcbe ldr r0, [r1, 0x40]                                |     r0 = *((r1 + 0x40));
    0x0004fcc0 ldr r2, [r0, 0x28]                                |     r2 = *((r0 + 0x28));
    0x0004fcc2 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0004fcc4 beq.w 0x526b4                                     |         goto label_480;
                                                                 |     }
    0x0004fcc8 ldr r5, [r2, 4]                                   |     r5 = *((r2 + 4));
    0x0004fcca ldr r2, [r0, 0x24]                                |     r2 = *((r0 + 0x24));
    0x0004fccc add.w r5, r5, r5, lsl 1                           |     r5 += (r5 << 1);
    0x0004fcd0 add.w r2, r2, r5, lsl 4                           |     r2 += (r5 << 4);
    0x0004fcd4 ldr.w ip, [r2, 0x14]                              |     ip = *((r2 + 0x14));
    0x0004fcd8 ldr r2, [r2, 0x20]                                |     r2 = *((r2 + 0x20));
                                                                 | label_147:
    0x0004fcda ldr r7, [r0, 0x34]                                |     r7 = *((r0 + 0x34));
    0x0004fcdc ldr r5, [r3, 4]                                   |     r5 = *((r3 + 4));
    0x0004fcde ldr r6, [r3, 0x18]                                |     r6 = *((r3 + 0x18));
                                                                 |     if (r2 != 0) {
    0x0004fce0 cbz r2, 0x4fcec                                   |         
    0x0004fce2 ldr r0, [r1, 8]                                   |         r0 = *((r1 + 8));
    0x0004fce4 mov r3, r7                                        |         r3 = r7;
    0x0004fce6 mov r1, ip                                        |         r1 = ip;
    0x0004fce8 bl 0xbf78                                         |         fcn_0000bf78 (r0, r1, r2, r3, r4, r5);
                                                                 |     }
    0x0004fcec cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0004fcee beq.w 0x50b68                                     |         goto label_481;
                                                                 |     }
    0x0004fcf2 strh r4, [r7, 4]                                  |     *((r7 + 4)) = r4;
                                                                 |     if (r4 <= 0) {
    0x0004fcf4 ble.w 0x50b68                                     |         goto label_481;
                                                                 |     }
    0x0004fcf8 ldr r2, [r7, 8]                                   |     r2 = *((r7 + 8));
    0x0004fcfa movs r1, 0                                        |     r1 = 0;
    0x0004fcfc b 0x4fd08                                         |     
                                                                 |     while (r3 >= r3) {
    0x0004fcfe adds r1, 1                                        |         r1++;
    0x0004fd00 adds r2, 0x28                                     |         r2 += 0x28;
    0x0004fd02 cmp r4, r1                                        |         
                                                                 |         if (r4 == r1) {
    0x0004fd04 beq.w 0x50b68                                     |             goto label_481;
                                                                 |         }
    0x0004fd08 ldrh r3, [r2, 0x1c]                               |         r3 = *((r2 + 0x1c));
    0x0004fd0a lsls r3, r3, 0x1f                                 |         r3 <<= 0x1f;
    0x0004fd0c bpl 0x4fcfe                                       |         
                                                                 |     }
                                                                 | label_46:
    0x0004fd0e ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004fd10 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0004fd12 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004fd14 b.w 0x4d26a                                       |     goto label_2;
    0x0004fd18 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004fd1a ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004fd1c ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0004fd1e add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004fd22 add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0004fd26 ldrh r3, [r3, 0x1c]                               |     r3 = *((r3 + 0x1c));
    0x0004fd28 lsls r4, r3, 0x1f                                 |     r4 = r3 << 0x1f;
    0x0004fd2a itete pl                                          |     
                                                                 |     if (r4 < r3) {
    0x0004fd2c ldrpl r3, [sp, 0x20]                              |         r3 = *(arg_20h);
                                                                 |     }
                                                                 |     if (r4 >= r3) {
    0x0004fd2e ldrmi r3, [sp, 0x1c]                              |         r3 = *(arg_1ch);
                                                                 |     }
                                                                 |     if (r4 < r3) {
    0x0004fd30 ldrpl r3, [r3, 8]                                 |         r3 = *((r3 + 8));
                                                                 |     }
                                                                 |     if (r4 >= r3) {
    0x0004fd32 addmi r3, 1                                       |         r3++;
                                                                 |     }
    0x0004fd34 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004fd36 b.w 0x4d26a                                       |     goto label_2;
    0x0004fd3a ldr r5, [sp, 0x24]                                |     r5 = *((sp + 0x24));
    0x0004fd3c ldr r4, [sp, 0x20]                                |     r4 = *(arg_20h);
    0x0004fd3e ldr r3, [r5, 0x38]                                |     r3 = *((r5 + 0x38));
    0x0004fd40 mov r0, r5                                        |     r0 = r5;
    0x0004fd42 ldr r2, [r4, 4]                                   |     r2 = *((r4 + 4));
    0x0004fd44 ldr.w r1, [r3, r2, lsl 2]                         |     offset_40 = r2 << 2;
                                                                 |     r1 = *((r3 + offset_40));
    0x0004fd48 add.w r3, r3, r2, lsl 2                           |     r3 += (r2 << 2);
                                                                 |     if (r1 != 0) {
    0x0004fd4c cbz r1, 0x4fd5c                                   |         
    0x0004fd4e bl 0x2e3cc                                        |         fcn_0002e3cc (r0, r1);
    0x0004fd52 ldr r2, [r4, 4]                                   |         r2 = *((r4 + 4));
    0x0004fd54 mov r0, r5                                        |         r0 = r5;
    0x0004fd56 ldr r3, [r5, 0x38]                                |         r3 = *((r5 + 0x38));
    0x0004fd58 add.w r3, r3, r2, lsl 2                           |         r3 += (r2 << 2);
                                                                 |     }
    0x0004fd5c ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004fd5e adds r2, 1                                        |     r2++;
    0x0004fd60 str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004fd62 movs r2, 0                                        |     r2 = 0;
    0x0004fd64 str r2, [r3]                                      |     *(r3) = r2;
    0x0004fd66 b.w 0x4d26a                                       |     goto label_2;
    0x0004fd6a ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004fd6c ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x0004fd6e ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
    0x0004fd70 ldr r1, [r3, 4]                                   |     r1 = *((r3 + 4));
    0x0004fd72 movs r3, 0                                        |     r3 = 0;
    0x0004fd74 str r3, [sp]                                      |     *(sp) = r3;
    0x0004fd76 mov.w r3, -1                                      |     r3 = -1;
    0x0004fd7a bl 0x2e430                                        |     r0 = fcn_0002e430 (r0, r1, r2, r3, r4, r5);
    0x0004fd7e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004fd80 beq.w 0x4d4ec                                     |         goto label_6;
                                                                 |     }
    0x0004fd84 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004fd86 movs r2, 1                                        |     r2 = 1;
    0x0004fd88 strb r2, [r0, 0x19]                               |     *((r0 + 0x19)) = r2;
    0x0004fd8a ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004fd8c adds r3, 1                                        |     r3++;
    0x0004fd8e str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004fd90 ldrb r3, [r0, 0x1c]                               |     r3 = *((r0 + 0x1c));
    0x0004fd92 ldr r2, [r2, 8]                                   |     r2 = *((r2 + 8));
    0x0004fd94 orr r3, r3, 4                                     |     r3 |= 4;
    0x0004fd98 strb r3, [r0, 0x1c]                               |     *((r0 + 0x1c)) = r3;
    0x0004fd9a str r2, [r0, 0x10]                                |     *((r0 + 0x10)) = r2;
    0x0004fd9c b.w 0x4d26a                                       |     goto label_2;
    0x0004fda0 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004fda2 ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0004fda4 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x0004fda6 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004fdaa add.w r5, r1, r3, lsl 3                           |     r5 = r1 + (r3 << 3);
    0x0004fdae ldrd r4, r3, [r2, 8]                              |     __asm ("ldrd r4, r3, [r2, 8]");
    0x0004fdb2 ldrh r2, [r5, 0x1c]                               |     r2 = *((r5 + 0x1c));
    0x0004fdb4 add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0004fdb8 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004fdbc add.w r4, r1, r4, lsl 3                           |     r4 = r1 + (r4 << 3);
    0x0004fdc0 add.w r3, r1, r3, lsl 3                           |     r3 = r1 + (r3 << 3);
    0x0004fdc4 str r3, [sp, 0x38]                                |     *(arg_38h) = r3;
    0x0004fdc6 ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0004fdc8 orr.w r1, r2, r3                                  |     r1 = r2 | r3;
    0x0004fdcc lsls r1, r1, 0x1f                                 |     r1 <<= 0x1f;
                                                                 |     if (r1 < r1) {
    0x0004fdce bmi.w 0x51f12                                     |         goto label_482;
                                                                 |     }
    0x0004fdd2 lsls r7, r2, 0x11                                 |     r7 = r2 << 0x11;
                                                                 |     if (r7 < r2) {
    0x0004fdd4 bmi.w 0x5150e                                     |         goto label_483;
                                                                 |     }
                                                                 | label_78:
    0x0004fdd8 lsls r6, r3, 0x11                                 |     r6 = r3 << 0x11;
                                                                 |     if (r6 < r3) {
    0x0004fdda bmi.w 0x514fe                                     |         goto label_484;
                                                                 |     }
                                                                 | label_77:
    0x0004fdde ldrh r3, [r5, 0x1c]                               |     r3 = *((r5 + 0x1c));
    0x0004fde0 and r3, r3, 0x12                                  |     r3 &= 0x12;
    0x0004fde4 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004fde6 beq.w 0x514ec                                     |         goto label_485;
                                                                 |     }
                                                                 | label_76:
    0x0004fdea ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0004fdec and r3, r3, 0x12                                  |     r3 &= 0x12;
    0x0004fdf0 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004fdf2 beq.w 0x51440                                     |         goto label_486;
                                                                 |     }
                                                                 | label_73:
    0x0004fdf6 ldr r3, [r4, 0x18]                                |     r3 = *((r4 + 0x18));
    0x0004fdf8 ldr r6, [r5, 0x18]                                |     r6 = *((r5 + 0x18));
    0x0004fdfa add r6, r3                                        |     r6 += r3;
    0x0004fdfc ldr.w r3, [fp, 0x58]                              |     r3 = *(arg_58h);
    0x0004fe00 cmp r6, r3                                        |     
                                                                 |     if (r6 > r3) {
    0x0004fe02 bgt.w 0x4f592                                     |         goto label_30;
                                                                 |     }
    0x0004fe06 ldr r3, [sp, 0x38]                                |     r3 = *(arg_38h);
    0x0004fe08 adds r1, r6, 2                                    |     r1 = r6 + 2;
    0x0004fe0a subs r2, r4, r3                                   |     r2 = r4 - r3;
    0x0004fe0c mov r0, r3                                        |     r0 = r3;
    0x0004fe0e clz r2, r2                                        |     r2 &= r2;
    0x0004fe12 lsrs r2, r2, 5                                    |     r2 >>= 5;
    0x0004fe14 bl 0x172d4                                        |     r0 = fcn_000172d4 (r0, r1, r2);
    0x0004fe18 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004fe1a bne.w 0x4d4ec                                     |         goto label_6;
                                                                 |     }
    0x0004fe1e ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x0004fe20 ldrh r3, [r2, 0x1c]                               |     r3 = *((r2 + 0x1c));
    0x0004fe22 cmp r4, r2                                        |     
    0x0004fe24 bic r3, r3, 0x4180                                |     r3 = BIT_MASK (r3, 0x4180);
    0x0004fe28 bic r3, r3, 0x7f                                  |     r3 = BIT_MASK (r3, 0x7f);
    0x0004fe2c orr r3, r3, 2                                     |     r3 |= 2;
    0x0004fe30 strh r3, [r2, 0x1c]                               |     *((r2 + 0x1c)) = r3;
    0x0004fe32 mov r3, r2                                        |     r3 = r2;
                                                                 |     if (r4 != r2) {
    0x0004fe34 beq 0x4fe40                                       |         
    0x0004fe36 ldr r2, [r4, 0x18]                                |         r2 = *((r4 + 0x18));
    0x0004fe38 ldr r1, [r4, 4]                                   |         r1 = *((r4 + 4));
    0x0004fe3a ldr r0, [r3, 4]                                   |         r0 = *((r3 + 4));
    0x0004fe3c blx 0x6214                                        |         fcn_00006214 ();
                                                                 |     }
    0x0004fe40 ldr r3, [r4, 0x18]                                |     r3 = *((r4 + 0x18));
    0x0004fe42 ldr r4, [sp, 0x38]                                |     r4 = *(arg_38h);
    0x0004fe44 ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x0004fe46 ldr r1, [r5, 4]                                   |     r1 = *((r5 + 4));
    0x0004fe48 ldr r0, [r4, 4]                                   |     r0 = *((r4 + 4));
    0x0004fe4a adds r2, 1                                        |     r2++;
    0x0004fe4c str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x0004fe4e add r0, r3                                        |     r0 += r3;
    0x0004fe50 ldr r2, [r5, 0x18]                                |     r2 = *((r5 + 0x18));
    0x0004fe52 blx 0x6214                                        |     fcn_00006214 ();
    0x0004fe56 ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x0004fe58 movs r2, 0                                        |     r2 = 0;
    0x0004fe5a strb r2, [r3, r6]                                 |     *((r3 + r6)) = r2;
    0x0004fe5c ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x0004fe5e add r3, r6                                        |     r3 += r6;
    0x0004fe60 strb r2, [r3, 1]                                  |     *((r3 + 1)) = r2;
    0x0004fe62 ldr r3, [sp, 0x70]                                |     r3 = *(arg_70h);
    0x0004fe64 str r6, [r4, 0x18]                                |     *((r4 + 0x18)) = r6;
    0x0004fe66 strb r3, [r4, 0x1e]                               |     *((r4 + 0x1e)) = r3;
    0x0004fe68 ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0004fe6a orr r3, r3, 0x200                                 |     r3 |= 0x200;
    0x0004fe6e strh r3, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r3;
    0x0004fe70 b.w 0x4d26a                                       |     goto label_2;
    0x0004fe74 ldr r6, [sp, 0x20]                                |     r6 = *(arg_20h);
    0x0004fe76 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x0004fe78 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004fe7a movs r5, 0                                        |     r5 = 0;
    0x0004fe7c mov r1, r7                                        |     r1 = r7;
    0x0004fe7e ldr r2, [r6, 4]                                   |     r2 = *((r6 + 4));
    0x0004fe80 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004fe82 ldr.w r4, [r3, r2, lsl 2]                         |     offset_41 = r2 << 2;
                                                                 |     r4 = *((r3 + offset_41));
    0x0004fe86 ldr r0, [r4]                                      |     r0 = *(r4);
    0x0004fe88 str r5, [sp, 0xd8]                                |     *(arg_d8h) = r5;
    0x0004fe8a bl 0x2e998                                        |     fcn_0002e998 (r0, r1);
    0x0004fe8e ldr r3, [sp, 0xd8]                                |     r3 = *(arg_d8h);
    0x0004fe90 strh r5, [r4, 0x1a]                               |     *((r4 + 0x1a)) = r5;
    0x0004fe92 str r5, [r4, 0x44]                                |     *((r4 + 0x44)) = r5;
    0x0004fe94 strb r3, [r4, 0x19]                               |     *((r4 + 0x19)) = r3;
    0x0004fe96 ldr r2, [r6, 8]                                   |     r2 = *((r6 + 8));
    0x0004fe98 mov r6, r0                                        |     r6 = r0;
    0x0004fe9a cmp r3, r5                                        |     
    0x0004fe9c it ne                                             |     
                                                                 |     if (r3 != r5) {
    0x0004fe9e cmpne r2, r5                                      |         __asm ("cmpne r2, r5");
                                                                 |     }
    0x0004fea0 it gt                                             |     
                                                                 |     if (r3 > r5) {
    0x0004fea2 strgt r2, [sp, 0x1c]                              |         *(arg_1ch) = r2;
                                                                 |         goto label_487;
                                                                 |     }
                                                                 |     if (r3 <= r5) {
                                                                 | label_487:
    0x0004fea4 ble.w 0x4dbae                                     |         goto label_20;
                                                                 |     }
    0x0004fea8 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004feaa beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0004feae b.w 0x4d740                                       |     goto label_7;
    0x0004feb2 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004feb4 ldrb r3, [r2, 3]                                  |     r3 = *((r2 + 3));
    0x0004feb6 ldrd r1, r6, [r2, 0xc]                            |     __asm ("ldrd r1, r6, [r2, 0xc]");
    0x0004feba cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004febc bne.w 0x524d8                                     |         goto label_488;
                                                                 |     }
                                                                 | label_141:
    0x0004fec0 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004fec2 ldr.w r0, [r3, 0xb8]                              |     r0 = *((r3 + 0xb8));
    0x0004fec6 ldr.w r3, [fp, 0x80]                              |     r3 = *(arg_80h);
    0x0004feca cmp r0, r3                                        |     
                                                                 |     if (r0 >= r3) {
    0x0004fecc bge.w 0x51418                                     |         goto label_489;
                                                                 |     }
    0x0004fed0 ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0004fed2 add.w r1, r1, r1, lsl 2                           |     r1 += (r1 << 2);
    0x0004fed6 ldr r2, [r6, 0x10]                                |     r2 = *((r6 + 0x10));
    0x0004fed8 add.w r4, r3, r1, lsl 3                           |     r4 = r3 + (r1 << 3);
    0x0004fedc ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0004fede lsls r3, r3, 0x19                                 |     r3 <<= 0x19;
                                                                 |     if (r3 >= r3) {
    0x0004fee0 bpl.w 0x53054                                     |         goto label_490;
                                                                 |     }
    0x0004fee4 ldr r5, [r4, 0x10]                                |     r5 = *((r4 + 0x10));
    0x0004fee6 ldrd r7, r3, [r5, 0x3c]                           |     __asm ("ldrd r7, r3, [r5, 0x3c]");
                                                                 | label_190:
    0x0004feea ldr r1, [sp, 0x24]                                |     r1 = *((sp + 0x24));
    0x0004feec adds r4, r7, 1                                    |     r4 = r7 + 1;
    0x0004feee adds r0, 1                                        |     r0++;
    0x0004fef0 add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0004fef4 uxth r3, r3                                       |     r3 = (int16_t) r3;
    0x0004fef6 str.w r0, [r1, 0xb8]                              |     __asm ("str.w r0, [r1, 0xb8]");
    0x0004fefa add.w r0, r5, 0x20                                |     r0 = r5 + 0x20;
    0x0004fefe add.w r4, r0, r4, lsl 3                           |     r4 = r0 + (r4 << 3);
    0x0004ff02 str r0, [sp, 0x44]                                |     *(arg_44h) = r0;
    0x0004ff04 mov r0, r1                                        |     r0 = r1;
    0x0004ff06 ldr.w r1, [r1, 0xb0]                              |     r1 = *((r1 + 0xb0));
    0x0004ff0a str r1, [r5, 4]                                   |     *((r5 + 4)) = r1;
    0x0004ff0c ldr r1, [sp, 0x68]                                |     r1 = *(arg_68h);
    0x0004ff0e str r1, [r5, 0x20]                                |     *((r5 + 0x20)) = r1;
    0x0004ff10 ldr r1, [sp, 0x6c]                                |     r1 = *(arg_6ch);
    0x0004ff12 str r1, [r5, 0x24]                                |     *((r5 + 0x24)) = r1;
    0x0004ff14 ldr r1, [r6]                                      |     r1 = *(r6);
    0x0004ff16 str r1, [sp, 0x40]                                |     *(arg_40h) = r1;
    0x0004ff18 ldr r1, [r6, 4]                                   |     r1 = *((r6 + 4));
    0x0004ff1a mov r6, r0                                        |     r6 = r0;
    0x0004ff1c ldr r0, [r0, 0x5c]                                |     r0 = *((r0 + 0x5c));
    0x0004ff1e str r0, [r5, 0x44]                                |     *((r5 + 0x44)) = r0;
    0x0004ff20 add.w r0, r4, r3, lsl 2                           |     r0 = r4 + (r3 << 2);
    0x0004ff24 strd r7, r1, [r6, 0x1c]                           |     __asm ("strd r7, r1, [r6, 0x1c]");
    0x0004ff28 ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0004ff2a str r4, [r6, 0x38]                                |     *((r6 + 0x38)) = r4;
    0x0004ff2c movs r4, 0                                        |     r4 = 0;
    0x0004ff2e str.w r5, [r6, 0xb0]                              |     __asm ("str.w r5, [r6, 0xb0]");
    0x0004ff30 str r0, [r6, r2]                                  |     *((r6 + r2)) = r0;
    0x0004ff32 str r1, [r6, 8]                                   |     *((r6 + 8)) = r1;
    0x0004ff34 ldr r1, [sp, 0x40]                                |     r1 = *(arg_40h);
    0x0004ff36 str r3, [r6, 0x24]                                |     *((r6 + 0x24)) = r3;
    0x0004ff38 strd r2, r0, [r6, 0xc4]                           |     __asm ("strd r2, r0, [r6, 0xc4]");
    0x0004ff3c str r1, [r6, 4]                                   |     *((r6 + 4)) = r1;
    0x0004ff3e mov r1, r4                                        |     r1 = r4;
    0x0004ff40 str r4, [r6, 0x5c]                                |     *((r6 + 0x5c)) = r4;
    0x0004ff42 blx 0x5fcc                                        |     fcn_00005fcc ();
    0x0004ff46 str r4, [sp, 0x1c]                                |     *(arg_1ch) = r4;
    0x0004ff48 b.w 0x4d26a                                       |     goto label_2;
    0x0004ff4c ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0004ff4e ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0004ff50 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x0004ff52 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004ff56 add.w r0, r1, r3, lsl 3                           |     r0 = r1 + (r3 << 3);
    0x0004ff5a ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x0004ff5c ldr r2, [r2, 0x10]                                |     r2 = *((r2 + 0x10));
    0x0004ff5e str r0, [sp, 0x2c]                                |     *(arg_2ch) = r0;
    0x0004ff60 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004ff64 str r2, [sp, 0x28]                                |     *(arg_28h) = r2;
    0x0004ff66 add.w r3, r1, r3, lsl 3                           |     r3 = r1 + (r3 << 3);
    0x0004ff6a str r3, [sp, 0x34]                                |     *(arg_34h) = r3;
    0x0004ff6c ldrh r3, [r0, 0x1c]                               |     r3 = *((r0 + 0x1c));
    0x0004ff6e lsls r4, r3, 0x1a                                 |     r4 = r3 << 0x1a;
                                                                 |     if (r4 >= r3) {
    0x0004ff70 bpl.w 0x51f00                                     |         goto label_491;
                                                                 |     }
                                                                 | label_118:
    0x0004ff74 ldr r3, [sp, 0x2c]                                |     r3 = *(arg_2ch);
    0x0004ff76 ldr.w sl, [r3, 0x10]                              |     sl = *((r3 + 0x10));
    0x0004ff7a ldr r3, [sp, 0x34]                                |     r3 = *(arg_34h);
    0x0004ff7c ldrd r5, r6, [r3, 0x10]                           |     __asm ("ldrd r5, r6, [r3, 0x10]");
    0x0004ff80 ldr r3, [sp, 0x28]                                |     r3 = *(arg_28h);
    0x0004ff82 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004ff84 bne.w 0x52246                                     |         goto label_492;
                                                                 |     }
    0x0004ff88 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004ff8a add.w r8, r3, 1                                   |     r8 = r3 + 1;
                                                                 | label_136:
    0x0004ff8e ldr r3, [sp, 0x34]                                |     r3 = *(arg_34h);
    0x0004ff90 mov r0, sl                                        |     r0 = sl;
    0x0004ff92 str.w r8, [sp, 0x1c]                              |     __asm ("str.w r8, [arg_1ch]");
    0x0004ff96 ldrd r2, r3, [r3, 0x10]                           |     __asm ("ldrd r2, r3, [r3, 0x10]");
    0x0004ff9a bl 0xd578                                         |     fcn_0000d578 (r0, r1, r2);
    0x0004ff9e b.w 0x4d26a                                       |     goto label_2;
    0x0004ffa2 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004ffa4 ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x0004ffa6 ldrd r4, r3, [r3, 4]                              |     __asm ("ldrd r4, r3, [r3, 4]");
    0x0004ffaa add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0004ffae add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0004ffb2 add.w r4, r2, r4, lsl 3                           |     r4 = r2 + (r4 << 3);
    0x0004ffb6 add.w r5, r2, r3, lsl 3                           |     r5 = r2 + (r3 << 3);
    0x0004ffba ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0004ffbc lsls r0, r3, 0x1a                                 |     r0 = r3 << 0x1a;
                                                                 |     if (r0 < r3) {
    0x0004ffbe bmi 0x4ffce                                       |         goto label_493;
                                                                 |     }
    0x0004ffc0 mov r0, r4                                        |     r0 = r4;
    0x0004ffc2 bl 0xff6c                                         |     fcn_0000ff6c (r0);
    0x0004ffc6 ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0004ffc8 lsls r1, r3, 0x1a                                 |     r1 = r3 << 0x1a;
                                                                 |     if (r1 >= r3) {
    0x0004ffca bpl.w 0x4d4ec                                     |         goto label_6;
                                                                 |     }
                                                                 | label_493:
    0x0004ffce ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0004ffd0 ldr r0, [r4, 0x10]                                |     r0 = *((r4 + 0x10));
    0x0004ffd2 adds r3, 1                                        |     r3++;
    0x0004ffd4 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0004ffd6 ldrd r2, r3, [r5, 0x10]                           |     __asm ("ldrd r2, r3, [r5, 0x10]");
    0x0004ffda bl 0xd578                                         |     fcn_0000d578 (r0, r1, r2);
    0x0004ffde b.w 0x4d26a                                       |     goto label_2;
    0x0004ffe2 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0004ffe4 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0004ffe6 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0004ffe8 ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0004ffea ldr.w r4, [r3, r2, lsl 2]                         |     offset_42 = r2 << 2;
                                                                 |     r4 = *((r3 + offset_42));
    0x0004ffee ldrb r3, [r4, 0x19]                               |     r3 = *((r4 + 0x19));
    0x0004fff0 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0004fff2 bne.w 0x50d04                                     |         goto label_494;
                                                                 |     }
    0x0004fff6 ldrb r5, [r4, 0x1b]                               |     r5 = *((r4 + 0x1b));
    0x0004fff8 cmp r5, 0                                         |     
    0x0004fffa blx 0x52eac                                       |     r0 = void (*0x52eac)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3, r4, r5, r6);
    0x0004fffe movs r5, r0                                       |     r5 = r0;
    0x00050000 ldr r1, [sp, 0x38]                                |     r1 = *(arg_38h);
    0x00050002 adds r3, 1                                        |     r3++;
    0x00050004 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00050006 ldrd r2, r3, [r4, 0x30]                           |     __asm ("ldrd r2, r3, [r4, 0x30]");
    0x0005000a strd r2, r3, [r1, 0x10]                           |     __asm ("strd r2, r3, [r1, 0x10]");
    0x0005000e b.w 0x4d26a                                       |     goto label_2;
    0x00050012 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00050014 ldr r1, [r3, 8]                                   |     r1 = *((r3 + 8));
    0x00050016 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00050018 beq.w 0x504d0                                     |         goto label_495;
                                                                 |     }
    0x0005001c ldr.w r3, [fp, 0x18]                              |     r3 = *(arg_18h);
    0x00050020 lsls r0, r3, 6                                    |     r0 = r3 << 6;
                                                                 |     if (r0 >= r3) {
    0x00050022 bpl.w 0x504d0                                     |         goto label_495;
                                                                 |     }
    0x00050026 movs r4, 8                                        |     r4 = 8;
    0x00050028 mov sb, r4                                        |     sb = r4;
    0x0005002a b.w 0x528f8                                       |     goto label_202;
    0x0005002e ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00050030 ldrb.w r1, [fp, 0x3e]                             |     r1 = *(arg_3eh);
    0x00050034 ldrd r5, r3, [r3, 4]                              |     __asm ("ldrd r5, r3, [r3, 4]");
    0x00050038 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x0005003a beq.w 0x50d14                                     |         goto label_496;
                                                                 |     }
    0x0005003e cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00050040 beq.w 0x51c1c                                     |         goto label_497;
                                                                 |     }
    0x00050044 cmp r1, r5                                        |     
                                                                 |     if (r1 != r5) {
    0x00050046 bne.w 0x53d92                                     |         goto label_498;
                                                                 |     }
    0x0005004a ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x0005004c add.w r0, r2, 0x2c                                |     r0 = r2 + 0x2c;
    0x00050050 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00050052 bne.w 0x528d8                                     |         goto label_499;
                                                                 |     }
    0x00050056 ldr.w r2, [pc, 0xb90]                             |     r2 = *(0x00050be8);
    0x0005005a add r2, pc                                        |     r2 += pc;
    0x0005005c b.w 0x50d26                                       |     goto label_153;
    0x00050060 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00050062 ldr.w sl, [r3, 4]                                 |     sl = *((r3 + 4));
    0x00050066 ldr r4, [r3, 0x10]                                |     r4 = *((r3 + 0x10));
    0x00050068 cmp.w sl, 0                                       |     
                                                                 |     if (sl != 0) {
    0x0005006c bne.w 0x5256a                                     |         goto label_500;
                                                                 |     }
    0x00050070 ldr.w r3, [fp, 0x94]                              |     r3 = *(arg_94h);
    0x00050074 cmp r3, 0                                         |     
                                                                 |     if (r3 > 0) {
    0x00050076 bgt.w 0x512c0                                     |         goto label_501;
                                                                 |     }
                                                                 |     if (r4 == 0) {
    0x0005007a cbz r4, 0x50094                                   |         goto label_502;
                                                                 |     }
    0x0005007c ldrb r3, [r4]                                     |     r3 = *(r4);
    0x0005007e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00050080 beq.w 0x537b6                                     |         goto label_503;
                                                                 |     }
    0x00050084 mov r3, r4                                        |     r3 = r4;
                                                                 |     do {
    0x00050086 ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x0005008a cmp r2, 0                                         |         
    0x0005008c bne 0x50086                                       |         
                                                                 |     } while (r2 != 0);
                                                                 | label_227:
    0x0005008e subs r3, r3, r4                                   |     r3 -= r4;
    0x00050090 bic sl, r3, 0xc0000000                            |     sl = BIT_MASK (r3, 0xc0000000);
                                                                 | label_502:
    0x00050094 ldr.w r1, [fp, 0x140]                             |     r1 = *(arg_140h);
    0x00050098 ldrd r3, r2, [fp, 0x1e8]                          |     __asm ("ldrd r3, r2, [arg_1e8h]");
                                                                 |     if (r1 != 0) {
    0x0005009c cbz r1, 0x500b0                                   |         
    0x0005009e add r2, r3                                        |         r2 += r3;
    0x000500a0 movs r1, 0                                        |         r1 = 0;
    0x000500a2 mov r0, fp                                        |         r0 = fp;
    0x000500a4 bl 0xa6e8                                         |         r0 = fcn_0000a6e8 (r0, r1, r2);
    0x000500a8 mov r6, r0                                        |         r6 = r0;
    0x000500aa cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x000500ac bne.w 0x528f6                                     |             goto label_207;
                                                                 |         }
                                                                 |     }
    0x000500b0 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x000500b2 add.w r1, sl, 0x21                                |     r1 = sl + 0x21;
    0x000500b6 mov r0, fp                                        |     r0 = fp;
    0x000500b8 adds r3, 1                                        |     r3++;
    0x000500ba str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x000500bc bl 0xd3a0                                         |     r0 = fcn_0000d3a0 (r0, r1);
    0x000500c0 mov r5, r0                                        |     r5 = r0;
    0x000500c2 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000500c4 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x000500c8 adds r0, 0x20                                     |     r0 += 0x20;
    0x000500ca add.w r2, sl, 1                                   |     r2 = sl + 1;
    0x000500ce mov r1, r4                                        |     r1 = r4;
    0x000500d0 str r0, [r5]                                      |     *(r5) = r0;
    0x000500d2 blx 0x6214                                        |     fcn_00006214 ();
    0x000500d6 ldrb.w r3, [fp, 0x3e]                             |     r3 = *(arg_3eh);
    0x000500da cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000500dc beq.w 0x52cf6                                     |         goto label_504;
                                                                 |     }
    0x000500e0 movs r3, 0                                        |     r3 = 0;
    0x000500e2 strb.w r3, [fp, 0x3e]                             |     *(arg_3eh) = r3;
    0x000500e6 movs r3, 1                                        |     r3 = 1;
    0x000500e8 strb.w r3, [fp, 0x45]                             |     *(arg_45h) = r3;
                                                                 | label_177:
    0x000500ec ldr.w r3, [fp, 0x1e0]                             |     r3 = *(arg_1e0h);
    0x000500f0 str r3, [r5, 0x18]                                |     *((r5 + 0x18)) = r3;
    0x000500f2 ldrd r2, r3, [fp, 0x1f0]                          |     __asm ("ldrd r2, r3, [arg_1f0h]");
    0x000500f6 str.w r5, [fp, 0x1e0]                             |     __asm ("str.w r5, [arg_1e0h]");
    0x000500fa strd r2, r3, [r5, 8]                              |     __asm ("strd r2, r3, [r5, 8]");
    0x000500fe ldrd r2, r3, [fp, 0x1f8]                          |     __asm ("ldrd r2, r3, [arg_1f8h]");
    0x00050102 strd r2, r3, [r5, 0x10]                           |     __asm ("strd r2, r3, [r5, 0x10]");
    0x00050106 b.w 0x4d26a                                       |     goto label_2;
    0x0005010a ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0005010c movs r6, 0                                        |     r6 = 0;
    0x0005010e ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x00050110 ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x00050112 ldr r4, [r2, 8]                                   |     r4 = *((r2 + 8));
    0x00050114 ldrb r5, [r2, 3]                                  |     r5 = *((r2 + 3));
    0x00050116 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0005011a add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x0005011e add.w r3, r1, r3, lsl 3                           |     r3 = r1 + (r3 << 3);
    0x00050122 add.w r4, r1, r4, lsl 3                           |     r4 = r1 + (r4 << 3);
    0x00050126 str r3, [sp, 0x38]                                |     *(arg_38h) = r3;
    0x00050128 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0005012a ldr.w sb, [r3, 0xc]                               |     sb = *((r3 + 0xc));
    0x0005012e sub.w r7, sb, 4                                   |     r7 = sb - 4;
                                                                 |     if (r5 != 0) {
    0x00050132 cbnz r5, 0x50142                                  |         goto label_505;
                                                                 |     }
    0x00050134 b.w 0x50994                                       |     goto label_506;
                                                                 |     do {
                                                                 | label_32:
    0x00050138 adds r6, 1                                        |         r6++;
    0x0005013a adds r4, 0x28                                     |         r4 += 0x28;
    0x0005013c cmp r5, r6                                        |         
                                                                 |         if (r5 == r6) {
    0x0005013e beq.w 0x50994                                     |             goto label_506;
                                                                 |         }
                                                                 | label_505:
    0x00050142 ldrh r3, [r4, 0x1c]                               |         r3 = *((r4 + 0x1c));
    0x00050144 str r4, [r7, 4]!                                  |         *((r7 += 4)) = r4;
    0x00050148 lsls r3, r3, 0x13                                 |         r3 <<= 0x13;
    0x0005014a bpl 0x50138                                       |         
                                                                 |     } while (r3 >= r3);
    0x0005014c mov r0, r4                                        |     r0 = r4;
    0x0005014e bl 0x17410                                        |     r0 = fcn_00017410 (r0);
    0x00050152 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00050154 beq 0x50138                                       |         goto label_32;
                                                                 |     }
    0x00050156 b.w 0x4d4ec                                       |     goto label_6;
    0x0005015a ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0005015c ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0005015e ldr r3, [r2, 8]                                   |     r3 = *((r2 + 8));
    0x00050160 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x00050164 add.w r3, r1, r3, lsl 3                           |     r3 = r1 + (r3 << 3);
    0x00050168 ldrb r1, [r2, 3]                                  |     r1 = *((r2 + 3));
    0x0005016a ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x0005016c ldr r2, [r2, 0xc]                                 |     r2 = *((r2 + 0xc));
    0x0005016e subs r0, r2, 4                                    |     r0 = r2 - 4;
    0x00050170 add.w r4, r0, r1, lsl 2                           |     r4 = r0 + (r1 << 2);
                                                                 |     if (r1 == 0) {
    0x00050174 cbz r1, 0x50182                                   |         goto label_507;
                                                                 |     }
                                                                 |     do {
    0x00050176 str r3, [r0, 4]!                                  |         *((r0 += 4)) = r3;
    0x0005017a cmp r4, r0                                        |         
    0x0005017c add.w r3, r3, 0x28                                |         r3 += 0x28;
    0x00050180 bne 0x50176                                       |         
                                                                 |     } while (r4 != r0);
                                                                 | label_507:
    0x00050182 ldr r0, [sp, 0x20]                                |     r0 = *(arg_20h);
    0x00050184 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x00050186 ldr r4, [sp, 0x44]                                |     r4 = *(arg_44h);
    0x00050188 ldr r3, [r0, 0xc]                                 |     r3 = *((r0 + 0xc));
    0x0005018a ldr r0, [r0, 0x10]                                |     r0 = *((r0 + 0x10));
    0x0005018c add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x00050190 add.w r3, r4, r3, lsl 3                           |     r3 = r4 + (r3 << 3);
    0x00050194 ldr r4, [r3, 0x18]                                |     r4 = *((r3 + 0x18));
    0x00050196 str r3, [sp, 0x108]                               |     *(arg_108h) = r3;
    0x00050198 str r0, [r7]                                      |     *(r7) = r0;
    0x0005019a adds r4, 1                                        |     r4++;
    0x0005019c str r4, [r3, 0x18]                                |     *((r3 + 0x18)) = r4;
    0x0005019e movs r3, 0                                        |     r3 = 0;
    0x000501a0 strb.w r3, [r7, 0x44]                             |     *((r7 + 0x44)) = r3;
    0x000501a4 movs r4, 1                                        |     r4 = 1;
    0x000501a6 str r3, [r7, 0xc]                                 |     *((r7 + 0xc)) = r3;
    0x000501a8 strd r3, r3, [r7, 0x28]                           |     __asm ("strd r3, r3, [r7, 0x28]");
    0x000501ac str r3, [r7, 0x40]                                |     *((r7 + 0x40)) = r3;
    0x000501ae str r3, [r7, 0x34]                                |     *((r7 + 0x34)) = r3;
    0x000501b0 ldrh r3, [r0, 2]                                  |     r3 = *((r0 + 2));
    0x000501b2 strh r4, [r7, 0x24]                               |     *((r7 + 0x24)) = r4;
    0x000501b4 str.w fp, [r7, 8]                                 |     __asm ("str.w fp, [r7, 8]");
    0x000501b8 lsls r4, r3, 0x1a                                 |     r4 = r3 << 0x1a;
                                                                 |     if (r4 < r3) {
    0x000501ba bmi.w 0x50c68                                     |         goto label_508;
                                                                 |     }
                                                                 | label_49:
    0x000501be ldr r3, [r0, 0x10]                                |     r3 = *((r0 + 0x10));
    0x000501c0 mov r0, r7                                        |     r0 = r7;
    0x000501c2 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x000501c4 ldr r6, [r7, 0x40]                                |     r6 = *((r7 + 0x40));
    0x000501c6 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x000501c8 bne.w 0x51e66                                     |         goto label_509;
                                                                 |     }
                                                                 | label_111:
    0x000501cc ldrb.w r3, [r7, 0x44]                             |     r3 = *((r7 + 0x44));
                                                                 |     if (r3 != 0) {
    0x000501d0 cbz r3, 0x5020e                                   |         
    0x000501d2 ldr r3, [sp, 0x20]                                |         r3 = *(arg_20h);
    0x000501d4 ldr r4, [r3, -0x10]                               |         r4 = *((r3 - 0x10));
                                                                 |         if (r4 == 0) {
    0x000501d8 cbz r4, 0x5020e                                   |             goto label_510;
                                                                 |         }
    0x000501da ldr r3, [sp, 0x44]                                |         r3 = *(arg_44h);
    0x000501dc add.w r4, r4, r4, lsl 2                           |         r4 += (r4 << 2);
    0x000501e0 movw r2, 0x2460                                   |         r2 = 0x2460;
    0x000501e4 add.w r4, r3, r4, lsl 3                           |         r4 = r3 + (r4 << 3);
    0x000501e8 ldrh r3, [r4, 0x1c]                               |         r3 = *((r4 + 0x1c));
    0x000501ea tst r2, r3                                        |         
                                                                 |         if ((r2 & r3) != 0) {
    0x000501ec bne.w 0x535ba                                     |             goto label_511;
                                                                 |         }
                                                                 | label_217:
    0x000501f0 ldr r1, [r4, 0x24]                                |         r1 = *((r4 + 0x24));
                                                                 |         if (r1 != 0) {
    0x000501f2 cbz r1, 0x501fe                                   |             
    0x000501f4 ldr r0, [r4]                                      |             r0 = *(r4);
    0x000501f6 bl 0xe12c                                         |             fcn_0000e12c (r0, r1);
    0x000501fa movs r3, 0                                        |             r3 = 0;
    0x000501fc str r3, [r4, 0x24]                                |             *((r4 + 0x24)) = r3;
                                                                 |         }
    0x000501fe movs r3, 0                                        |         r3 = 0;
    0x00050200 movs r2, 1                                        |         r2 = 1;
    0x00050202 str r3, [r4, 4]                                   |         *((r4 + 4)) = r3;
    0x00050204 movs r3, 4                                        |         r3 = 4;
    0x00050206 strh r3, [r4, 0x1c]                               |         *((r4 + 0x1c)) = r3;
    0x00050208 movs r3, 0                                        |         r3 = 0;
    0x0005020a strd r2, r3, [r4, 0x10]                           |         __asm ("strd r2, r3, [r4, 0x10]");
                                                                 |     }
                                                                 | label_510:
    0x0005020e ldrh r3, [r7, 0x24]                               |     r3 = *((r7 + 0x24));
    0x00050210 movw r2, 0x2460                                   |     r2 = 0x2460;
    0x00050214 tst r2, r3                                        |     
                                                                 |     if ((r2 & r3) != 0) {
    0x00050216 bne.w 0x51e84                                     |         goto label_512;
                                                                 |     }
                                                                 | label_112:
    0x0005021a ldr r1, [r7, 0x2c]                                |     r1 = *((r7 + 0x2c));
    0x0005021c cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0005021e beq.w 0x4dbae                                     |         goto label_20;
                                                                 |     }
    0x00050222 ldr r0, [r7, 8]                                   |     r0 = *((r7 + 8));
    0x00050224 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x00050228 b.w 0x4dbae                                       |     goto label_20;
    0x0005022c ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0005022e mov r0, fp                                        |     r0 = fp;
    0x00050230 ldr r6, [r3, 8]                                   |     r6 = *((r3 + 8));
    0x00050232 adds r5, r6, 1                                    |     r5 = r6 + 1;
    0x00050234 lsls r5, r5, 2                                    |     r5 <<= 2;
    0x00050236 mov r1, r5                                        |     r1 = r5;
    0x00050238 bl 0xd3a0                                         |     fcn_0000d3a0 (r0, r1);
    0x0005023c str r0, [sp, 0x28]                                |     *(arg_28h) = r0;
    0x0005023e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00050240 beq.w 0x4d4ec                                     |         goto label_6;
                                                                 |     }
    0x00050244 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x00050246 cmp r6, 0                                         |     
    0x00050248 ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x0005024a ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x0005024c add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x00050250 add.w r3, r1, r3, lsl 3                           |     r3 = r1 + (r3 << 3);
    0x00050254 str r3, [sp, 0x34]                                |     *(arg_34h) = r3;
    0x00050256 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x00050258 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x0005025c add.w r7, r1, r3, lsl 3                           |     r7 = r1 + (r3 << 3);
    0x00050260 ldr r3, [sp, 0x28]                                |     r3 = *(arg_28h);
    0x00050262 str r7, [sp, 0x2c]                                |     *(arg_2ch) = r7;
                                                                 |     if (r6 <= 0) {
    0x00050264 ble 0x50286                                       |         goto label_513;
                                                                 |     }
    0x00050266 sub.w r8, r3, 4                                   |     r8 = r3 - 4;
    0x0005026a movs r4, 0                                        |     r4 = 0;
                                                                 |     do {
    0x0005026c mov r0, r7                                        |         r0 = r7;
    0x0005026e adds r4, 1                                        |         r4++;
    0x00050270 bl 0xa1d8                                         |         fcn_0000a1d8 (r0);
    0x00050274 cmp r6, r4                                        |         
    0x00050276 add.w r7, r7, 0x28                                |         r7 += 0x28;
    0x0005027a str r0, [r8, 4]!                                  |         *((r8 += 4)) = r0;
    0x0005027e bne 0x5026c                                       |         
                                                                 |     } while (r6 != r4);
    0x00050280 ldr r2, [sp, 0x28]                                |     r2 = *(arg_28h);
    0x00050282 subs r3, r5, 4                                    |     r3 = r5 - 4;
    0x00050284 add r3, r2                                        |     r3 += r2;
                                                                 | label_513:
    0x00050286 movs r4, 0                                        |     r4 = 0;
    0x00050288 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x0005028a str r4, [r3]                                      |     *(r3) = r4;
    0x0005028c ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0005028e ldrb r2, [r3, 3]                                  |     r2 = *((r3 + 3));
    0x00050290 ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x00050294 add.w r3, r3, r2, lsl 4                           |     r3 += (r2 << 4);
    0x00050298 ldr r0, [r3, 4]                                   |     r0 = *((r3 + 4));
    0x0005029a ldr r3, [sp, 0x34]                                |     r3 = *(arg_34h);
    0x0005029c ldr r5, [r0, 4]                                   |     r5 = *((r0 + 4));
    0x0005029e ldr.w r8, [r3, 0x10]                              |     r8 = *((r3 + 0x10));
    0x000502a2 str r0, [sp, 0x20]                                |     *(arg_20h) = r0;
    0x000502a4 bl 0xd140                                         |     fcn_0000d140 (r0);
    0x000502a8 ldr r1, [r5]                                      |     r1 = *(r5);
    0x000502aa ldr r3, [r5, 0x2c]                                |     r3 = *((r5 + 0x2c));
    0x000502ac ldr.w r2, [r1, 0xdc]                              |     r2 = *((r1 + 0xdc));
    0x000502b0 ldr r2, [r2, 0xc]                                 |     r2 = *((r2 + 0xc));
    0x000502b2 str r1, [r7, 4]                                   |     *((r7 + 4)) = r1;
    0x000502b4 str.w r8, [r7, 0x10]                              |     __asm ("str.w r8, [r7, 0x10]");
    0x000502b8 str r2, [sp, 0x4c]                                |     *(arg_4ch) = r2;
    0x000502ba str r5, [r7]                                      |     *(r7) = r5;
    0x000502bc str r3, [r7, 0xc]                                 |     *((r7 + 0xc)) = r3;
    0x000502be strd r4, r4, [r7, 0x14]                           |     __asm ("strd r4, r4, [r7, 0x14]");
    0x000502c2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000502c4 beq.w 0x52ca8                                     |         goto label_514;
                                                                 |     }
    0x000502c8 lsrs r3, r3, 3                                    |     r3 >>= 3;
    0x000502ca adds r0, r3, 1                                    |     r0 = r3 + 1;
    0x000502cc bl 0x11e2c                                        |     r0 = fcn_00011e2c (r0);
    0x000502d0 mov r4, r0                                        |     r4 = r0;
    0x000502d2 str r0, [r7, 8]                                   |     *((r7 + 8)) = r0;
    0x000502d4 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000502d6 beq.w 0x5378a                                     |         goto label_515;
                                                                 |     }
    0x000502da ldr.w r3, [pc, 0x910]                             |     
    0x000502de ldr r1, [r5, 0x20]                                |     r1 = *((r5 + 0x20));
    0x000502e0 add r3, pc                                        |     r3 = 0xa0ed2;
    0x000502e2 ldr.w r0, [r3, 0x110]                             |     r0 = *(0xa0fe2);
    0x000502e6 bl 0x5dc60                                        |     fcn_0005dc60 (r0, r1, r2);
    0x000502ea ldr r2, [r7, 0xc]                                 |     r2 = *((r7 + 0xc));
    0x000502ec adds r3, r0, 1                                    |     r3 = r0 + 1;
    0x000502ee cmp r3, r2                                        |     
                                                                 |     if (r3 < r2) {
    0x000502f0 bls.w 0x5122a                                     |         goto label_516;
                                                                 |     }
                                                                 | label_66:
    0x000502f4 ldr r3, [sp, 0x8c]                                |     r3 = *(arg_8ch);
    0x000502f6 add r2, sp, 0x12c                                 |     r2 += arg_12ch;
    0x000502f8 movs r4, 0                                        |     r4 = 0;
    0x000502fa ldr.w r1, [pc, 0x8f4]                             |     r1 = *(0x00050bf0);
    0x000502fe mov r0, r7                                        |     r0 = r7;
    0x00050300 str r3, [r7, 0x30]                                |     *((r7 + 0x30)) = r3;
    0x00050302 movs r3, 2                                        |     r3 = 2;
    0x00050304 strh r3, [r7, 0x34]                               |     *((r7 + 0x34)) = r3;
    0x00050306 add r1, pc                                        |     r1 += pc;
    0x00050308 ldr r3, [r5, 0xc]                                 |     r3 = *((r5 + 0xc));
    0x0005030a ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x0005030c strd r2, r2, [r7, 0x20]                           |     __asm ("strd r2, r2, [r7, 0x20]");
    0x00050310 movs r2, 0x64                                     |     r2 = 0x64;
    0x00050312 str r4, [r7, 0x1c]                                |     *((r7 + 0x1c)) = r4;
    0x00050314 str r4, [r7, 0x28]                                |     *((r7 + 0x28)) = r4;
    0x00050316 str r2, [r7, 0x2c]                                |     *((r7 + 0x2c)) = r2;
    0x00050318 ldr r2, [r3, 0x20]                                |     r2 = *((r3 + 0x20));
    0x0005031a ldr r3, [r3, 0x24]                                |     r3 = *((r3 + 0x24));
    0x0005031c str r1, [sp]                                      |     *(sp) = r1;
    0x0005031e movs r1, 1                                        |     r1 = 1;
    0x00050320 rev r2, r2                                        |     r2 = SWAP32 (r2);
    0x00050322 rev r3, r3                                        |     r3 = SWAP32 (r3);
    0x00050324 bl 0x34de0                                        |     fcn_00034de0 (r0, r1, r2, r3, r4, r5);
    0x00050328 cmp r6, r4                                        |     
                                                                 |     if (r6 <= r4) {
    0x0005032a ble.w 0x507e8                                     |         goto label_517;
                                                                 |     }
    0x0005032e ldr.w sl, [pc, 0x8c4]                             |     sl = *(0x00050bf4);
    0x00050332 mov sb, r4                                        |     sb = r4;
    0x00050334 ldr r3, [sp, 0x28]                                |     r3 = *(arg_28h);
    0x00050336 add sl, pc                                        |     sl += pc;
    0x00050338 sub.w r8, r3, 4                                   |     r8 = r3 - 4;
    0x0005033c b 0x50354                                         |     goto label_518;
                                                                 | label_33:
    0x0005033e movs r3, 0                                        |     r3 = 0;
    0x00050340 mov r2, sl                                        |     r2 = sl;
    0x00050342 mov r0, r7                                        |     r0 = r7;
    0x00050344 str.w sb, [sp]                                    |     __asm ("str.w sb, [sp]");
    0x00050348 bl 0x34f98                                        |     fcn_00034f98 (r0, r1, r2, r3, r4, r5, r6);
                                                                 |     do {
    0x0005034c adds r4, 1                                        |         r4++;
    0x0005034e cmp r4, r6                                        |         
                                                                 |         if (r4 == r6) {
    0x00050350 beq.w 0x507e8                                     |             goto label_517;
                                                                 |         }
                                                                 | label_518:
    0x00050354 ldr r3, [r7, 0x10]                                |         r3 = *((r7 + 0x10));
    0x00050356 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00050358 beq.w 0x507e8                                     |             goto label_517;
                                                                 |         }
    0x0005035c ldr r1, [r8, 4]!                                  |         r1 = *((r8 += 4));
    0x00050360 cmp r1, 0                                         |         
    0x00050362 beq 0x5034c                                       |         
                                                                 |     } while (r1 == 0);
    0x00050364 ldrb r3, [r5, 0x11]                               |     r3 = *((r5 + 0x11));
    0x00050366 cmp r3, 0                                         |     
    0x00050368 it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x0005036a cmpne r1, 1                                       |         __asm ("cmpne r1, 1");
                                                                 |         goto label_519;
                                                                 |     }
                                                                 |     if (r3 <= 0) {
                                                                 | label_519:
    0x0005036c ble 0x5033e                                       |         goto label_33;
                                                                 |     }
    0x0005036e movs r3, 0                                        |     r3 = 0;
    0x00050370 movs r2, 1                                        |     r2 = 1;
    0x00050372 mov r0, r7                                        |     r0 = r7;
    0x00050374 str.w sb, [sp]                                    |     __asm ("str.w sb, [sp]");
    0x00050378 bl 0x34d20                                        |     fcn_00034d20 (r0, r1, r2, r3, r4, r5, r6);
    0x0005037c ldr.w r1, [r8]                                    |     r1 = *(r8);
    0x00050380 b 0x5033e                                         |     goto label_33;
    0x00050382 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00050384 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x00050386 ldr r1, [r3, 0x10]                                |     r1 = *((r3 + 0x10));
    0x00050388 ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x0005038c add.w r3, r3, r2, lsl 4                           |     r3 += (r2 << 4);
    0x00050390 mov r2, r1                                        |     r2 = r1;
    0x00050392 ldr r0, [r3, 0xc]                                 |     r0 = *((r3 + 0xc));
    0x00050394 adds r0, 0x18                                     |     r0 += 0x18;
                                                                 |     if (r1 == 0) {
    0x00050396 cbz r1, 0x503b0                                   |         goto label_520;
                                                                 |     }
    0x00050398 ldrb r3, [r1]                                     |     r3 = *(r1);
    0x0005039a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005039c beq.w 0x5314a                                     |         goto label_521;
                                                                 |     }
    0x000503a0 mov r3, r1                                        |     r3 = r1;
                                                                 |     do {
    0x000503a2 ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x000503a6 cmp r2, 0                                         |         
    0x000503a8 bne 0x503a2                                       |         
                                                                 |     } while (r2 != 0);
                                                                 | label_195:
    0x000503aa subs r3, r3, r1                                   |     r3 -= r1;
    0x000503ac bic r2, r3, 0xc0000000                            |     r2 = BIT_MASK (r3, 0xc0000000);
                                                                 | label_520:
    0x000503b0 movs r3, 0                                        |     r3 = 0;
    0x000503b2 bl 0x128cc                                        |     r0 = fcn_000128cc (r0, r1, r2, r3, r4, r5);
    0x000503b6 mov r1, r0                                        |     r1 = r0;
    0x000503b8 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000503ba beq.w 0x50774                                     |         goto label_522;
                                                                 |     }
    0x000503be ldr r2, [r0, 0xc]                                 |     r2 = *((r0 + 0xc));
    0x000503c0 ldr r3, [r2, 8]                                   |     r3 = *((r2 + 8));
    0x000503c2 cmp r0, r3                                        |     
                                                                 |     if (r0 == r3) {
    0x000503c4 beq.w 0x514e4                                     |         goto label_523;
                                                                 |     }
                                                                 |     do {
    0x000503c8 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x000503ca beq.w 0x5076e                                     |             goto label_75;
                                                                 |         }
    0x000503ce ldr r2, [r3, 0x14]                                |         r2 = *((r3 + 0x14));
    0x000503d0 cmp r1, r2                                        |         
                                                                 |         if (r1 == r2) {
    0x000503d2 beq.w 0x5076a                                     |             goto label_524;
                                                                 |         }
    0x000503d6 mov r3, r2                                        |         r3 = r2;
    0x000503d8 b 0x503c8                                         |         
                                                                 |     } while (1);
    0x000503da ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x000503dc ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x000503de ldr r1, [r3, 0x10]                                |     r1 = *((r3 + 0x10));
    0x000503e0 ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x000503e4 add.w r3, r3, r2, lsl 4                           |     r3 += (r2 << 4);
    0x000503e8 mov r2, r1                                        |     r2 = r1;
    0x000503ea ldr r0, [r3, 0xc]                                 |     r0 = *((r3 + 0xc));
    0x000503ec adds r0, 0x28                                     |     r0 += 0x28;
                                                                 |     if (r1 == 0) {
    0x000503ee cbz r1, 0x50408                                   |         goto label_525;
                                                                 |     }
    0x000503f0 ldrb r3, [r1]                                     |     r3 = *(r1);
    0x000503f2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000503f4 beq.w 0x53144                                     |         goto label_526;
                                                                 |     }
    0x000503f8 mov r3, r1                                        |     r3 = r1;
                                                                 |     do {
    0x000503fa ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x000503fe cmp r2, 0                                         |         
    0x00050400 bne 0x503fa                                       |         
                                                                 |     } while (r2 != 0);
                                                                 | label_194:
    0x00050402 subs r3, r3, r1                                   |     r3 -= r1;
    0x00050404 bic r2, r3, 0xc0000000                            |     r2 = BIT_MASK (r3, 0xc0000000);
                                                                 | label_525:
    0x00050408 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0005040a adds r3, 1                                        |     r3++;
    0x0005040c str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0005040e movs r3, 0                                        |     r3 = 0;
    0x00050410 bl 0x128cc                                        |     r0 = fcn_000128cc (r0, r1, r2, r3, r4, r5);
    0x00050414 mov r4, r0                                        |     r4 = r0;
    0x00050416 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00050418 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0005041c ldrd r3, r0, [r0, 0x14]                           |     __asm ("ldrd r3, r0, [r0, 0x14]");
    0x00050420 cmp r3, r0                                        |     
                                                                 |     if (r3 == r0) {
    0x00050422 beq.w 0x515a8                                     |         goto label_527;
                                                                 |     }
                                                                 | label_82:
    0x00050426 mov r1, r4                                        |     r1 = r4;
    0x00050428 mov r0, fp                                        |     r0 = fp;
    0x0005042a bl 0x1379c                                        |     fcn_0001379c (r0, r1);
    0x0005042e ldr.w r3, [fp, 0x18]                              |     r3 = *(arg_18h);
    0x00050432 orr r3, r3, 2                                     |     r3 |= 2;
    0x00050436 str.w r3, [fp, 0x18]                              |     __asm ("str.w r3, [arg_18h]");
    0x0005043a b.w 0x4d26a                                       |     goto label_2;
    0x0005043e ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00050440 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x00050442 ldr r1, [r3, 0x10]                                |     r1 = *((r3 + 0x10));
    0x00050444 ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x00050448 add.w r3, r3, r2, lsl 4                           |     r3 += (r2 << 4);
    0x0005044c mov r2, r1                                        |     r2 = r1;
    0x0005044e ldr r0, [r3, 0xc]                                 |     r0 = *((r3 + 0xc));
    0x00050450 adds r0, 8                                        |     r0 += 8;
                                                                 |     if (r1 == 0) {
    0x00050452 cbz r1, 0x5046c                                   |         goto label_528;
                                                                 |     }
    0x00050454 ldrb r3, [r1]                                     |     r3 = *(r1);
    0x00050456 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00050458 beq.w 0x5313e                                     |         goto label_529;
                                                                 |     }
    0x0005045c mov r3, r1                                        |     r3 = r1;
                                                                 |     do {
    0x0005045e ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x00050462 cmp r2, 0                                         |         
    0x00050464 bne 0x5045e                                       |         
                                                                 |     } while (r2 != 0);
                                                                 | label_193:
    0x00050466 subs r3, r3, r1                                   |     r3 -= r1;
    0x00050468 bic r2, r3, 0xc0000000                            |     r2 = BIT_MASK (r3, 0xc0000000);
                                                                 | label_528:
    0x0005046c movs r3, 0                                        |     r3 = 0;
    0x0005046e bl 0x128cc                                        |     r0 = fcn_000128cc (r0, r1, r2, r3, r4, r5);
    0x00050472 mov r1, r0                                        |     r1 = r0;
                                                                 |     if (r0 != 0) {
    0x00050474 cbz r0, 0x50486                                   |         
    0x00050476 ldr.w r3, [fp, 0x200]                             |         r3 = *(arg_200h);
    0x0005047a cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0005047c beq.w 0x51da2                                     |             goto label_530;
                                                                 |         }
                                                                 | label_105:
    0x00050480 mov r0, fp                                        |         r0 = fp;
    0x00050482 bl 0x12af8                                        |         fcn_00012af8 (r0, r1);
                                                                 |     }
                                                                 | label_106:
    0x00050486 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00050488 adds r3, 1                                        |     r3++;
    0x0005048a str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0005048c ldr.w r3, [fp, 0x18]                              |     r3 = *(arg_18h);
    0x00050490 orr r3, r3, 2                                     |     r3 |= 2;
    0x00050494 str.w r3, [fp, 0x18]                              |     __asm ("str.w r3, [arg_18h]");
    0x00050498 b.w 0x4d26a                                       |     goto label_2;
    0x0005049c ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0005049e movs r4, 0                                        |     r4 = 0;
    0x000504a0 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x000504a2 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x000504a4 adds r3, 1                                        |     r3++;
    0x000504a6 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x000504a8 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x000504aa ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x000504ac ldr.w r3, [r3, r2, lsl 2]                         |     offset_43 = r2 << 2;
                                                                 |     r3 = *((r3 + offset_43));
    0x000504b0 movs r2, 1                                        |     r2 = 1;
    0x000504b2 ldr r5, [r3]                                      |     r5 = *(r3);
    0x000504b4 strb r4, [r3, 0x1a]                               |     *((r3 + 0x1a)) = r4;
    0x000504b6 str r4, [r3, 0x44]                                |     *((r3 + 0x44)) = r4;
    0x000504b8 strb r2, [r3, 0x19]                               |     *((r3 + 0x19)) = r2;
    0x000504ba cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x000504bc beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x000504c0 ldr r0, [r5, 0x40]                                |     r0 = *((r5 + 0x40));
    0x000504c2 blx 0x6050                                        |     fcn_00006050 ();
    0x000504c6 str r4, [r5, 0x40]                                |     *((r5 + 0x40)) = r4;
    0x000504c8 strb.w r4, [r5, 0x51]                             |     *((r5 + 0x51)) = r4;
    0x000504cc b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_495:
    0x000504d0 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x000504d2 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x000504d4 ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x000504d8 add.w r3, r3, r2, lsl 4                           |     r3 += (r2 << 4);
    0x000504dc ldr r5, [r3, 4]                                   |     r5 = *((r3 + 4));
    0x000504de cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x000504e0 beq.w 0x5106e                                     |         goto label_531;
                                                                 |     }
    0x000504e4 mov r0, r5                                        |     r0 = r5;
    0x000504e6 bl 0x30bcc                                        |     r0 = fcn_00030bcc (r0, r1);
    0x000504ea cmp r0, 5                                         |     
                                                                 |     if (r0 == 5) {
    0x000504ec beq.w 0x53f32                                     |         goto label_532;
                                                                 |     }
    0x000504f0 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000504f2 bne.w 0x53f2a                                     |         goto label_533;
                                                                 |     }
    0x000504f6 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x000504f8 ldr r6, [r3, 8]                                   |     r6 = *((r3 + 8));
                                                                 |     if (r6 != 0) {
    0x000504fa cbz r6, 0x5050a                                   |         
    0x000504fc ldr r3, [sp, 0x24]                                |         r3 = *((sp + 0x24));
    0x000504fe ldrsb.w r3, [r3, 0x58]                            |         r3 = *((r3 + 0x58));
    0x00050502 cmp r3, 0                                         |         
                                                                 |         if (r3 < 0) {
    0x00050504 blt.w 0x51530                                     |             goto label_534;
                                                                 |         }
                                                                 | label_80:
    0x00050508 mov r6, r0                                        |         r6 = r0;
                                                                 |     }
                                                                 | label_81:
    0x0005050a add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x0005050c mov r0, r5                                        |     r0 = r5;
    0x0005050e mov r2, r7                                        |     r2 = r7;
    0x00050510 movs r1, 1                                        |     r1 = 1;
    0x00050512 bl 0x11954                                        |     fcn_00011954 (r0, r1, r2);
    0x00050516 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00050518 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0005051a ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x0005051e add.w r3, r3, r2, lsl 4                           |     r3 += (r2 << 4);
    0x00050522 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x00050524 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x00050526 b.w 0x51076                                       |     goto label_535;
                                                                 | label_327:
    0x0005052a ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0005052c mov.w sb, 4                                       |     sb = 4;
    0x00050530 add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x00050534 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00050536 ldr r0, [r3, 0x2c]                                |     r0 = *((r3 + 0x2c));
                                                                 | label_39:
    0x00050538 str.w r8, [sp, 0x1c]                              |     __asm ("str.w r8, [arg_1ch]");
    0x0005053c b.w 0x4d746                                       |     goto label_34;
                                                                 | label_398:
    0x00050540 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00050542 adds r3, 1                                        |     r3++;
    0x00050544 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
                                                                 | label_399:
    0x00050546 movs r3, 0                                        |     r3 = 0;
    0x00050548 strb r3, [r7, 0x19]                               |     *((r7 + 0x19)) = r3;
    0x0005054a cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0005054c beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x00050550 b.w 0x4d740                                       |     goto label_7;
                                                                 | label_428:
    0x00050554 mov r0, r5                                        |     r0 = r5;
    0x00050556 bl 0x328ac                                        |     r0 = fcn_000328ac (r0, r1);
    0x0005055a mov r6, r0                                        |     r6 = r0;
                                                                 | label_427:
    0x0005055c ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0005055e adds r3, 1                                        |     r3++;
    0x00050560 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00050562 movs r3, 0                                        |     r3 = 0;
    0x00050564 str r3, [r4, 0x44]                                |     *((r4 + 0x44)) = r3;
    0x00050566 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00050568 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0005056c b.w 0x4d740                                       |     goto label_7;
                                                                 | label_460:
    0x00050570 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00050572 beq.w 0x52c0a                                     |         goto label_536;
                                                                 |     }
    0x00050576 ldr r5, [r4, 8]                                   |     r5 = *((r4 + 8));
    0x00050578 ldr r7, [r5]                                      |     r7 = *(r5);
    0x0005057a ldr r6, [r7, 0x38]                                |     r6 = *((r7 + 0x38));
                                                                 |     if (r6 == 0) {
    0x0005057c cbz r6, 0x505a0                                   |         goto label_144;
                                                                 |     }
    0x0005057e cmp r0, 0                                         |     
                                                                 |     if (r0 <= 0) {
    0x00050580 ble.w 0x52538                                     |         goto label_537;
                                                                 |     }
    0x00050584 ldr.w r2, [fp, 0x140]                             |     r2 = *(arg_140h);
    0x00050588 movs r3, 0                                        |     r3 = 0;
    0x0005058a subs r2, 4                                        |     r2 -= 4;
    0x0005058c b 0x50596                                         |     
                                                                 |     while (r4 != r1) {
    0x0005058e adds r3, 1                                        |         r3++;
    0x00050590 cmp r0, r3                                        |         
                                                                 |         if (r0 == r3) {
    0x00050592 beq.w 0x52538                                     |             goto label_537;
                                                                 |         }
    0x00050596 ldr r1, [r2, 4]!                                  |         r1 = *((r2 += 4));
    0x0005059a cmp r4, r1                                        |         
    0x0005059c bne 0x5058e                                       |         
                                                                 |     }
    0x0005059e movs r6, 0                                        |     r6 = 0;
                                                                 | label_144:
    0x000505a0 ldr r7, [sp, 0x24]                                |     r7 = *((sp + 0x24));
    0x000505a2 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x000505a4 ldr r4, [r7]                                      |     r4 = *(r7);
    0x000505a6 adds r3, 1                                        |     r3++;
    0x000505a8 ldr r1, [r7, 0x2c]                                |     r1 = *((r7 + 0x2c));
    0x000505aa str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x000505ac mov r0, r4                                        |     r0 = r4;
    0x000505ae bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x000505b2 ldr r1, [r5, 8]                                   |     r1 = *((r5 + 8));
    0x000505b4 mov r0, r4                                        |     r0 = r4;
    0x000505b6 bl 0xd418                                         |     fcn_0000d418 (r0, r1);
    0x000505ba str r0, [r7, 0x2c]                                |     *((r7 + 0x2c)) = r0;
    0x000505bc ldr r0, [r5, 8]                                   |     r0 = *((r5 + 8));
    0x000505be blx 0x6050                                        |     fcn_00006050 ();
    0x000505c2 movs r3, 0                                        |     r3 = 0;
    0x000505c4 str r3, [r5, 8]                                   |     *((r5 + 8)) = r3;
    0x000505c6 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x000505c8 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x000505cc b.w 0x4d740                                       |     goto label_7;
                                                                 | label_185:
    0x000505d0 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x000505d2 ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x000505d4 adds r3, 1                                        |     r3++;
    0x000505d6 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x000505d8 ldrb.w r3, [r2, 0x58]                             |     r3 = *((r2 + 0x58));
    0x000505dc bfc r3, 2, 2                                      |     value_44 = BIT_MASK (2, );
                                                                 |     value_44 = ~value_44;
                                                                 |     r3 &= value_44;
    0x000505e0 strb.w r3, [r2, 0x58]                             |     *((r2 + 0x58)) = r3;
    0x000505e4 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_390:
    0x000505e8 mov r0, sb                                        |     r0 = sb;
    0x000505ea bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x000505ee b.w 0x4e7b4                                       |     goto label_35;
                                                                 | label_381:
    0x000505f2 mov r0, r2                                        |     r0 = r2;
    0x000505f4 movs r2, 0                                        |     r2 = 0;
    0x000505f6 mov r1, r2                                        |     r1 = r2;
                                                                 |     do {
    0x000505f8 lsrs r0, r0, 7                                    |         r0 >>= 7;
    0x000505fa adds r1, 1                                        |         r1++;
    0x000505fc cmp r1, 8                                         |         
    0x000505fe orr.w r0, r0, r2, lsl 25                          |         r0 |= (r2 << 25);
    0x00050602 lsr.w r2, r2, 7                                   |         r2 >>= 7;
    0x00050606 orr.w ip, r0, r2                                  |         
    0x0005060a ite gt                                            |         
                                                                 |         if (r1 <= 8) {
    0x0005060c movgt r3, 0                                       |             r3 = 0;
                                                                 |         }
                                                                 |         if (r1 > 8) {
    0x0005060e movle r3, 1                                       |             r3 = 1;
                                                                 |         }
    0x00050610 cmp.w ip, 0                                       |         
    0x00050614 it eq                                             |         
                                                                 |         if (ip != 0) {
    0x00050616 moveq r3, 0                                       |             r3 = 0;
                                                                 |         }
    0x00050618 cmp r3, 0                                         |         
    0x0005061a bne 0x505f8                                       |         
                                                                 |     } while (r3 != 0);
    0x0005061c b.w 0x4e4e8                                       |     goto label_14;
                                                                 | label_333:
    0x00050620 ldr.w r1, [fp, 0x124]                             |     r1 = *(arg_124h);
    0x00050624 mov r0, r2                                        |     r0 = r2;
    0x00050626 adds r5, r1, r2                                   |     r5 = r1 + r2;
    0x00050628 bl 0x5debc                                        |     fcn_0005debc (r0, r1, r2);
    0x0005062c ldr.w r0, [fp, 0x120]                             |     r0 = *(arg_120h);
    0x00050630 subs r3, r5, r1                                   |     r3 = r5 - r1;
    0x00050632 str r3, [sp, 0x74]                                |     *(arg_74h) = r3;
    0x00050634 blx r4                                            |     r0 = uint32_t (*r4)(uint32_t, uint32_t) (r0, r3);
    0x00050636 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00050638 beq.w 0x4dbae                                     |         goto label_20;
                                                                 |     }
    0x0005063c b.w 0x51190                                       |     goto label_538;
                                                                 | label_380:
    0x00050640 mov r0, sb                                        |     r0 = sb;
    0x00050642 str r1, [sp, 0x2c]                                |     *(arg_2ch) = r1;
    0x00050644 str r2, [sp, 0x20]                                |     *(arg_20h) = r2;
    0x00050646 bl 0x173c0                                        |     fcn_000173c0 (r0);
    0x0005064a ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0005064c ldr r1, [sp, 0x2c]                                |     r1 = *(arg_2ch);
    0x0005064e b.w 0x4e4d8                                       |     goto label_36;
                                                                 | label_332:
    0x00050652 movs r3, 1                                        |     r3 = 1;
    0x00050654 strb r3, [r4, 0x19]                               |     *((r4 + 0x19)) = r3;
    0x00050656 b.w 0x4db86                                       |     goto label_37;
                                                                 | label_417:
    0x0005065a ldrd r3, r6, [sp, 0x1c]                           |     __asm ("ldrd r3, r6, [arg_1ch]");
    0x0005065e adds r3, 1                                        |     r3++;
    0x00050660 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00050662 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00050664 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x00050668 b.w 0x4d740                                       |     goto label_7;
                                                                 | label_382:
    0x0005066c cmp r6, 0x7e                                      |     
    0x0005066e mov r5, r7                                        |     r5 = r7;
    0x00050670 str.w sl, [sp, 0x2c]                              |     __asm ("str.w sl, [arg_2ch]");
    0x00050674 mov r7, fp                                        |     r7 = fp;
    0x00050676 ldr.w fp, [sp, 0x34]                              |     fp = *(arg_34h);
                                                                 |     if (r6 > 0x7e) {
    0x0005067a bgt.w 0x523a4                                     |         goto label_539;
                                                                 |     }
                                                                 | label_138:
    0x0005067e adds r6, 1                                        |     r6++;
    0x00050680 asr.w sb, r6, 0x1f                                |     sb = r6 >> 0x1f;
                                                                 | label_137:
    0x00050684 ldr.w r2, [fp, 0x58]                              |     r2 = *(arg_58h);
    0x00050688 adds r1, r5, r6                                   |     r1 = r5 + r6;
    0x0005068a adc.w r7, r7, sb                                  |     __asm ("adc.w r7, r7, sb");
    0x0005068e str r1, [sp, 0x34]                                |     *(arg_34h) = r1;
    0x00050690 cmp r2, r1                                        |     
    0x00050692 asr.w r3, r2, 0x1f                                |     r3 = r2 >> 0x1f;
    0x00050696 sbcs r3, r7                                       |     __asm ("sbcs r3, r7");
                                                                 |     if (r2 < r1) {
    0x00050698 blt.w 0x4f592                                     |         goto label_30;
                                                                 |     }
    0x0005069c ldr r0, [sp, 0x38]                                |     r0 = *(arg_38h);
    0x0005069e movs r2, 0                                        |     r2 = 0;
    0x000506a0 bl 0x172d4                                        |     r0 = fcn_000172d4 (r0, r1, r2);
    0x000506a4 mov r3, r0                                        |     r3 = r0;
    0x000506a6 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000506a8 bne.w 0x4d4ec                                     |         goto label_6;
                                                                 |     }
    0x000506ac ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x000506ae cmp r6, 0x7f                                      |     
    0x000506b0 ldr.w sb, [r2, 4]                                 |     sb = *((r2 + 4));
                                                                 |     if (r6 > 0x7f) {
    0x000506b4 bgt.w 0x51ee4                                     |         goto label_540;
                                                                 |     }
    0x000506b8 movs r5, 1                                        |     r5 = 1;
    0x000506ba strb.w r6, [sb]                                   |     *(sb) = r6;
                                                                 | label_117:
    0x000506be ldr.w r3, [pc, 0x538]                             |     r3 = *(0x00050bf8);
    0x000506c2 mov.w sl, 0xc000                                  |     sl = 0xc000;
    0x000506c6 str.w fp, [sp, 0x3c]                              |     __asm ("str.w fp, [arg_3ch]");
    0x000506ca movt sl, 0xffff                                   |     sl = (sl & 0xFFFF) | 0xffff0000;
    0x000506ce ldr.w fp, [sp, 0x28]                              |     fp = *(arg_28h);
    0x000506d0 add sp, 0xa0                                      |     
    0x000506d2 add r3, pc                                        |     r3 += pc;
    0x000506d4 str r3, [sp, 0x20]                                |     *(arg_20h) = r3;
    0x000506d6 b 0x506e2                                         |     
                                                                 |     while (r3 > 6) {
    0x000506d8 cmp r2, 0xb                                       |         
                                                                 |         if (r2 > 0xb) {
    0x000506da bhi 0x5074a                                       |             goto label_541;
                                                                 |         }
                                                                 | label_38:
    0x000506dc adds r4, 0x28                                     |         r4 += 0x28;
    0x000506de cmp fp, r4                                        |         
                                                                 |         if (fp <= r4) {
    0x000506e0 blo 0x5078a                                       |             goto label_542;
                                                                 |         }
    0x000506e2 mov r1, r8                                        |         r1 = r8;
    0x000506e4 mov r0, r4                                        |         r0 = r4;
    0x000506e6 bl 0x7cfc                                         |         r0 = fcn_00007cfc (r0, r1);
    0x000506ea mov r2, r0                                        |         r2 = r0;
    0x000506ec add.w r7, sb, r6                                  |         r7 = sb + r6;
    0x000506f0 cmp r2, 0x7f                                      |         
    0x000506f2 add.w r0, sb, r5                                  |         r0 = sb + r5;
                                                                 |         if (r2 > 0x7f) {
    0x000506f6 bhi 0x5073a                                       |             goto label_543;
                                                                 |         }
    0x000506f8 subs r3, r2, 1                                    |         r3 = r2 - 1;
    0x000506fa strb.w r2, [sb, r5]                               |         *((sb + r5)) = r2;
    0x000506fe cmp r3, 6                                         |         
    0x00050700 add.w r5, r5, 1                                   |         r5++;
    0x00050704 bhi 0x506d8                                       |         
                                                                 |     }
    0x00050706 cmp r2, 7                                         |     
                                                                 |     if (r2 == 7) {
    0x00050708 beq.w 0x51be0                                     |         goto label_544;
                                                                 |     }
    0x0005070c ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0005070e add r2, r3                                        |     r2 += r3;
    0x00050710 ldrd r3, r1, [r4, 0x10]                           |     __asm ("ldrd r3, r1, [r4, 0x10]");
    0x00050714 ldrb.w r0, [r2, 0xa6c]                            |     r0 = *((r2 + 0xa6c));
    0x00050718 strd r3, r1, [sp, 0xd8]                           |     __asm ("strd r3, r1, [sp, 0xd8]");
    0x0005071c subs r2, r0, 1                                    |     r2 = r0 - 1;
                                                                 |     if (r0 == 0) {
    0x0005071e cbz r0, 0x50736                                   |         goto label_545;
                                                                 |     }
                                                                 | label_99:
    0x00050720 adds r2, 1                                        |     r2++;
    0x00050722 add r2, r7                                        |     r2 += r7;
                                                                 |     do {
    0x00050724 strb r3, [r2, -0x1]!                              |         *((r2 -= 0x1)) = r3;
    0x00050728 lsrs r3, r3, 8                                    |         r3 >>= 8;
    0x0005072a cmp r7, r2                                        |         
    0x0005072c orr.w r3, r3, r1, lsl 24                          |         r3 |= (r1 << 24);
    0x00050730 lsr.w r1, r1, 8                                   |         r1 >>= 8;
    0x00050734 bne 0x50724                                       |         
                                                                 |     } while (r7 != r2);
                                                                 | label_545:
    0x00050736 add r6, r0                                        |     r6 += r0;
    0x00050738 b 0x506dc                                         |     goto label_38;
                                                                 | label_543:
    0x0005073a tst.w r2, sl                                      |     
                                                                 |     if ((r2 & sl) == 0) {
    0x0005073e beq 0x50758                                       |         goto label_546;
                                                                 |     }
    0x00050740 movs r3, 0                                        |     r3 = 0;
    0x00050742 bl 0x9cd4                                         |     r0 = fcn_00009cd4 (r0, r1, r2);
    0x00050746 uxtb r3, r0                                       |     r3 = (int8_t) r0;
                                                                 |     do {
    0x00050748 add r5, r3                                        |         r5 += r3;
                                                                 | label_541:
    0x0005074a ldr r2, [r4, 0x18]                                |         r2 = *((r4 + 0x18));
    0x0005074c mov r0, r7                                        |         r0 = r7;
    0x0005074e ldr r1, [r4, 4]                                   |         r1 = *((r4 + 4));
    0x00050750 add r6, r2                                        |         r6 += r2;
    0x00050752 blx 0x6214                                        |         fcn_00006214 ();
    0x00050756 b 0x506dc                                         |         goto label_38;
                                                                 | label_546:
    0x00050758 lsrs r3, r2, 7                                    |         r3 = r2 >> 7;
    0x0005075a and r2, r2, 0x7f                                  |         r2 &= 0x7f;
    0x0005075e strb r2, [r0, 1]                                  |         *((r0 + 1)) = r2;
    0x00050760 orn r3, r3, 0x7f                                  |         r3 |= 0x7f;
                                                                 |         r3 = ~r3;
    0x00050764 strb r3, [r0]                                     |         *(r0) = r3;
    0x00050766 movs r3, 2                                        |         r3 = 2;
    0x00050768 b 0x50748                                         |         
                                                                 |     } while (1);
                                                                 | label_524:
    0x0005076a ldr r2, [r1, 0x14]                                |     r2 = *((r1 + 0x14));
    0x0005076c str r2, [r3, 0x14]                                |     *((r3 + 0x14)) = r2;
                                                                 | label_75:
    0x0005076e mov r0, fp                                        |     r0 = fp;
    0x00050770 bl 0x12f1c                                        |     fcn_00012f1c (r0, r1);
                                                                 | label_522:
    0x00050774 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00050776 adds r3, 1                                        |     r3++;
    0x00050778 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0005077a ldr.w r3, [fp, 0x18]                              |     r3 = *(arg_18h);
    0x0005077e orr r3, r3, 2                                     |     r3 |= 2;
    0x00050782 str.w r3, [fp, 0x18]                              |     __asm ("str.w r3, [arg_18h]");
    0x00050786 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_542:
    0x0005078a ldrd r2, fp, [sp, 0x38]                           |     __asm ("ldrd r2, fp, [arg_38h]");
    0x0005078e ldr r3, [sp, 0x34]                                |     r3 = *(arg_34h);
    0x00050790 str r3, [r2, 0x18]                                |     *((r2 + 0x18)) = r3;
    0x00050792 movs r3, 0x10                                     |     r3 = 0x10;
    0x00050794 strh r3, [r2, 0x1c]                               |     *((r2 + 0x1c)) = r3;
    0x00050796 movs r3, 0                                        |     r3 = 0;
    0x00050798 str r3, [r2, 0x20]                                |     *((r2 + 0x20)) = r3;
    0x0005079a ldr r3, [sp, 0x2c]                                |     r3 = *(arg_2ch);
                                                                 |     if (r3 != 0) {
    0x0005079c cbz r3, 0x507a6                                   |         
    0x0005079e str r3, [r2, 0x10]                                |         *((r2 + 0x10)) = r3;
    0x000507a0 movw r3, 0x4010                                   |         r3 = 0x4010;
    0x000507a4 strh r3, [r2, 0x1c]                               |         *((r2 + 0x1c)) = r3;
                                                                 |     }
    0x000507a6 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x000507a8 ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x000507aa adds r3, 1                                        |     r3++;
    0x000507ac str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x000507ae movs r3, 1                                        |     r3 = 1;
    0x000507b0 strb r3, [r2, 0x1e]                               |     *((r2 + 0x1e)) = r3;
    0x000507b2 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_393:
    0x000507b6 ldr r3, [sp, 0x38]                                |     r3 = *(arg_38h);
    0x000507b8 add.w r8, r8, r8, lsl 2                           |     r8 += (r8 << 2);
    0x000507bc add.w r3, r3, r8, lsl 3                           |     r3 += (r8 << 3);
    0x000507c0 str r3, [sp, 0x38]                                |     *(arg_38h) = r3;
    0x000507c2 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_396:
    0x000507c6 movs r3, 1                                        |     r3 = 1;
    0x000507c8 ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x000507ca cmp r1, r3                                        |     
    0x000507cc strh r3, [r2, 0x1c]                               |     *((r2 + 0x1c)) = r3;
                                                                 |     if (r1 <= r3) {
    0x000507ce ble.w 0x527b8                                     |         goto label_547;
                                                                 |     }
    0x000507d2 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x000507d4 mov.w sb, 6                                       |     sb = 6;
    0x000507d8 ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x000507da add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x000507de movs r3, 2                                        |     r3 = 2;
    0x000507e0 ldr r0, [r2, 0x2c]                                |     r0 = *((r2 + 0x2c));
    0x000507e2 strb.w r3, [r2, 0x56]                             |     *((r2 + 0x56)) = r3;
    0x000507e6 b 0x50538                                         |     goto label_39;
                                                                 | label_517:
    0x000507e8 ldr r3, [r7, 0xc]                                 |     r3 = *((r7 + 0xc));
    0x000507ea cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000507ec beq 0x508ee                                       |         goto label_548;
                                                                 |     }
    0x000507ee ldr.w r3, [pc, 0x40c]                             |     r3 = *(0x00050bfc);
    0x000507f2 movw sb, 0xcccd                                   |     
    0x000507f6 mov.w sl, 1                                       |     sl = 1;
    0x000507fa str.w fp, [sp, 0x50]                              |     __asm ("str.w fp, [arg_50h]");
    0x000507fe movt sb, 0xcccc                                   |     sb = 0xcccccccd;
    0x00050802 mov.w r6, -1                                      |     r6 = -1;
    0x00050806 add r3, pc                                        |     r3 += pc;
    0x00050808 mov fp, sl                                        |     
    0x0005080a str r3, [sp, 0x3c]                                |     *(arg_3ch) = r3;
    0x0005080c ldr r3, [pc, 0x3f0]                               |     
    0x0005080e add r3, pc                                        |     r3 = 0xa1412;
    0x00050810 str r3, [sp, 0x48]                                |     *(arg_48h) = r3;
    0x00050812 b 0x50858                                         |     
                                                                 |     while (r1 != r2) {
                                                                 | label_41:
    0x00050814 cmp.w fp, 1                                       |         
                                                                 |         if (fp < 1) {
    0x00050818 bls 0x508e6                                       |             goto label_549;
                                                                 |         }
    0x0005081a ldr r2, [r5, 0x24]                                |         r2 = *((r5 + 0x24));
    0x0005081c mov r0, r6                                        |         r0 = r6;
    0x0005081e umull r2, r4, sb, r2                              |         r2:r4 = sb * r2;
    0x00050820 movs r4, 2                                        |         r4 = 2;
    0x00050822 lsrs r4, r4, 2                                    |         r4 >>= 2;
    0x00050824 adds r4, 1                                        |         r4++;
    0x00050826 mov r1, r4                                        |         r1 = r4;
    0x00050828 bl 0x5dc60                                        |         fcn_0005dc60 (r0, r1, r2);
    0x0005082c ldr r2, [pc, 0x3d4]                               |         
    0x0005082e mul r4, r0, r4                                    |         r4 = r0 * r4;
    0x00050832 ldr r1, [r5, 0x20]                                |         r1 = *((r5 + 0x20));
    0x00050834 add r2, pc                                        |         r2 = 0xa143c;
    0x00050836 ldr.w r0, [r2, 0x110]                             |         r0 = *(0xa154c);
    0x00050838 lsls r0, r2, 4                                    |         r0 = r2 << 4;
    0x0005083a bl 0x5dc60                                        |         fcn_0005dc60 (r0, r1, r2);
    0x0005083e adds r2, r4, 2                                    |         r2 = r4 + 2;
    0x00050840 adds r1, r0, 1                                    |         r1 = r0 + 1;
    0x00050842 cmp r2, r1                                        |         
    0x00050844 it eq                                             |         
                                                                 |         if (r2 != r1) {
    0x00050846 addeq r2, r4, 3                                   |             r2 = r4 + 3;
                                                                 |         }
                                                                 | label_42:
    0x00050848 cmp fp, r2                                        |         
                                                                 |         if (fp == r2) {
    0x0005084a beq 0x508d0                                       |             goto label_550;
                                                                 |         }
                                                                 | label_40:
    0x0005084c ldr r2, [r7, 0xc]                                 |         r2 = *((r7 + 0xc));
    0x0005084e add.w fp, fp, 1                                   |         
    0x00050852 adds r6, 1                                        |         r6++;
    0x00050854 cmp fp, r2                                        |         
                                                                 |         if (fp > r2) {
    0x00050856 bhi 0x508ea                                       |             goto label_551;
                                                                 |         }
    0x00050858 ldr r2, [r7, 0x10]                                |         r2 = *((r7 + 0x10));
    0x0005085a cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x0005085c beq 0x508ea                                       |             goto label_551;
                                                                 |         }
    0x0005085e ldr r2, [r7, 8]                                   |         r2 = *((r7 + 8));
    0x00050860 lsr.w r8, fp, 3                                   |         r8 = fp >> 3;
    0x00050864 and r1, fp, 7                                     |         r1 = fp & 7;
    0x00050868 movs r4, 1                                        |         r4 = 1;
    0x0005086a ldrb.w r2, [r2, r8]                               |         r2 = *((r2 + r8));
    0x0005086e lsls r4, r1                                       |         r4 <<= r1;
    0x00050870 ands.w r1, r2, r4                                 |         r1 = r2 & r4;
    0x00050874 bne 0x50814                                       |         
                                                                 |     }
    0x00050876 cmp.w fp, 1                                       |     
                                                                 |     if (fp >= 1) {
    0x0005087a bls 0x508ae                                       |         
    0x0005087c ldr r2, [r5, 0x24]                                |         r2 = *((r5 + 0x24));
    0x0005087e mov r0, r6                                        |         r0 = r6;
    0x00050880 umull r2, r1, sb, r2                              |         r2:r1 = sb * r2;
    0x00050884 lsrs r1, r1, 2                                    |         r1 >>= 2;
    0x00050886 add.w sl, r1, 1                                   |         sl = r1 + 1;
    0x0005088a mov r1, sl                                        |         r1 = sl;
    0x0005088c bl 0x5dc60                                        |         fcn_0005dc60 (r0, r1, r2);
    0x00050890 ldr r3, [sp, 0x48]                                |         r3 = *(arg_48h);
    0x00050892 mul sl, sl, r0                                    |         sl *= r0;
    0x00050896 ldr r1, [r5, 0x20]                                |         r1 = *((r5 + 0x20));
    0x00050898 ldr.w r0, [r3, 0x110]                             |         r0 = *((r3 + 0x110));
    0x0005089c bl 0x5dc60                                        |         fcn_0005dc60 (r0, r1, r2);
    0x000508a0 add.w r1, sl, 2                                   |         r1 = sl + 2;
    0x000508a4 adds r0, 1                                        |         r0++;
    0x000508a6 cmp r1, r0                                        |         
    0x000508a8 it eq                                             |         
                                                                 |         if (r1 == r0) {
    0x000508aa addeq r1, sl, 3                                   |             r1 = sl + 3;
                                                                 |             goto label_552;
                                                                 |         }
                                                                 |     }
                                                                 | label_552:
    0x000508ae cmp fp, r1                                        |     
                                                                 |     if (fp != r1) {
    0x000508b0 bne 0x508b8                                       |         goto label_553;
                                                                 |     }
    0x000508b2 ldrb r2, [r5, 0x11]                               |     r2 = *((r5 + 0x11));
    0x000508b4 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x000508b6 bne 0x5084c                                       |         goto label_40;
                                                                 |     }
                                                                 | label_553:
    0x000508b8 ldr r2, [sp, 0x3c]                                |     r2 = *(arg_3ch);
    0x000508ba mov r3, fp                                        |     r3 = fp;
    0x000508bc movs r1, 0                                        |     r1 = 0;
    0x000508be mov r0, r7                                        |     r0 = r7;
    0x000508c0 bl 0x34c14                                        |     fcn_00034c14 (r0, r1, r2);
    0x000508c4 ldr r2, [r7, 8]                                   |     r2 = *((r7 + 8));
    0x000508c6 ldrb.w r2, [r2, r8]                               |     r2 = *((r2 + r8));
    0x000508ca tst r2, r4                                        |     
                                                                 |     if ((r2 & r4) == 0) {
    0x000508cc beq 0x5084c                                       |         goto label_40;
                                                                 |     }
    0x000508ce b 0x50814                                         |     goto label_41;
                                                                 | label_550:
    0x000508d0 ldrb r2, [r5, 0x11]                               |     r2 = *((r5 + 0x11));
    0x000508d2 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000508d4 beq 0x5084c                                       |         goto label_40;
                                                                 |     }
    0x000508d6 ldr r2, [pc, 0x330]                               |     
    0x000508d8 mov r3, fp                                        |     r3 = fp;
    0x000508da movs r1, 0                                        |     r1 = 0;
    0x000508dc mov r0, r7                                        |     r0 = r7;
    0x000508de add r2, pc                                        |     r2 = 0xa14ec;
    0x000508e0 bl 0x34c14                                        |     fcn_00034c14 (r0, r1, r2);
    0x000508e4 b 0x5084c                                         |     goto label_40;
                                                                 | label_549:
    0x000508e6 movs r2, 0                                        |     r2 = 0;
    0x000508e8 b 0x50848                                         |     goto label_42;
                                                                 | label_551:
    0x000508ea ldr.w fp, [sp, 0x50]                              |     fp = *(arg_50h);
                                                                 | label_548:
    0x000508ee ldr r3, [r5]                                      |     r3 = *(r5);
    0x000508f0 ldr r2, [sp, 0x4c]                                |     r2 = *(arg_4ch);
    0x000508f2 ldr.w r3, [r3, 0xdc]                              |     r3 = *((r3 + 0xdc));
    0x000508f6 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x000508f8 cmp r2, r3                                        |     
                                                                 |     if (r2 != r3) {
    0x000508fa bne.w 0x51214                                     |         goto label_554;
                                                                 |     }
    0x000508fc strh r3, [r1, 0x24]                               |     *((r1 + 0x24)) = r3;
                                                                 | label_65:
    0x000508fe ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x00050900 ldrb r3, [r2, 9]                                  |     r3 = *((r2 + 9));
                                                                 |     if (r3 != 0) {
    0x00050902 cbz r3, 0x50918                                   |         
    0x00050904 ldr r4, [r2, 0xc]                                 |         r4 = *((r2 + 0xc));
    0x00050906 subs r4, 1                                        |         r4--;
    0x00050908 str r4, [r2, 0xc]                                 |         *((r2 + 0xc)) = r4;
                                                                 |         if (r4 != 0) {
    0x0005090a cbnz r4, 0x50918                                  |             goto label_555;
                                                                 |         }
    0x0005090c ldr r3, [r2, 4]                                   |         r3 = *((r2 + 4));
    0x0005090e mov r5, r2                                        |         r5 = r2;
    0x00050910 ldr r0, [r3, 0x38]                                |         r0 = *((r3 + 0x38));
    0x00050912 blx 0x63dc                                        |         fcn_000063dc ();
    0x00050916 strb r4, [r5, 0xa]                                |         *((r5 + 0xa)) = r4;
                                                                 |     }
                                                                 | label_555:
    0x00050918 ldr r0, [r7, 8]                                   |     r0 = *((r7 + 8));
    0x0005091a blx 0x6050                                        |     fcn_00006050 ();
    0x0005091e ldr r3, [r7, 0x18]                                |     r3 = *((r7 + 0x18));
    0x00050920 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00050922 bne.w 0x531d4                                     |         goto label_556;
                                                                 |     }
    0x00050926 ldr r6, [r7, 0x14]                                |     r6 = *((r7 + 0x14));
    0x00050928 asrs r5, r6, 0x1f                                 |     r5 = r6 >> 0x1f;
    0x0005092a cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0005092c beq.w 0x5132a                                     |         goto label_557;
                                                                 |     }
    0x00050930 add r0, sp, 0xf4                                  |     r0 += arg_f4h;
    0x00050932 bl 0x171d4                                        |     fcn_000171d4 (r0);
    0x00050936 ldr r1, [sp, 0x28]                                |     r1 = *(arg_28h);
    0x00050938 mov r4, r0                                        |     r4 = r0;
    0x0005093a mov r0, fp                                        |     r0 = fp;
    0x0005093c bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x00050940 ldr r2, [sp, 0x34]                                |     r2 = *(arg_34h);
    0x00050942 ldr r0, [sp, 0x2c]                                |     r0 = *(arg_2ch);
    0x00050944 ldr r3, [r2, 0x10]                                |     r3 = *((r2 + 0x10));
    0x00050946 subs r3, r3, r6                                   |     r3 -= r6;
    0x00050948 str r3, [r2, 0x10]                                |     *((r2 + 0x10)) = r3;
    0x0005094a ldr r3, [r2, 0x14]                                |     r3 = *((r2 + 0x14));
    0x0005094c sbc.w r3, r3, r5                                  |     __asm ("sbc.w r3, r3, r5");
    0x00050950 str r3, [r2, 0x14]                                |     *((r2 + 0x14)) = r3;
    0x00050952 bl 0xfdb8                                         |     fcn_0000fdb8 (r0);
    0x00050956 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00050958 beq.w 0x4d4ec                                     |         goto label_6;
                                                                 |     }
    0x0005095c ldr r2, [sp, 0x78]                                |     r2 = *(arg_78h);
    0x0005095e mov r1, r4                                        |     r1 = r4;
    0x00050960 ldr r3, [pc, 0x2a8]                               |     r3 = *(0x50c0c);
    0x00050962 ldr r0, [sp, 0x2c]                                |     r0 = *(arg_2ch);
    0x00050964 ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x00050966 mov.w r2, -1                                      |     r2 = -1;
    0x0005096a str r3, [sp]                                      |     *(sp) = r3;
    0x0005096c movs r3, 1                                        |     r3 = 1;
    0x0005096e bl 0x17978                                        |     fcn_00017978 (r0, r1, r2, r3, r4);
                                                                 | label_69:
    0x00050972 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00050974 ldr r0, [sp, 0x2c]                                |     r0 = *(arg_2ch);
    0x00050976 adds r3, 1                                        |     r3++;
    0x00050978 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0005097a ldrh r3, [r0, 0x1c]                               |     r3 = *((r0 + 0x1c));
    0x0005097c lsls r4, r3, 0x1e                                 |     r4 = r3 << 0x1e;
                                                                 |     if (r4 >= r3) {
    0x0005097e bpl.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x00050982 ldrb r3, [r0, 0x1e]                               |     r3 = *((r0 + 0x1e));
    0x00050984 ldr r1, [sp, 0x70]                                |     r1 = *(arg_70h);
    0x00050986 cmp r3, r1                                        |     
                                                                 |     if (r3 == r1) {
    0x00050988 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0005098c bl 0x17460                                        |     fcn_00017460 (r0, r1);
    0x00050990 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_506:
    0x00050994 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00050996 add.w r8, sp, 0xe0                                |     r8 += arg_e0h;
    0x00050998 lsrs r0, r4, 3                                    |     r0 = r4 >> 3;
    0x0005099a mov ip, r8                                        |     
    0x0005099c add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x0005099e ldr.w sl, [r3, 0x10]                              |     sl = *((r3 + 0x10));
    0x000509a2 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x000509a4 str r3, [sp, 0x114]                               |     *(arg_114h) = r3;
    0x000509a6 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x000509a8 str r3, [sp, 0x110]                               |     *(arg_110h) = r3;
    0x000509aa ldr r3, [sp, 0x38]                                |     r3 = *(arg_38h);
    0x000509ac str.w sl, [r7]                                    |     __asm ("str.w sl, [r7]");
    0x000509b0 mov r4, r3                                        |     r4 = r3;
    0x000509b2 add.w lr, r3, 0x20                                |     lr = r3 + 0x20;
                                                                 |     do {
    0x000509b6 ldr r0, [r4]                                      |         r0 = *(r4);
    0x000509b8 adds r4, 0x10                                     |         r4 += 0x10;
    0x000509ba ldr r1, [r4, -0xc]                                |         r1 = *((r4 - 0xc));
    0x000509be mov r6, ip                                        |         r6 = ip;
    0x000509c0 ldr r2, [r4, -0x8]                                |         r2 = *((r4 - 0x8));
    0x000509c4 ldr r3, [r4, -0x4]                                |         r3 = *((r4 - 0x4));
    0x000509c8 cmp r4, lr                                        |         
    0x000509ca stm r6!, {r0, r1, r2, r3}                         |         *(r6!) = r0;
                                                                 |         *((r6! + 4)) = r1;
                                                                 |         *((r6! + 8)) = r2;
                                                                 |         *((r6! + 12)) = r3;
    0x000509cc mov ip, r6                                        |         
    0x000509ce bne 0x509b6                                       |         
                                                                 |     } while (r4 != lr);
    0x000509d0 movs r3, 1                                        |     r3 = 1;
    0x000509d2 movs r2, 0                                        |     r2 = 0;
    0x000509d4 ldr r1, [r4, 4]                                   |     r1 = *((r4 + 4));
    0x000509d6 ldr r0, [r4]                                      |     r0 = *(r4);
    0x000509d8 stm.w ip!, {r0, r1}                               |     *(ip!) = r0;
                                                                 |     *((ip! + 4)) = r1;
    0x000509dc ldr r1, [sp, 0x38]                                |     r1 = *(arg_38h);
    0x000509de strh r3, [r1, 0x1c]                               |     *((r1 + 0x1c)) = r3;
    0x000509e0 ldrh r3, [r7, 0x24]                               |     r3 = *((r7 + 0x24));
    0x000509e2 strd r2, r2, [r1, 0x20]                           |     __asm ("strd r2, r2, [r1, 0x20]");
    0x000509e6 strb.w r2, [r7, 0x45]                             |     *((r7 + 0x45)) = r2;
    0x000509ea bic r3, r3, 0x4180                                |     r3 = BIT_MASK (r3, 0x4180);
    0x000509ee bic r3, r3, 0x7f                                  |     r3 = BIT_MASK (r3, 0x7f);
    0x000509f2 orr r3, r3, 1                                     |     r3 |= 1;
    0x000509f6 strh r3, [r7, 0x24]                               |     *((r7 + 0x24)) = r3;
    0x000509f8 ldrh.w r3, [sl, 2]                                |     r3 = *((sl + 2));
    0x000509fc lsls r2, r3, 0x1a                                 |     r2 = r3 << 0x1a;
                                                                 |     if (r2 < r3) {
    0x000509fe bmi.w 0x51208                                     |         goto label_558;
                                                                 |     }
                                                                 | label_64:
    0x00050a02 ldr r3, [sp, 0x68]                                |     r3 = *(arg_68h);
    0x00050a04 mov r2, sb                                        |     r2 = sb;
    0x00050a06 mov r1, r5                                        |     r1 = r5;
    0x00050a08 mov r0, r7                                        |     r0 = r7;
    0x00050a0a str.w r3, [fp, 0x20]                              |     __asm ("str.w r3, [arg_20h]");
    0x00050a0e ldr r3, [sp, 0x6c]                                |     r3 = *(arg_6ch);
    0x00050a10 str.w r3, [fp, 0x24]                              |     __asm ("str.w r3, [fp, 0x24]");
    0x00050a14 ldr.w r3, [sl, 0xc]                               |     r3 = *((sl + 0xc));
    0x00050a18 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00050a1a ldr.w r2, [fp, 0x20]                              |     r2 = *(arg_20h);
    0x00050a1e ldrb.w r3, [fp, 0x40]                             |     r3 = *(arg_40h);
    0x00050a22 str r2, [sp, 0x68]                                |     *(arg_68h) = r2;
    0x00050a24 ldr.w r2, [fp, 0x24]                              |     r2 = *((fp + 0x24));
    0x00050a28 str r2, [sp, 0x6c]                                |     *(arg_6ch) = r2;
    0x00050a2a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00050a2c bne.w 0x54030                                     |         goto label_559;
                                                                 |     }
    0x00050a30 ldrb.w r6, [r7, 0x45]                             |     r6 = *((r7 + 0x45));
                                                                 |     if (r6 == 0) {
    0x00050a34 cbz r6, 0x50a94                                   |         goto label_560;
                                                                 |     }
    0x00050a36 ldr r6, [r7, 0x40]                                |     r6 = *((r7 + 0x40));
    0x00050a38 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x00050a3a bne.w 0x52e22                                     |         goto label_561;
                                                                 |     }
                                                                 | label_184:
    0x00050a3e ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00050a40 ldr r5, [r3, 4]                                   |     r5 = *((r3 + 4));
    0x00050a42 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00050a44 ldr.w r4, [r3, 0xcc]                              |     r4 = *((r3 + 0xcc));
    0x00050a48 add.w sb, r3, 0xcc                                |     sb = r3 + 0xcc;
                                                                 |     if (r4 == 0) {
    0x00050a4c cbz r4, 0x50a94                                   |         goto label_560;
                                                                 |     }
    0x00050a4e mov r3, r8                                        |     r3 = r8;
    0x00050a50 ldr.w sl, [sp, 0x1c]                              |     sl = *(arg_1ch);
    0x00050a54 mov r8, r7                                        |     r8 = r7;
    0x00050a56 mov r7, r6                                        |     r7 = r6;
    0x00050a58 mov r6, r5                                        |     r6 = r5;
    0x00050a5a mov r5, sb                                        |     r5 = sb;
    0x00050a5c mov sb, r3                                        |     sb = r3;
    0x00050a5e b 0x50a70                                         |     
                                                                 |     while (sl >= 0) {
    0x00050a60 ldr r2, [r4]                                      |         r2 = *(r4);
    0x00050a62 cmp r2, sl                                        |         
                                                                 |         if (r2 == sl) {
    0x00050a64 beq.w 0x51b9a                                     |             goto label_562;
                                                                 |         }
                                                                 | label_98:
    0x00050a68 add.w r5, r4, 0x10                                |         r5 = r4 + 0x10;
                                                                 | label_43:
    0x00050a6c ldr r4, [r5]                                      |         r4 = *(r5);
                                                                 |         if (r4 == 0) {
    0x00050a6e cbz r4, 0x50a8e                                   |             goto label_563;
                                                                 |         }
    0x00050a70 cmp.w sl, 0                                       |         
    0x00050a74 bge 0x50a60                                       |         
                                                                 |     }
                                                                 | label_97:
    0x00050a76 ldr r2, [r4, 0xc]                                 |     r2 = *((r4 + 0xc));
                                                                 |     if (r2 != 0) {
    0x00050a78 cbz r2, 0x50a7e                                   |         
    0x00050a7a ldr r0, [r4, 8]                                   |         r0 = *((r4 + 8));
    0x00050a7c blx r2                                            |         uint32_t (*r2)(uint32_t) (r0);
                                                                 |     }
    0x00050a7e ldr r2, [r4, 0x10]                                |     r2 = *((r4 + 0x10));
    0x00050a80 mov r1, r4                                        |     r1 = r4;
    0x00050a82 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00050a84 str r2, [r5]                                      |     *(r5) = r2;
    0x00050a86 ldr r0, [r3]                                      |     r0 = *(r3);
    0x00050a88 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x00050a8c b 0x50a6c                                         |     goto label_43;
                                                                 | label_563:
    0x00050a8e mov r6, r7                                        |     r6 = r7;
    0x00050a90 mov r7, r8                                        |     r7 = r8;
    0x00050a92 mov r8, sb                                        |     r8 = sb;
                                                                 | label_560:
    0x00050a94 ldrh r3, [r7, 0x24]                               |     r3 = *((r7 + 0x24));
    0x00050a96 lsls r1, r3, 0x1e                                 |     r1 = r3 << 0x1e;
                                                                 |     if (r1 < r3) {
    0x00050a98 bpl 0x50aac                                       |         
    0x00050a9a ldrb.w r3, [r7, 0x26]                             |         r3 = *((r7 + 0x26));
    0x00050a9e ldr r2, [sp, 0x70]                                |         r2 = *(arg_70h);
    0x00050aa0 cmp r3, r2                                        |         
                                                                 |         if (r3 == r2) {
    0x00050aa2 beq 0x50aac                                       |             goto label_564;
                                                                 |         }
    0x00050aa4 mov r1, r2                                        |         r1 = r2;
    0x00050aa6 mov r0, r8                                        |         r0 = r8;
    0x00050aa8 bl 0x17460                                        |         fcn_00017460 (r0, r1);
                                                                 |     }
                                                                 | label_564:
    0x00050aac ldr r5, [sp, 0x38]                                |     r5 = *(arg_38h);
    0x00050aae add r7, sp, 0x100                                 |     r7 += arg_100h;
                                                                 |     do {
    0x00050ab0 mov r4, r8                                        |         r4 = r8;
    0x00050ab2 adds r5, 0x10                                     |         r5 += 0x10;
    0x00050ab4 ldm r4!, {r0, r1, r2, r3}                         |         r0 = *(r4!);
                                                                 |         r1 = *((r4! + 4));
                                                                 |         r2 = *((r4! + 8));
                                                                 |         r3 = *((r4! + 12));
    0x00050ab6 add.w r8, r8, 0x10                                |         r8 += 0x10;
    0x00050aba cmp r4, r7                                        |         
    0x00050abc str r0, [r5, -0x10]                               |         *((r5 - 0x10)) = r0;
    0x00050ac0 str r1, [r5, -0xc]                                |         *((r5 - 0xc)) = r1;
    0x00050ac4 str r2, [r5, -0x8]                                |         *((r5 - 0x8)) = r2;
    0x00050ac8 str r3, [r5, -0x4]                                |         *((r5 - 0x4)) = r3;
    0x00050acc bne 0x50ab0                                       |         
                                                                 |     } while (r4 != r7);
    0x00050ace ldm.w r8!, {r0, r1}                               |     r0 = *(r8!);
                                                                 |     r1 = *((r8! + 4));
    0x00050ad2 str r0, [r5]                                      |     *(r5) = r0;
    0x00050ad4 str r1, [r5, 4]                                   |     *((r5 + 4)) = r1;
    0x00050ad6 ldr r3, [sp, 0x38]                                |     r3 = *(arg_38h);
    0x00050ad8 ldrh r2, [r3, 0x1c]                               |     r2 = *((r3 + 0x1c));
    0x00050ada tst.w r2, 0x12                                    |     
                                                                 |     if ((r2 & 0x12) == 0) {
    0x00050ade beq.w 0x4dbae                                     |         goto label_20;
                                                                 |     }
    0x00050ae2 lsls r2, r2, 0x11                                 |     r2 <<= 0x11;
    0x00050ae4 mov r1, r3                                        |     r1 = r3;
    0x00050ae6 it mi                                             |     
                                                                 |     if (r2 >= r2) {
    0x00050ae8 ldrmi r2, [r1, 0x10]                              |         r2 = *((r1 + 0x10));
                                                                 |     }
    0x00050aea ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x00050aec it mi                                             |     
                                                                 |     if (r2 >= r2) {
    0x00050aee addmi r3, r3, r2                                  |         r3 += r2;
                                                                 |     }
    0x00050af0 ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x00050af2 ldr r2, [r2]                                      |     r2 = *(r2);
    0x00050af4 ldr r2, [r2, 0x58]                                |     r2 = *((r2 + 0x58));
    0x00050af6 cmp r2, r3                                        |     
                                                                 |     if (r2 >= r3) {
    0x00050af8 bge.w 0x4dbae                                     |         goto label_20;
                                                                 |     }
    0x00050afc b.w 0x4f592                                       |     goto label_30;
                                                                 | label_389:
    0x00050b00 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00050b02 str r4, [sp, 0x38]                                |     *(arg_38h) = r4;
    0x00050b04 adds r3, 1                                        |     r3++;
    0x00050b06 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00050b08 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_337:
    0x00050b0e add.w r8, r3, 1                                   |     r8 = r3 + 1;
                                                                 | label_418:
    0x00050b12 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00050b14 mov.w sb, 7                                       |     sb = 7;
    0x00050b18 ldr r0, [r3, 0x2c]                                |     r0 = *((r3 + 0x2c));
    0x00050b1a b 0x50538                                         |     goto label_39;
                                                                 | label_311:
    0x00050b1c add r3, sp, 0xa8                                  |     r3 += arg_a8h;
    0x00050b1e mov r0, r5                                        |     r0 = r5;
    0x00050b20 mov r6, r3                                        |     r6 = r3;
    0x00050b22 mov r1, r3                                        |     r1 = r3;
    0x00050b24 bl 0xb5cc                                         |     fcn_0000b5cc (r0, r1);
    0x00050b28 ldr r6, [r6]                                      |     r6 = *(r6);
    0x00050b2a mvn r2, 0x80000000                                |     r2 = ~0x80000000;
    0x00050b2e ldr r3, [sp, 0xac]                                |     r3 = *(arg_ach);
    0x00050b30 subs r1, r6, 1                                    |     r1 = r6 - 1;
    0x00050b32 adc r3, r3, -1                                    |     __asm ("adc r3, r3, -1");
    0x00050b36 cmp r1, r2                                        |     
    0x00050b38 sbcs r3, r3, 0                                    |     __asm ("sbcs r3, r3, 0");
                                                                 |     if (r1 >= r2) {
    0x00050b3c bhs.w 0x4d702                                     |         goto label_44;
                                                                 |     }
    0x00050b40 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x00050b42 movs r2, 0x28                                     |     r2 = 0x28;
    0x00050b44 movs r1, 0                                        |     r1 = 0;
    0x00050b46 mov r0, r7                                        |     r0 = r7;
    0x00050b48 blx 0x5fcc                                        |     fcn_00005fcc ();
    0x00050b4c mov r2, r6                                        |     r2 = r6;
    0x00050b4e mov r3, r8                                        |     r3 = r8;
    0x00050b50 mov r0, r5                                        |     r0 = r5;
    0x00050b52 movs r1, 0                                        |     r1 = 0;
    0x00050b54 str r7, [sp]                                      |     *(sp) = r7;
    0x00050b56 bl 0x2f238                                        |     r0 = fcn_0002f238 (r0, r1, r2, r3, r4);
    0x00050b5a mov r6, r0                                        |     r6 = r0;
    0x00050b5c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00050b5e beq.w 0x5128c                                     |         goto label_565;
                                                                 |     }
    0x00050b62 movs r4, 0                                        |     r4 = 0;
    0x00050b64 b.w 0x4d722                                       |     goto label_45;
                                                                 | label_481:
    0x00050b68 mov r2, r7                                        |     r2 = r7;
    0x00050b6a mov r1, r5                                        |     r1 = r5;
    0x00050b6c mov r0, r6                                        |     r0 = r6;
    0x00050b6e movs r3, 0                                        |     r3 = 0;
    0x00050b70 bl 0x30258                                        |     r0 = fcn_00030258 (r0, r1, r2, r3, r4, r5, r6);
    0x00050b74 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00050b76 bne.w 0x4fd0e                                     |         goto label_46;
                                                                 |     }
    0x00050b7a ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00050b7c adds r3, 1                                        |     r3++;
    0x00050b7e str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00050b80 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_477:
    0x00050b84 ldr r5, [sp, 0x38]                                |     r5 = *(arg_38h);
    0x00050b86 movs r3, 0                                        |     r3 = 0;
    0x00050b88 str r3, [sp]                                      |     *(sp) = r3;
    0x00050b8a mov.w r2, -1                                      |     r2 = -1;
    0x00050b8e movs r3, 1                                        |     r3 = 1;
    0x00050b90 mov r0, r5                                        |     r0 = r5;
    0x00050b92 bl 0x17978                                        |     r0 = fcn_00017978 (r0, r1, r2, r3, r4);
    0x00050b96 cmp r0, 0x12                                      |     
    0x00050b98 mov r6, r0                                        |     r6 = r0;
                                                                 |     if (r0 == 0x12) {
    0x00050b9a beq.w 0x4f592                                     |         goto label_30;
                                                                 |     }
    0x00050b9e ldrh r3, [r5, 0x1c]                               |     r3 = *((r5 + 0x1c));
    0x00050ba0 mov r0, r5                                        |     r0 = r5;
    0x00050ba2 lsls r7, r3, 0x1e                                 |     r7 = r3 << 0x1e;
                                                                 |     if (r7 >= r3) {
    0x00050ba4 bpl 0x50bbc                                       |         goto label_566;
                                                                 |     }
    0x00050ba6 ldrb r2, [r5, 0x1e]                               |     r2 = *((r5 + 0x1e));
    0x00050ba8 cmp r2, r4                                        |     
                                                                 |     if (r2 == r4) {
    0x00050baa beq 0x50bbc                                       |         goto label_566;
                                                                 |     }
    0x00050bac mov r1, r4                                        |     r1 = r4;
    0x00050bae bl 0x17460                                        |     r0 = fcn_00017460 (r0, r1);
    0x00050bb2 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00050bb4 bne.w 0x4d4ec                                     |         goto label_6;
                                                                 |     }
    0x00050bb8 ldr r3, [sp, 0x38]                                |     r3 = *(arg_38h);
    0x00050bba ldrh r3, [r3, 0x1c]                               |     r3 = *((r3 + 0x1c));
                                                                 | label_566:
    0x00050bbc ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x00050bbe orr r3, r3, 0x800                                 |     r3 |= 0x800;
    0x00050bc2 strh r3, [r2, 0x1c]                               |     *((r2 + 0x1c)) = r3;
    0x00050bc4 movs r3, 0                                        |     r3 = 0;
    0x00050bc6 str r3, [r2, 0x24]                                |     *((r2 + 0x24)) = r3;
    0x00050bc8 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00050bca ldrsb.w r3, [r3, 1]                               |     r3 = *((r3 + 1));
    0x00050bce adds r3, 1                                        |     r3++;
                                                                 |     if (r3 == 1) {
    0x00050bd0 beq.w 0x5317c                                     |         goto label_567;
                                                                 |     }
                                                                 | label_199:
    0x00050bd4 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x00050bd6 movs r3, 0xff                                     |     r3 = 0xff;
    0x00050bd8 ldr r1, [sp, 0x38]                                |     r1 = *(arg_38h);
    0x00050bda strb r3, [r2, 1]                                  |     *((r2 + 1)) = r3;
    0x00050bdc ldr r3, [r1, 4]                                   |     r3 = *((r1 + 4));
    0x00050bde str r3, [r2, 0x10]                                |     *((r2 + 0x10)) = r3;
    0x00050be0 ldr r3, [r1, 0x18]                                |     r3 = *((r1 + 0x18));
    0x00050be2 str r3, [r2, 4]                                   |     *((r2 + 4)) = r3;
    0x00050be4 b.w 0x4fc24                                       |     goto label_47;
                                                                 | label_352:
    0x00050c10 ldr r6, [r4, 0x10]                                |     r6 = *((r4 + 0x10));
    0x00050c12 ldrh r5, [r6, 0x1a]                               |     r5 = *((r6 + 0x1a));
    0x00050c14 ldr r0, [r6, 8]                                   |     r0 = *((r6 + 8));
    0x00050c16 lsls r3, r5, 0x1e                                 |     r3 = r5 << 0x1e;
                                                                 |     if (r3 >= r5) {
    0x00050c18 bpl.w 0x51520                                     |         goto label_568;
                                                                 |     }
                                                                 | label_79:
    0x00050c1c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00050c1e beq.w 0x4dfbe                                     |         goto label_48;
                                                                 |     }
    0x00050c22 ldr r3, [r0, 8]                                   |     r3 = *((r0 + 8));
    0x00050c24 ldrd r8, sb, [r0]                                 |     __asm ("ldrd r8, sb, [r0]");
    0x00050c28 str r3, [r6, 8]                                   |     *((r6 + 8)) = r3;
    0x00050c2a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00050c2c beq.w 0x53b6a                                     |         goto label_569;
                                                                 |     }
                                                                 | label_251:
    0x00050c30 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00050c32 movw r2, 0x2460                                   |     r2 = 0x2460;
    0x00050c36 ldr r4, [r3, 0xc]                                 |     r4 = *((r3 + 0xc));
    0x00050c38 ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x00050c3a add.w r4, r4, r4, lsl 2                           |     r4 += (r4 << 2);
    0x00050c3e add.w r4, r3, r4, lsl 3                           |     r4 = r3 + (r4 << 3);
    0x00050c42 ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x00050c44 tst r2, r3                                        |     
                                                                 |     if ((r2 & r3) != 0) {
    0x00050c46 bne.w 0x53646                                     |         goto label_570;
                                                                 |     }
                                                                 | label_222:
    0x00050c4a ldr r1, [r4, 0x24]                                |     r1 = *((r4 + 0x24));
                                                                 |     if (r1 != 0) {
    0x00050c4c cbz r1, 0x50c58                                   |         
    0x00050c4e ldr r0, [r4]                                      |         r0 = *(r4);
    0x00050c50 bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
    0x00050c54 movs r3, 0                                        |         r3 = 0;
    0x00050c56 str r3, [r4, 0x24]                                |         *((r4 + 0x24)) = r3;
                                                                 |     }
    0x00050c58 movs r6, 0                                        |     r6 = 0;
    0x00050c5a movs r3, 4                                        |     r3 = 4;
    0x00050c5c strd r8, sb, [r4, 0x10]                           |     __asm ("strd r8, sb, [r4, 0x10]");
    0x00050c60 str r6, [r4, 4]                                   |     *((r4 + 4)) = r6;
    0x00050c62 strh r3, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r3;
    0x00050c64 b.w 0x4db8a                                       |     goto label_11;
                                                                 | label_508:
    0x00050c68 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00050c6a ldr r3, [r3, -0x4]                                |     r3 = *((r3 - 0x4));
    0x00050c6e str r3, [r7, 0x34]                                |     *((r7 + 0x34)) = r3;
    0x00050c70 b.w 0x501be                                       |     goto label_49;
                                                                 | label_470:
    0x00050c74 ldr r3, [r5, 0xc]                                 |     r3 = *((r5 + 0xc));
    0x00050c76 mov r0, r5                                        |     r0 = r5;
    0x00050c78 ldr.w r8, [r5, 0x2c]                              |     r8 = *((r5 + 0x2c));
    0x00050c7c ldr r3, [r3, 0x38]                                |     r3 = *((r3 + 0x38));
    0x00050c7e mov r1, r8                                        |     r1 = r8;
    0x00050c80 ldr r6, [r3, 0x24]                                |     r6 = *((r3 + 0x24));
    0x00050c82 rev r6, r6                                        |     r6 = SWAP32 (r6);
    0x00050c84 mov r2, r6                                        |     r2 = r6;
    0x00050c86 bl 0xc178                                         |     r0 = fcn_0000c178 (r0, r1, r2);
    0x00050c8a cmp r8, r0                                        |     
    0x00050c8c mov r7, r0                                        |     r7 = r0;
                                                                 |     if (r8 <= r0) {
    0x00050c8e blo.w 0x52c5c                                     |         goto label_571;
                                                                 |     }
    0x00050c92 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00050c94 beq.w 0x4faf0                                     |         goto label_50;
                                                                 |     }
    0x00050c98 movs r2, 0                                        |     r2 = 0;
    0x00050c9a ldr r0, [r5, 8]                                   |     r0 = *((r5 + 8));
    0x00050c9c mov r1, r2                                        |     r1 = r2;
    0x00050c9e bl 0x2da04                                        |     r0 = fcn_0002da04 (r0, r1, r2);
    0x00050ca2 mov r6, r0                                        |     r6 = r0;
                                                                 |     if (r0 != 0) {
    0x00050ca4 cbnz r0, 0x50cea                                  |         goto label_572;
                                                                 |     }
    0x00050ca6 ldr r3, [r5, 8]                                   |     r3 = *((r5 + 8));
                                                                 |     if (r3 == 0) {
    0x00050ca8 cbz r3, 0x50cbc                                   |         goto label_573;
                                                                 |     }
                                                                 |     do {
    0x00050caa ldrb.w r2, [r3, 0x50]                             |         r2 = *((r3 + 0x50));
    0x00050cae bic r2, r2, 4                                     |         r2 = BIT_MASK (r2, 4);
    0x00050cb2 strb.w r2, [r3, 0x50]                             |         *((r3 + 0x50)) = r2;
    0x00050cb6 ldr r3, [r3, 8]                                   |         r3 = *((r3 + 8));
    0x00050cb8 cmp r3, 0                                         |         
    0x00050cba bne 0x50caa                                       |         
                                                                 |     } while (r3 != 0);
                                                                 | label_573:
    0x00050cbc mov r2, r8                                        |     r2 = r8;
    0x00050cbe mov r1, r7                                        |     r1 = r7;
    0x00050cc0 movs r3, 0                                        |     r3 = 0;
    0x00050cc2 mov r0, r5                                        |     r0 = r5;
    0x00050cc4 bl 0x32fcc                                        |     r0 = fcn_00032fcc (r0, r1, r2, r3);
    0x00050cc8 mov r6, r0                                        |     r6 = r0;
                                                                 |     if (r0 == 0) {
    0x00050cca cbnz r0, 0x50cea                                  |         
    0x00050ccc ldr r3, [r5, 0xc]                                 |         r3 = *((r5 + 0xc));
    0x00050cce ldr r0, [r3, 0x44]                                |         r0 = *((r3 + 0x44));
    0x00050cd0 bl 0x2bdf4                                        |         fcn_0002bdf4 (r0, r1, r2);
    0x00050cd4 ldr r3, [r5, 0x2c]                                |         r3 = *((r5 + 0x2c));
    0x00050cd6 mov r6, r0                                        |         r6 = r0;
    0x00050cd8 ldr r2, [r5, 0xc]                                 |         r2 = *((r5 + 0xc));
    0x00050cda ldr r2, [r2, 0x38]                                |         r2 = *((r2 + 0x38));
    0x00050cdc lsrs r1, r3, 0x18                                 |         r1 = r3 >> 0x18;
    0x00050cde strb r3, [r2, 0x1f]                               |         *((r2 + 0x1f)) = r3;
    0x00050ce0 strb r1, [r2, 0x1c]                               |         *((r2 + 0x1c)) = r1;
    0x00050ce2 lsrs r1, r3, 0x10                                 |         r1 = r3 >> 0x10;
    0x00050ce4 lsrs r3, r3, 8                                    |         r3 >>= 8;
    0x00050ce6 strb r1, [r2, 0x1d]                               |         *((r2 + 0x1d)) = r1;
    0x00050ce8 strb r3, [r2, 0x1e]                               |         *((r2 + 0x1e)) = r3;
                                                                 |     }
                                                                 | label_572:
    0x00050cea ldrb r3, [r4, 9]                                  |     r3 = *((r4 + 9));
                                                                 |     if (r3 != 0) {
    0x00050cec cbz r3, 0x50cfa                                   |         
    0x00050cee ldr r5, [r4, 0xc]                                 |         r5 = *((r4 + 0xc));
    0x00050cf0 subs r5, 1                                        |         r5--;
    0x00050cf2 str r5, [r4, 0xc]                                 |         *((r4 + 0xc)) = r5;
    0x00050cf4 cmp r5, 0                                         |         
                                                                 |         if (r5 == 0) {
    0x00050cf6 beq.w 0x5361e                                     |             goto label_574;
                                                                 |         }
                                                                 |     }
                                                                 | label_218:
    0x00050cfa cmp r6, 0x65                                      |     
                                                                 |     if (r6 != 0x65) {
    0x00050cfc bne.w 0x4dbae                                     |         goto label_20;
                                                                 |     }
    0x00050d00 b.w 0x4fb06                                       |     goto label_51;
                                                                 | label_494:
    0x00050d04 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00050d06 ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x00050d08 adds r3, 1                                        |     r3++;
    0x00050d0a str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00050d0c movs r3, 1                                        |     r3 = 1;
    0x00050d0e strh r3, [r2, 0x1c]                               |     *((r2 + 0x1c)) = r3;
    0x00050d10 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_496:
    0x00050d14 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00050d16 bne.w 0x53d92                                     |         goto label_498;
                                                                 |     }
    0x00050d1a ldr.w r2, [pc, 0xc44]                             |     
    0x00050d1e ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00050d20 add r2, pc                                        |     r2 = 0xa2686;
    0x00050d22 add.w r0, r3, 0x2c                                |     r0 = r3 + 0x2c;
                                                                 | label_153:
    0x00050d26 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00050d28 add.w r8, r3, 1                                   |     r8 = r3 + 1;
                                                                 | label_74:
    0x00050d2c mov r1, fp                                        |     r1 = fp;
    0x00050d2e mov.w sb, 1                                       |     sb = 1;
    0x00050d32 bl 0x1c9d0                                        |     fcn_0001c9d0 (r0, r1);
    0x00050d36 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00050d38 ldr r0, [r3, 0x2c]                                |     r0 = *((r3 + 0x2c));
    0x00050d3a b.w 0x50538                                       |     goto label_39;
                                                                 |     if (r5 == 0) {
    0x00050d3c cbnz r5, 0x50dbe                                  |         
                                                                 | label_478:
    0x00050d3e mov r0, r2                                        |         r0 = r2;
    0x00050d40 bl 0xfdb8                                         |         fcn_0000fdb8 (r0);
    0x00050d44 b.w 0x4d26a                                       |         goto label_2;
                                                                 | label_467:
    0x00050d48 ldr.w r2, [fp, 0x1f8]                             |         r2 = *(arg_1f8h);
    0x00050d4c adds r2, r2, r3                                   |         r2 += r3;
    0x00050d4e ldr.w r3, [fp, 0x1fc]                             |         r3 = *(arg_1fch);
    0x00050d52 str.w r2, [fp, 0x1f8]                             |         __asm ("str.w r2, [arg_1f8h]");
    0x00050d56 adc.w r3, r1, r3                                  |         __asm ("adc.w r3, r1, r3");
    0x00050d5a str.w r3, [fp, 0x1fc]                             |         __asm ("str.w r3, [arg_1fch]");
    0x00050d5e b.w 0x4d26a                                       |         goto label_2;
                                                                 | label_465:
    0x00050d62 ldr r2, [sp, 0x24]                                |         r2 = *((sp + 0x24));
    0x00050d64 ldrd r3, r2, [r2, 0x90]                           |         __asm ("ldrd r3, r2, [r2, 0x90]");
    0x00050d68 orrs r3, r2                                       |         r3 |= r2;
                                                                 |         if (r3 == r2) {
    0x00050d6a beq.w 0x52866                                     |             goto label_575;
                                                                 |         }
    0x00050d6e ldr r3, [sp, 0x1c]                                |         r3 = *(arg_1ch);
    0x00050d70 adds r3, 1                                        |         r3++;
    0x00050d72 str r3, [sp, 0x1c]                                |         *(arg_1ch) = r3;
    0x00050d74 b.w 0x4d26a                                       |         goto label_2;
                                                                 | label_385:
    0x00050d78 mov r0, r2                                        |         r0 = r2;
    0x00050d7a bl 0xfdb8                                         |         fcn_0000fdb8 (r0);
    0x00050d7e b.w 0x4d26a                                       |         goto label_2;
                                                                 | label_384:
    0x00050d82 ldr r3, [sp, 0x1c]                                |         r3 = *(arg_1ch);
    0x00050d84 adds r3, 1                                        |         r3++;
    0x00050d86 str r3, [sp, 0x1c]                                |         *(arg_1ch) = r3;
    0x00050d88 b.w 0x4d26a                                       |         goto label_2;
                                                                 | label_378:
    0x00050d8c mov r0, r4                                        |         r0 = r4;
    0x00050d8e bl 0x2e878                                        |         r0 = fcn_0002e878 (r0);
    0x00050d92 mov r6, r0                                        |         r6 = r0;
    0x00050d94 cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x00050d96 bne.w 0x536d4                                     |             goto label_576;
                                                                 |         }
    0x00050d9a mov r5, r0                                        |         r5 = r0;
    0x00050d9c mov r7, r0                                        |         r7 = r0;
    0x00050d9e mov r8, r0                                        |         r8 = r0;
                                                                 | label_54:
    0x00050da0 ldrsh.w r3, [r4, 0x54]                            |         r3 = *((r4 + 0x54));
    0x00050da4 add.w r1, r3, 0x20                                |         r1 = r3 + 0x20;
    0x00050da8 ldr.w r2, [r4, r1, lsl 2]                         |         offset_45 = r1 << 2;
                                                                 |         r2 = *((r4 + offset_45));
    0x00050dac ldrb.w ip, [r2, 3]                                |         ip = *((r2 + 3));
    0x00050db0 ldrh r0, [r2, 0x10]                               |         r0 = *((r2 + 0x10));
    0x00050db2 cmp.w ip, 0                                       |         
                                                                 |         if (ip == 0) {
    0x00050db6 beq.w 0x51b66                                     |             goto label_577;
                                                                 |         }
    0x00050dba adds r0, r0, r5                                   |         r0 += r5;
    0x00050dbc mov r5, r0                                        |         r5 = r0;
                                                                 |     }
    0x00050dbe adc r7, r7, 0                                     |     __asm ("adc r7, r7, 0");
                                                                 | label_53:
    0x00050dc2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00050dc4 beq.w 0x4e458                                     |         goto label_52;
                                                                 |     }
    0x00050dc8 ldr.w r2, [r4, r1, lsl 2]                         |     offset_46 = r1 << 2;
                                                                 |     r2 = *((r4 + offset_46));
                                                                 |     if (r2 != 0) {
    0x00050dcc cbz r2, 0x50dd8                                   |         
    0x00050dce ldr r0, [r2, 0x44]                                |         r0 = *((r2 + 0x44));
    0x00050dd0 bl 0x2bd94                                        |         fcn_0002bd94 (r0);
    0x00050dd4 ldrsh.w r3, [r4, 0x54]                            |         r3 = *((r4 + 0x54));
                                                                 |     }
    0x00050dd8 ldrb.w r2, [r4, 0x50]                             |     r2 = *((r4 + 0x50));
    0x00050ddc subs r3, 1                                        |     r3--;
    0x00050dde sxth r3, r3                                       |     __asm ("sxth r3, r3");
    0x00050de0 strh.w r8, [r4, 0x32]                             |     *((r4 + 0x32)) = r8;
    0x00050de4 bic r2, r2, 6                                     |     r2 = BIT_MASK (r2, 6);
    0x00050de8 add.w r1, r3, 0x20                                |     r1 = r3 + 0x20;
    0x00050dec strb.w r2, [r4, 0x50]                             |     *((r4 + 0x50)) = r2;
    0x00050df0 add.w lr, r4, r3, lsl 1                           |     lr = r4 + (r3 << 1);
    0x00050df4 ldr.w r2, [r4, r1, lsl 2]                         |     offset_47 = r1 << 2;
                                                                 |     r2 = *((r4 + offset_47));
    0x00050df8 strh.w r3, [r4, 0x54]                             |     *((r4 + 0x54)) = r3;
    0x00050dfc ldrh.w ip, [lr, 0x56]                             |     ip = *((lr + 0x56));
    0x00050e00 ldrh r0, [r2, 0x10]                               |     r0 = *((r2 + 0x10));
    0x00050e02 cmp ip, r0                                        |     
                                                                 |     if (ip >= r0) {
    0x00050e04 bhs 0x50dc2                                       |         goto label_53;
                                                                 |     }
    0x00050e06 add.w r3, ip, 1                                   |     r3 = ip + 1;
    0x00050e0a uxth r3, r3                                       |     r3 = (int16_t) r3;
    0x00050e0c strh.w r3, [lr, 0x56]                             |     *((lr + 0x56)) = r3;
                                                                 | label_94:
    0x00050e10 cmp r3, r0                                        |     
    0x00050e12 ldr r1, [r2, 0x38]                                |     r1 = *((r2 + 0x38));
                                                                 |     if (r3 == r0) {
    0x00050e14 beq.w 0x51b88                                     |         goto label_578;
                                                                 |     }
    0x00050e18 ldr.w ip, [r2, 0x40]                              |     ip = *((r2 + 0x40));
    0x00050e1c mov r0, r4                                        |     r0 = r4;
    0x00050e1e ldrh r2, [r2, 0x12]                               |     r2 = *((r2 + 0x12));
    0x00050e20 ldrb.w lr, [ip, r3, lsl 1]                        |     
    0x00050e24 add.w ip, ip, r3, lsl 1                           |     
    0x00050e28 ldrb.w r3, [ip, 1]                                |     r3 = *((ip + 1));
    0x00050e2c orr.w r3, r3, lr, lsl 8                           |     r3 |= (lr << 8);
    0x00050e30 ands r3, r2                                       |     r3 &= r2;
    0x00050e32 ldr r1, [r1, r3]                                  |     r1 = *((r1 + r3));
    0x00050e34 rev r1, r1                                        |     r1 = SWAP32 (r1);
    0x00050e36 bl 0x2e704                                        |     r0 = fcn_0002e704 (r0, r1, r2, r3);
                                                                 | label_96:
    0x00050e3a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00050e3c beq 0x50da0                                       |         goto label_54;
                                                                 |     }
    0x00050e3e movs r5, 0                                        |     r5 = 0;
    0x00050e40 mov r6, r0                                        |     r6 = r0;
    0x00050e42 mov r7, r5                                        |     r7 = r5;
    0x00050e44 b.w 0x4e458                                       |     goto label_52;
                                                                 | label_377:
    0x00050e48 ldr r1, [sp, 0x1c]                                |     r1 = *(arg_1ch);
    0x00050e4a adds r1, 1                                        |     r1++;
    0x00050e4c str r1, [sp, 0x1c]                                |     *(arg_1ch) = r1;
    0x00050e4e movs r1, 1                                        |     r1 = 1;
    0x00050e50 strb r1, [r2, r3]                                 |     *((r2 + r3)) = r1;
    0x00050e52 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_353:
    0x00050e56 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00050e58 adds r3, 1                                        |     r3++;
    0x00050e5a str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00050e5c b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_421:
    0x00050e60 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00050e62 ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x00050e64 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00050e66 adds r2, 1                                        |     r2++;
    0x00050e68 str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x00050e6a lsls r3, r3, 0x1f                                 |     r3 <<= 0x1f;
                                                                 |     if (r3 >= r3) {
    0x00050e6c bpl.w 0x4d740                                     |         goto label_7;
                                                                 |     }
                                                                 | label_423:
    0x00050e70 ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x00050e72 ldr r3, [r2, 0x5c]                                |     r3 = *((r2 + 0x5c));
    0x00050e74 adds r3, 1                                        |     r3++;
    0x00050e76 str r3, [r2, 0x5c]                                |     *((r2 + 0x5c)) = r3;
    0x00050e78 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00050e7a beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x00050e7e b.w 0x4d740                                       |     goto label_7;
                                                                 | label_444:
    0x00050e82 mov r0, r4                                        |     r0 = r4;
    0x00050e84 bl 0xfdb8                                         |     fcn_0000fdb8 (r0);
    0x00050e88 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00050e8a adds r3, 1                                        |     r3++;
    0x00050e8c str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00050e8e b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_430:
    0x00050e92 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00050e94 b.w 0x4f202                                       |     goto label_55;
                                                                 | label_312:
    0x00050e98 tst.w r3, 0xc                                     |     
                                                                 |     if ((r3 & 0xc) == 0) {
    0x00050e9c beq.w 0x52ba6                                     |         goto label_579;
                                                                 |     }
                                                                 | label_163:
    0x00050ea0 mov r0, r6                                        |     r0 = r6;
    0x00050ea2 bl 0xa1d8                                         |     fcn_0000a1d8 (r0);
    0x00050ea6 movs r3, 0                                        |     r3 = 0;
    0x00050ea8 mov r7, r0                                        |     r7 = r0;
    0x00050eaa strb r3, [r4, 0x1a]                               |     *((r4 + 0x1a)) = r3;
    0x00050eac ldrh r3, [r6, 0x1c]                               |     r3 = *((r6 + 0x1c));
    0x00050eae str r1, [sp, 0x28]                                |     *(arg_28h) = r1;
    0x00050eb0 lsls r2, r3, 0x1d                                 |     r2 = r3 << 0x1d;
                                                                 |     if (r2 < r3) {
    0x00050eb2 bmi.w 0x52138                                     |         goto label_205;
                                                                 |     }
    0x00050eb6 lsls r3, r3, 0x1c                                 |     r3 <<= 0x1c;
                                                                 |     if (r3 < r3) {
    0x00050eb8 bmi.w 0x52116                                     |         goto label_580;
                                                                 |     }
    0x00050ebc ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00050ebe ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00050ec0 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00050ec2 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_306:
    0x00050ec6 mov r0, r1                                        |     r0 = r1;
    0x00050ec8 bl 0xfdb8                                         |     fcn_0000fdb8 (r0);
    0x00050ecc b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_319:
    0x00050ed0 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00050ed2 mov sb, r0                                        |     sb = r0;
    0x00050ed4 ldr r0, [r3, 0x2c]                                |     r0 = *((r3 + 0x2c));
    0x00050ed6 b.w 0x50538                                       |     goto label_39;
                                                                 | label_316:
    0x00050eda ldrh.w r3, [sl, 6]                                |     r3 = *((sl + 6));
    0x00050ede add.w sb, sp, 0x12c                               |     sb += arg_12ch;
    0x00050ee0 ldrb r6, [r2, 6]                                  |     r6 = *((r2 + 6));
    0x00050ee2 movs r2, 4                                        |     r2 = 4;
    0x00050ee4 adds r3, 1                                        |     r3++;
    0x00050ee6 add.w r1, r3, r3, lsl 2                           |     r1 = r3 + (r3 << 2);
    0x00050ee8 lsls r3, r0, 6                                    |     r3 = r0 << 6;
    0x00050eea lsls r1, r1, 3                                    |     r1 <<= 3;
    0x00050eec adds r1, 0x18                                     |     r1 += 0x18;
    0x00050eee cmp r1, 0xc3                                      |     
    0x00050ef0 ittt le                                           |     
                                                                 |     if (r1 > 0xc3) {
    0x00050ef2 addle sb, r2                                      |         sb += r2;
                                                                 |     }
                                                                 |     if (r1 > 0xc3) {
    0x00050ef4 movle r0, sl                                      |         r0 = sl;
                                                                 |     }
                                                                 |     if (r1 > 0xc3) {
    0x00050ef6 movle r5, 0                                       |         r5 = 0;
                                                                 |     }
                                                                 |     if (r1 > 0xc3) {
    0x00050ef8 bgt.w 0x52bda                                     |         goto label_581;
                                                                 |     }
                                                                 | label_167:
    0x00050efc strh.w r3, [sb, 4]                                |     *((sb + 4)) = r3;
    0x00050f00 add.w r3, sb, 0x18                                |     r3 = sb + 0x18;
    0x00050f04 str.w r3, [sb, 8]                                 |     __asm ("str.w r3, [sb, 8]");
    0x00050f08 mov r3, sb                                        |     r3 = sb;
    0x00050f0a ldr r2, [r6, 4]                                   |     r2 = *((r6 + 4));
    0x00050f0c ldr r1, [r6, 0x18]                                |     r1 = *((r6 + 0x18));
    0x00050f0e str.w sl, [sb]                                    |     __asm ("str.w sl, [sb]");
    0x00050f12 bl 0xbf78                                         |     fcn_0000bf78 (r0, r1, r2, r3, r4, r5);
    0x00050f16 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00050f18 ldrb.w r8, [r3]                                   |     r8 = *(r3);
                                                                 | label_103:
    0x00050f1c cmp.w r8, 0x41                                    |     
    0x00050f20 mov.w r3, 0                                       |     r3 = 0;
    0x00050f24 strb.w r3, [sb, 6]                                |     *((sb + 6)) = r3;
                                                                 |     if (r8 == 0x41) {
    0x00050f28 beq.w 0x52af4                                     |         goto label_582;
                                                                 |     }
                                                                 | label_161:
    0x00050f2c movs r3, 0                                        |     r3 = 0;
    0x00050f2e add.w sl, sp, 0xb0                                |     sl += arg_b0h;
    0x00050f32 ldr r0, [r4]                                      |     r0 = *(r4);
    0x00050f34 mov r1, sb                                        |     r1 = sb;
    0x00050f36 str r3, [sp]                                      |     *(sp) = r3;
    0x00050f38 movs r2, 0                                        |     r2 = 0;
    0x00050f3a movs r3, 0                                        |     r3 = 0;
    0x00050f3c str.w sl, [sp, 4]                                 |     __asm ("str.w sl, [arg_4h]");
    0x00050f40 bl 0x2e9e8                                        |     fcn_0002e9e8 (r0, r1, r2, r3, r4, r5, r6);
    0x00050f44 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00050f46 mov r6, r0                                        |     r6 = r0;
    0x00050f48 ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x00050f4a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00050f4c beq.w 0x51268                                     |         goto label_583;
                                                                 |     }
                                                                 | label_67:
    0x00050f50 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x00050f52 bne.w 0x4dbae                                     |         goto label_20;
                                                                 |     }
    0x00050f54 add r6, sp, 0xb0                                  |     r6 = sp + 0xb0;
    0x00050f56 ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x00050f5a strb r6, [r4, 0x1b]                               |     *((r4 + 0x1b)) = r6;
    0x00050f5c str r6, [r4, 0x44]                                |     *((r4 + 0x44)) = r6;
    0x00050f5e subs r2, r3, 0                                    |     r2 = r3 - 0;
    0x00050f60 str r3, [r4, 0xc]                                 |     *((r4 + 0xc)) = r3;
    0x00050f62 it ne                                             |     
                                                                 |     if (r2 == r3) {
    0x00050f64 movne r2, 1                                       |         r2 = 1;
                                                                 |     }
    0x00050f66 strb r2, [r4, 0x19]                               |     *((r4 + 0x19)) = r2;
    0x00050f68 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x00050f6a ldrb r2, [r2]                                     |     r2 = *(r2);
    0x00050f6c cmp r2, 0x43                                      |     
                                                                 |     if (r2 == 0x43) {
    0x00050f6e beq.w 0x52b28                                     |         goto label_584;
                                                                 |     }
    0x00050f72 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00050f74 bne.w 0x52b1e                                     |         goto label_585;
                                                                 |     }
    0x00050f78 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00050f7a adds r3, 1                                        |     r3++;
    0x00050f7c str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00050f7e b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_339:
    0x00050f82 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x00050f84 mov r0, r5                                        |     r0 = r5;
    0x00050f86 mov r1, r7                                        |     r1 = r7;
    0x00050f88 bl 0xb838                                         |     fcn_0000b838 (r0, r1);
    0x00050f8c ldr.w r1, [fp, 0x58]                              |     r1 = *(arg_58h);
    0x00050f90 ldr r3, [sp, 0xd8]                                |     r3 = *(arg_d8h);
    0x00050f92 ldr r0, [sp, 0xdc]                                |     r0 = *(arg_dch);
    0x00050f94 asrs r2, r1, 0x1f                                 |     r2 = r1 >> 0x1f;
    0x00050f96 cmp r1, r3                                        |     
    0x00050f98 sbcs r2, r0                                       |     __asm ("sbcs r2, r0");
                                                                 |     if (r1 < r3) {
    0x00050f9a blt.w 0x4f592                                     |         goto label_30;
                                                                 |     }
    0x00050f9e mov r4, r3                                        |     r4 = r3;
    0x00050fa0 str r3, [sp, 0xb0]                                |     *(arg_b0h) = r3;
    0x00050fa2 b.w 0x4dd64                                       |     goto label_56;
                                                                 | label_299:
    0x00050fa6 lsls r1, r2, 0x18                                 |     r1 = r2 << 0x18;
                                                                 |     if (r1 < r2) {
    0x00050fa8 bmi.w 0x5297e                                     |         goto label_586;
                                                                 |     }
    0x00050fac lsls r0, r2, 0x1b                                 |     r0 = r2 << 0x1b;
                                                                 |     if (r0 >= r2) {
    0x00050fae bpl.w 0x52998                                     |         goto label_587;
                                                                 |     }
    0x00050fb2 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00050fb4 ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x00050fb6 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00050fb8 adds r2, 1                                        |     r2++;
    0x00050fba str r2, [sp, 0x1c]                                |     *(arg_1ch) = r2;
    0x00050fbc ldr r2, [sp, 0x44]                                |     r2 = *(arg_44h);
    0x00050fbe add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x00050fc2 add.w r2, r2, r3, lsl 3                           |     r2 += (r3 << 3);
    0x00050fc6 ldrh r3, [r2, 0x1c]                               |     r3 = *((r2 + 0x1c));
    0x00050fc8 str r2, [sp, 0x38]                                |     *(arg_38h) = r2;
    0x00050fca bic r3, r3, 0x4180                                |     r3 = BIT_MASK (r3, 0x4180);
    0x00050fce bic r3, r3, 0x7f                                  |     r3 = BIT_MASK (r3, 0x7f);
    0x00050fd2 orr r3, r3, 1                                     |     r3 |= 1;
    0x00050fd6 strh r3, [r2, 0x1c]                               |     *((r2 + 0x1c)) = r3;
    0x00050fd8 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_411:
    0x00050fdc cmp r5, 5                                         |     
                                                                 |     if (r5 != 5) {
    0x00050fde bne.w 0x4edd8                                     |         goto label_57;
                                                                 |     }
    0x00050fe2 ldr.w r1, [r4, 0xa8]                              |     r1 = *((r4 + 0xa8));
    0x00050fe6 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00050fe8 beq.w 0x51fbe                                     |         goto label_412;
                                                                 |     }
    0x00050fec ldrb r6, [r1]                                     |     r6 = *(r1);
    0x00050fee cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00050ff0 beq.w 0x4edec                                     |         goto label_58;
                                                                 |     }
    0x00050ff4 mov r3, r1                                        |     r3 = r1;
                                                                 |     do {
    0x00050ff6 ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x00050ffa cmp r2, 0                                         |         
    0x00050ffc bne 0x50ff6                                       |         
                                                                 |     } while (r2 != 0);
    0x00050ffe subs r3, r3, r1                                   |     r3 -= r1;
    0x00051000 bics r6, r3, 0xc0000000                           |     __asm ("bics r6, r3, aav.0x000000ff");
                                                                 |     if (r3 == r3) {
    0x00051004 beq.w 0x4edec                                     |         goto label_58;
                                                                 |     }
    0x00051008 ldrb r6, [r4, 4]                                  |     r6 = *((r4 + 4));
    0x0005100a ldr r2, [r4, 0x3c]                                |     r2 = *((r4 + 0x3c));
    0x0005100c ldr r2, [r2]                                      |     r2 = *(r2);
                                                                 |     if (r6 != 0) {
    0x0005100e cbnz r6, 0x51020                                  |         goto label_588;
                                                                 |     }
    0x00051010 ldr r1, [r2]                                      |     r1 = *(r2);
    0x00051012 cmp r1, 1                                         |     
                                                                 |     if (r1 <= 1) {
    0x00051014 ble.w 0x4edec                                     |         goto label_58;
                                                                 |     }
    0x00051018 ldr r6, [r2, 0x34]                                |     r6 = *((r2 + 0x34));
    0x0005101a cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0005101c beq.w 0x4edec                                     |         goto label_58;
                                                                 |     }
                                                                 | label_588:
    0x00051020 cmp.w sb, 5                                       |     
                                                                 |     if (sb == 5) {
    0x00051024 beq.w 0x51fbe                                     |         goto label_412;
                                                                 |     }
    0x00051028 ldrb.w r3, [fp, 0x3e]                             |     r3 = *(arg_3eh);
    0x0005102c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005102e bne.w 0x53900                                     |         goto label_589;
                                                                 |     }
    0x00051032 ldr.w r3, [pc, 0x930]                             |     
    0x00051036 ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x00051038 add r3, pc                                        |     r3 = 0xa29a2;
    0x0005103a add.w r0, r2, 0x2c                                |     r0 = r2 + 0x2c;
                                                                 | label_149:
    0x0005103e ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x00051040 mov r1, fp                                        |     r1 = fp;
    0x00051042 mov.w sb, 1                                       |     sb = 1;
    0x00051046 add.w r8, r2, 1                                   |     r8 = r2 + 1;
    0x0005104a ldr.w r2, [pc, 0x91c]                             |     r2 = *(0x00051968);
    0x0005104e add r2, pc                                        |     r2 += pc;
    0x00051050 bl 0x1c9d0                                        |     fcn_0001c9d0 (r0, r1);
    0x00051054 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00051056 ldr r0, [r3, 0x2c]                                |     r0 = *((r3 + 0x2c));
    0x00051058 b.w 0x50538                                       |     goto label_39;
                                                                 | label_434:
    0x0005105c mov r0, r6                                        |     r0 = r6;
    0x0005105e bl 0xd140                                         |     fcn_0000d140 (r0);
    0x00051062 ldr r3, [r6, 4]                                   |     r3 = *((r6 + 4));
    0x00051064 ldr r2, [r3]                                      |     r2 = *(r3);
                                                                 | label_435:
    0x00051066 ldr.w r4, [r2, 0x9c]                              |     r4 = *((r2 + 0x9c));
    0x0005106a b.w 0x4f2d0                                       |     goto label_59;
                                                                 | label_531:
    0x0005106e mov r3, r5                                        |     r3 = r5;
    0x00051070 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x00051072 mov r6, r5                                        |     r6 = r5;
    0x00051074 str r5, [sp, 0xd8]                                |     *(arg_d8h) = r5;
                                                                 | label_535:
    0x00051076 ldr r1, [sp, 0x20]                                |     r1 = *(arg_20h);
    0x00051078 ldrb r2, [r1, 3]                                  |     r2 = *((r1 + 3));
    0x0005107a cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0005107c beq.w 0x4dbae                                     |         goto label_20;
                                                                 |     }
    0x00051080 ldr r4, [r7]                                      |     r4 = *(r7);
    0x00051082 ldr r2, [r1, 0xc]                                 |     r2 = *((r1 + 0xc));
    0x00051084 cmp r2, r4                                        |     
                                                                 |     if (r2 != r4) {
    0x00051086 bne 0x51090                                       |         goto label_590;
                                                                 |     }
    0x00051088 ldr r2, [r1, 0x10]                                |     r2 = *((r1 + 0x10));
    0x0005108a cmp r2, r3                                        |     
                                                                 |     if (r2 == r3) {
    0x0005108c beq.w 0x4dbae                                     |         goto label_20;
                                                                 |     }
                                                                 | label_590:
    0x00051090 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00051092 mov r0, fp                                        |     r0 = fp;
    0x00051094 ldr r1, [r3, 0x2c]                                |     r1 = *((r3 + 0x2c));
    0x00051096 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x0005109a ldr.w r3, [pc, 0x8d0]                             |     
    0x0005109e movs r2, 0x61                                     |     r2 = 0x61;
    0x000510a0 add r3, pc                                        |     r3 = 0xa2a12;
    0x000510a2 adds r3, 1                                        |     r3++;
                                                                 |     do {
    0x000510a4 cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x000510a6 beq.w 0x51db4                                     |             goto label_591;
                                                                 |         }
    0x000510aa ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x000510ae b 0x510a4                                         |         
                                                                 |     } while (1);
                                                                 | label_379:
    0x000510b0 ldrb r1, [r6]                                     |     r1 = *(r6);
    0x000510b2 mov r5, r4                                        |     r5 = r4;
    0x000510b4 ldr r7, [sp, 0x70]                                |     r7 = *(arg_70h);
                                                                 |     do {
    0x000510b6 mov r0, r5                                        |         r0 = r5;
    0x000510b8 mov r2, r7                                        |         r2 = r7;
    0x000510ba bl 0x25cf0                                        |         fcn_00025cf0 (r0, r1, r2);
    0x000510be ldrb r1, [r6, 1]!                                 |         r1 = *((r6 += 1));
    0x000510c2 adds r5, 0x28                                     |         r5 += 0x28;
    0x000510c4 cmp r1, 0                                         |         
    0x000510c6 bne 0x510b6                                       |         
                                                                 |     } while (r1 != 0);
    0x000510c8 b.w 0x4e4a4                                       |     goto label_60;
                                                                 |     do {
                                                                 | label_440:
    0x000510cc mov r2, r3                                        |         r2 = r3;
    0x000510ce ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x000510d0 cmp r3, 0                                         |         
    0x000510d2 bne 0x510cc                                       |         
                                                                 |     } while (r3 != 0);
    0x000510d4 ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x000510d6 add r5, r3                                        |     r5 += r3;
    0x000510d8 b.w 0x4f366                                       |     goto label_61;
                                                                 | label_383:
    0x000510dc ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x000510de ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x000510e0 ldrb.w r6, [fp, 0x44]                             |     r6 = *(arg_44h);
    0x000510e4 ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x000510e6 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x000510ea add.w r3, r1, r3, lsl 3                           |     r3 = r1 + (r3 << 3);
    0x000510ee ldr r1, [r2, 8]                                   |     r1 = *((r2 + 8));
    0x000510f0 ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x000510f2 cmp r1, 0                                         |     
    0x000510f4 ldr r2, [r2, 0xc]                                 |     r2 = *((r2 + 0xc));
    0x000510f6 itt gt                                            |     
                                                                 |     if (r1 <= 0) {
    0x000510f8 movgt r0, r2                                      |         r0 = r2;
                                                                 |     }
                                                                 |     if (r1 <= 0) {
    0x000510fa addgt r7, r2, r1, lsl 2                           |         r7 = r2 + (r1 << 2);
                                                                 |     }
                                                                 |     if (r1 <= 0) {
    0x000510fe ble 0x5110c                                       |         goto label_592;
                                                                 |     }
                                                                 |     do {
    0x00051100 str r3, [r0], 4                                   |         *(r0) = r3;
                                                                 |         r0 += 4;
    0x00051104 cmp r7, r0                                        |         
    0x00051106 add.w r3, r3, 0x28                                |         r3 += 0x28;
    0x0005110a bne 0x51100                                       |         
                                                                 |     } while (r7 != r0);
                                                                 | label_592:
    0x0005110c ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0005110e add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x00051110 mov r0, r4                                        |     r0 = r4;
    0x00051112 ldrb r3, [r3, 3]                                  |     r3 = *((r3 + 3));
    0x00051114 strb.w r3, [fp, 0x44]                             |     *(arg_44h) = r3;
    0x00051118 mov r3, r7                                        |     r3 = r7;
    0x0005111a blx r5                                            |     uint32_t (*r5)(uint32_t, uint32_t) (r0, r3);
    0x0005111c ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0005111e strb.w r6, [fp, 0x44]                             |     *(arg_44h) = r6;
    0x00051122 mov r6, r0                                        |     r6 = r0;
    0x00051124 ldr r5, [r3]                                      |     r5 = *(r3);
    0x00051126 ldr r1, [r3, 0x2c]                                |     r1 = *((r3 + 0x2c));
    0x00051128 mov r0, r5                                        |     r0 = r5;
    0x0005112a bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x0005112e ldr r1, [r4, 8]                                   |     r1 = *((r4 + 8));
    0x00051130 mov r0, r5                                        |     r0 = r5;
    0x00051132 bl 0xd418                                         |     fcn_0000d418 (r0, r1);
    0x00051136 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00051138 str r0, [r3, 0x2c]                                |     *((r3 + 0x2c)) = r0;
    0x0005113a ldr r0, [r4, 8]                                   |     r0 = *((r4 + 8));
    0x0005113c blx 0x6050                                        |     fcn_00006050 ();
    0x00051140 movs r3, 0                                        |     r3 = 0;
    0x00051142 str r3, [r4, 8]                                   |     *((r4 + 8)) = r3;
    0x00051144 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x00051146 bne.w 0x52786                                     |         goto label_593;
                                                                 |     }
    0x0005114a ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0005114c ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
                                                                 |     if (r3 != 0) {
    0x0005114e cbz r3, 0x5115c                                   |         
    0x00051150 ldr r3, [r7]                                      |         r3 = *(r7);
    0x00051152 ldr r2, [sp, 0xdc]                                |         r2 = *(arg_dch);
    0x00051154 str r3, [sp, 0x68]                                |         *(arg_68h) = r3;
    0x00051156 str r2, [sp, 0x6c]                                |         *(arg_6ch) = r2;
    0x00051158 strd r3, r2, [fp, 0x20]                           |         __asm ("strd r3, r2, [fp, 0x20]");
                                                                 |     }
                                                                 | label_150:
    0x0005115c ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x0005115e ldr r3, [r2, 0x5c]                                |     r3 = *((r2 + 0x5c));
    0x00051160 adds r3, 1                                        |     r3++;
    0x00051162 str r3, [r2, 0x5c]                                |     *((r2 + 0x5c)) = r3;
    0x00051164 b.w 0x4dbae                                       |     goto label_20;
                                                                 | label_369:
    0x00051168 ldr r3, [sp, 0x2c]                                |     r3 = *(arg_2ch);
    0x0005116a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005116c beq.w 0x52c8e                                     |         goto label_594;
                                                                 |     }
    0x00051170 ldrh r3, [r5, 0x1c]                               |     r3 = *((r5 + 0x1c));
    0x00051172 and r3, r3, 0xbe00                                |     r3 &= 0xbe00;
    0x00051176 orr r3, r3, 1                                     |     r3 |= 1;
    0x0005117a strh r3, [r5, 0x1c]                               |     *((r5 + 0x1c)) = r3;
    0x0005117c and r3, r3, 0x1000                                |     r3 &= 0x1000;
    0x00051180 b.w 0x4e414                                       |     goto label_62;
                                                                 | label_363:
    0x00051184 ldr.w r0, [fp, 0x120]                             |     r0 = *(arg_120h);
    0x00051188 blx r2                                            |     r0 = uint32_t (*r2)(uint32_t) (r0);
    0x0005118a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005118c beq.w 0x4e222                                     |         goto label_63;
                                                                 |     }
                                                                 | label_538:
    0x00051190 movs r0, 9                                        |     r0 = 9;
    0x00051192 b.w 0x4d44a                                       |     goto label_1;
                                                                 | label_364:
    0x00051196 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00051198 mov.w sb, 1                                       |     sb = 1;
    0x0005119c ldr r4, [sp, 0x24]                                |     r4 = *((sp + 0x24));
    0x0005119e ldr.w r2, [pc, 0x7d0]                             |     r2 = *(0x00051970);
    0x000511a2 add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x000511a6 movw r3, 0x313                                    |     r3 = 0x313;
    0x000511aa str r3, [r4, 0x50]                                |     *((r4 + 0x50)) = r3;
    0x000511ac movs r3, 2                                        |     r3 = 2;
    0x000511ae add.w r0, r4, 0x2c                                |     r0 = r4 + 0x2c;
    0x000511b2 add r2, pc                                        |     r2 += pc;
    0x000511b4 strb.w r3, [r4, 0x56]                             |     *((r4 + 0x56)) = r3;
    0x000511b8 bl 0x1c9d0                                        |     fcn_0001c9d0 (r0, r1);
    0x000511bc ldr r0, [r4, 0x2c]                                |     r0 = *((r4 + 0x2c));
    0x000511be b.w 0x50538                                       |     goto label_39;
                                                                 | label_357:
    0x000511c2 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x000511c4 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x000511c6 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_336:
    0x000511ca ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x000511cc ldr r1, [r4, 4]                                   |     r1 = *((r4 + 4));
    0x000511ce ldrb r0, [r3, 3]                                  |     r0 = *((r3 + 3));
    0x000511d0 ldr r4, [r3, 0xc]                                 |     r4 = *((r3 + 0xc));
    0x000511d2 asrs r3, r2, 0x1f                                 |     r3 = r2 >> 0x1f;
    0x000511d4 ands r0, r0, 0x10                                 |     r0 &= 0x10;
    0x000511d8 it ne                                             |     
                                                                 |     if (r0 == r0) {
    0x000511da ldrne r0, [r5, 0xc]                               |         r0 = *((r5 + 0xc));
                                                                 |     }
    0x000511dc strd r4, r0, [sp, 0xc]                            |     __asm ("strd r4, r0, [sp, 0xc]");
    0x000511e0 mov r0, r7                                        |     r0 = r7;
    0x000511e2 ldr r4, [sp, 0x1c]                                |     r4 = *(arg_1ch);
    0x000511e4 adds r4, 1                                        |     r4++;
    0x000511e6 str r4, [sp, 0x1c]                                |     *(arg_1ch) = r4;
    0x000511e8 ldr.w r4, [pc, 0x788]                             |     
    0x000511ec add r4, pc                                        |     r4 = 0xa2b64;
    0x000511ee str r4, [sp]                                      |     *(sp) = r4;
    0x000511f0 movs r4, 0                                        |     r4 = 0;
    0x000511f2 strd r4, r4, [sp, 4]                              |     __asm ("strd r4, r4, [sp, 4]");
    0x000511f6 bl 0x32b00                                        |     r0 = fcn_00032b00 (r0, r1, r2, r3, r4, r5, r6);
    0x000511fa mov r6, r0                                        |     r6 = r0;
    0x000511fc str r4, [r5, 0x44]                                |     *((r5 + 0x44)) = r4;
    0x000511fe cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00051200 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x00051204 b.w 0x4d740                                       |     goto label_7;
                                                                 | label_558:
    0x00051208 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0005120a ldr r3, [r3, -0x4]                                |     r3 = *((r3 - 0x4));
    0x0005120e str r3, [r7, 0x34]                                |     *((r7 + 0x34)) = r3;
    0x00051210 b.w 0x50a02                                       |     goto label_64;
                                                                 | label_554:
    0x00051214 ldr.w r2, [pc, 0x760]                             |     
    0x00051218 movs r1, 0                                        |     r1 = 0;
    0x0005121a str r3, [sp]                                      |     *(sp) = r3;
    0x0005121c mov r0, r7                                        |     r0 = r7;
    0x0005121e ldr r3, [sp, 0x4c]                                |     r3 = *(arg_4ch);
    0x00051220 add r2, pc                                        |     r2 = 0xa2b9c;
    0x00051222 bl 0x34c14                                        |     fcn_00034c14 (r0, r1, r2);
    0x00051226 b.w 0x508fe                                       |     goto label_65;
                                                                 | label_516:
    0x0005122a lsrs r2, r3, 3                                    |     r2 = r3 >> 3;
    0x0005122c movs r1, 1                                        |     r1 = 1;
    0x0005122e and r3, r3, 7                                     |     r3 &= 7;
    0x00051232 lsl.w r3, r1, r3                                  |     r3 = r1 << r3;
    0x00051236 ldrb r1, [r4, r2]                                 |     r1 = *((r4 + r2));
    0x00051238 orrs r3, r1                                       |     r3 |= r1;
    0x0005123a strb r3, [r4, r2]                                 |     *((r4 + r2)) = r3;
    0x0005123c b.w 0x502f4                                       |     goto label_66;
                                                                 | label_426:
    0x00051240 ldr r6, [r7, 0xc]                                 |     r6 = *((r7 + 0xc));
    0x00051242 mov r1, r8                                        |     r1 = r8;
    0x00051244 mov r0, fp                                        |     r0 = fp;
    0x00051246 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x0005124a strb.w r5, [fp, 0x89]                             |     *(arg_89h) = r5;
    0x0005124e cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x00051250 bne.w 0x53e1c                                     |         goto label_595;
                                                                 |     }
    0x00051254 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00051256 adds r3, 1                                        |     r3++;
    0x00051258 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0005125a b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_331:
    0x0005125e ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00051260 adds r3, 1                                        |     r3++;
    0x00051262 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00051264 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_583:
    0x00051268 mov r1, r5                                        |     r1 = r5;
    0x0005126a mov r0, fp                                        |     r0 = fp;
    0x0005126c bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x00051270 b 0x50f50                                         |     goto label_67;
                                                                 | label_343:
    0x00051272 ldr r2, [sp, 0x48]                                |     r2 = *(arg_48h);
    0x00051274 movs r3, 1                                        |     r3 = 1;
    0x00051276 mov r6, r0                                        |     r6 = r0;
    0x00051278 strb r3, [r2, 0x19]                               |     *((r2 + 0x19)) = r3;
    0x0005127a b.w 0x4d734                                       |     goto label_68;
                                                                 | label_450:
    0x0005127e ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00051280 mov sb, r0                                        |     sb = r0;
    0x00051282 ldr r0, [r5, 0x2c]                                |     r0 = *((r5 + 0x2c));
    0x00051284 add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x00051288 b.w 0x50538                                       |     goto label_39;
                                                                 | label_565:
    0x0005128c mov r2, r4                                        |     r2 = r4;
    0x0005128e mov r3, r6                                        |     r3 = r6;
    0x00051290 ldr r1, [r7, 4]                                   |     r1 = *((r7 + 4));
    0x00051292 ldr r0, [r7, 0x18]                                |     r0 = *((r7 + 0x18));
    0x00051294 bl 0x30258                                        |     fcn_00030258 (r0, r1, r2, r3, r4, r5, r6);
    0x00051298 ldrh r3, [r7, 0x1c]                               |     r3 = *((r7 + 0x1c));
    0x0005129a movw r2, 0x2460                                   |     r2 = 0x2460;
    0x0005129e mov r4, r0                                        |     r4 = r0;
    0x000512a0 tst r2, r3                                        |     
                                                                 |     if ((r2 & r3) != 0) {
    0x000512a2 bne.w 0x52d04                                     |         goto label_596;
                                                                 |     }
                                                                 | label_178:
    0x000512a6 ldr r1, [r7, 0x24]                                |     r1 = *((r7 + 0x24));
    0x000512a8 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x000512aa beq.w 0x4d722                                     |         goto label_45;
                                                                 |     }
    0x000512ae ldr r0, [r7]                                      |     r0 = *(r7);
    0x000512b0 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x000512b4 b.w 0x4d722                                       |     goto label_45;
                                                                 | label_462:
    0x000512b8 str.w r8, [sp, 0x1c]                              |     __asm ("str.w r8, [arg_1ch]");
    0x000512bc b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_501:
    0x000512c0 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x000512c2 ldr.w r2, [pc, 0x6b8]                             |     r2 = *(0x0005197c);
    0x000512c6 add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x000512ca add r2, pc                                        |     r2 += pc;
                                                                 | label_151:
    0x000512cc ldr r4, [sp, 0x24]                                |     r4 = *((sp + 0x24));
    0x000512ce mov r1, fp                                        |     r1 = fp;
    0x000512d0 mov.w sb, 5                                       |     sb = 5;
    0x000512d4 add.w r0, r4, 0x2c                                |     r0 = r4 + 0x2c;
    0x000512d8 bl 0x1c9d0                                        |     fcn_0001c9d0 (r0, r1);
    0x000512dc ldr r0, [r4, 0x2c]                                |     r0 = *((r4 + 0x2c));
    0x000512de b.w 0x50538                                       |     goto label_39;
                                                                 | label_442:
    0x000512e2 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x000512e4 mov r0, r5                                        |     r0 = r5;
    0x000512e6 ldr r1, [r4, 4]                                   |     r1 = *((r4 + 4));
    0x000512e8 adds r3, 1                                        |     r3++;
    0x000512ea str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x000512ec ldr r3, [r5]                                      |     r3 = *(r5);
    0x000512ee ldr r3, [r3, 0x4c]                                |     r3 = *((r3 + 0x4c));
    0x000512f0 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x000512f2 ldr r7, [sp, 0x24]                                |     r7 = *((sp + 0x24));
    0x000512f4 mov r6, r0                                        |     r6 = r0;
    0x000512f6 ldr r4, [r7]                                      |     r4 = *(r7);
    0x000512f8 ldr r1, [r7, 0x2c]                                |     r1 = *((r7 + 0x2c));
    0x000512fa mov r0, r4                                        |     r0 = r4;
    0x000512fc bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x00051300 ldr r1, [r5, 8]                                   |     r1 = *((r5 + 8));
    0x00051302 mov r0, r4                                        |     r0 = r4;
    0x00051304 bl 0xd418                                         |     fcn_0000d418 (r0, r1);
    0x00051308 str r0, [r7, 0x2c]                                |     *((r7 + 0x2c)) = r0;
    0x0005130a ldr r0, [r5, 8]                                   |     r0 = *((r5 + 8));
    0x0005130c blx 0x6050                                        |     fcn_00006050 ();
    0x00051310 movs r2, 0                                        |     r2 = 0;
    0x00051312 str r2, [r5, 8]                                   |     *((r5 + 8)) = r2;
    0x00051314 ldrb.w r3, [r7, 0x58]                             |     r3 = *((r7 + 0x58));
    0x00051318 bfi r3, r2, 5, 1                                  |     value_48 = BIT_MASK (5, 1);
                                                                 |     value_49 = r2 & value_48;
                                                                 |     value_48 = ~value_48;
                                                                 |     r3 &= value_48;
                                                                 |     r3 |= value_49;
    0x0005131c strb.w r3, [r7, 0x58]                             |     *((r7 + 0x58)) = r3;
    0x00051320 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00051322 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x00051326 b.w 0x4d740                                       |     goto label_7;
                                                                 | label_557:
    0x0005132a ldrd r3, r1, [r7, 0x20]                           |     __asm ("ldrd r3, r1, [r7, 0x20]");
    0x0005132e cmp r1, r3                                        |     
                                                                 |     if (r1 != r3) {
    0x00051330 beq 0x51342                                       |         
    0x00051332 ldrb.w r3, [r7, 0x34]                             |         r3 = *((r7 + 0x34));
    0x00051336 cmp r3, 1                                         |         
                                                                 |         if (r3 == 1) {
    0x00051338 beq.w 0x539d4                                     |             goto label_597;
                                                                 |         }
    0x0005133c mov r0, r1                                        |         r0 = r1;
    0x0005133e blx 0x6050                                        |         fcn_00006050 ();
                                                                 |     }
                                                                 | label_240:
    0x00051342 movs r3, 0                                        |     r3 = 0;
    0x00051344 add r0, sp, 0xf4                                  |     r0 += arg_f4h;
    0x00051346 str r3, [r7, 0x24]                                |     *((r7 + 0x24)) = r3;
    0x00051348 bl 0x171d4                                        |     fcn_000171d4 (r0);
                                                                 | label_174:
    0x0005134c mov r0, fp                                        |     r0 = fp;
    0x0005134e ldr r1, [sp, 0x28]                                |     r1 = *(arg_28h);
    0x00051350 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x00051354 ldr r0, [sp, 0x2c]                                |     r0 = *(arg_2ch);
    0x00051356 bl 0xfdb8                                         |     fcn_0000fdb8 (r0);
    0x0005135a b.w 0x50972                                       |     goto label_69;
                                                                 | label_420:
    0x0005135e ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00051360 adds r3, 1                                        |     r3++;
    0x00051362 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00051364 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_438:
    0x00051368 mov r1, sl                                        |     r1 = sl;
    0x0005136a bl 0x2e998                                        |     r0 = fcn_0002e998 (r0, r1);
    0x0005136e mov r6, r0                                        |     r6 = r0;
    0x00051370 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00051372 bne.w 0x528f6                                     |         goto label_207;
                                                                 |     }
    0x00051376 ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x0005137a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005137c beq.w 0x52d0e                                     |         goto label_598;
                                                                 |     }
    0x00051380 movs r2, 1                                        |     r2 = 1;
    0x00051382 movs r3, 0                                        |     r3 = 0;
    0x00051384 strd r2, r3, [sp, 0xd8]                           |     __asm ("strd r2, r3, [sp, 0xd8]");
                                                                 | label_179:
    0x00051388 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0005138a ldr r6, [r3, 0xc]                                 |     r6 = *((r3 + 0xc));
    0x0005138c cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x0005138e bne.w 0x4f350                                     |         goto label_70;
                                                                 |     }
    0x00051392 ldrb.w r3, [r8, 0x1c]                             |     r3 = *((r8 + 0x1c));
    0x00051396 lsls r3, r3, 0x1e                                 |     r3 <<= 0x1e;
    0x00051398 it pl                                             |     
                                                                 |     if (r3 < r3) {
    0x0005139a ldrdpl r2, r3, [sp, 0xd8]                         |         __asm ("ldrdpl r2, r3, [arg_d8h]");
                                                                 |         goto label_599;
                                                                 |     }
                                                                 |     if (r3 >= r3) {
                                                                 | label_599:
    0x0005139e bpl.w 0x4f3a2                                     |         goto label_71;
                                                                 |     }
    0x000513a2 ldr.w r0, [r8]                                    |     r0 = *(r8);
                                                                 | label_439:
    0x000513a6 ldr r3, [sp, 0x68]                                |     r3 = *(arg_68h);
    0x000513a8 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x000513aa add r4, sp, 0xdc                                  |     r4 += arg_dch;
    0x000513ac movs r5, 0                                        |     r5 = 0;
    0x000513ae mov r6, sl                                        |     r6 = sl;
    0x000513b0 mov sb, r4                                        |     sb = r4;
    0x000513b2 adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x000513b4 ldr r3, [sp, 0x6c]                                |     r3 = *(arg_6ch);
    0x000513b6 str r2, [r7]                                      |     *(r7) = r2;
    0x000513b8 bic r3, r3, 0xc0000000                            |     r3 = BIT_MASK (r3, 0xc0000000);
    0x000513bc adc r3, r3, 0                                     |     __asm ("adc r3, r3, 0");
    0x000513c0 str r3, [sp, 0xdc]                                |     *(arg_dch) = r3;
    0x000513c2 b 0x513fe                                         |     
                                                                 |     while (r0 == 0) {
    0x000513c4 ldr r4, [r6]                                      |         r4 = *(r6);
                                                                 |         if (r4 != 0) {
    0x000513c6 cbnz r4, 0x5140c                                  |             goto label_600;
                                                                 |         }
    0x000513c8 adds r5, 1                                        |         r5++;
    0x000513ca cmp r5, 0x64                                      |         
                                                                 |         if (r5 == 0x64) {
    0x000513cc beq.w 0x536dc                                     |             goto label_441;
                                                                 |         }
    0x000513d0 movs r0, 8                                        |         r0 = 8;
    0x000513d2 mov r1, r7                                        |         r1 = r7;
    0x000513d4 blx 0x67ac                                        |         fcn_000067ac ();
    0x000513d8 cmp r5, 4                                         |         
    0x000513da ldr.w r0, [r8]                                    |         r0 = *(r8);
    0x000513de iteet le                                          |         
                                                                 |         if (r5 > 4) {
    0x000513e0 ldrle r3, [r7]                                    |             r3 = *(r7);
                                                                 |         }
                                                                 |         if (r5 <= 4) {
    0x000513e2 ldrgt r4, [sb]                                    |             r4 = *(sb);
                                                                 |         }
                                                                 |         if (r5 > 4) {
    0x000513e6 ldrle r3, [r7]                                    |             r3 = *(r7);
                                                                 |         }
                                                                 |         if (r5 <= 4) {
    0x000513e8 bic r3, r3, 0xff000000                            |             r3 = BIT_MASK (r3, 0xff000000);
                                                                 |         }
    0x000513ec it gt                                             |         
                                                                 |         if (r5 > 4) {
    0x000513ee bicgt r4, r4, 0xc0000000                          |             __asm ("bicgt r4, r4, aav.0x000000ff");
                                                                 |         }
    0x000513f2 adds r2, r3, 1                                    |         r2 = r3 + 1;
    0x000513f4 adc r3, r4, 0                                     |         __asm ("adc r3, r4, 0");
    0x000513f8 str r2, [r7]                                      |         *(r7) = r2;
    0x000513fa str.w r3, [sb]                                    |         __asm ("str.w r3, [sb]");
    0x000513fe movs r1, 0                                        |         r1 = 0;
    0x00051400 str r6, [sp, 4]                                   |         *(arg_4h) = r6;
    0x00051402 str r1, [sp]                                      |         *(sp) = r1;
    0x00051404 bl 0x2e9e8                                        |         r0 = fcn_0002e9e8 (r0, r1, r2, r3, r4, r5, r6);
    0x00051408 cmp r0, 0                                         |         
    0x0005140a beq 0x513c4                                       |         
                                                                 |     }
                                                                 | label_600:
    0x0005140c ldr r2, [r7]                                      |     r2 = *(r7);
    0x0005140e mov r6, r0                                        |     r6 = r0;
    0x00051410 ldr.w r3, [sb]                                    |     r3 = *(sb);
    0x00051414 b.w 0x4f3a2                                       |     goto label_71;
                                                                 | label_489:
    0x00051418 ldr r4, [sp, 0x24]                                |     r4 = *((sp + 0x24));
    0x0005141a mov r1, fp                                        |     r1 = fp;
    0x0005141c ldr.w r2, [pc, 0x560]                             |     r2 = *(0x00051980);
    0x00051420 mov.w sb, 1                                       |     sb = 1;
    0x00051424 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00051426 add.w r0, r4, 0x2c                                |     r0 = r4 + 0x2c;
    0x0005142a add r2, pc                                        |     r2 += pc;
    0x0005142c add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x00051430 bl 0x1c9d0                                        |     fcn_0001c9d0 (r0, r1);
    0x00051434 ldr r0, [r4, 0x2c]                                |     r0 = *((r4 + 0x2c));
    0x00051436 b.w 0x50538                                       |     goto label_39;
                                                                 | label_410:
    0x0005143a mov r5, sb                                        |     r5 = sb;
    0x0005143c b.w 0x4edca                                       |     goto label_72;
                                                                 | label_486:
    0x00051440 ldr r1, [sp, 0x70]                                |     r1 = *(arg_70h);
    0x00051442 mov r0, r4                                        |     r0 = r4;
    0x00051444 bl 0x20900                                        |     r0 = fcn_00020900 (r0, r1);
    0x00051448 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005144a beq.w 0x4fdf6                                     |         goto label_73;
                                                                 |     }
    0x0005144e b.w 0x4d4ec                                       |     goto label_6;
                                                                 | label_463:
    0x00051452 adds r3, 1                                        |     r3++;
    0x00051454 mov r0, r5                                        |     r0 = r5;
    0x00051456 uxtb r4, r3                                       |     r4 = (int8_t) r3;
    0x00051458 bl 0xd140                                         |     fcn_0000d140 (r0);
    0x0005145c mov r2, r4                                        |     r2 = r4;
    0x0005145e mov r1, sb                                        |     r1 = sb;
    0x00051460 mov r0, r5                                        |     r0 = r5;
    0x00051462 bl 0x7c40                                         |     r0 = fcn_00007c40 (r0, r1, r2);
    0x00051466 mov r6, r0                                        |     r6 = r0;
    0x00051468 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005146a beq.w 0x532e4                                     |         goto label_601;
                                                                 |     }
    0x0005146e ldrb r3, [r5, 9]                                  |     r3 = *((r5 + 9));
    0x00051470 uxtb r4, r0                                       |     r4 = (int8_t) r0;
    0x00051472 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00051474 beq.w 0x532d2                                     |         goto label_602;
                                                                 |     }
    0x00051478 ldr r3, [r5, 0xc]                                 |     r3 = *((r5 + 0xc));
    0x0005147a subs r3, 1                                        |     r3--;
    0x0005147c str r3, [r5, 0xc]                                 |     *((r5 + 0xc)) = r3;
    0x0005147e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00051480 beq.w 0x538f0                                     |         goto label_603;
                                                                 |     }
                                                                 | label_231:
    0x00051484 cmp r4, 6                                         |     
                                                                 |     if (r4 != 6) {
    0x00051486 bne.w 0x53320                                     |         goto label_604;
                                                                 |     }
    0x0005148a mov sb, r6                                        |     sb = r6;
                                                                 | label_203:
    0x0005148c ldr r4, [sp, 0x24]                                |     r4 = *((sp + 0x24));
    0x0005148e mov r1, fp                                        |     r1 = fp;
    0x00051490 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00051492 ldr.w r2, [pc, 0x4f0]                             |     
    0x00051496 mov r0, r4                                        |     r0 = r4;
    0x00051498 adds r0, 0x2c                                     |     r0 += 0x2c;
    0x0005149a ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x0005149c add r2, pc                                        |     r2 = 0xa2e26;
    0x0005149e bl 0x1c9d0                                        |     fcn_0001c9d0 (r0, r1);
    0x000514a2 ldr r0, [r4, 0x2c]                                |     r0 = *((r4 + 0x2c));
    0x000514a4 b.w 0x50538                                       |     goto label_39;
                                                                 | label_401:
    0x000514a8 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x000514aa mov r0, sl                                        |     r0 = sl;
    0x000514ac ldr.w r2, [pc, 0x4d8]                             |     
    0x000514b0 add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x000514b4 add r2, pc                                        |     r2 = 0xa2e40;
    0x000514b6 b 0x50d2c                                         |     goto label_74;
                                                                 | label_304:
    0x000514b8 mov r0, r6                                        |     r0 = r6;
    0x000514ba sub.w r8, r8, 0x59                                |     r8 -= 0x59;
    0x000514be bl 0xa29c                                         |     fcn_0000a29c (r0);
    0x000514c2 mov r0, r5                                        |     r0 = r5;
    0x000514c4 vmov.f64 d11, d0                                  |     __asm ("vmov.f64 d11, d0");
    0x000514c8 bl 0xa29c                                         |     fcn_0000a29c (r0);
    0x000514cc vmov.f64 d13, d0                                  |     __asm ("vmov.f64 d13, d0");
    0x000514d0 cmp.w r8, 3                                       |     
                                                                 |     if (r8 > 3) {
    0x000514d4 bhi.w 0x51bf4                                     |         goto label_605;
                                                                 |     }
                                                                 |     /* switch table (5 cases) at 0x514dc */
    0x000514d8 tbh [pc, r8, lsl 1]                               |     __asm ("tbh [pc, r8, lsl 1]");
                                                                 | label_523:
    0x000514e4 ldr r3, [r0, 0x14]                                |     r3 = *((r0 + 0x14));
    0x000514e6 str r3, [r2, 8]                                   |     *((r2 + 8)) = r3;
    0x000514e8 b.w 0x5076e                                       |     goto label_75;
                                                                 | label_485:
    0x000514ec ldr r1, [sp, 0x70]                                |     r1 = *(arg_70h);
    0x000514ee mov r0, r5                                        |     r0 = r5;
    0x000514f0 bl 0x20900                                        |     r0 = fcn_00020900 (r0, r1);
    0x000514f4 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000514f6 beq.w 0x4fdea                                     |         goto label_76;
                                                                 |     }
    0x000514fa b.w 0x4d4ec                                       |     goto label_6;
                                                                 | label_484:
    0x000514fe mov r0, r4                                        |     r0 = r4;
    0x00051500 bl 0x173c0                                        |     r0 = fcn_000173c0 (r0);
    0x00051504 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00051506 beq.w 0x4fdde                                     |         goto label_77;
                                                                 |     }
    0x0005150a b.w 0x4d4ec                                       |     goto label_6;
                                                                 | label_483:
    0x0005150e mov r0, r5                                        |     r0 = r5;
    0x00051510 bl 0x173c0                                        |     r0 = fcn_000173c0 (r0);
    0x00051514 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00051516 bne.w 0x4d4ec                                     |         goto label_6;
                                                                 |     }
    0x00051518 add r7, sp, 0x3a4                                 |     r7 = sp + 0x3a4;
    0x0005151a ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0005151c b.w 0x4fdd8                                       |     goto label_78;
                                                                 | label_568:
    0x00051520 lsls r7, r5, 0x1f                                 |     r7 = r5 << 0x1f;
                                                                 |     if (r7 >= r5) {
    0x00051522 bpl.w 0x53a68                                     |         goto label_606;
                                                                 |     }
                                                                 | label_246:
    0x00051526 orr r5, r5, 2                                     |     r5 |= 2;
    0x0005152a strh r5, [r6, 0x1a]                               |     *((r6 + 0x1a)) = r5;
    0x0005152c b.w 0x50c1c                                       |     goto label_79;
                                                                 | label_534:
    0x00051530 ldrb.w r3, [fp, 0x3e]                             |     r3 = *(arg_3eh);
                                                                 |     if (r3 == 0) {
    0x00051534 cbz r3, 0x51540                                   |         goto label_607;
                                                                 |     }
    0x00051536 ldr.w r3, [fp, 0x90]                              |     r3 = *(arg_90h);
    0x0005153a cmp r3, 1                                         |     
                                                                 |     if (r3 <= 1) {
    0x0005153c ble.w 0x50508                                     |         goto label_80;
                                                                 |     }
                                                                 | label_607:
    0x00051540 ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x00051542 ldr r4, [r2, 0x68]                                |     r4 = *((r2 + 0x68));
                                                                 |     if (r4 == 0) {
    0x00051544 cbnz r4, 0x51558                                  |         
    0x00051546 ldr.w r4, [fp, 0x1ec]                             |         r4 = *(arg_1ech);
    0x0005154a ldr.w r3, [fp, 0x1e8]                             |         r3 = *(arg_1e8h);
    0x0005154e adds r4, 1                                        |         r4++;
    0x00051550 str.w r4, [fp, 0x1ec]                             |         __asm ("str.w r4, [arg_1ech]");
    0x00051554 add r4, r3                                        |         r4 += r3;
    0x00051556 str r4, [r2, 0x68]                                |         *((r2 + 0x68)) = r4;
                                                                 |     }
    0x00051558 ldr.w r3, [fp, 0x140]                             |     r3 = *(arg_140h);
                                                                 |     if (r3 != 0) {
    0x0005155c cbz r3, 0x51570                                   |         
    0x0005155e subs r2, r4, 1                                    |         r2 = r4 - 1;
    0x00051560 movs r1, 0                                        |         r1 = 0;
    0x00051562 mov r0, fp                                        |         r0 = fp;
    0x00051564 bl 0xa6e8                                         |         r0 = fcn_0000a6e8 (r0, r1, r2);
    0x00051568 mov r6, r0                                        |         r6 = r0;
                                                                 |         if (r0 != 0) {
    0x0005156a cbnz r0, 0x51592                                  |             goto label_265;
                                                                 |         }
    0x0005156c ldr r3, [sp, 0x24]                                |         r3 = *((sp + 0x24));
    0x0005156e ldr r4, [r3, 0x68]                                |         r4 = *((r3 + 0x68));
                                                                 |     }
    0x00051570 ldr r6, [r5, 4]                                   |     r6 = *((r5 + 4));
    0x00051572 mov r0, r5                                        |     r0 = r5;
    0x00051574 bl 0xd140                                         |     fcn_0000d140 (r0);
    0x00051578 mov r1, r4                                        |     r1 = r4;
    0x0005157a ldr r0, [r6]                                      |     r0 = *(r6);
    0x0005157c bl 0x10c5c                                        |     fcn_00010c5c (r0, r1);
    0x00051580 ldrb r3, [r5, 9]                                  |     r3 = *((r5 + 9));
    0x00051582 mov r6, r0                                        |     r6 = r0;
                                                                 |     if (r3 != 0) {
    0x00051584 cbz r3, 0x51592                                   |         
    0x00051586 ldr r4, [r5, 0xc]                                 |         r4 = *((r5 + 0xc));
    0x00051588 subs r4, 1                                        |         r4--;
    0x0005158a str r4, [r5, 0xc]                                 |         *((r5 + 0xc)) = r4;
    0x0005158c cmp r4, 0                                         |         
                                                                 |         if (r4 == 0) {
    0x0005158e beq.w 0x53d74                                     |             goto label_608;
                                                                 |         }
                                                                 |     }
                                                                 | label_265:
    0x00051592 ldrd r2, r3, [fp, 0x1f0]                          |     __asm ("ldrd r2, r3, [arg_1f0h]");
    0x00051596 ldr r1, [sp, 0x24]                                |     r1 = *((sp + 0x24));
    0x00051598 strd r2, r3, [r1, 0x98]                           |     __asm ("strd r2, r3, [r1, 0x98]");
    0x0005159c ldrd r2, r3, [fp, 0x1f8]                          |     __asm ("ldrd r2, r3, [arg_1f8h]");
    0x000515a0 strd r2, r3, [r1, 0xa0]                           |     __asm ("strd r2, r3, [r1, 0xa0]");
    0x000515a4 b.w 0x5050a                                       |     goto label_81;
                                                                 | label_527:
    0x000515a8 ldr r1, [r4, 4]                                   |     r1 = *((r4 + 4));
    0x000515aa mov r2, r1                                        |     r2 = r1;
                                                                 |     if (r1 == 0) {
    0x000515ac cbz r1, 0x515c6                                   |         goto label_609;
                                                                 |     }
    0x000515ae ldrb r3, [r1]                                     |     r3 = *(r1);
    0x000515b0 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000515b2 beq.w 0x53c20                                     |         goto label_610;
                                                                 |     }
    0x000515b6 mov r3, r1                                        |     r3 = r1;
                                                                 |     do {
    0x000515b8 ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x000515bc cmp r2, 0                                         |         
    0x000515be bne 0x515b8                                       |         
                                                                 |     } while (r2 != 0);
                                                                 | label_258:
    0x000515c0 subs r3, r3, r1                                   |     r3 -= r1;
    0x000515c2 bic r2, r3, 0xc0000000                            |     r2 = BIT_MASK (r3, 0xc0000000);
                                                                 | label_609:
    0x000515c6 adds r0, 8                                        |     r0 += 8;
    0x000515c8 bl 0x13f5c                                        |     fcn_00013f5c (r0, r1, r2);
    0x000515cc ldr r2, [r0, 0x40]                                |     r2 = *((r0 + 0x40));
    0x000515ce mov r3, r0                                        |     r3 = r0;
    0x000515d0 cmp r4, r2                                        |     
                                                                 |     if (r4 == r2) {
    0x000515d2 beq.w 0x53c1a                                     |         goto label_611;
                                                                 |     }
                                                                 |     do {
    0x000515d6 mov r3, r2                                        |         r3 = r2;
    0x000515d8 ldr r2, [r2, 0x20]                                |         r2 = *((r2 + 0x20));
    0x000515da cmp r4, r2                                        |         
    0x000515dc bne 0x515d6                                       |         
                                                                 |     } while (r4 != r2);
    0x000515de adds r3, 0x20                                     |     r3 += 0x20;
                                                                 | label_257:
    0x000515e0 ldr r2, [r2, 0x20]                                |     r2 = *((r2 + 0x20));
    0x000515e2 str r2, [r3]                                      |     *(r3) = r2;
    0x000515e4 b.w 0x50426                                       |     goto label_82;
    0x000515e8 cmp r3, 0                                         |     
    0x000515ea ite gt                                            |     
                                                                 |     if (r3 <= 0) {
    0x000515ec movgt r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x000515ee movle r3, 1                                       |     r3 = 1;
                                                                 |     while (1) {
                                                                 | label_83:
    0x000515f0 lsls r0, r2, 0x1b                                 |         r0 = r2 << 0x1b;
                                                                 |         if (r0 >= r2) {
    0x000515f2 bpl.w 0x51e8e                                     |             goto label_612;
                                                                 |         }
    0x000515f6 ldr r2, [sp, 0x20]                                |         r2 = *(arg_20h);
    0x000515f8 ldr r1, [sp, 0x1c]                                |         r1 = *(arg_1ch);
    0x000515fa ldr r2, [r2, 8]                                   |         r2 = *((r2 + 8));
    0x000515fc adds r1, 1                                        |         r1++;
    0x000515fe str r1, [sp, 0x1c]                                |         *(arg_1ch) = r1;
    0x00051600 ldr r1, [sp, 0x44]                                |         r1 = *(arg_44h);
    0x00051602 add.w r2, r2, r2, lsl 2                           |         r2 += (r2 << 2);
    0x00051606 add.w r2, r1, r2, lsl 3                           |         r2 = r1 + (r2 << 3);
    0x0005160a str r3, [r2, 0x10]                                |         *((r2 + 0x10)) = r3;
    0x0005160c asrs r3, r3, 0x1f                                 |         r3 >>= 0x1f;
    0x0005160e str r2, [sp, 0x38]                                |         *(arg_38h) = r2;
    0x00051610 str r3, [r2, 0x14]                                |         *((r2 + 0x14)) = r3;
    0x00051612 ldrh r3, [r2, 0x1c]                               |         r3 = *((r2 + 0x1c));
    0x00051614 bic r3, r3, 0x4180                                |         r3 = BIT_MASK (r3, 0x4180);
    0x00051618 bic r3, r3, 0x7f                                  |         r3 = BIT_MASK (r3, 0x7f);
    0x0005161c orr r3, r3, 4                                     |         r3 |= 4;
    0x00051620 strh r3, [r2, 0x1c]                               |         *((r2 + 0x1c)) = r3;
                                                                 | label_113:
    0x00051622 ldrh r3, [r7, 0x1c]                               |         r3 = *((r7 + 0x1c));
    0x00051624 mov.w r2, 0xfe00                                  |         
    0x00051628 movt r2, 0xffff                                   |         r2 = 0x-200;
    0x0005162c ubfx r5, r5, 0, 9                                 |         r5 = (r5 >> 0) & ((1 << 9) - 1);
    0x00051630 ubfx r6, r6, 0, 9                                 |         r6 = (r6 >> 0) & ((1 << 9) - 1);
    0x00051634 ands r3, r2                                       |         r3 &= r2;
    0x00051636 orrs r3, r5                                       |         r3 |= r5;
    0x00051638 strh r3, [r7, 0x1c]                               |         *((r7 + 0x1c)) = r3;
    0x0005163a ldrh r3, [r4, 0x1c]                               |         r3 = *((r4 + 0x1c));
    0x0005163c ands r3, r2                                       |         r3 &= r2;
    0x0005163e orrs r3, r6                                       |         r3 |= r6;
    0x00051640 strh r3, [r4, 0x1c]                               |         *((r4 + 0x1c)) = r3;
    0x00051642 b.w 0x4d26a                                       |         goto label_2;
    0x00051646 clz r3, r3                                        |         r3 &= r3;
    0x0005164a lsrs r3, r3, 5                                    |         r3 >>= 5;
    0x0005164c b 0x515f0                                         |         
                                                                 |     }
    0x0005164e subs r3, 0                                        |     
    0x00051650 it ne                                             |     
                                                                 |     if (r3 == 0) {
    0x00051652 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x00051654 b 0x515f0                                         |     goto label_83;
                                                                 | label_303:
    0x00051656 mvns r3, r3                                       |     r3 = ~r3;
    0x00051658 lsrs r3, r3, 0x1f                                 |     r3 >>= 0x1f;
    0x0005165a b 0x515f0                                         |     goto label_83;
    0x0005165c cmp r3, 0                                         |     
    0x0005165e ite le                                            |     
                                                                 |     if (r3 > 0) {
    0x00051660 movle r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r3 <= 0) {
    0x00051662 movgt r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x00051664 b 0x515f0                                         |     goto label_83;
    0x00051666 asrs r4, r1, 0x1f                                 |     r4 = r1 >> 0x1f;
    0x00051668 asr.w r8, r3, 0x1f                                |     r8 = r3 >> 0x1f;
    0x0005166c adds r7, r4, r0                                   |     r7 = r4 + r0;
    0x0005166e eor.w r7, r0, r4                                  |     r7 = r0 ^ r4;
    0x00051672 adc ip, r1, 0                                     |     __asm ("adc ip, r1, 0");
    0x00051676 subs.w lr, r7, r4                                 |     lr = r7 - r4;
    0x0005167a eor.w lr, lr, r4                                  |     lr ^= r4;
    0x0005167e subs.w lr, lr, r4                                 |     lr -= r4;
    0x00051682 sbc.w r4, r4, r4                                  |     __asm ("sbc.w r4, r4, r4");
    0x00051686 str r4, [sp, 0x20]                                |     *(arg_20h) = r4;
    0x00051688 adds.w r4, r8, r2                                 |     r4 = r8 + r2;
    0x0005168c eor.w r4, r2, r8                                  |     r4 = r2 ^ r8;
    0x00051690 adc r7, r3, 0                                     |     __asm ("adc r7, r3, 0");
    0x00051694 subs.w r4, r4, r8                                 |     r4 -= r8;
    0x00051698 eor.w r4, r4, r8                                  |     r4 ^= r8;
    0x0005169c subs.w r4, r4, r8                                 |     r4 -= r8;
    0x000516a0 str r4, [sp, 0x28]                                |     *(arg_28h) = r4;
    0x000516a2 sbc.w r4, r8, r8                                  |     __asm ("sbc.w r4, r8, r8");
    0x000516a6 str r4, [sp, 0x2c]                                |     *(arg_2ch) = r4;
    0x000516a8 asr.w r4, ip, 0x1f                                |     r4 = ip >> 0x1f;
    0x000516ac asr.w r8, r7, 0x1f                                |     r8 = r7 >> 0x1f;
    0x000516b0 str r4, [sp, 0x34]                                |     *(arg_34h) = r4;
    0x000516b2 orrs.w r4, ip, ip, asr 31                         |     r4 = ip | (ip >> 31);
                                                                 |     if (r4 != ip) {
    0x000516b6 bne.w 0x53a2c                                     |         goto label_613;
                                                                 |     }
    0x000516ba orrs.w ip, r7, r8                                 |     
                                                                 |     if (ip == r7) {
    0x000516be beq.w 0x53dac                                     |         goto label_614;
                                                                 |     }
    0x000516c2 mul r3, lr, r8                                    |     r3 = lr * r8;
    0x000516c6 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x000516c8 mla r3, r7, r2, r3                                |     __asm ("mla r3, r7, r2, r3");
    0x000516cc umull r7, ip, lr, r7                              |     r7:ip = lr * r7;
    0x000516d0 add ip, r3                                        |     
                                                                 | label_245:
    0x000516d2 adds.w r2, r7, -0x80000000                        |     r2 = r7 + -0x80000000;
    0x000516d6 mov.w r3, -1                                      |     r3 = -1;
    0x000516da adc ip, ip, 0                                     |     __asm ("adc ip, ip, 0");
    0x000516de movs r0, 0                                        |     r0 = 0;
    0x000516e0 cmp r3, r2                                        |     
    0x000516e2 sbcs.w ip, r0, ip                                 |     __asm ("sbcs.w ip, r0, ip");
                                                                 |     if (r3 <= r2) {
    0x000516e6 blo.w 0x518be                                     |         goto label_244;
                                                                 |     }
    0x000516ea ldr r2, [sp, 0x2c]                                |     r2 = *(arg_2ch);
    0x000516ec ldr r1, [sp, 0x20]                                |     r1 = *(arg_20h);
    0x000516ee ldr r4, [sp, 0x28]                                |     r4 = *(arg_28h);
    0x000516f0 mul r2, lr, r2                                    |     r2 = lr * r2;
    0x000516f4 mla r2, r4, r1, r2                                |     __asm ("mla r2, r4, r1, r2");
    0x000516f8 umull r4, r1, lr, r4                              |     r4:r1 = lr * r4;
    0x000516fc adds r1, r2, r1                                   |     r1 = r2 + r1;
                                                                 |     if (r1 < r2) {
    0x000516fe bmi.w 0x518a0                                     |         goto label_615;
                                                                 |     }
    0x00051702 cmp r7, r0                                        |     
                                                                 |     if (r7 > r0) {
    0x00051704 ble 0x51716                                       |         
    0x00051706 mvn r2, 0x80000000                                |         r2 = ~0x80000000;
    0x0005170a cmp r3, r4                                        |         
    0x0005170c sub.w r2, r2, r7                                  |         r2 -= r7;
    0x00051710 sbcs r2, r1                                       |         __asm ("sbcs r2, r1");
                                                                 |         if (r3 < r4) {
    0x00051712 blt.w 0x518be                                     |             goto label_244;
                                                                 |         }
                                                                 |     }
                                                                 | label_86:
    0x00051716 adds r0, r0, r4                                   |     r0 += r4;
    0x00051718 adc.w r1, r1, r7                                  |     __asm ("adc.w r1, r1, r7");
                                                                 |     do {
                                                                 | label_84:
    0x0005171c ldr r3, [sp, 0x1c]                                |         r3 = *(arg_1ch);
    0x0005171e ldr r2, [sp, 0x38]                                |         r2 = *(arg_38h);
    0x00051720 adds r3, 1                                        |         r3++;
    0x00051722 str r3, [sp, 0x1c]                                |         *(arg_1ch) = r3;
    0x00051724 ldrh r3, [r2, 0x1c]                               |         r3 = *((r2 + 0x1c));
    0x00051726 strd r0, r1, [r2, 0x10]                           |         __asm ("strd r0, r1, [r2, 0x10]");
    0x0005172a bic r3, r3, 0x4180                                |         r3 = BIT_MASK (r3, 0x4180);
    0x0005172e bic r3, r3, 0x7f                                  |         r3 = BIT_MASK (r3, 0x7f);
    0x00051732 orr r3, r3, 4                                     |         r3 |= 4;
    0x00051736 strh r3, [r2, 0x1c]                               |         *((r2 + 0x1c)) = r3;
    0x00051738 b.w 0x4d26a                                       |         goto label_2;
    0x0005173c cmp.w r3, -0x80000000                             |         
    0x00051740 it eq                                             |         
                                                                 |         if (r3 == -0x80000000) {
    0x00051742 cmpeq r2, 0                                       |             __asm ("cmpeq r2, 0");
                                                                 |         }
                                                                 |         if (r3 != -0x80000000) {
    0x00051744 bne.w 0x5380c                                     |             goto label_616;
                                                                 |         }
    0x00051748 cmp r1, 0                                         |         
    0x0005174a it lt                                             |         
                                                                 |         if (r1 >= 0) {
    0x0005174c addlt r1, r1, -0x80000000                         |             r1 += -0x80000000;
                                                                 |         }
    0x00051750 blt 0x5171c                                       |         
                                                                 |     } while (r1 < 0);
                                                                 | label_230:
    0x00051752 mov r0, r6                                        |     r0 = r6;
    0x00051754 movs r4, 1                                        |     r4 = 1;
    0x00051756 bl 0xa29c                                         |     fcn_0000a29c (r0);
    0x0005175a mov r0, r5                                        |     r0 = r5;
    0x0005175c vmov.f64 d11, d0                                  |     __asm ("vmov.f64 d11, d0");
    0x00051760 bl 0xa29c                                         |     fcn_0000a29c (r0);
    0x00051764 vmov.f64 d13, d0                                  |     __asm ("vmov.f64 d13, d0");
    0x00051768 vsub.f64 d12, d13, d11                            |     __asm ("vsub.f64 d12, d13, d11");
                                                                 | label_85:
    0x0005176c vstr d12, [sp, 0x98]                              |     __asm ("vstr d12, [sp, 0x98]");
    0x00051770 ldrd r0, r1, [sp, 0x98]                           |     __asm ("ldrd r0, r1, [arg_98h]");
    0x00051774 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00051776 strd r0, r1, [sp, 0xa0]                           |     __asm ("strd r0, r1, [sp, 0xa0]");
    0x0005177a vldr d17, [sp, 0x98]                              |     __asm ("vldr d17, [sp, 0x98]");
    0x0005177e add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x00051782 vldr d16, [sp, 0xa0]                              |     __asm ("vldr d16, [sp, 0xa0]");
    0x00051786 vcmp.f64 d17, d16                                 |     __asm ("vcmp.f64 d17, d16");
    0x0005178a vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
                                                                 |     if (r4 != 1) {
    0x0005178e bne.w 0x51c0e                                     |         goto label_617;
                                                                 |     }
    0x00051792 ldr r1, [sp, 0x38]                                |     r1 = *(arg_38h);
    0x00051794 orr.w r2, sl, sb                                  |     r2 = sl | sb;
    0x00051798 eor r3, r4, 1                                     |     r3 = r4 ^ 1;
    0x0005179c eor r2, r2, 8                                     |     r2 ^= 8;
    0x000517a0 and r3, r3, 1                                     |     r3 &= 1;
    0x000517a4 ldrh r6, [r1, 0x1c]                               |     r6 = *((r1 + 0x1c));
    0x000517a6 ands.w r3, r3, r2, lsr 3                          |     r3 &= (r2 >> 3);
    0x000517aa vstr d12, [r1, 8]                                 |     __asm ("vstr d12, [r1, 8]");
    0x000517ae it eq                                             |     
                                                                 |     if (r3 != r3) {
    0x000517b0 streq r8, [sp, 0x1c]                              |         *(arg_1ch) = r8;
                                                                 |     }
    0x000517b4 and r6, r6, 0xbe00                                |     r6 &= 0xbe00;
    0x000517b8 orr r6, r6, 8                                     |     r6 |= 8;
    0x000517bc strh r6, [r1, 0x1c]                               |     *((r1 + 0x1c)) = r6;
                                                                 |     if (r3 == r3) {
    0x000517be beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x000517c2 vcmpe.f64 d12, d10                                |     __asm ("vcmpe.f64 d12, d10");
    0x000517c6 vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
    0x000517ca itttt ls                                          |     
                                                                 |     if (r3 > r3) {
    0x000517cc movls r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (r3 > r3) {
    0x000517ce movls r3, -0x80000000                             |         r3 = -0x80000000;
                                                                 |     }
                                                                 |     if (r3 > r3) {
    0x000517d2 strls r8, [sp, 0x1c]                              |         *(arg_1ch) = r8;
                                                                 |     }
                                                                 |     if (r3 > r3) {
    0x000517d6 strd r2, r3, [r1, 0x10]                           |         __asm ("strd r2, r3, [r1, 0x10]");
                                                                 |         goto label_618;
                                                                 |     }
                                                                 |     if (r3 < r3) {
                                                                 | label_618:
    0x000517da bls.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x000517de vcmpe.f64 d12, d9                                 |     __asm ("vcmpe.f64 d12, d9");
    0x000517e2 vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
                                                                 |     if (r3 >= r3) {
    0x000517e6 bge.w 0x53d5e                                     |         goto label_619;
                                                                 |     }
    0x000517ea vmov r0, r1, d12                                  |     __asm ("vmov r0, r1, d12");
    0x000517ee bl 0x5e5dc                                        |     fcn_0005e5dc (r0, r1);
    0x000517f2 ldr r3, [sp, 0x38]                                |     r3 = *(arg_38h);
    0x000517f4 mov r4, r0                                        |     r4 = r0;
    0x000517f6 mov r5, r1                                        |     r5 = r1;
    0x000517f8 str r0, [r3, 0x10]                                |     *((r3 + 0x10)) = r0;
    0x000517fa str r1, [r3, 0x14]                                |     *((r3 + 0x14)) = r1;
    0x000517fc bl 0x5e4a4                                        |     r0 = fcn_0005e4a4 (r0, r1, r2);
    0x00051800 vmov d16, r0, r1                                  |     __asm ("vmov d16, r0, r1");
    0x00051804 vcmp.f64 d16, d12                                 |     __asm ("vcmp.f64 d16, d12");
    0x00051808 vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
    0x0005180c ite eq                                            |     
                                                                 |     if (r3 != r3) {
    0x0005180e moveq r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r3 == r3) {
    0x00051810 movne r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00051812 subs r4, 1                                        |     r4--;
    0x00051814 and r3, r3, 1                                     |     r3 &= 1;
    0x00051818 sbc r5, r5, -0x80000000                           |     __asm ("sbc r5, r5, -aav.0x000000ff");
    0x0005181c adds r4, 2                                        |     r4 += 2;
    0x0005181e sbcs r5, r5, -1                                   |     __asm ("sbcs r5, r5, -1");
    0x00051822 it hs                                             |     
                                                                 |     if (r4 < 2) {
    0x00051824 movhs r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00051826 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00051828 bne.w 0x53fa8                                     |         goto label_620;
                                                                 |     }
    0x0005182c str.w r8, [sp, 0x1c]                              |     __asm ("str.w r8, [arg_1ch]");
    0x00051830 b.w 0x4d26a                                       |     goto label_2;
    0x00051834 cmp r3, 0                                         |     
                                                                 |     if (r3 < 0) {
    0x00051836 blt 0x518da                                       |         goto label_621;
                                                                 |     }
    0x00051838 cmp r0, 1                                         |     
    0x0005183a sbcs r4, r1, 0                                    |     __asm ("sbcs r4, r1, 0");
                                                                 |     if (r0 >= 1) {
    0x0005183e blt 0x5184e                                       |         
    0x00051840 mvn r4, 0x80000000                                |         r4 = ~0x80000000;
    0x00051844 mvns r7, r0                                       |         r7 = ~r0;
    0x00051846 subs r4, r4, r1                                   |         r4 -= r1;
    0x00051848 cmp r7, r2                                        |         
    0x0005184a sbcs r4, r3                                       |         __asm ("sbcs r4, r3");
                                                                 |         if (r7 < r2) {
    0x0005184c blt 0x518f8                                       |             goto label_622;
                                                                 |         }
                                                                 |     }
                                                                 | label_87:
    0x0005184e adds r0, r0, r2                                   |     r0 += r2;
    0x00051850 adc.w r1, r1, r3                                  |     __asm ("adc.w r1, r1, r3");
    0x00051854 b 0x5171c                                         |     goto label_84;
    0x00051856 orrs.w r4, r2, r3                                 |     r4 = r2 | r3;
                                                                 |     if (r4 == r2) {
    0x0005185a beq.w 0x51c08                                     |         goto label_290;
                                                                 |     }
    0x0005185e add.w r4, r1, -0x80000000                         |     r4 = r1 + -0x80000000;
    0x00051862 and.w r7, r2, r3                                  |     r7 = r2 & r3;
    0x00051866 orrs r4, r0                                       |     r4 |= r0;
    0x00051868 cmp.w r7, -1                                      |     
    0x0005186c it eq                                             |     
                                                                 |     if (r7 == -1) {
    0x0005186e cmpeq r4, 0                                       |         __asm ("cmpeq r4, 0");
                                                                 |     }
                                                                 |     if (r7 != -1) {
    0x00051870 beq 0x51878                                       |         
    0x00051872 bl 0x5e500                                        |         fcn_0005e500 (r0, r1, r2, r3);
    0x00051876 b 0x5171c                                         |         goto label_84;
                                                                 |     }
    0x00051878 mov r0, r6                                        |     r0 = r6;
    0x0005187a movs r4, 1                                        |     r4 = 1;
    0x0005187c bl 0xa29c                                         |     fcn_0000a29c (r0);
    0x00051880 mov r0, r5                                        |     r0 = r5;
    0x00051882 vmov.f64 d11, d0                                  |     __asm ("vmov.f64 d11, d0");
    0x00051886 bl 0xa29c                                         |     fcn_0000a29c (r0);
    0x0005188a vmov.f64 d13, d0                                  |     __asm ("vmov.f64 d13, d0");
    0x0005188e vcmp.f64 d11, 0                                   |     __asm ("vcmp.f64 d11, 0");
    0x00051892 vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
                                                                 |     if (r4 == 1) {
    0x00051896 beq.w 0x51c08                                     |         goto label_290;
                                                                 |     }
    0x0005189a vdiv.f64 d12, d13, d11                            |     __asm ("vdiv.f64 d12, d13, d11");
    0x0005189e b 0x5176c                                         |     goto label_85;
                                                                 | label_615:
    0x000518a0 cmp r7, 0                                         |     
                                                                 |     if (r7 >= 0) {
    0x000518a2 bge.w 0x51716                                     |         goto label_86;
                                                                 |     }
    0x000518a6 rsbs.w ip, r0, 1                                  |     
    0x000518aa adds.w lr, r4, 1                                  |     lr = r4 + 1;
    0x000518ae adc r2, r1, 0                                     |     __asm ("adc r2, r1, 0");
    0x000518b2 rsb.w r3, r7, -0x80000000                         |     r3 = -0x80000000 - r7;
    0x000518b6 cmp lr, ip                                        |     
    0x000518b8 sbcs r2, r3                                       |     __asm ("sbcs r2, r3");
                                                                 |     if (lr >= ip) {
    0x000518ba bge.w 0x51716                                     |         goto label_86;
                                                                 |     }
                                                                 | label_244:
    0x000518be mov r0, r6                                        |     r0 = r6;
    0x000518c0 movs r4, 1                                        |     r4 = 1;
    0x000518c2 bl 0xa29c                                         |     fcn_0000a29c (r0);
    0x000518c6 mov r0, r5                                        |     r0 = r5;
    0x000518c8 vmov.f64 d11, d0                                  |     __asm ("vmov.f64 d11, d0");
    0x000518cc bl 0xa29c                                         |     fcn_0000a29c (r0);
    0x000518d0 vmov.f64 d13, d0                                  |     __asm ("vmov.f64 d13, d0");
    0x000518d4 vmul.f64 d12, d11, d13                            |     __asm ("vmul.f64 d12, d11, d13");
    0x000518d8 b 0x5176c                                         |     goto label_85;
                                                                 | label_621:
    0x000518da cmp r1, 0                                         |     
                                                                 |     if (r1 >= 0) {
    0x000518dc bge 0x5184e                                       |         goto label_87;
                                                                 |     }
    0x000518de rsbs.w ip, r0, 1                                  |     
    0x000518e2 mov.w r4, -0x80000000                             |     r4 = -0x80000000;
    0x000518e6 sbc.w r7, r4, r1                                  |     __asm ("sbc.w r7, r4, r1");
    0x000518ea adds.w lr, r2, 1                                  |     lr = r2 + 1;
    0x000518ee adc r4, r3, 0                                     |     __asm ("adc r4, r3, 0");
    0x000518f2 cmp lr, ip                                        |     
    0x000518f4 sbcs r4, r7                                       |     __asm ("sbcs r4, r7");
                                                                 |     if (lr >= ip) {
    0x000518f6 bge 0x5184e                                       |         goto label_87;
                                                                 |     }
                                                                 | label_622:
    0x000518f8 mov r0, r6                                        |     r0 = r6;
    0x000518fa movs r4, 1                                        |     r4 = 1;
    0x000518fc bl 0xa29c                                         |     fcn_0000a29c (r0);
    0x00051900 mov r0, r5                                        |     r0 = r5;
    0x00051902 vmov.f64 d11, d0                                  |     __asm ("vmov.f64 d11, d0");
    0x00051906 bl 0xa29c                                         |     fcn_0000a29c (r0);
    0x0005190a vmov.f64 d13, d0                                  |     __asm ("vmov.f64 d13, d0");
    0x0005190e vadd.f64 d12, d11, d13                            |     __asm ("vadd.f64 d12, d11, d13");
    0x00051912 b 0x5176c                                         |     goto label_85;
                                                                 | label_351:
    0x00051914 mov r1, r8                                        |     r1 = r8;
    0x00051916 mov r0, fp                                        |     r0 = fp;
    0x00051918 bl 0x1a48c                                        |     fcn_0001a48c (r0, r1);
    0x0005191c ldrd r5, sb, [r8, 8]                              |     __asm ("ldrd r5, sb, [r8, 8]");
    0x00051920 strd r5, sb, [r7, 8]                              |     __asm ("strd r5, sb, [r7, 8]");
    0x00051924 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00051926 bne.w 0x53d8a                                     |         goto label_623;
                                                                 |     }
    0x0005192a ldrd r2, r3, [r7]                                 |     __asm ("ldrd r2, r3, [r7]");
    0x0005192e cmp r5, r2                                        |     
    0x00051930 sbcs.w r3, sb, r3                                 |     __asm ("sbcs.w r3, sb, r3");
                                                                 |     if (r5 >= r2) {
    0x00051934 bge 0x51942                                       |         goto label_624;
                                                                 |     }
    0x00051936 add.w sl, sl, 0x30                                |     sl += 0x30;
    0x0005193a cmp.w sl, 0x300                                   |     
                                                                 |     if (sl != 0x300) {
    0x0005193e bne.w 0x4deb6                                     |         goto label_88;
                                                                 |     }
                                                                 | label_624:
    0x00051942 ldr r5, [r7, 0x14]                                |     r5 = *((r7 + 0x14));
    0x00051944 strd r4, r6, [sp, 0x5c]                           |     __asm ("strd r4, r6, [sp, 0x5c]");
    0x00051948 mov r6, r0                                        |     r6 = r0;
    0x0005194a subs r5, 1                                        |     r5--;
    0x0005194c cmp r5, 0                                         |     
                                                                 |     if (r5 <= 0) {
    0x0005194e ble 0x51a1e                                       |         goto label_625;
                                                                 |     }
    0x00051950 ldr.w sb, [sp, 0x48]                              |     sb = *(arg_48h);
    0x00051954 lsl.w r8, r5, 3                                   |     r8 = r5 << 3;
    0x00051958 str r6, [sp, 0x2c]                                |     *(arg_2ch) = r6;
    0x0005195a str.w fp, [sp, 0x34]                              |     __asm ("str.w fp, [arg_34h]");
    0x0005195e b 0x519d4                                         |     
                                                                 |     while (r1 != 0) {
    0x0005198c add.w r1, r7, r7, lsl 1                           |         r1 = r7 + (r7 << 1);
    0x00051990 add.w r1, r2, r1, lsl 4                           |         r1 = r2 + (r1 << 4);
    0x00051994 ldr r2, [r1, 0x18]                                |         r2 = *((r1 + 0x18));
                                                                 |         if (r2 != 0) {
    0x00051996 cbz r2, 0x519c6                                   |             
    0x00051998 ldr r2, [r1, 0x20]                                |             r2 = *((r1 + 0x20));
    0x0005199a ldr.w fp, [r3, 0x20]                              |             fp = *((r3 + 0x20));
    0x0005199e ldr.w sl, [r3, 0x14]                              |             sl = *((r3 + 0x14));
    0x000519a2 ldr r3, [r6, 0x34]                                |             r3 = *((r6 + 0x34));
                                                                 |             if (r2 != 0) {
    0x000519a4 cbz r2, 0x519b4                                   |                 
    0x000519a6 ldr r1, [r1, 0x14]                                |                 r1 = *((r1 + 0x14));
    0x000519a8 ldr.w r0, [sb, 8]                                 |                 r0 = *((sb + 8));
    0x000519ac str r3, [sp, 0x28]                                |                 *(arg_28h) = r3;
    0x000519ae bl 0xbf78                                         |                 fcn_0000bf78 (r0, r1, r2, r3, r4, r5);
    0x000519b2 ldr r3, [sp, 0x28]                                |                 r3 = *(arg_28h);
                                                                 |             }
    0x000519b4 mov r2, r3                                        |             r2 = r3;
    0x000519b6 mov r1, fp                                        |             r1 = fp;
    0x000519b8 mov r0, sl                                        |             r0 = sl;
    0x000519ba movs r3, 0                                        |             r3 = 0;
    0x000519bc bl 0x30258                                        |             r0 = fcn_00030258 (r0, r1, r2, r3, r4, r5, r6);
    0x000519c0 cmp r0, 0                                         |             
    0x000519c2 it gt                                             |             
                                                                 |             if (r0 > 0) {
    0x000519c4 movgt r4, r7                                      |                 r4 = r7;
                                                                 |                 goto label_626;
                                                                 |             }
                                                                 |         }
                                                                 | label_626:
    0x000519c6 ldr r3, [r6, 0x28]                                |         r3 = *((r6 + 0x28));
    0x000519c8 sub.w r8, r8, 8                                   |         r8 -= 8;
    0x000519cc str.w r4, [r3, r5, lsl 2]                         |         __asm ("str.w r4, [r3, r5, lsl 2]");
    0x000519d0 subs r5, 1                                        |         r5--;
                                                                 |         if (r5 == 1) {
    0x000519d2 beq 0x51a18                                       |             goto label_627;
                                                                 |         }
                                                                 | label_89:
    0x000519d4 ldr.w r6, [sb, 0x40]                              |         r6 = *((sb + 0x40));
    0x000519d8 ldr r4, [r6, 0x14]                                |         r4 = *((r6 + 0x14));
    0x000519da add.w r4, r4, r4, lsr 31                          |         r4 += (r4 >> 31);
    0x000519dc strb r4, [r2, 0x13]                               |         *((r2 + 0x13)) = r4;
    0x000519de asrs r4, r4, 1                                    |         r4 >>= 1;
    0x000519e0 cmp r4, r5                                        |         
    0x000519e2 iteet gt                                          |         
                                                                 |         if (r4 <= r5) {
    0x000519e4 ldrgt r3, [r6, 0x28]                              |             r3 = *((r6 + 0x28));
                                                                 |         }
                                                                 |         if (r4 > r5) {
    0x000519e6 suble r4, r5, r4                                  |             r4 = r5 - r4;
                                                                 |         }
                                                                 |         if (r4 > r5) {
    0x000519e8 lslle r4, r4, 1                                   |             r4 <<= 1;
                                                                 |         }
                                                                 |         if (r4 <= r5) {
    0x000519ea ldrgt r4, [r3, r8]                                |             r4 = *((r3 + r8));
                                                                 |         }
    0x000519ee itte gt                                           |         
                                                                 |         if (r4 <= r5) {
    0x000519f0 addgt r2, r3, r8                                  |             r2 = r3 + r8;
                                                                 |         }
                                                                 |         if (r4 > r5) {
    0x000519f4 ldrle r7, [r2, 4]                                 |             r7 = *((r2 + 4));
                                                                 |         }
                                                                 |         if (r4 <= r5) {
    0x000519f6 adds r7, r4, 1                                    |             r7 = r4 + 1;
                                                                 |         }
    0x000519f8 ldr r2, [r6, 0x24]                                |         r2 = *((r6 + 0x24));
    0x000519fa add.w r3, r4, r4, lsl 1                           |         r3 = r4 + (r4 << 1);
    0x000519fe add.w r3, r2, r3, lsl 4                           |         r3 = r2 + (r3 << 4);
    0x00051a02 ldr r1, [r3, 0x18]                                |         r1 = *((r3 + 0x18));
    0x00051a04 cmp r1, 0                                         |         
    0x00051a06 bne 0x5198c                                       |         
                                                                 |     }
    0x00051a08 ldr r3, [r6, 0x28]                                |     r3 = *((r6 + 0x28));
    0x00051a0a mov r4, r7                                        |     r4 = r7;
    0x00051a0c sub.w r8, r8, 8                                   |     r8 -= 8;
    0x00051a10 str.w r4, [r3, r5, lsl 2]                         |     __asm ("str.w r4, [r3, r5, lsl 2]");
    0x00051a14 subs r5, 1                                        |     r5--;
                                                                 |     if (r5 != 1) {
    0x00051a16 bne 0x519d4                                       |         goto label_89;
                                                                 |     }
                                                                 | label_627:
    0x00051a18 ldr r6, [sp, 0x2c]                                |     r6 = *(arg_2ch);
    0x00051a1a ldr.w fp, [sp, 0x34]                              |     fp = *(arg_34h);
    0x00051a1c add sp, 0xd0                                      |     
                                                                 | label_625:
    0x00051a1e ldr r3, [sp, 0x4c]                                |     r3 = *(arg_4ch);
    0x00051a20 ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x00051a22 cmp r3, 0x10                                      |     
                                                                 |     if (r3 <= 0x10) {
    0x00051a24 ble.w 0x51b80                                     |         goto label_628;
                                                                 |     }
    0x00051a28 ldr r3, [sp, 0x50]                                |     r3 = *(arg_50h);
    0x00051a2a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00051a2c beq 0x51b0a                                       |         goto label_629;
                                                                 |     }
                                                                 | label_93:
    0x00051a2e ldr.w r8, [sp, 0x54]                              |     r8 = *(arg_54h);
    0x00051a32 movs r3, 0                                        |     r3 = 0;
    0x00051a34 ldr r5, [sp, 0x3c]                                |     r5 = *(arg_3ch);
    0x00051a36 mov r0, fp                                        |     r0 = fp;
    0x00051a38 ldrd r6, r7, [sp, 0xa8]                           |     __asm ("ldrd r6, r7, [arg_a8h]");
    0x00051a3c add r4, sp, 0x12c                                 |     r4 += arg_12ch;
    0x00051a3e ldr r1, [sp, 0x50]                                |     r1 = *(arg_50h);
    0x00051a40 mov r2, r8                                        |     r2 = r8;
    0x00051a42 str r3, [r5]                                      |     *(r5) = r3;
    0x00051a44 strd r6, r7, [sp]                                 |     __asm ("strd r6, r7, [sp]");
    0x00051a48 bl 0xd454                                         |     fcn_0000d454 (r0, r1, r2, r3);
    0x00051a4c ldrd r2, r3, [sp, 0x5c]                           |     __asm ("ldrd r2, r3, [arg_5ch]");
    0x00051a50 mov r0, r4                                        |     r0 = r4;
    0x00051a52 bl 0x9cd4                                         |     fcn_00009cd4 (r0, r1, r2);
    0x00051a56 mov r1, r4                                        |     r1 = r4;
    0x00051a58 mov r2, r0                                        |     r2 = r0;
    0x00051a5a mov r0, r8                                        |     r0 = r8;
    0x00051a5c bl 0x89e0                                         |     fcn_000089e0 (r0, r1, r2);
    0x00051a60 ldr r3, [r5]                                      |     r3 = *(r5);
    0x00051a62 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00051a64 bne 0x51ae0                                       |         goto label_630;
                                                                 |     }
    0x00051a66 ldrd sb, r6, [sp, 0x48]                           |     __asm ("ldrd sb, r6, [arg_48h]");
    0x00051a6a mov r7, r8                                        |     r7 = r8;
    0x00051a6c mov r8, r5                                        |     r8 = r5;
                                                                 |     do {
    0x00051a6e ldr r3, [r6, 0x28]                                |         r3 = *((r6 + 0x28));
    0x00051a70 mov r0, r4                                        |         r0 = r4;
    0x00051a72 ldr r5, [r6, 0x24]                                |         r5 = *((r6 + 0x24));
    0x00051a74 ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x00051a76 add.w r3, r3, r3, lsl 1                           |         r3 += (r3 << 1);
    0x00051a7a add.w r5, r5, r3, lsl 4                           |         r5 += (r3 << 4);
    0x00051a7e ldr r2, [r5, 0x14]                                |         r2 = *((r5 + 0x14));
    0x00051a80 asrs r3, r2, 0x1f                                 |         r3 = r2 >> 0x1f;
    0x00051a82 bl 0x9cd4                                         |         fcn_00009cd4 (r0, r1, r2);
    0x00051a86 mov r1, r4                                        |         r1 = r4;
    0x00051a88 mov r2, r0                                        |         r2 = r0;
    0x00051a8a mov r0, r7                                        |         r0 = r7;
    0x00051a8c bl 0x89e0                                         |         fcn_000089e0 (r0, r1, r2);
    0x00051a90 ldr r2, [r5, 0x14]                                |         r2 = *((r5 + 0x14));
    0x00051a92 mov r0, r7                                        |         r0 = r7;
    0x00051a94 ldr r1, [r5, 0x20]                                |         r1 = *((r5 + 0x20));
    0x00051a96 bl 0x89e0                                         |         fcn_000089e0 (r0, r1, r2);
    0x00051a9a mov r2, r8                                        |         r2 = r8;
    0x00051a9c mov r1, sb                                        |         r1 = sb;
    0x00051a9e mov r0, fp                                        |         r0 = fp;
    0x00051aa0 bl 0x30a88                                        |         fcn_00030a88 (r0, r1, r2);
    0x00051aa4 ldr.w r3, [r8]                                    |         r3 = *(r8);
    0x00051aa8 orrs r3, r0                                       |         r3 |= r0;
    0x00051aaa beq 0x51a6e                                       |         
                                                                 |     } while (r3 == r0);
    0x00051aac mov r5, r0                                        |     r5 = r0;
    0x00051aae ldr r1, [sp, 0x54]                                |     r1 = *(arg_54h);
    0x00051ab0 add r2, sp, 0xa8                                  |     r2 += arg_a8h;
    0x00051ab2 mov r0, fp                                        |     r0 = fp;
    0x00051ab4 bl 0xe308                                         |     r0 = fcn_0000e308 (r0, r1, r2);
    0x00051ab8 mov r6, r0                                        |     r6 = r0;
                                                                 |     if (r5 != 0) {
    0x00051aba cbz r5, 0x51aec                                   |         
    0x00051abc ldr r2, [sp, 0x58]                                |         r2 = *(arg_58h);
    0x00051abe mov sl, fp                                        |         sl = fp;
    0x00051ac0 ldr r3, [sp, 0x4c]                                |         r3 = *(arg_4ch);
    0x00051ac2 mov fp, r5                                        |         
    0x00051ac4 ldr r7, [sp, 0x50]                                |         r7 = *(arg_50h);
    0x00051ac6 adds r2, 1                                        |         r2++;
    0x00051ac8 ldr r3, [r3, 0x18]                                |         r3 = *((r3 + 0x18));
    0x00051aca b.w 0x4de58                                       |         goto label_90;
                                                                 | label_349:
    0x00051ace ldrd r2, r3, [r8, 8]                              |         __asm ("ldrd r2, r3, [r8, 8]");
    0x00051ad2 mov sl, fp                                        |         sl = fp;
    0x00051ad4 mov.w fp, 7                                       |         
    0x00051ad8 strd r2, r3, [r7, 8]                              |         __asm ("strd r2, r3, [r7, 8]");
    0x00051adc b.w 0x4de50                                       |         goto label_91;
                                                                 | label_630:
    0x00051ae0 ldr r1, [sp, 0x54]                                |         r1 = *(arg_54h);
    0x00051ae2 add r2, sp, 0xa8                                  |         r2 += arg_a8h;
    0x00051ae4 mov r0, fp                                        |         r0 = fp;
    0x00051ae6 bl 0xe308                                         |         r0 = fcn_0000e308 (r0, r1, r2);
    0x00051aea mov r6, r0                                        |         r6 = r0;
                                                                 |     }
    0x00051aec ldr r3, [sp, 0x58]                                |     r3 = *(arg_58h);
    0x00051aee adds r3, 1                                        |     r3++;
    0x00051af0 str r3, [sp, 0x58]                                |     *(arg_58h) = r3;
    0x00051af2 ldr r3, [sp, 0x4c]                                |     r3 = *(arg_4ch);
    0x00051af4 ldr r2, [r3, 0x18]                                |     r2 = *((r3 + 0x18));
    0x00051af6 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00051af8 beq.w 0x4de8e                                     |         goto label_92;
                                                                 |     }
    0x00051afc mov sl, fp                                        |     sl = fp;
    0x00051afe mov r3, r2                                        |     r3 = r2;
    0x00051b00 ldr r7, [sp, 0x50]                                |     r7 = *(arg_50h);
    0x00051b02 mov fp, r6                                        |     
    0x00051b04 ldr r2, [sp, 0x58]                                |     r2 = *(arg_58h);
    0x00051b06 b.w 0x4de58                                       |     goto label_90;
                                                                 | label_629:
    0x00051b0a ldr.w r4, [fp]                                    |     r4 = *(fp);
    0x00051b0e ldr r5, [r4, 4]                                   |     r5 = *((r4 + 4));
    0x00051b10 mov r0, r5                                        |     r0 = r5;
    0x00051b12 bl 0xd300                                         |     r0 = fcn_0000d300 (r0, r1, r2, r3, r4);
    0x00051b16 mov r7, r0                                        |     r7 = r0;
                                                                 |     if (r0 != 0) {
    0x00051b18 cbz r0, 0x51b54                                   |         
    0x00051b1a ldr r6, [sp, 0x50]                                |         r6 = *(arg_50h);
    0x00051b1c mov r2, r5                                        |         r2 = r5;
    0x00051b1e mov r1, r6                                        |         r1 = r6;
    0x00051b20 blx 0x5fcc                                        |         fcn_00005fcc ();
    0x00051b24 ldr r3, [sp, 0x3c]                                |         r3 = *(arg_3ch);
    0x00051b26 mov r0, r4                                        |         r0 = r4;
    0x00051b28 mov r2, r7                                        |         r2 = r7;
    0x00051b2a mov r1, r6                                        |         r1 = r6;
    0x00051b2c str r3, [sp]                                      |         *(sp) = r3;
    0x00051b2e movw r3, 0x101e                                   |         r3 = 0x101e;
    0x00051b32 ldr r5, [r4, 0x18]                                |         r5 = *((r4 + 0x18));
    0x00051b34 blx r5                                            |         r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
                                                                 |         if (r0 == 0) {
    0x00051b36 cbnz r0, 0x51b3c                                  |             
    0x00051b38 str r7, [sp, 0x50]                                |             *(arg_50h) = r7;
    0x00051b3a b 0x51a2e                                         |             goto label_93;
                                                                 |         }
    0x00051b3c mov sl, fp                                        |         sl = fp;
    0x00051b3e mov fp, r0                                        |         
    0x00051b40 mov r0, r7                                        |         r0 = r7;
    0x00051b42 blx 0x6050                                        |         fcn_00006050 ();
    0x00051b46 ldr r2, [sp, 0x58]                                |         r2 = *(arg_58h);
    0x00051b48 ldr r3, [sp, 0x4c]                                |         r3 = *(arg_4ch);
    0x00051b4a ldr r7, [sp, 0x50]                                |         r7 = *(arg_50h);
    0x00051b4c adds r2, 1                                        |         r2++;
    0x00051b4e ldr r3, [r3, 0x18]                                |         r3 = *((r3 + 0x18));
    0x00051b50 b.w 0x4de58                                       |         goto label_90;
                                                                 |     }
    0x00051b54 ldr r2, [sp, 0x58]                                |     r2 = *(arg_58h);
    0x00051b56 mov sl, fp                                        |     sl = fp;
    0x00051b58 ldr r3, [sp, 0x4c]                                |     r3 = *(arg_4ch);
    0x00051b5a mov.w fp, 7                                       |     
    0x00051b5e adds r2, 1                                        |     r2++;
    0x00051b60 ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x00051b62 b.w 0x4de58                                       |     goto label_90;
                                                                 | label_577:
    0x00051b66 ldrb r1, [r2, 2]                                  |     r1 = *((r2 + 2));
    0x00051b68 add.w r3, r4, r3, lsl 1                           |     r3 = r4 + (r3 << 1);
    0x00051b6c ldrh.w r3, [r3, 0x56]                             |     r3 = *((r3 + 0x56));
    0x00051b70 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00051b72 bne.w 0x50e10                                     |         goto label_94;
                                                                 |     }
    0x00051b76 adds r5, r0, r5                                   |     r5 = r0 + r5;
    0x00051b78 adc r7, r7, 0                                     |     __asm ("adc r7, r7, 0");
    0x00051b7c b.w 0x50e10                                       |     goto label_94;
                                                                 | label_628:
    0x00051b80 mov sl, fp                                        |     sl = fp;
    0x00051b82 mov fp, r6                                        |     
    0x00051b84 b.w 0x4de54                                       |     goto label_95;
                                                                 | label_578:
    0x00051b88 ldrb r3, [r2, 5]                                  |     r3 = *((r2 + 5));
    0x00051b8a mov r0, r4                                        |     r0 = r4;
    0x00051b8c add r3, r1                                        |     r3 += r1;
    0x00051b8e ldr r1, [r3, 8]                                   |     r1 = *((r3 + 8));
    0x00051b90 rev r1, r1                                        |     r1 = SWAP32 (r1);
    0x00051b92 bl 0x2e704                                        |     fcn_0002e704 (r0, r1, r2, r3);
    0x00051b96 b.w 0x50e3a                                       |     goto label_96;
                                                                 | label_562:
    0x00051b9a ldr r2, [r4, 4]                                   |     r2 = *((r4 + 4));
    0x00051b9c cmp r2, 0x1f                                      |     
                                                                 |     if (r2 > 0x1f) {
    0x00051b9e bgt.w 0x50a76                                     |         goto label_97;
                                                                 |     }
    0x00051ba2 lsr.w r2, r6, r2                                  |     r2 = r6 >> r2;
    0x00051ba6 lsls r0, r2, 0x1f                                 |     r0 = r2 << 0x1f;
                                                                 |     if (r0 < r2) {
    0x00051ba8 bmi.w 0x50a68                                     |         goto label_98;
                                                                 |     }
    0x00051bac b.w 0x50a76                                       |     goto label_97;
                                                                 | label_341:
    0x00051bb0 ldr r3, [sp, 0x48]                                |     r3 = *(arg_48h);
    0x00051bb2 ldr r4, [r3]                                      |     r4 = *(r3);
    0x00051bb4 mov r0, r4                                        |     r0 = r4;
    0x00051bb6 bl 0x2e878                                        |     r0 = fcn_0002e878 (r0);
    0x00051bba mov r6, r0                                        |     r6 = r0;
    0x00051bbc cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00051bbe bne.w 0x5240e                                     |         goto label_631;
                                                                 |     }
    0x00051bc2 ldrb.w r3, [r4, 0x51]                             |     r3 = *((r4 + 0x51));
    0x00051bc6 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00051bc8 bne.w 0x531b2                                     |         goto label_632;
                                                                 |     }
    0x00051bcc ldr r2, [sp, 0x48]                                |     r2 = *(arg_48h);
    0x00051bce strh r3, [r2, 0x1a]                               |     *((r2 + 0x1a)) = r3;
    0x00051bd0 str r3, [r2, 0x44]                                |     *((r2 + 0x44)) = r3;
    0x00051bd2 movs r3, 1                                        |     r3 = 1;
    0x00051bd4 strb r3, [r2, 0x19]                               |     *((r2 + 0x19)) = r3;
    0x00051bd6 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00051bd8 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00051bda str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00051bdc b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_544:
    0x00051be0 ldr r0, [r4, 8]                                   |     r0 = *((r4 + 8));
    0x00051be2 add.w ip, sp, 0xd8                                |     
    0x00051be6 ldr r1, [r4, 0xc]                                 |     r1 = *((r4 + 0xc));
    0x00051be8 mov r3, ip                                        |     r3 = ip;
    0x00051bea stm r3!, {r0, r1}                                 |     *(r3!) = r0;
                                                                 |     *((r3! + 4)) = r1;
    0x00051bec mov r3, r0                                        |     r3 = r0;
    0x00051bee movs r0, 8                                        |     r0 = 8;
    0x00051bf0 b.w 0x50720                                       |     goto label_99;
                                                                 | label_605:
    0x00051bf4 vmov r0, r1, d11                                  |     __asm ("vmov r0, r1, d11");
    0x00051bf8 bl 0x5e5dc                                        |     r0 = fcn_0005e5dc (r0, r1);
    0x00051bfc orrs.w r3, r1, r0                                 |     r3 = r1 | r0;
    0x00051c00 mov r6, r0                                        |     r6 = r0;
    0x00051c02 mov r5, r1                                        |     r5 = r1;
                                                                 |     if (r3 != r1) {
    0x00051c04 bne.w 0x540f8                                     |         goto label_633;
                                                                 |     }
                                                                 | label_290:
    0x00051c08 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00051c0a add.w r8, r3, 1                                   |     r8 = r3 + 1;
                                                                 | label_617:
    0x00051c0e ldr r0, [sp, 0x38]                                |     r0 = *(arg_38h);
    0x00051c10 str.w r8, [sp, 0x1c]                              |     __asm ("str.w r8, [arg_1ch]");
    0x00051c14 bl 0xfdb8                                         |     fcn_0000fdb8 (r0);
    0x00051c18 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_497:
    0x00051c1c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00051c1e bne.w 0x53d98                                     |         goto label_634;
                                                                 |     }
    0x00051c22 ldr.w r3, [fp, 0x94]                              |     r3 = *(arg_94h);
    0x00051c26 cmp r3, 0                                         |     
                                                                 |     if (r3 > 0) {
    0x00051c28 bgt.w 0x528ae                                     |         goto label_635;
                                                                 |     }
                                                                 | label_266:
    0x00051c2c ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x00051c2e ldr r1, [r2]                                      |     r1 = *(r2);
    0x00051c30 ldr.w r0, [r1, 0x1f8]                             |     r0 = *((r1 + 0x1f8));
    0x00051c34 ldr.w r3, [r1, 0x1f0]                             |     r3 = *((r1 + 0x1f0));
    0x00051c38 ldr.w r4, [r1, 0x1fc]                             |     r4 = *((r1 + 0x1fc));
    0x00051c3c adds r3, r3, r0                                   |     r3 += r0;
    0x00051c3e ldr.w r0, [r1, 0x1f4]                             |     r0 = *((r1 + 0x1f4));
    0x00051c42 adc.w r0, r0, r4                                  |     __asm ("adc.w r0, r0, r4");
    0x00051c46 cmp r3, 1                                         |     
    0x00051c48 sbcs r0, r0, 0                                    |     __asm ("sbcs r0, r0, 0");
                                                                 |     if (r3 >= 1) {
    0x00051c4c bge.w 0x53d26                                     |         goto label_636;
                                                                 |     }
    0x00051c50 uxtb r5, r5                                       |     r5 = (int8_t) r5;
    0x00051c52 ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x00051c54 strb.w r5, [fp, 0x3e]                             |     *(arg_3eh) = r5;
    0x00051c58 bl 0x335d0                                        |     r0 = fcn_000335d0 (r0);
    0x00051c5c cmp r0, 5                                         |     
    0x00051c5e mov r4, r0                                        |     r4 = r0;
                                                                 |     if (r0 == 5) {
    0x00051c60 beq.w 0x53a54                                     |         goto label_637;
                                                                 |     }
                                                                 | label_267:
    0x00051c64 mov r0, fp                                        |     r0 = fp;
    0x00051c66 bl 0xfc88                                         |     fcn_0000fc88 (r0);
    0x00051c6a ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00051c6c ldr r3, [r3, 0x50]                                |     r3 = *((r3 + 0x50));
    0x00051c6e cmp r3, 0                                         |     
    0x00051c70 ite eq                                            |     
                                                                 |     if (r3 != 0) {
    0x00051c72 moveq r4, 0x65                                    |         r4 = 0x65;
                                                                 |     }
                                                                 |     if (r3 == 0) {
    0x00051c74 movne r4, 1                                       |         r4 = 1;
                                                                 |     }
    0x00051c76 b.w 0x4d46e                                       |     goto label_0;
                                                                 | label_356:
    0x00051c7a ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00051c7c add.w r0, r0, r0, lsl 2                           |     r0 += (r0 << 2);
    0x00051c80 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x00051c82 str r3, [sp, 0x40]                                |     *(arg_40h) = r3;
    0x00051c84 add.w r3, r3, r0, lsl 2                           |     r3 += (r0 << 2);
    0x00051c88 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00051c8a str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00051c8c b.w 0x4e038                                       |     goto label_100;
                                                                 | label_326:
    0x00051c90 ldr r0, [r4, 4]                                   |     r0 = *((r4 + 4));
    0x00051c92 mov r1, r7                                        |     r1 = r7;
    0x00051c94 bl 0x30bcc                                        |     r0 = fcn_00030bcc (r0, r1);
    0x00051c98 mov r6, r0                                        |     r6 = r0;
    0x00051c9a cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00051c9c bne.w 0x4da28                                     |         goto label_101;
                                                                 |     }
    0x00051ca0 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00051ca2 ldr.w r8, [r4, 4]                                 |     r8 = *((r4 + 4));
    0x00051ca6 ldr.w sb, [r3, 0x10]                              |     sb = *((r3 + 0x10));
    0x00051caa cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x00051cae beq.w 0x52b38                                     |         goto label_638;
                                                                 |     }
    0x00051cb2 ldrb r5, [r3, 3]                                  |     r5 = *((r3 + 3));
    0x00051cb4 mov r0, r8                                        |     r0 = r8;
    0x00051cb6 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x00051cb8 bl 0xd140                                         |     fcn_0000d140 (r0);
    0x00051cbc orr r5, r5, 2                                     |     r5 |= 2;
    0x00051cc0 mov r0, r8                                        |     r0 = r8;
    0x00051cc2 mov r2, r5                                        |     r2 = r5;
    0x00051cc4 mov r1, r7                                        |     r1 = r7;
    0x00051cc6 bl 0x3496c                                        |     fcn_0003496c (r0, r1, r2, r3);
    0x00051cca ldrb.w r3, [r8, 9]                                |     r3 = *((r8 + 9));
    0x00051cce mov r6, r0                                        |     r6 = r0;
                                                                 |     if (r3 == 0) {
    0x00051cd0 cbz r3, 0x51cde                                   |         goto label_639;
                                                                 |     }
    0x00051cd2 ldr.w r5, [r8, 0xc]                               |     r5 = *((r8 + 0xc));
    0x00051cd6 subs r5, 1                                        |     r5--;
    0x00051cd8 str.w r5, [r8, 0xc]                               |     __asm ("str.w r5, [r8, 0xc]");
    0x00051cdc cbz r5, 0x51cf0                                   |     
                                                                 |     while (1) {
                                                                 | label_639:
    0x00051cde cmp r6, 0                                         |         
                                                                 |         if (r6 == 0) {
    0x00051ce0 beq.w 0x52de4                                     |             goto label_640;
                                                                 |         }
                                                                 | label_183:
    0x00051ce4 ldrb r3, [r4, 0x1c]                               |         r3 = *((r4 + 0x1c));
    0x00051ce6 bfc r3, 2, 1                                      |         value_50 = BIT_MASK (1, );
                                                                 |         value_50 = ~value_50;
                                                                 |         r3 &= value_50;
    0x00051cea strb r3, [r4, 0x1c]                               |         *((r4 + 0x1c)) = r3;
    0x00051cec b.w 0x4da28                                       |         goto label_101;
    0x00051cf0 ldr.w r3, [r8, 4]                                 |         r3 = *((r8 + 4));
    0x00051cf4 ldr r0, [r3, 0x38]                                |         r0 = *((r3 + 0x38));
    0x00051cf6 blx 0x63dc                                        |         fcn_000063dc ();
    0x00051cfa strb.w r5, [r8, 0xa]                              |         *((r8 + 0xa)) = r5;
    0x00051cfe b 0x51cde                                         |         
                                                                 |     }
                                                                 | label_348:
    0x00051d00 cmp r2, 0x10                                      |     
    0x00051d02 mov sl, fp                                        |     sl = fp;
                                                                 |     if (r2 <= 0x10) {
    0x00051d04 ble.w 0x5363e                                     |         goto label_641;
                                                                 |     }
    0x00051d08 ldr r4, [sp, 0x4c]                                |     r4 = *(arg_4ch);
    0x00051d0a ldr r3, [sp, 0x58]                                |     r3 = *(arg_58h);
    0x00051d0c ldr r1, [sp, 0x50]                                |     r1 = *(arg_50h);
    0x00051d0e vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00051d12 str r3, [r4, 0x18]                                |     *((r4 + 0x18)) = r3;
    0x00051d14 mov r2, r3                                        |     r2 = r3;
    0x00051d16 ldr r3, [r4, 0x2c]                                |     r3 = *((r4 + 0x2c));
    0x00051d18 str r1, [r4, 0x2c]                                |     *((r4 + 0x2c)) = r1;
    0x00051d1a ldrd r0, r1, [sp, 0xa8]                           |     __asm ("ldrd r0, r1, [arg_a8h]");
    0x00051d1e str r3, [sp, 0x50]                                |     *(arg_50h) = r3;
    0x00051d20 vstr d16, [r4, 8]                                 |     __asm ("vstr d16, [r4, 8]");
    0x00051d24 strd r0, r1, [r4]                                 |     __asm ("strd r0, r1, [r4]");
    0x00051d28 vstr d16, [sp, 0xa8]                              |     __asm ("vstr d16, [sp, 0xa8]");
    0x00051d2c b.w 0x4de84                                       |     goto label_102;
                                                                 | label_359:
    0x00051d30 ldr.w fp, [sp, 0x28]                              |     fp = *(arg_28h);
    0x00051d34 strd r0, r0, [sp, 0x7c]                           |     __asm ("strd r0, r0, [sp, 0x7c]");
    0x00051d38 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_318:
    0x00051d3c ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00051d3e mov sb, r7                                        |     sb = r7;
    0x00051d40 movs r5, 0                                        |     r5 = 0;
    0x00051d42 ldrb.w r8, [r3]                                   |     r8 = *(r3);
    0x00051d46 b.w 0x50f1c                                       |     goto label_103;
                                                                 | label_340:
    0x00051d4a ldrb.w r3, [r5, 0x51]                             |     r3 = *((r5 + 0x51));
    0x00051d4e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00051d50 beq.w 0x53528                                     |         goto label_642;
                                                                 |     }
    0x00051d54 cmp r3, 2                                         |     
                                                                 |     if (r3 < 2) {
    0x00051d56 bls 0x51d6e                                       |         goto label_643;
                                                                 |     }
    0x00051d58 cmp r3, 4                                         |     
    0x00051d5a it eq                                             |     
                                                                 |     if (r3 != 4) {
    0x00051d5c ldreq r6, [r5, 0x4c]                              |         r6 = *((r5 + 0x4c));
                                                                 |     }
                                                                 |     if (r3 != 4) {
    0x00051d5e beq 0x51d68                                       |         
    0x00051d60 mov r0, r5                                        |         r0 = r5;
    0x00051d62 bl 0x2eee0                                        |         r0 = fcn_0002eee0 (r0);
    0x00051d66 mov r6, r0                                        |         r6 = r0;
                                                                 |     }
    0x00051d68 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x00051d6a bne.w 0x4dda4                                     |         goto label_104;
                                                                 |     }
                                                                 | label_643:
    0x00051d6e movs r1, 0                                        |     r1 = 0;
    0x00051d70 mov r3, r7                                        |     r3 = r7;
    0x00051d72 mov r2, r4                                        |     r2 = r4;
    0x00051d74 mov r0, r5                                        |     r0 = r5;
    0x00051d76 str r1, [sp]                                      |     *(sp) = r1;
    0x00051d78 bl 0x2d6d4                                        |     r0 = fcn_0002d6d4 (r0, r1, r2, r3, r4);
    0x00051d7c mov r6, r0                                        |     r6 = r0;
    0x00051d7e b.w 0x4dda4                                       |     goto label_104;
                                                                 | label_342:
    0x00051d82 ldr r3, [sp, 0x4c]                                |     r3 = *(arg_4ch);
    0x00051d84 ldr r0, [sp, 0x48]                                |     r0 = *(arg_48h);
    0x00051d86 ldr r4, [r3, 0x30]                                |     r4 = *((r3 + 0x30));
    0x00051d88 bl 0x30890                                        |     r0 = fcn_00030890 (r0);
    0x00051d8c mov r6, r0                                        |     r6 = r0;
    0x00051d8e clz r4, r4                                        |     r4 &= r4;
    0x00051d92 lsrs r4, r4, 5                                    |     r4 >>= 5;
                                                                 | label_148:
    0x00051d94 ldr r3, [sp, 0x48]                                |     r3 = *(arg_48h);
    0x00051d96 strb r4, [r3, 0x19]                               |     *((r3 + 0x19)) = r4;
    0x00051d98 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00051d9a beq.w 0x4dbae                                     |         goto label_20;
                                                                 |     }
    0x00051d9e b.w 0x4d734                                       |     goto label_68;
                                                                 | label_530:
    0x00051da2 ldrh r3, [r1, 0x28]                               |     r3 = *((r1 + 0x28));
    0x00051da4 subs r3, 1                                        |     r3--;
    0x00051da6 uxth r3, r3                                       |     r3 = (int16_t) r3;
    0x00051da8 strh r3, [r1, 0x28]                               |     *((r1 + 0x28)) = r3;
    0x00051daa cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00051dac beq.w 0x50480                                     |         goto label_105;
                                                                 |     }
    0x00051db0 b.w 0x50486                                       |     goto label_106;
                                                                 | label_591:
    0x00051db4 ldr.w r6, [pc, 0xbf4]                             |     r6 = *(0x000529ac);
    0x00051db8 mov r0, fp                                        |     r0 = fp;
    0x00051dba add r6, pc                                        |     r6 += pc;
    0x00051dbc subs r7, r3, r6                                   |     r7 = r3 - r6;
    0x00051dbe bic r7, r7, 0xc0000000                            |     r7 = BIT_MASK (r7, 0xc0000000);
    0x00051dc2 adds r7, 1                                        |     r7++;
    0x00051dc4 mov r1, r7                                        |     r1 = r7;
    0x00051dc6 bl 0xd3a0                                         |     r0 = fcn_0000d3a0 (r0, r1);
    0x00051dca mov r5, r0                                        |     r5 = r0;
                                                                 |     if (r0 != 0) {
    0x00051dcc cbz r0, 0x51dd6                                   |         
    0x00051dce mov r2, r7                                        |         r2 = r7;
    0x00051dd0 mov r1, r6                                        |         r1 = r6;
    0x00051dd2 blx 0x6214                                        |         fcn_00006214 ();
                                                                 |     }
    0x00051dd6 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00051dd8 str r5, [r3, 0x2c]                                |     *((r3 + 0x2c)) = r5;
    0x00051dda ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00051ddc ldr r5, [r3, 4]                                   |     r5 = *((r3 + 4));
    0x00051dde ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x00051de2 add.w r3, r3, r5, lsl 4                           |     r3 += (r5 << 4);
    0x00051de6 ldr r0, [r3, 0xc]                                 |     r0 = *((r3 + 0xc));
    0x00051de8 ldr r3, [r0]                                      |     r3 = *(r0);
    0x00051dea cmp r4, r3                                        |     
                                                                 |     if (r4 != r3) {
    0x00051dec beq 0x51e00                                       |         
    0x00051dee bl 0x1386c                                        |         fcn_0001386c (r0);
    0x00051df2 cmp r5, 1                                         |         
                                                                 |         if (r5 == 1) {
    0x00051df4 beq 0x51e00                                       |             goto label_644;
                                                                 |         }
    0x00051df6 ldr.w r3, [fp, 0x10]                              |         r3 = *(arg_10h);
    0x00051dfa ldr r0, [r3, 0x1c]                                |         r0 = *((r3 + 0x1c));
    0x00051dfc bl 0x1386c                                        |         fcn_0001386c (r0);
                                                                 |     }
                                                                 | label_644:
    0x00051e00 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00051e02 mov.w sb, 0x11                                    |     sb = 0x11;
    0x00051e06 ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x00051e08 adds r3, 1                                        |     r3++;
    0x00051e0a str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00051e0c ldrb.w r3, [r2, 0x58]                             |     r3 = *((r2 + 0x58));
    0x00051e10 orr r3, r3, 0x20                                  |     r3 |= 0x20;
    0x00051e14 strb.w r3, [r2, 0x58]                             |     *((r2 + 0x58)) = r3;
    0x00051e18 b.w 0x4d742                                       |     goto label_25;
                                                                 | label_368:
    0x00051e1c ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00051e1e ldrb r3, [r3, 3]                                  |     r3 = *((r3 + 3));
    0x00051e20 lsls r0, r3, 0x1a                                 |     r0 = r3 << 0x1a;
                                                                 |     if (r0 < r3) {
    0x00051e22 bmi.w 0x4e350                                     |         goto label_107;
                                                                 |     }
    0x00051e26 ldrh r3, [r4, 0x16]                               |     r3 = *((r4 + 0x16));
    0x00051e28 mov r6, r3                                        |     r6 = r3;
    0x00051e2a b.w 0x4e3e0                                       |     goto label_108;
                                                                 | label_366:
    0x00051e2e ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
    0x00051e30 ldr r2, [r5, 0x10]                                |     r2 = *((r5 + 0x10));
    0x00051e32 str r2, [r3]                                      |     *(r3) = r2;
    0x00051e34 ldr.w r3, [fp, 0x18]                              |     r3 = *(arg_18h);
    0x00051e38 orr r3, r3, 2                                     |     r3 |= 2;
    0x00051e3c str.w r3, [fp, 0x18]                              |     __asm ("str.w r3, [arg_18h]");
    0x00051e40 b.w 0x4e290                                       |     goto label_109;
                                                                 | label_361:
    0x00051e44 mov r0, r4                                        |     r0 = r4;
    0x00051e46 ldr r2, [sp, 0x70]                                |     r2 = *(arg_70h);
    0x00051e48 movs r1, 0x63                                     |     r1 = 0x63;
    0x00051e4a bl 0x25cf0                                        |     fcn_00025cf0 (r0, r1, r2);
    0x00051e4e ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x00051e50 lsls r0, r3, 0x1d                                 |     r0 = r3 << 0x1d;
                                                                 |     if (r0 < r3) {
    0x00051e52 bmi.w 0x4e17c                                     |         goto label_110;
                                                                 |     }
    0x00051e56 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00051e58 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00051e5a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00051e5c beq.w 0x53fec                                     |         goto label_645;
                                                                 |     }
    0x00051e60 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00051e62 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_509:
    0x00051e66 add r0, sp, 0xe0                                  |     r0 += arg_e0h;
    0x00051e68 blx 0x5f0c                                        |     fcn_00005f0c ();
    0x00051e6c ldr.w r2, [pc, 0xb40]                             |     r2 = *(0x000529b0);
    0x00051e70 mov r3, r0                                        |     r3 = r0;
    0x00051e72 ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x00051e74 mov r1, fp                                        |     r1 = fp;
    0x00051e76 add r2, pc                                        |     r2 += pc;
    0x00051e78 adds r0, 0x2c                                     |     r0 += 0x2c;
    0x00051e7a bl 0x1c9d0                                        |     fcn_0001c9d0 (r0, r1);
    0x00051e7e ldr r6, [r7, 0x40]                                |     r6 = *((r7 + 0x40));
    0x00051e80 b.w 0x501cc                                       |     goto label_111;
                                                                 | label_512:
    0x00051e84 add r0, sp, 0xe0                                  |     r0 += arg_e0h;
    0x00051e86 bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x00051e8a b.w 0x5021a                                       |     goto label_112;
                                                                 | label_612:
    0x00051e8e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00051e90 bne.w 0x52cce                                     |         goto label_646;
                                                                 |     }
    0x00051e94 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00051e96 adds r3, 1                                        |     r3++;
    0x00051e98 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00051e9a b.w 0x51622                                       |     goto label_113;
                                                                 | label_330:
    0x00051e9e bl 0xa29c                                         |     fcn_0000a29c (r0);
    0x00051ea2 cmp.w r8, 0x2d                                    |     
    0x00051ea6 vcmp.f64 d0, 0                                    |     __asm ("vcmp.f64 d0, 0");
                                                                 |     if (r8 == 0x2d) {
    0x00051eaa beq.w 0x52ce8                                     |         goto label_647;
                                                                 |     }
    0x00051eae vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
    0x00051eb2 ite ne                                            |     
                                                                 |     if (r8 == 0x2d) {
    0x00051eb4 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r8 != 0x2d) {
    0x00051eb6 moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 | label_176:
    0x00051eb8 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00051eba bne.w 0x4db3a                                     |         goto label_114;
                                                                 |     }
    0x00051ebe ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00051ec0 adds r3, 1                                        |     r3++;
    0x00051ec2 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00051ec4 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_424:
    0x00051ec8 ldr.w r3, [pc, 0xae8]                             |     
    0x00051ecc add r3, pc                                        |     r3 = 0xa4884;
    0x00051ece b.w 0x4f0f4                                       |     goto label_115;
                                                                 | label_335:
    0x00051ed2 mov r0, r4                                        |     r0 = r4;
    0x00051ed4 bl 0x173c0                                        |     r0 = fcn_000173c0 (r0);
    0x00051ed8 mov r6, r0                                        |     r6 = r0;
    0x00051eda cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00051edc beq.w 0x4dc64                                     |         goto label_116;
                                                                 |     }
    0x00051ee0 b.w 0x4f48c                                       |     goto label_27;
                                                                 | label_540:
    0x00051ee4 bic r2, r6, 0x3fc0                                |     r2 = BIT_MASK (r6, 0x3fc0);
    0x00051ee8 bic r2, r2, 0x3f                                  |     r2 = BIT_MASK (r2, 0x3f);
    0x00051eec cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00051eee beq.w 0x52e7a                                     |         goto label_648;
                                                                 |     }
    0x00051ef2 mov r2, r6                                        |     r2 = r6;
    0x00051ef4 mov r0, sb                                        |     r0 = sb;
    0x00051ef6 bl 0x9cd4                                         |     r0 = fcn_00009cd4 (r0, r1, r2);
    0x00051efa uxtb r5, r0                                       |     r5 = (int8_t) r0;
    0x00051efc b.w 0x506be                                       |     goto label_117;
                                                                 | label_491:
    0x00051f00 mov r4, r0                                        |     r4 = r0;
    0x00051f02 bl 0xff6c                                         |     fcn_0000ff6c (r0);
    0x00051f06 ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x00051f08 lsls r1, r3, 0x1a                                 |     r1 = r3 << 0x1a;
                                                                 |     if (r1 < r3) {
    0x00051f0a bmi.w 0x4ff74                                     |         goto label_118;
                                                                 |     }
    0x00051f0e b.w 0x4d4ec                                       |     goto label_6;
                                                                 | label_482:
    0x00051f12 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00051f14 ldr r0, [sp, 0x38]                                |     r0 = *(arg_38h);
    0x00051f16 adds r3, 1                                        |     r3++;
    0x00051f18 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00051f1a bl 0xfdb8                                         |     fcn_0000fdb8 (r0);
    0x00051f1e b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_443:
    0x00051f22 ldr.w r0, [sb, 0x24]                              |     r0 = *((sb + 0x24));
    0x00051f26 movs r2, 1                                        |     r2 = 1;
    0x00051f28 ldr r4, [sp, 0x24]                                |     r4 = *((sp + 0x24));
    0x00051f2a ldr r5, [r0]                                      |     r5 = *(r0);
    0x00051f2c ldrb.w r3, [r4, 0x58]                             |     r3 = *((r4 + 0x58));
    0x00051f30 ldr.w r8, [r5]                                    |     r8 = *(r5);
    0x00051f34 bfi r3, r2, 2, 2                                  |     value_51 = BIT_MASK (2, 2);
                                                                 |     value_52 = r2 & value_51;
                                                                 |     value_51 = ~value_51;
                                                                 |     r3 &= value_51;
                                                                 |     r3 |= value_52;
    0x00051f38 strb.w r3, [r4, 0x58]                             |     *((r4 + 0x58)) = r3;
    0x00051f3c ldr.w r3, [r8, 0x24]                              |     r3 = *((r8 + 0x24));
    0x00051f40 blx r3                                            |     uint32_t (*r3)(uint32_t) (r3);
    0x00051f42 ldrb.w r3, [r4, 0x58]                             |     r3 = *((r4 + 0x58));
    0x00051f46 mov r6, r0                                        |     r6 = r0;
    0x00051f48 bfi r3, r7, 2, 2                                  |     value_53 = BIT_MASK (2, 2);
                                                                 |     value_54 = r7 & value_53;
                                                                 |     value_53 = ~value_53;
                                                                 |     r3 &= value_53;
                                                                 |     r3 |= value_54;
    0x00051f4c strb.w r3, [r4, 0x58]                             |     *((r4 + 0x58)) = r3;
    0x00051f50 mov r3, r4                                        |     r3 = r4;
    0x00051f52 ldr r4, [r4]                                      |     r4 = *(r4);
    0x00051f54 ldr r1, [r3, 0x2c]                                |     r1 = *((r3 + 0x2c));
    0x00051f56 str r3, [sp, 0x24]                                |     *((sp + 0x24)) = r3;
    0x00051f58 mov r0, r4                                        |     r0 = r4;
    0x00051f5a bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x00051f5e ldr r1, [r5, 8]                                   |     r1 = *((r5 + 8));
    0x00051f60 mov r0, r4                                        |     r0 = r4;
    0x00051f62 bl 0xd418                                         |     fcn_0000d418 (r0, r1);
    0x00051f66 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00051f68 str r0, [r3, 0x2c]                                |     *((r3 + 0x2c)) = r0;
    0x00051f6a ldr r0, [r5, 8]                                   |     r0 = *((r5 + 8));
    0x00051f6c blx 0x6050                                        |     fcn_00006050 ();
    0x00051f70 str r7, [r5, 8]                                   |     *((r5 + 8)) = r7;
                                                                 |     if (r6 != 0) {
    0x00051f72 cbnz r6, 0x51f84                                  |         goto label_649;
                                                                 |     }
    0x00051f74 ldr.w r3, [r8, 0x28]                              |     r3 = *((r8 + 0x28));
    0x00051f78 ldr.w r0, [sb, 0x24]                              |     r0 = *((sb + 0x24));
    0x00051f7c blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00051f7e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00051f80 bne.w 0x4db8a                                     |         goto label_11;
                                                                 |     }
                                                                 | label_649:
    0x00051f84 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00051f86 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00051f88 subs r3, 1                                        |     r3--;
    0x00051f8a str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00051f8c b.w 0x4db8a                                       |     goto label_11;
                                                                 | label_387:
    0x00051f90 ldr r0, [sp, 0x38]                                |     r0 = *(arg_38h);
    0x00051f92 bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x00051f96 b.w 0x4e696                                       |     goto label_119;
                                                                 | label_392:
    0x00051f9a ldr r0, [sp, 0x38]                                |     r0 = *(arg_38h);
    0x00051f9c bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x00051fa0 b.w 0x4e84e                                       |     goto label_120;
                                                                 | label_391:
    0x00051fa4 ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x00051fa6 lsls r1, r1, 0x11                                 |     r1 <<= 0x11;
    0x00051fa8 ldr r0, [r7, 0x18]                                |     r0 = *((r7 + 0x18));
    0x00051faa it mi                                             |     
                                                                 |     if (r1 >= r1) {
    0x00051fac ldrmi r1, [r7, 0x10]                              |         r1 = *((r7 + 0x10));
                                                                 |     }
    0x00051fae ldr r3, [r3, 0x58]                                |     r3 = *((r3 + 0x58));
    0x00051fb0 it mi                                             |     
                                                                 |     if (r1 >= r1) {
    0x00051fb2 addmi r0, r0, r1                                  |         r0 += r1;
                                                                 |     }
    0x00051fb4 cmp r3, r0                                        |     
                                                                 |     if (r3 >= r0) {
    0x00051fb6 bge.w 0x4e840                                     |         goto label_121;
                                                                 |     }
    0x00051fba b.w 0x4f592                                       |     goto label_30;
                                                                 | label_412:
    0x00051fbe movs r6, 0                                        |     r6 = 0;
    0x00051fc0 b.w 0x4edec                                       |     goto label_58;
                                                                 | label_322:
    0x00051fc4 bl 0xa1d8                                         |     fcn_0000a1d8 (r0);
    0x00051fc8 orrs r0, r1                                       |     r0 |= r1;
    0x00051fca ite ne                                            |     
                                                                 |     if (r0 == r1) {
    0x00051fcc movne r4, 1                                       |         r4 = 1;
                                                                 |     }
                                                                 |     if (r0 != r1) {
    0x00051fce moveq r4, 0                                       |         r4 = 0;
                                                                 |     }
    0x00051fd0 add.w r4, r4, r4, lsl 1                           |     r4 += (r4 << 1);
    0x00051fd4 b.w 0x4d972                                       |     goto label_122;
                                                                 | label_324:
    0x00051fd8 ldr.w r2, [pc, 0x9dc]                             |     
    0x00051fdc add r2, pc                                        |     r2 = 0xa4998;
    0x00051fde add r3, r2                                        |     r3 += r2;
    0x00051fe0 ldrb.w r2, [r3, 0xc2c]                            |     r2 = *((r3 + 0xc2c));
    0x00051fe4 b.w 0x4d9a2                                       |     goto label_123;
                                                                 | label_323:
    0x00051fe8 bl 0xa1d8                                         |     fcn_0000a1d8 (r0);
    0x00051fec orrs r0, r1                                       |     r0 |= r1;
    0x00051fee ite ne                                            |     
                                                                 |     if (r0 == r1) {
    0x00051ff0 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r0 != r1) {
    0x00051ff2 moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00051ff4 b.w 0x4d98c                                       |     goto label_124;
                                                                 | label_325:
    0x00051ff8 ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x00051ffa orr r3, r3, 1                                     |     r3 |= 1;
    0x00051ffe strh r3, [r2, 0x1c]                               |     *((r2 + 0x1c)) = r3;
    0x00052000 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_394:
    0x00052004 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00052008 vstr d16, [sp, 0xa8]                              |     __asm ("vstr d16, [sp, 0xa8]");
    0x0005200c ldrb.w r2, [r5, 0x51]                             |     r2 = *((r5 + 0x51));
    0x00052010 cmp r2, 1                                         |     
                                                                 |     if (r2 == 1) {
    0x00052012 bne 0x52022                                       |         
    0x00052014 add r3, sp, 0xa8                                  |         r3 += arg_a8h;
    0x00052016 mov r0, r5                                        |         r0 = r5;
    0x00052018 mov r4, r3                                        |         r4 = r3;
    0x0005201a mov r1, r3                                        |         r1 = r3;
    0x0005201c bl 0xb5cc                                         |         fcn_0000b5cc (r0, r1);
    0x00052020 ldr r4, [r4]                                      |         r4 = *(r4);
                                                                 |     }
    0x00052022 add.w sl, sp, 0xb0                                |     sl += arg_b0h;
    0x00052026 movs r2, 0x28                                     |     r2 = 0x28;
    0x00052028 movs r1, 0                                        |     r1 = 0;
    0x0005202a mov r0, sl                                        |     r0 = sl;
    0x0005202c blx 0x5fcc                                        |     fcn_00005fcc ();
    0x00052030 mov r2, r4                                        |     r2 = r4;
    0x00052032 mov r0, r5                                        |     r0 = r5;
    0x00052034 movs r3, 1                                        |     r3 = 1;
    0x00052036 movs r1, 0                                        |     r1 = 0;
    0x00052038 str.w sl, [sp]                                    |     __asm ("str.w sl, [sp]");
    0x0005203c bl 0x2f238                                        |     r0 = fcn_0002f238 (r0, r1, r2, r3, r4);
    0x00052040 mov r6, r0                                        |     r6 = r0;
    0x00052042 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00052044 bne.w 0x528f6                                     |         goto label_207;
                                                                 |     }
    0x00052048 ldr.w r5, [sl, 4]                                 |     r5 = *((sl + 4));
    0x0005204c ldrb r3, [r5]                                     |     r3 = *(r5);
    0x0005204e lsls r2, r3, 0x18                                 |     r2 = r3 << 0x18;
                                                                 |     if (r2 < r3) {
    0x00052050 bmi.w 0x5365a                                     |         goto label_650;
                                                                 |     }
    0x00052054 mov r4, r3                                        |     r4 = r3;
    0x00052056 str r3, [sp, 0x90]                                |     *(arg_90h) = r3;
                                                                 | label_224:
    0x00052058 cmp r4, 2                                         |     
                                                                 |     if (r4 < 2) {
    0x0005205a bls.w 0x52a9a                                     |         goto label_651;
                                                                 |     }
    0x0005205e ldr.w r7, [sl, 0x18]                              |     r7 = *((sl + 0x18));
    0x00052062 cmp r7, r4                                        |     
                                                                 |     if (r7 < r4) {
    0x00052064 blt.w 0x52a9a                                     |         goto label_651;
                                                                 |     }
    0x00052068 subs r2, r4, 1                                    |     r2 = r4 - 1;
    0x0005206a ldrb r1, [r5, r2]                                 |     r1 = *((r5 + r2));
    0x0005206c adds r0, r5, r2                                   |     r0 = r5 + r2;
    0x0005206e lsls r3, r1, 0x18                                 |     r3 = r1 << 0x18;
    0x00052070 it pl                                             |     
                                                                 |     if (r3 < r1) {
    0x00052072 strpl r1, [sp, 0x94]                              |         *(arg_94h) = r1;
                                                                 |     }
                                                                 |     if (r3 < r1) {
    0x00052074 bmi.w 0x53a72                                     |         goto label_652;
                                                                 |     }
                                                                 | label_247:
    0x00052078 sub.w r3, r1, 7                                   |     r3 = r1 - 7;
    0x0005207c subs r2, r1, 1                                    |     r2 = r1 - 1;
    0x0005207e clz r3, r3                                        |     r3 &= r3;
    0x00052082 ldrh.w r6, [sl, 0x1c]                             |     r6 = *((sl + 0x1c));
    0x00052086 lsrs r3, r3, 5                                    |     r3 >>= 5;
    0x00052088 cmp r2, 8                                         |     
    0x0005208a it hi                                             |     
                                                                 |     if (r2 <= 8) {
    0x0005208c orrhi r3, r3, 1                                   |         r3 |= 1;
                                                                 |     }
    0x00052090 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00052092 bne.w 0x52a9a                                     |         goto label_651;
                                                                 |     }
    0x00052096 ldr.w r3, [pc, 0x924]                             |     r3 = *(0x000529bc);
    0x0005209a add r3, pc                                        |     r3 += pc;
    0x0005209c add r3, r1                                        |     r3 += r1;
    0x0005209e ldrb.w r2, [r3, 0xa6c]                            |     r2 = *((r3 + 0xa6c));
    0x000520a2 adds r3, r4, r2                                   |     r3 = r4 + r2;
    0x000520a4 cmp r7, r3                                        |     
                                                                 |     if (r7 <= r3) {
    0x000520a6 blo.w 0x52a9a                                     |         goto label_651;
                                                                 |     }
    0x000520aa subs r0, r7, r2                                   |     r0 = r7 - r2;
    0x000520ac add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x000520ae add r0, r5                                        |     r0 += r5;
    0x000520b0 mov r2, r7                                        |     r2 = r7;
    0x000520b2 bl 0xbe30                                         |     fcn_0000be30 (r0, r1, r2);
    0x000520b6 movw r3, 0x2460                                   |     r3 = 0x2460;
    0x000520ba ldrd r4, r5, [sp, 0xe8]                           |     __asm ("ldrd r4, r5, [arg_e8h]");
    0x000520be tst r6, r3                                        |     
                                                                 |     if ((r6 & r3) != 0) {
    0x000520c0 bne.w 0x5408c                                     |         goto label_653;
                                                                 |     }
                                                                 | label_287:
    0x000520c4 ldr.w r1, [sl, 0x24]                              |     r1 = *((sl + 0x24));
                                                                 |     if (r1 != 0) {
    0x000520c8 cbz r1, 0x520d2                                   |         
    0x000520ca ldr.w r0, [sl]                                    |         r0 = *(sl);
    0x000520ce bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
                                                                 |     }
    0x000520d2 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x000520d4 ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x000520d6 adds r3, 1                                        |     r3++;
    0x000520d8 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x000520da movs r3, 4                                        |     r3 = 4;
    0x000520dc strd r4, r5, [r2, 0x10]                           |     __asm ("strd r4, r5, [r2, 0x10]");
    0x000520e0 strh r3, [r2, 0x1c]                               |     *((r2 + 0x1c)) = r3;
    0x000520e2 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_314:
    0x000520e6 cmp r3, 0                                         |     
    0x000520e8 ldr r0, [r4]                                      |     r0 = *(r4);
                                                                 |     if (r3 <= 0) {
    0x000520ea ble 0x5217a                                       |         goto label_654;
                                                                 |     }
                                                                 | label_127:
    0x000520ec movs r3, 0                                        |     r3 = 0;
    0x000520ee mov r1, sl                                        |     r1 = sl;
    0x000520f0 str.w r3, [sl]                                    |     __asm ("str.w r3, [sl]");
    0x000520f4 bl 0x2f05c                                        |     r0 = fcn_0002f05c (r0, r1);
    0x000520f8 mov r6, r0                                        |     r6 = r0;
    0x000520fa cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000520fc bne.w 0x528f6                                     |         goto label_207;
                                                                 |     }
                                                                 | label_154:
    0x00052100 strb r6, [r4, 0x1a]                               |     *((r4 + 0x1a)) = r6;
    0x00052102 ldr.w r3, [sl]                                    |     r3 = *(sl);
                                                                 | label_128:
    0x00052106 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00052108 beq.w 0x52bb0                                     |         goto label_655;
                                                                 |     }
    0x0005210c ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0005210e ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00052110 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00052112 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_580:
    0x00052116 vldr d11, [r6, 8]                                 |     __asm ("vldr d11, [r6, 8]");
    0x0005211a bl 0x5e4a4                                        |     r0 = fcn_0005e4a4 (r0, r1, r2);
    0x0005211e vmov d16, r0, r1                                  |     __asm ("vmov d16, r0, r1");
    0x00052122 vcmpe.f64 d11, d16                                |     __asm ("vcmpe.f64 d11, d16");
    0x00052126 vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
                                                                 |     if (r3 >= 0) {
    0x0005212a bpl.w 0x5332e                                     |         goto label_656;
                                                                 |     }
    0x0005212e tst.w r8, 1                                       |     
    0x00052132 ite eq                                            |     
                                                                 |     if ((r8 & 1) != 0) {
    0x00052134 moveq r5, r8                                      |         r5 = r8;
                                                                 |     }
                                                                 |     if ((r8 & 1) == 0) {
    0x00052136 movne r5, sb                                      |         r5 = sb;
                                                                 |     }
                                                                 | label_205:
    0x00052138 ldr.w r8, [sp, 0x28]                              |     r8 = *(arg_28h);
    0x0005213c movs r1, 0                                        |     r1 = 0;
    0x0005213e add.w sl, sp, 0xb0                                |     sl += arg_b0h;
    0x00052142 ldr r0, [r4]                                      |     r0 = *(r4);
    0x00052144 mov r2, r7                                        |     r2 = r7;
    0x00052146 str r1, [sp]                                      |     *(sp) = r1;
    0x00052148 mov r3, r8                                        |     r3 = r8;
    0x0005214a str.w sl, [sp, 4]                                 |     __asm ("str.w sl, [arg_4h]");
    0x0005214e bl 0x2e9e8                                        |     r0 = fcn_0002e9e8 (r0, r1, r2, r3, r4, r5, r6);
    0x00052152 mov r6, r0                                        |     r6 = r0;
    0x00052154 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00052156 bne.w 0x528f6                                     |         goto label_207;
                                                                 |     }
    0x0005215a ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x0005215e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00052160 bne.w 0x4d7e8                                     |         goto label_125;
                                                                 |     }
    0x00052164 cmp r5, 0x3d                                      |     
    0x00052166 mov.w r2, 1                                       |     r2 = 1;
    0x0005216a str r7, [r4, 0x38]                                |     *((r4 + 0x38)) = r7;
    0x0005216c str.w r8, [r4, 0x3c]                              |     __asm ("str.w r8, [r4, 0x3c]");
    0x00052170 str r3, [r4, 0x44]                                |     *((r4 + 0x44)) = r3;
    0x00052172 strh r2, [r4, 0x1a]                               |     *((r4 + 0x1a)) = r2;
                                                                 |     if (r5 > 0x3d) {
    0x00052174 bgt.w 0x4d7fc                                     |         goto label_126;
                                                                 |     }
    0x00052178 ldr r0, [r4]                                      |     r0 = *(r4);
                                                                 | label_654:
    0x0005217a cmp r5, 0x3c                                      |     
    0x0005217c it eq                                             |     
                                                                 |     if (r5 != 0x3c) {
    0x0005217e cmpeq r3, 0                                       |         __asm ("cmpeq r3, 0");
                                                                 |         goto label_657;
                                                                 |     }
                                                                 |     if (r5 == 0x3c) {
                                                                 | label_657:
    0x00052180 beq 0x520ec                                       |         goto label_127;
                                                                 |     }
    0x00052182 ldrb.w r3, [r0, 0x51]                             |     r3 = *((r0 + 0x51));
    0x00052186 subs r3, 1                                        |     r3--;
    0x00052188 it ne                                             |     
                                                                 |     if (r3 == 1) {
    0x0005218a movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x0005218c b 0x52106                                         |     goto label_128;
                                                                 | label_469:
    0x0005218e ldr r0, [sp, 0x38]                                |     r0 = *(arg_38h);
    0x00052190 bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x00052194 b.w 0x4fa7a                                       |     goto label_129;
                                                                 | label_471:
    0x00052198 mov r0, r4                                        |     r0 = r4;
    0x0005219a blx 0x5f0c                                        |     fcn_00005f0c ();
    0x0005219e ldr.w r2, [pc, 0x820]                             |     
    0x000521a2 mov r3, r0                                        |     r3 = r0;
    0x000521a4 ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x000521a6 mov r1, fp                                        |     r1 = fp;
    0x000521a8 add r2, pc                                        |     r2 = 0xa4b6e;
    0x000521aa adds r0, 0x2c                                     |     r0 += 0x2c;
    0x000521ac bl 0x1c9d0                                        |     fcn_0001c9d0 (r0, r1);
    0x000521b0 b.w 0x4fb2e                                       |     goto label_130;
                                                                 | label_180:
    0x000521b4 mov r3, r5                                        |     r3 = r5;
    0x000521b6 ldr r4, [sp, 0x50]                                |     r4 = *(arg_50h);
    0x000521b8 mov r5, r8                                        |     r5 = r8;
    0x000521ba ldr.w r8, [sp, 0x54]                              |     r8 = *(arg_54h);
                                                                 | label_238:
    0x000521be ldr r2, [sp, 0x34]                                |     r2 = *(arg_34h);
    0x000521c0 strh r6, [r4, 0x16]                               |     *((r4 + 0x16)) = r6;
    0x000521c2 sub.w r2, sb, r2                                  |     r2 = sb - r2;
    0x000521c6 str r2, [r4, 0x50]                                |     *((r4 + 0x50)) = r2;
    0x000521c8 ldr r2, [sp, 0x4c]                                |     r2 = *(arg_4ch);
    0x000521ca cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000521cc beq.w 0x53e98                                     |         goto label_658;
                                                                 |     }
                                                                 | label_274:
    0x000521d0 cmp sb, r3                                        |     
                                                                 |     if (sb > r3) {
    0x000521d2 bhi.w 0x5399c                                     |         goto label_659;
                                                                 |     }
    0x000521d6 ldr.w r2, [sl]                                    |     r2 = *(sl);
    0x000521da ldr r1, [r4, 0x48]                                |     r1 = *((r4 + 0x48));
    0x000521dc cmp r1, r2                                        |     
                                                                 |     if (r1 <= r2) {
    0x000521de blo.w 0x5399c                                     |         goto label_659;
                                                                 |     }
    0x000521e2 ite ne                                            |     
                                                                 |     if (r1 == r2) {
    0x000521e4 movne r2, 1                                       |         r2 = 1;
                                                                 |     }
                                                                 |     if (r1 != r2) {
    0x000521e6 moveq r2, 0                                       |         r2 = 0;
                                                                 |     }
    0x000521e8 cmp sb, r3                                        |     
    0x000521ea ite ne                                            |     
                                                                 |     if (sb == r3) {
    0x000521ec movne r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (sb != r3) {
    0x000521ee andeq r2, r2, 1                                   |         r2 &= 1;
                                                                 |     }
    0x000521f2 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x000521f4 bne.w 0x5399c                                     |         goto label_659;
                                                                 |     }
    0x000521f8 ldrh r3, [r4, 0x16]                               |     r3 = *((r4 + 0x16));
    0x000521fa ldr r2, [sp, 0x28]                                |     r2 = *(arg_28h);
    0x000521fc cmp r3, r2                                        |     
                                                                 |     if (r3 <= r2) {
    0x000521fe ble.w 0x4e3f6                                     |         goto label_131;
                                                                 |     }
                                                                 | label_373:
    0x00052202 ldr r2, [sp, 0x28]                                |     r2 = *(arg_28h);
    0x00052204 adds r3, r2, 1                                    |     r3 = r2 + 1;
    0x00052206 lsl.w sb, r2, 2                                   |     sb = r2 << 2;
    0x0005220a ldr r2, [sp, 0x3c]                                |     r2 = *(arg_3ch);
    0x0005220c ldr.w r3, [r2, r3, lsl 2]                         |     offset_55 = r3 << 2;
                                                                 |     r3 = *((r2 + offset_55));
    0x00052210 ldr r2, [r4, 0x4c]                                |     r2 = *((r4 + 0x4c));
    0x00052212 cmp r2, r3                                        |     
                                                                 |     if (r2 <= r3) {
    0x00052214 blo.w 0x52a2a                                     |         goto label_660;
                                                                 |     }
    0x00052218 ldrh r3, [r5, 0x1c]                               |     r3 = *((r5 + 0x1c));
    0x0005221a movw r2, 0x2460                                   |     r2 = 0x2460;
    0x0005221e tst r2, r3                                        |     
                                                                 |     if ((r2 & r3) != 0) {
    0x00052220 bne.w 0x53a22                                     |         goto label_661;
                                                                 |     }
                                                                 | label_243:
    0x00052224 ldr r3, [sp, 0x3c]                                |     r3 = *(arg_3ch);
    0x00052226 mov r2, r5                                        |     r2 = r5;
    0x00052228 ldr r0, [r4, 0x54]                                |     r0 = *((r4 + 0x54));
    0x0005222a ldr.w r1, [r8, sb]                                |     r1 = *((r8 + sb));
    0x0005222e ldr.w r3, [r3, sb]                                |     r3 = *((r3 + sb));
    0x00052232 add r0, r3                                        |     r0 += r3;
    0x00052234 bl 0xbe30                                         |     fcn_0000be30 (r0, r1, r2);
    0x00052238 ldrh r3, [r5, 0x1c]                               |     r3 = *((r5 + 0x1c));
    0x0005223a and r3, r3, 0x1000                                |     r3 &= 0x1000;
                                                                 | label_220:
    0x0005223e ldr r2, [sp, 0x70]                                |     r2 = *(arg_70h);
    0x00052240 strb r2, [r5, 0x1e]                               |     *((r5 + 0x1e)) = r2;
    0x00052242 b.w 0x4e414                                       |     goto label_62;
                                                                 | label_492:
    0x00052246 ldr.w r3, [sl, 0x1c]                              |     r3 = *((sl + 0x1c));
    0x0005224a ldr r2, [sp, 0x28]                                |     r2 = *(arg_28h);
    0x0005224c cmp r2, r3                                        |     
                                                                 |     if (r2 == r3) {
    0x0005224e beq 0x5232e                                       |         goto label_662;
                                                                 |     }
    0x00052250 ldr.w r8, [sl, 8]                                 |     r8 = *((sl + 8));
    0x00052254 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x00052258 beq 0x52328                                       |         goto label_663;
                                                                 |     }
    0x0005225a ldrh.w r3, [sl, 0x1a]                             |     r3 = *((sl + 0x1a));
    0x0005225e lsls r2, r3, 0x1f                                 |     r2 = r3 << 0x1f;
    0x00052260 str r3, [sp, 0x3c]                                |     *(arg_3ch) = r3;
                                                                 |     if (r2 >= r3) {
    0x00052262 bpl.w 0x53588                                     |         goto label_664;
                                                                 |     }
                                                                 | label_216:
    0x00052266 ldr.w sb, [sl, 0x14]                              |     sb = *((sl + 0x14));
    0x0005226a cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x0005226e beq.w 0x53d56                                     |         goto label_665;
                                                                 |     }
    0x00052272 add r3, sp, 0xb0                                  |     r3 += arg_b0h;
    0x00052274 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x00052276 str r5, [sp, 0x48]                                |     *(arg_48h) = r5;
    0x00052278 mov r5, r3                                        |     r5 = r3;
    0x0005227a mov r3, r7                                        |     r3 = r7;
    0x0005227c mov r7, r6                                        |     r7 = r6;
    0x0005227e mov r6, r3                                        |     r6 = r3;
                                                                 | label_133:
    0x00052280 ldr.w r4, [sb, 0xc]                               |     r4 = *((sb + 0xc));
                                                                 |     if (r4 == 0) {
    0x00052284 cbz r4, 0x522ca                                   |         goto label_666;
                                                                 |     }
    0x00052286 ldr r0, [r4, 0xc]                                 |     r0 = *((r4 + 0xc));
    0x00052288 mov r1, r5                                        |     r1 = r5;
                                                                 |     if (r0 == 0) {
    0x0005228a cbz r0, 0x522a6                                   |         goto label_667;
                                                                 |     }
                                                                 |     do {
    0x0005228c mov r2, r6                                        |         r2 = r6;
    0x0005228e bl 0xb924                                         |         fcn_0000b924 (r0, r1, r2, r3, r4);
    0x00052292 ldr r3, [r6]                                      |         r3 = *(r6);
    0x00052294 str r4, [r3, 8]                                   |         *((r3 + 8)) = r4;
    0x00052296 ldr r3, [r4, 8]                                   |         r3 = *((r4 + 8));
                                                                 |         if (r3 == 0) {
    0x00052298 cbz r3, 0x522ae                                   |             goto label_668;
                                                                 |         }
                                                                 | label_132:
    0x0005229a add.w r1, r4, 8                                   |         r1 = r4 + 8;
    0x0005229e mov r4, r3                                        |         r4 = r3;
    0x000522a0 ldr r0, [r4, 0xc]                                 |         r0 = *((r4 + 0xc));
    0x000522a2 cmp r0, 0                                         |         
    0x000522a4 bne 0x5228c                                       |         
                                                                 |     } while (r0 != 0);
                                                                 | label_667:
    0x000522a6 str r4, [r1]                                      |     *(r1) = r4;
    0x000522a8 ldr r3, [r4, 8]                                   |     r3 = *((r4 + 8));
    0x000522aa cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000522ac bne 0x5229a                                       |         goto label_132;
                                                                 |     }
                                                                 | label_668:
    0x000522ae str.w r3, [sb, 0xc]                               |     __asm ("str.w r3, [sb, 0xc]");
    0x000522b2 mov r1, r8                                        |     r1 = r8;
    0x000522b4 ldr r0, [r5]                                      |     r0 = *(r5);
    0x000522b6 bl 0x77d4                                         |     fcn_000077d4 (r0, r1);
    0x000522ba ldr.w r3, [sb, 8]                                 |     r3 = *((sb + 8));
    0x000522be mov r8, r0                                        |     r8 = r0;
    0x000522c0 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000522c2 beq.w 0x53218                                     |         goto label_669;
                                                                 |     }
    0x000522c6 mov sb, r3                                        |     sb = r3;
    0x000522c8 b 0x52280                                         |     goto label_133;
                                                                 | label_666:
    0x000522ca ldr.w r2, [r8, 8]                                 |     r2 = *((r8 + 8));
    0x000522ce mov r6, r7                                        |     r6 = r7;
    0x000522d0 ldr r5, [sp, 0x48]                                |     r5 = *(arg_48h);
    0x000522d2 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x000522d4 str r2, [r7]                                      |     *(r7) = r2;
    0x000522d6 strd r4, r4, [r8, 8]                              |     __asm ("strd r4, r4, [r8, 8]");
    0x000522da cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000522dc beq.w 0x53fcc                                     |         goto label_670;
                                                                 |     }
    0x000522e0 movs r4, 1                                        |     r4 = 1;
    0x000522e2 mov r3, sl                                        |     r3 = sl;
    0x000522e4 mov sl, r6                                        |     sl = r6;
    0x000522e6 mov r6, r5                                        |     r6 = r5;
    0x000522e8 mov r5, r4                                        |     r5 = r4;
    0x000522ea mov r4, r2                                        |     r4 = r2;
    0x000522ec mov r2, r8                                        |     r2 = r8;
    0x000522ee mov r8, r3                                        |     r8 = r3;
    0x000522f0 b 0x522f4                                         |     
                                                                 |     while (r3 != 0) {
    0x000522f2 mov r4, r3                                        |         r4 = r3;
    0x000522f4 ldr r3, [r4, 8]                                   |         r3 = *((r4 + 8));
    0x000522f6 mov r1, r5                                        |         r1 = r5;
    0x000522f8 mov r0, r7                                        |         r0 = r7;
    0x000522fa adds r5, 1                                        |         r5++;
    0x000522fc str r3, [r7]                                      |         *(r7) = r3;
    0x000522fe str r2, [r4, 0xc]                                 |         *((r4 + 0xc)) = r2;
    0x00052300 bl 0x7858                                         |         fcn_00007858 (r0, r1);
    0x00052304 str r0, [r4, 8]                                   |         *((r4 + 8)) = r0;
    0x00052306 mov r2, r4                                        |         r2 = r4;
    0x00052308 ldr r3, [r7]                                      |         r3 = *(r7);
    0x0005230a cmp r3, 0                                         |         
    0x0005230c bne 0x522f2                                       |         
                                                                 |     }
    0x0005230e mov r5, r6                                        |     r5 = r6;
    0x00052310 mov r6, sl                                        |     r6 = sl;
    0x00052312 mov sl, r8                                        |     sl = r8;
                                                                 | label_281:
    0x00052314 str.w r2, [sb, 0xc]                               |     __asm ("str.w r2, [sb, 0xc]");
                                                                 | label_242:
    0x00052318 ldr r3, [sp, 0x3c]                                |     r3 = *(arg_3ch);
    0x0005231a orr r3, r3, 1                                     |     r3 |= 1;
    0x0005231e strh.w r3, [sl, 0x1a]                             |     *((sl + 0x1a)) = r3;
    0x00052322 movs r3, 0                                        |     r3 = 0;
    0x00052324 strd r3, r3, [sl, 8]                              |     __asm ("strd r3, r3, [sl, 8]");
                                                                 | label_663:
    0x00052328 ldr r3, [sp, 0x28]                                |     r3 = *(arg_28h);
    0x0005232a str.w r3, [sl, 0x1c]                              |     __asm ("str.w r3, [sl, 0x1c]");
                                                                 | label_662:
    0x0005232e ldr.w r4, [sl, 0x14]                              |     r4 = *((sl + 0x14));
                                                                 |     if (r4 == 0) {
    0x00052332 cbz r4, 0x5235c                                   |         goto label_671;
                                                                 |     }
                                                                 | label_135:
    0x00052334 ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
                                                                 |     if (r3 == 0) {
                                                                 |         do {
                                                                 | label_134:
    0x00052336 cbz r3, 0x52356                                   |             goto label_672;
                                                                 |         }
    0x00052338 ldrd r1, r2, [r3]                                 |         __asm ("ldrd r1, r2, [r3]");
    0x0005233c cmp r1, r5                                        |         
    0x0005233e sbcs.w r0, r2, r6                                 |         __asm ("sbcs.w r0, r2, r6");
                                                                 |         if (r1 >= r5) {
    0x00052342 bge 0x52348                                       |             goto label_673;
                                                                 |         }
    0x00052344 ldr r3, [r3, 8]                                   |         r3 = *((r3 + 8));
    0x00052346 b 0x52336                                         |         
                                                                 |     } while (1);
                                                                 | label_673:
    0x00052348 cmp r5, r1                                        |     
    0x0005234a sbcs.w r2, r6, r2                                 |     __asm ("sbcs.w r2, r6, r2");
                                                                 |     if (r5 >= r1) {
    0x0005234e bge.w 0x52b9c                                     |         goto label_674;
                                                                 |     }
    0x00052352 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x00052354 b 0x52336                                         |     goto label_134;
                                                                 | label_672:
    0x00052356 ldr r4, [r4, 8]                                   |     r4 = *((r4 + 8));
    0x00052358 cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x0005235a bne 0x52334                                       |         goto label_135;
                                                                 |     }
                                                                 | label_671:
    0x0005235c ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0005235e add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x00052362 ldr r3, [sp, 0x28]                                |     r3 = *(arg_28h);
    0x00052364 cmp r3, 0                                         |     
    0x00052366 itt ge                                            |     
                                                                 |     if (r3 < 0) {
    0x00052368 ldrge r3, [sp, 0x2c]                              |         r3 = *(arg_2ch);
                                                                 |     }
                                                                 |     if (r3 >= 0) {
    0x0005236a ldrge sl, [r3, 0x10]                              |         sl = *((r3 + 0x10));
                                                                 |         goto label_675;
                                                                 |     }
                                                                 |     if (r3 >= 0) {
                                                                 | label_675:
    0x0005236e bge.w 0x4ff8e                                     |         goto label_136;
                                                                 |     }
    0x00052372 str.w r8, [sp, 0x1c]                              |     __asm ("str.w r8, [arg_1ch]");
    0x00052376 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_372:
    0x0005237a ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0005237c mov.w sb, 0xb                                     |     sb = 0xb;
    0x00052380 adds r3, 1                                        |     r3++;
    0x00052382 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00052384 blx 0x5fe8                                        |     fcn_00005fe8 ();
    0x00052388 ldr.w r1, [pc, 0x638]                             |     r1 = *(0x000529c4);
    0x0005238c movw r2, 0x1e83                                   |     
    0x00052390 add.w r3, r0, 0x14                                |     r3 = r0 + 0x14;
    0x00052394 movt r2, 1                                        |     r2 = 0x11e83;
    0x00052398 movs r0, 0xb                                      |     r0 = 0xb;
    0x0005239a add r1, pc                                        |     r1 += pc;
    0x0005239c blx 0x6820                                        |     fcn_00006820 ();
    0x000523a0 b.w 0x4d742                                       |     goto label_25;
                                                                 | label_539:
    0x000523a4 asrs r1, r6, 0x1f                                 |     r1 = r6 >> 0x1f;
    0x000523a6 mov r2, r6                                        |     r2 = r6;
    0x000523a8 mov.w ip, 0                                       |     
                                                                 |     do {
    0x000523ac lsrs r2, r2, 7                                    |         r2 >>= 7;
    0x000523ae mov r0, ip                                        |         r0 = ip;
    0x000523b0 add.w ip, ip, 1                                   |         
    0x000523b4 orr.w r2, r2, r1, lsl 25                          |         r2 |= (r1 << 25);
    0x000523b8 lsrs r1, r1, 7                                    |         r1 >>= 7;
    0x000523ba cmp.w ip, 8                                       |         
    0x000523be orr.w lr, r2, r1                                  |         lr = r2 | r1;
    0x000523c2 ite gt                                            |         
                                                                 |         if (ip <= 8) {
    0x000523c4 movgt r3, 0                                       |             r3 = 0;
                                                                 |         }
                                                                 |         if (ip > 8) {
    0x000523c6 movle r3, 1                                       |             r3 = 1;
                                                                 |         }
    0x000523c8 cmp.w lr, 0                                       |         
    0x000523cc it eq                                             |         
                                                                 |         if (lr != 0) {
    0x000523ce moveq r3, 0                                       |             r3 = 0;
                                                                 |         }
    0x000523d0 cmp r3, 0                                         |         
    0x000523d2 bne 0x523ac                                       |         
                                                                 |     } while (r3 != 0);
    0x000523d4 add r6, ip                                        |     r6 += ip;
    0x000523d6 mov lr, r0                                        |     lr = r0;
    0x000523d8 asr.w sb, r6, 0x1f                                |     sb = r6 >> 0x1f;
    0x000523dc mov r2, r6                                        |     r2 = r6;
    0x000523de mov r1, sb                                        |     r1 = sb;
                                                                 |     do {
    0x000523e0 lsrs r2, r2, 7                                    |         r2 >>= 7;
    0x000523e2 mov sl, r3                                        |         sl = r3;
    0x000523e4 adds r3, 1                                        |         r3++;
    0x000523e6 orr.w r2, r2, r1, lsl 25                          |         r2 |= (r1 << 25);
    0x000523ea lsrs r1, r1, 7                                    |         r1 >>= 7;
    0x000523ec cmp r3, 8                                         |         
    0x000523ee orr.w ip, r2, r1                                  |         
    0x000523f2 ite gt                                            |         
                                                                 |         if (r3 <= 8) {
    0x000523f4 movgt r0, 0                                       |             r0 = 0;
                                                                 |         }
                                                                 |         if (r3 > 8) {
    0x000523f6 movle r0, 1                                       |             r0 = 1;
                                                                 |         }
    0x000523f8 cmp.w ip, 0                                       |         
    0x000523fc it eq                                             |         
                                                                 |         if (ip != 0) {
    0x000523fe moveq r0, 0                                       |             r0 = 0;
                                                                 |         }
    0x00052400 cmp r0, 0                                         |         
    0x00052402 bne 0x523e0                                       |         
                                                                 |     } while (r0 != 0);
    0x00052404 cmp sl, lr                                        |     
                                                                 |     if (sl <= lr) {
    0x00052406 ble.w 0x50684                                     |         goto label_137;
                                                                 |     }
    0x0005240a b.w 0x5067e                                       |     goto label_138;
                                                                 | label_631:
    0x0005240e ldrd r2, r3, [sp, 0x48]                           |     __asm ("ldrd r2, r3, [arg_48h]");
    0x00052412 str r3, [r2, 0x44]                                |     *((r2 + 0x44)) = r3;
    0x00052414 strh r3, [r2, 0x1a]                               |     *((r2 + 0x1a)) = r3;
    0x00052416 movs r3, 1                                        |     r3 = 1;
    0x00052418 strb r3, [r2, 0x19]                               |     *((r2 + 0x19)) = r3;
    0x0005241a b.w 0x4d734                                       |     goto label_68;
                                                                 | label_474:
    0x0005241e ldr r3, [r3, 0x30]                                |     r3 = *((r3 + 0x30));
    0x00052420 ldrd r5, r4, [r3]                                 |     __asm ("ldrd r5, r4, [r3]");
    0x00052424 b.w 0x4fbb8                                       |     void (*0x4fbb8)() ();
                                                                 | label_473:
    0x00052428 ldr.w r3, [fp, 4]                                 |     r3 = *(arg_4h);
    0x0005242c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005242e beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
                                                                 |     do {
    0x00052432 ldrb.w r2, [r3, 0x58]                             |         r2 = *((r3 + 0x58));
    0x00052436 orr r2, r2, 0x20                                  |         r2 |= 0x20;
    0x0005243a strb.w r2, [r3, 0x58]                             |         *((r3 + 0x58)) = r2;
    0x0005243e ldr r3, [r3, 0x34]                                |         r3 = *((r3 + 0x34));
    0x00052440 cmp r3, 0                                         |         
    0x00052442 bne 0x52432                                       |         
                                                                 |     } while (r3 != 0);
    0x00052444 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_329:
    0x00052448 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0005244a ldr.w r8, [r3, 0x10]                              |     r8 = *((r3 + 0x10));
    0x0005244e ldrh.w r2, [r8, 6]                                |     r2 = *((r8 + 6));
    0x00052452 ldrh.w r3, [r8, 8]                                |     r3 = *((r8 + 8));
    0x00052456 add r2, r3                                        |     r2 += r3;
    0x00052458 b.w 0x4daae                                       |     goto label_139;
                                                                 | label_328:
    0x0005245c ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0005245e add.w r6, r6, r6, lsl 2                           |     r6 += (r6 << 2);
    0x00052462 add.w r6, r3, r6, lsl 3                           |     r6 = r3 + (r6 << 3);
    0x00052466 mov r0, r6                                        |     r0 = r6;
    0x00052468 bl 0xc318                                         |     fcn_0000c318 (r0, r1);
    0x0005246c ldr r6, [r6, 0x10]                                |     r6 = *((r6 + 0x10));
    0x0005246e cmp r6, 1                                         |     
                                                                 |     if (r6 > 1) {
    0x00052470 bgt.w 0x4da90                                     |         goto label_140;
                                                                 |     }
    0x00052474 blx 0x5fe8                                        |     fcn_00005fe8 ();
    0x00052478 ldr.w r1, [pc, 0x54c]                             |     r1 = *(0x000529c8);
    0x0005247c movw r2, 0x220c                                   |     
    0x00052480 add.w r3, r0, 0x14                                |     r3 = r0 + 0x14;
    0x00052484 movt r2, 1                                        |     r2 = 0x1220c;
    0x00052488 movs r0, 0xb                                      |     r0 = 0xb;
    0x0005248a add r1, pc                                        |     r1 += pc;
    0x0005248c blx 0x6820                                        |     fcn_00006820 ();
    0x00052490 ldrb.w r3, [fp, 0x40]                             |     r3 = *(arg_40h);
    0x00052494 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00052496 bne.w 0x52ae2                                     |         goto label_226;
                                                                 |     }
    0x0005249a ldr.w r3, [pc, 0x530]                             |     
    0x0005249e mov.w sb, 0xb                                     |     sb = 0xb;
    0x000524a2 ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x000524a4 add r3, pc                                        |     r3 = 0xa4e76;
    0x000524a6 add.w r0, r2, 0x2c                                |     r0 = r2 + 0x2c;
                                                                 | label_160:
    0x000524aa ldr.w r2, [pc, 0x524]                             |     
    0x000524ae mov r1, fp                                        |     r1 = fp;
    0x000524b0 add r2, pc                                        |     r2 = 0xa4e86;
    0x000524b2 bl 0x1c9d0                                        |     fcn_0001c9d0 (r0, r1);
    0x000524b6 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x000524b8 ldr r0, [r3, 0x2c]                                |     r0 = *((r3 + 0x2c));
    0x000524ba b.w 0x4d746                                       |     goto label_34;
                                                                 | label_437:
    0x000524be ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x000524c0 adds r3, 1                                        |     r3++;
    0x000524c2 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x000524c4 ldr r3, [sp, 0x38]                                |     r3 = *(arg_38h);
    0x000524c6 vstr d16, [r3, 0x10]                              |     __asm ("vstr d16, [r3, 0x10]");
    0x000524ca b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_425:
    0x000524ce mov r0, fp                                        |     r0 = fp;
    0x000524d0 bl 0x13968                                        |     fcn_00013968 (r0);
    0x000524d4 b.w 0x4d4f2                                       |     goto label_24;
                                                                 | label_488:
    0x000524d8 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x000524da ldr r0, [r6, 0x14]                                |     r0 = *((r6 + 0x14));
    0x000524dc ldr.w r3, [r3, 0xb0]                              |     r3 = *((r3 + 0xb0));
                                                                 |     if (r3 != 0) {
    0x000524e0 cbnz r3, 0x524ee                                  |         goto label_676;
                                                                 |     }
    0x000524e2 b.w 0x4fec0                                       |     goto label_141;
                                                                 | label_142:
    0x000524e6 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x000524e8 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000524ea beq.w 0x4fec0                                     |         goto label_141;
                                                                 |     }
                                                                 | label_676:
    0x000524ee ldr r2, [r3, 0x18]                                |     r2 = *((r3 + 0x18));
    0x000524f0 cmp r2, r0                                        |     
                                                                 |     if (r2 != r0) {
    0x000524f2 bne 0x524e6                                       |         goto label_142;
                                                                 |     }
    0x000524f4 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x000524f6 adds r3, 1                                        |     r3++;
    0x000524f8 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x000524fa b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_403:
    0x000524fe cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00052500 bne.w 0x529fa                                     |         goto label_677;
                                                                 |     }
    0x00052504 ldr.w r2, [fp, 0x10]                              |     r2 = *(arg_10h);
    0x00052508 add.w r3, r3, 0x10000000                          |     r3 += 0x10000000;
    0x0005250c subs r3, 1                                        |     r3--;
    0x0005250e mov sb, r0                                        |     sb = r0;
    0x00052510 add.w r3, r2, r3, lsl 4                           |     r3 = r2 + (r3 << 4);
    0x00052514 b.w 0x4eb8c                                       |     goto label_143;
                                                                 | label_449:
    0x00052518 ldr.w r1, [pc, 0x4b8]                             |     r1 = *(0x000529d4);
    0x0005251c mov r2, r5                                        |     r2 = r5;
    0x0005251e ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00052520 mov r0, fp                                        |     r0 = fp;
    0x00052522 mov.w sb, 1                                       |     sb = 1;
    0x00052526 add r1, pc                                        |     r1 += pc;
    0x00052528 add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x0005252c bl 0x1babc                                        |     fcn_0001babc (r0);
    0x00052530 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00052532 str r0, [r3, 0x2c]                                |     *((r3 + 0x2c)) = r0;
    0x00052534 b.w 0x50538                                       |     goto label_39;
                                                                 | label_537:
    0x00052538 mov r0, fp                                        |     r0 = fp;
    0x0005253a bl 0x184f0                                        |     r0 = fcn_000184f0 (r0);
    0x0005253e mov r6, r0                                        |     r6 = r0;
                                                                 |     if (r0 == 0) {
    0x00052540 cbnz r0, 0x52564                                  |         
    0x00052542 ldr r3, [r7, 0x38]                                |         r3 = *((r7 + 0x38));
    0x00052544 ldr r0, [r4, 8]                                   |         r0 = *((r4 + 8));
    0x00052546 blx r3                                            |         r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x00052548 mov r6, r0                                        |         r6 = r0;
                                                                 |         if (r0 != 0) {
    0x0005254a cbnz r0, 0x52564                                  |             goto label_678;
                                                                 |         }
    0x0005254c ldr.w r2, [fp, 0x128]                             |         r2 = *(arg_128h);
    0x00052550 ldr r3, [r4, 0xc]                                 |         r3 = *((r4 + 0xc));
    0x00052552 ldr.w r1, [fp, 0x140]                             |         r1 = *(arg_140h);
    0x00052556 adds r0, r2, 1                                    |         r0 = r2 + 1;
    0x00052558 adds r3, 1                                        |         r3++;
    0x0005255a str.w r0, [fp, 0x128]                             |         __asm ("str.w r0, [arg_128h]");
    0x0005255e str.w r4, [r1, r2, lsl 2]                         |         __asm ("str.w r4, [r1, r2, lsl 2]");
    0x00052562 str r3, [r4, 0xc]                                 |         *((r4 + 0xc)) = r3;
                                                                 |     }
                                                                 | label_678:
    0x00052564 ldr r5, [r4, 8]                                   |     r5 = *((r4 + 8));
    0x00052566 b.w 0x505a0                                       |     goto label_144;
                                                                 | label_500:
    0x0005256a ldr.w r5, [fp, 0x1e0]                             |     r5 = *(arg_1e0h);
    0x0005256e cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00052570 beq.w 0x52dfe                                     |         goto label_679;
                                                                 |     }
    0x00052574 mov.w sb, 0                                       |     sb = 0;
    0x00052578 b 0x52586                                         |     
                                                                 |     while (r0 != 0) {
    0x0005257a ldr r5, [r5, 0x18]                                |         r5 = *((r5 + 0x18));
    0x0005257c add.w sb, sb, 1                                   |         sb++;
    0x00052580 cmp r5, 0                                         |         
                                                                 |         if (r5 == 0) {
    0x00052582 beq.w 0x52dfe                                     |             goto label_679;
                                                                 |         }
    0x00052586 ldr r0, [r5]                                      |         r0 = *(r5);
    0x00052588 mov r1, r4                                        |         r1 = r4;
    0x0005258a blx 0x6164                                        |         r0 = fcn_00006164 ();
    0x0005258e cmp r0, 0                                         |         
    0x00052590 bne 0x5257a                                       |         
                                                                 |     }
    0x00052592 ldr.w r3, [fp, 0x94]                              |     r3 = *(arg_94h);
    0x00052596 mov r7, r0                                        |     r7 = r0;
    0x00052598 cmp r3, 0                                         |     
    0x0005259a ite le                                            |     
                                                                 |     if (r3 > 0) {
    0x0005259c movle r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r3 <= 0) {
    0x0005259e movgt r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x000525a0 cmp.w sl, 1                                       |     
    0x000525a4 it ne                                             |     
                                                                 |     if (sl == 1) {
    0x000525a6 movne r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x000525a8 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000525aa bne.w 0x53a90                                     |         goto label_680;
                                                                 |     }
    0x000525ae ldr r4, [r5, 0x18]                                |     r4 = *((r5 + 0x18));
                                                                 |     if (r4 == 0) {
    0x000525b0 cbz r4, 0x5260a                                   |         goto label_681;
                                                                 |     }
                                                                 | label_146:
    0x000525b2 mov r4, r7                                        |     r4 = r7;
                                                                 | label_286:
    0x000525b4 ldr.w r3, [fp, 0x1e8]                             |     r3 = *(arg_1e8h);
    0x000525b8 cmp.w sl, 2                                       |     
    0x000525bc ldr.w r2, [fp, 0x14]                              |     r2 = *(arg_14h);
    0x000525c0 sub.w r3, r3, sb                                  |     r3 -= sb;
    0x000525c4 add.w sb, r3, -1                                  |     sb = r3 + -1;
                                                                 |     if (sl == 2) {
    0x000525c8 beq.w 0x53ac0                                     |         goto label_682;
                                                                 |     }
    0x000525cc cmp r2, 0                                         |     
                                                                 |     if (r2 <= 0) {
    0x000525ce ble.w 0x5393c                                     |         goto label_683;
                                                                 |     }
                                                                 | label_248:
    0x000525d2 mov.w r8, 0                                       |     r8 = 0;
    0x000525d6 b 0x525e2                                         |     
                                                                 |     while (r0 == 0) {
                                                                 | label_145:
    0x000525d8 add.w r8, r8, 1                                   |         r8++;
    0x000525dc cmp r2, r8                                        |         
                                                                 |         if (r2 <= r8) {
    0x000525de ble.w 0x53934                                     |             goto label_684;
                                                                 |         }
    0x000525e2 ldr.w r3, [fp, 0x10]                              |         r3 = *(arg_10h);
    0x000525e6 add.w r3, r3, r8, lsl 4                           |         r3 += (r8 << 4);
    0x000525ea ldr r0, [r3, 4]                                   |         r0 = *((r3 + 4));
    0x000525ec cmp r0, 0                                         |         
    0x000525ee beq 0x525d8                                       |         
                                                                 |     }
    0x000525f0 ldrb r3, [r0, 8]                                  |     r3 = *((r0 + 8));
    0x000525f2 cmp r3, 2                                         |     
                                                                 |     if (r3 != 2) {
    0x000525f4 bne 0x525d8                                       |         goto label_145;
                                                                 |     }
    0x000525f6 mov r2, sb                                        |     r2 = sb;
    0x000525f8 mov r1, sl                                        |     r1 = sl;
    0x000525fa bl 0x2ce0c                                        |     r0 = fcn_0002ce0c (r0, r1, r2);
    0x000525fe cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00052600 bne.w 0x532cc                                     |         goto label_685;
                                                                 |     }
    0x00052604 ldr.w r2, [fp, 0x14]                              |     r2 = *(arg_14h);
    0x00052608 b 0x525d8                                         |     goto label_145;
                                                                 | label_681:
    0x0005260a ldrb.w r3, [fp, 0x45]                             |     r3 = *(arg_45h);
    0x0005260e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00052610 beq 0x525b2                                       |         goto label_146;
                                                                 |     }
    0x00052612 cmp.w sl, 1                                       |     
                                                                 |     if (sl != 1) {
    0x00052616 bne.w 0x54086                                     |         goto label_686;
                                                                 |     }
    0x0005261a ldr r6, [sp, 0x24]                                |     r6 = *((sp + 0x24));
    0x0005261c ldr r1, [r6]                                      |     r1 = *(r6);
    0x0005261e ldr.w r2, [r1, 0x1f8]                             |     r2 = *((r1 + 0x1f8));
    0x00052622 ldr.w r3, [r1, 0x1f0]                             |     r3 = *((r1 + 0x1f0));
    0x00052626 ldr.w r0, [r1, 0x1fc]                             |     r0 = *((r1 + 0x1fc));
    0x0005262a adds r3, r3, r2                                   |     r3 += r2;
    0x0005262c ldr.w r2, [r1, 0x1f4]                             |     r2 = *((r1 + 0x1f4));
    0x00052630 adc.w r2, r2, r0                                  |     __asm ("adc.w r2, r2, r0");
    0x00052634 cmp r3, 1                                         |     
    0x00052636 sbcs r2, r2, 0                                    |     __asm ("sbcs r2, r2, 0");
                                                                 |     if (r3 >= 1) {
    0x0005263a bge.w 0x53aa0                                     |         goto label_687;
                                                                 |     }
    0x0005263e ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x00052640 strb.w sl, [fp, 0x3e]                             |     *(arg_3eh) = sl;
    0x00052644 bl 0x335d0                                        |     r0 = fcn_000335d0 (r0);
    0x00052648 cmp r0, 5                                         |     
                                                                 |     if (r0 == 5) {
    0x0005264a beq.w 0x54072                                     |         goto label_688;
                                                                 |     }
    0x0005264e ldr.w r1, [fp, 0x1e0]                             |     r1 = *(arg_1e0h);
    0x00052652 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00052654 strb.w r7, [fp, 0x45]                             |     *(arg_45h) = r7;
    0x00052658 cmp r1, r5                                        |     
    0x0005265a ldr r7, [r3, 0x50]                                |     r7 = *((r3 + 0x50));
    0x0005265c it ne                                             |     
                                                                 |     if (r1 == r5) {
    0x0005265e movne r4, sl                                      |         r4 = sl;
                                                                 |     }
                                                                 |     if (r1 == r5) {
    0x00052660 beq.w 0x54060                                     |         goto label_689;
                                                                 |     }
                                                                 |     do {
                                                                 | label_234:
    0x00052664 ldr r3, [r1, 0x18]                                |         r3 = *((r1 + 0x18));
    0x00052666 mov r0, fp                                        |         r0 = fp;
    0x00052668 str.w r3, [fp, 0x1e0]                             |         __asm ("str.w r3, [arg_1e0h]");
    0x0005266c bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
    0x00052670 ldr.w r1, [fp, 0x1e0]                             |         r1 = *(arg_1e0h);
    0x00052674 ldr.w r3, [fp, 0x1e8]                             |         r3 = *(arg_1e8h);
    0x00052678 cmp r1, r5                                        |         
    0x0005267a add.w r3, r3, -1                                  |         r3 += -1;
    0x0005267e str.w r3, [fp, 0x1e8]                             |         __asm ("str.w r3, [arg_1e8h]");
    0x00052680 adds r1, 0xe8                                     |         r1 += 0xe8;
    0x00052682 bne 0x52664                                       |         
                                                                 |     } while (r1 != 0xe8);
                                                                 | label_235:
    0x00052684 cmp.w sl, 1                                       |     
                                                                 |     if (sl == 1) {
    0x00052688 beq.w 0x53340                                     |         goto label_690;
                                                                 |     }
                                                                 | label_249:
    0x0005268c ldrd r2, r3, [r5, 8]                              |     __asm ("ldrd r2, r3, [r5, 8]");
    0x00052690 strd r2, r3, [fp, 0x1f0]                          |     __asm ("strd r2, r3, aav.0x000000ff");
    0x00052694 ldrd r2, r3, [r5, 0x10]                           |     __asm ("ldrd r2, r3, [r5, 0x10]");
    0x00052698 strd r2, r3, [fp, 0x1f8]                          |     __asm ("strd r2, r3, aav.0x000000ff");
    0x0005269c cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0005269e beq.w 0x5335e                                     |         goto label_691;
                                                                 |     }
                                                                 | label_206:
    0x000526a2 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x000526a4 mov r6, r7                                        |     r6 = r7;
    0x000526a6 adds r3, 1                                        |     r3++;
    0x000526a8 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x000526aa cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x000526ac beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x000526b0 b.w 0x4d740                                       |     goto label_7;
                                                                 | label_480:
    0x000526b4 ldr r2, [r0, 0x30]                                |     r2 = *((r0 + 0x30));
    0x000526b6 ldrd r2, ip, [r2]                                 |     __asm ("ldrd r2, ip, [r2]");
    0x000526ba b.w 0x4fcda                                       |     goto label_147;
                                                                 | label_429:
    0x000526be ldr r3, [r3]                                      |     r3 = *(r3);
    0x000526c0 ldr r1, [r3, 0x44]                                |     r1 = *((r3 + 0x44));
    0x000526c2 ldr r0, [r3]                                      |     r0 = *(r3);
    0x000526c4 bl 0x301ec                                        |     r0 = fcn_000301ec (r0, r1, r2);
    0x000526c8 mov r6, r0                                        |     r6 = r0;
    0x000526ca cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x000526cc beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x000526d0 b.w 0x4d740                                       |     goto label_7;
    0x000526d4 ldr r0, [r4, 0x24]                                |     r0 = *((r4 + 0x24));
    0x000526d6 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000526d8 beq.w 0x53844                                     |         goto label_692;
                                                                 |     }
    0x000526dc ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x000526de add r1, sp, 0xd8                                  |     r1 += arg_d8h;
    0x000526e0 ldr r4, [r0]                                      |     r4 = *(r0);
    0x000526e2 adds r3, 1                                        |     r3++;
    0x000526e4 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x000526e6 ldr r3, [r4]                                      |     r3 = *(r4);
    0x000526e8 ldr r3, [r3, 0x30]                                |     r3 = *((r3 + 0x30));
    0x000526ea blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t) (r1, r3);
    0x000526ec ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x000526ee mov r6, r0                                        |     r6 = r0;
    0x000526f0 ldr r7, [r3]                                      |     r7 = *(r3);
    0x000526f2 ldr r1, [r3, 0x2c]                                |     r1 = *((r3 + 0x2c));
    0x000526f4 mov r0, r7                                        |     r0 = r7;
    0x000526f6 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x000526fa ldr r1, [r4, 8]                                   |     r1 = *((r4 + 8));
    0x000526fc mov r0, r7                                        |     r0 = r7;
    0x000526fe bl 0xd418                                         |     fcn_0000d418 (r0, r1);
    0x00052702 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00052704 str r0, [r3, 0x2c]                                |     *((r3 + 0x2c)) = r0;
    0x00052706 ldr r0, [r4, 8]                                   |     r0 = *((r4 + 8));
    0x00052708 blx 0x6050                                        |     fcn_00006050 ();
    0x0005270c ldrd r2, r3, [sp, 0xd8]                           |     __asm ("ldrd r2, r3, [arg_d8h]");
    0x00052710 ldr r1, [sp, 0x38]                                |     r1 = *(arg_38h);
    0x00052712 str r5, [r4, 8]                                   |     *((r4 + 8)) = r5;
    0x00052714 strd r2, r3, [r1, 0x10]                           |     __asm ("strd r2, r3, [r1, 0x10]");
    0x00052718 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0005271a beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0005271e b.w 0x4d740                                       |     goto label_7;
                                                                 | label_360:
    0x00052722 str.w sl, [sp, 0x7c]                              |     __asm ("str.w sl, [arg_7ch]");
    0x00052726 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_347:
    0x0005272a ldr r7, [sp, 0x50]                                |     r7 = *(arg_50h);
    0x0005272c mov r6, fp                                        |     r6 = fp;
    0x0005272e mov fp, sl                                        |     
                                                                 |     do {
                                                                 |         if (r7 != 0) {
                                                                 | label_221:
    0x00052730 cbz r7, 0x52746                                   |             
    0x00052732 ldr r3, [r7]                                      |             r3 = *(r7);
                                                                 |             if (r3 != 0) {
    0x00052734 cbz r3, 0x52740                                   |                 
    0x00052736 ldr r3, [r3, 4]                                   |                 r3 = *((r3 + 4));
    0x00052738 mov r0, r7                                        |                 r0 = r7;
    0x0005273a blx r3                                            |                 uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0005273c movs r3, 0                                        |                 r3 = 0;
    0x0005273e str r3, [r7]                                      |                 *(r7) = r3;
                                                                 |             }
    0x00052740 mov r0, r7                                        |             r0 = r7;
    0x00052742 blx 0x6050                                        |             fcn_00006050 ();
                                                                 |         }
    0x00052746 ldr r2, [sp, 0x4c]                                |         r2 = *(arg_4ch);
    0x00052748 ldrd r2, r3, [r2, 0x24]                           |         __asm ("ldrd r2, r3, [r2, 0x24]");
    0x0005274c ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x0005274e add.w r3, r3, r3, lsl 1                           |         r3 += (r3 << 1);
    0x00052752 add.w r3, r2, r3, lsl 4                           |         r3 = r2 + (r3 << 4);
    0x00052756 ldr r4, [r3, 0x18]                                |         r4 = *((r3 + 0x18));
    0x00052758 clz r4, r4                                        |         r4 &= r4;
    0x0005275c lsrs r4, r4, 5                                    |         r4 >>= 5;
    0x0005275e b.w 0x51d94                                       |         goto label_148;
                                                                 | label_346:
    0x00052762 mov r6, fp                                        |         r6 = fp;
    0x00052764 mov fp, sl                                        |         
    0x00052766 b 0x52730                                         |         
                                                                 |     } while (1);
                                                                 | label_413:
    0x00052768 ldrb.w r3, [fp, 0x3e]                             |     r3 = *(arg_3eh);
                                                                 |     if (r3 != 0) {
    0x0005276c cbz r3, 0x52778                                   |         
    0x0005276e ldr.w r3, [fp, 0x90]                              |         r3 = *(arg_90h);
    0x00052772 cmp r3, 1                                         |         
                                                                 |         if (r3 <= 1) {
    0x00052774 ble.w 0x535c4                                     |             goto label_693;
                                                                 |         }
                                                                 |     }
    0x00052778 ldr r3, [pc, 0x25c]                               |     
    0x0005277a ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x0005277c add r3, pc                                        |     r3 = 0xa5158;
    0x0005277e add.w r0, r2, 0x2c                                |     r0 = r2 + 0x2c;
    0x00052782 b.w 0x5103e                                       |     goto label_149;
                                                                 | label_593:
    0x00052786 uxtb r3, r6                                       |     r3 = (int8_t) r6;
    0x00052788 cmp r3, 0x13                                      |     
                                                                 |     if (r3 != 0x13) {
    0x0005278a bne.w 0x5115c                                     |         goto label_150;
                                                                 |     }
    0x0005278e ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x00052790 ldr r3, [r2, 0x10]                                |     r3 = *((r2 + 0x10));
    0x00052792 ldrb r3, [r3, 0x10]                               |     r3 = *((r3 + 0x10));
    0x00052794 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00052796 beq.w 0x5115c                                     |         goto label_150;
                                                                 |     }
    0x0005279a ldrb r3, [r2, 3]                                  |     r3 = *((r2 + 3));
    0x0005279c cmp r3, 4                                         |     
                                                                 |     if (r3 == 4) {
    0x0005279e beq.w 0x53a86                                     |         goto label_694;
                                                                 |     }
    0x000527a2 ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x000527a4 cmp r3, 5                                         |     
    0x000527a6 it eq                                             |     
                                                                 |     if (r3 != 5) {
    0x000527a8 moveq r3, 2                                       |         r3 = 2;
                                                                 |     }
    0x000527aa strb.w r3, [r2, 0x56]                             |     *((r2 + 0x56)) = r3;
    0x000527ae b.w 0x4dbae                                       |     goto label_20;
                                                                 | label_395:
    0x000527b2 ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x000527b4 movs r3, 1                                        |     r3 = 1;
    0x000527b6 strh r3, [r2, 0x1c]                               |     *((r2 + 0x1c)) = r3;
                                                                 | label_547:
    0x000527b8 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x000527ba ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x000527be ldr r1, [r2, 0xc]                                 |     r1 = *((r2 + 0xc));
    0x000527c0 ldr r6, [r2, 4]                                   |     r6 = *((r2 + 4));
    0x000527c2 str r1, [sp, 0x3c]                                |     *(arg_3ch) = r1;
    0x000527c4 lsls r2, r1, 4                                    |     r2 = r1 << 4;
    0x000527c6 str r6, [sp, 0x2c]                                |     *(arg_2ch) = r6;
    0x000527c8 add r3, r2                                        |     r3 += r2;
    0x000527ca str r2, [sp, 0x34]                                |     *(arg_34h) = r2;
    0x000527cc ldr.w r8, [r3, 4]                                 |     r8 = *((r3 + 4));
    0x000527d0 mov r0, r8                                        |     r0 = r8;
    0x000527d2 bl 0xd140                                         |     fcn_0000d140 (r0);
    0x000527d6 ldr.w r5, [r8, 4]                                 |     r5 = *((r8 + 4));
    0x000527da ldr r3, [r5, 8]                                   |     r3 = *((r5 + 8));
    0x000527dc str r5, [sp, 0x28]                                |     *(arg_28h) = r5;
    0x000527de cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000527e0 beq.w 0x52eb0                                     |         goto label_695;
                                                                 |     }
    0x000527e4 mov.w r6, 0x106                                   |     r6 = 0x106;
                                                                 | label_186:
    0x000527e8 ldrb.w r3, [r8, 9]                                |     r3 = *((r8 + 9));
    0x000527ec cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000527ee beq.w 0x5303a                                     |         goto label_696;
                                                                 |     }
    0x000527f2 movs r5, 0                                        |     r5 = 0;
    0x000527f4 mov r7, r5                                        |     r7 = r5;
    0x000527f6 mov r4, r5                                        |     r4 = r5;
                                                                 | label_189:
    0x000527f8 ldr.w r3, [r8, 0xc]                               |     r3 = *((r8 + 0xc));
    0x000527fc subs r3, 1                                        |     r3--;
    0x000527fe str.w r3, [r8, 0xc]                               |     __asm ("str.w r3, [r8, 0xc]");
    0x00052802 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00052804 beq.w 0x53776                                     |         goto label_697;
                                                                 |     }
                                                                 | label_188:
    0x00052808 ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x0005280a movs r3, 4                                        |     r3 = 4;
    0x0005280c strd r7, r4, [r2, 0x10]                           |     __asm ("strd r7, r4, [r2, 0x10]");
    0x00052810 strh r3, [r2, 0x1c]                               |     *((r2 + 0x1c)) = r3;
    0x00052812 cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x00052814 bne.w 0x4f48c                                     |         goto label_27;
                                                                 |     }
    0x00052818 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0005281a adds r3, 1                                        |     r3++;
    0x0005281c str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0005281e cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00052820 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x00052824 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00052826 ldr r1, [sp, 0x34]                                |     r1 = *(arg_34h);
    0x00052828 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0005282a ldr.w r3, [fp, 0x10]                              |     r3 = *(arg_10h);
    0x0005282e add r3, r1                                        |     r3 += r1;
    0x00052830 ldr r1, [r3, 0xc]                                 |     r1 = *((r3 + 0xc));
    0x00052832 ldr r3, [r1, 0x10]                                |     r3 = *((r1 + 0x10));
                                                                 |     if (r3 == 0) {
    0x00052834 cbz r3, 0x52846                                   |         goto label_698;
                                                                 |     }
                                                                 |     do {
    0x00052836 ldr r0, [r3, 8]                                   |         r0 = *((r3 + 8));
    0x00052838 ldr r3, [r3]                                      |         r3 = *(r3);
    0x0005283a ldr r4, [r0, 0x20]                                |         r4 = *((r0 + 0x20));
    0x0005283c cmp r4, r5                                        |         
    0x0005283e it eq                                             |         
                                                                 |         if (r4 != r5) {
    0x00052840 streq r2, [r0, 0x20]                              |             *((r0 + 0x20)) = r2;
                                                                 |         }
    0x00052842 cmp r3, 0                                         |         
    0x00052844 bne 0x52836                                       |         
                                                                 |     } while (r3 != 0);
                                                                 | label_698:
    0x00052846 ldr r3, [r1, 0x20]                                |     r3 = *((r1 + 0x20));
                                                                 |     if (r3 == 0) {
    0x00052848 cbz r3, 0x5285a                                   |         goto label_699;
                                                                 |     }
                                                                 |     do {
    0x0005284a ldr r1, [r3, 8]                                   |         r1 = *((r3 + 8));
    0x0005284c ldr r3, [r3]                                      |         r3 = *(r3);
    0x0005284e ldr r0, [r1, 0x2c]                                |         r0 = *((r1 + 0x2c));
    0x00052850 cmp r0, r5                                        |         
    0x00052852 it eq                                             |         
                                                                 |         if (r0 != r5) {
    0x00052854 streq r2, [r1, 0x2c]                              |             *((r1 + 0x2c)) = r2;
                                                                 |         }
    0x00052856 cmp r3, 0                                         |         
    0x00052858 bne 0x5284a                                       |         
                                                                 |     } while (r3 != 0);
                                                                 | label_699:
    0x0005285a ldr r3, [sp, 0x3c]                                |     r3 = *(arg_3ch);
    0x0005285c adds r3, 1                                        |     r3++;
    0x0005285e uxtb r3, r3                                       |     r3 = (int8_t) r3;
    0x00052860 str r3, [sp, 0x64]                                |     *(arg_64h) = r3;
    0x00052862 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_575:
    0x00052866 ldrd r3, r2, [fp, 0x1f8]                          |     __asm ("ldrd r3, r2, [arg_1f8h]");
    0x0005286a orrs r3, r2                                       |     r3 |= r2;
    0x0005286c itete eq                                          |     
                                                                 |     if (r3 != r2) {
    0x0005286e ldreq r3, [sp, 0x20]                              |         r3 = *(arg_20h);
                                                                 |     }
                                                                 |     if (r3 == r2) {
    0x00052870 ldrne r3, [sp, 0x1c]                              |         r3 = *(arg_1ch);
                                                                 |     }
                                                                 |     if (r3 != r2) {
    0x00052872 ldreq r3, [r3, 8]                                 |         r3 = *((r3 + 8));
                                                                 |     }
                                                                 |     if (r3 == r2) {
    0x00052874 addne r3, 1                                       |         r3++;
                                                                 |     }
    0x00052876 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00052878 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_468:
    0x0005287c ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x0005287e ldr.w r2, [r0, 0x90]                              |     r2 = *((r0 + 0x90));
    0x00052882 adds r2, r2, r3                                   |     r2 += r3;
    0x00052884 ldr.w r3, [r0, 0x94]                              |     r3 = *((r0 + 0x94));
    0x00052888 str.w r2, [r0, 0x90]                              |     __asm ("str.w r2, [r0, 0x90]");
    0x0005288c adc.w r3, r1, r3                                  |     __asm ("adc.w r3, r1, r3");
    0x00052890 str.w r3, [r0, 0x94]                              |     __asm ("str.w r3, [r0, 0x94]");
    0x00052894 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_466:
    0x00052898 ldrd r3, r2, [fp, 0x1f8]                          |     __asm ("ldrd r3, r2, [arg_1f8h]");
    0x0005289c orrs r3, r2                                       |     r3 |= r2;
    0x0005289e itete eq                                          |     
                                                                 |     if (r3 != r2) {
    0x000528a0 ldreq r3, [sp, 0x20]                              |         r3 = *(arg_20h);
                                                                 |     }
                                                                 |     if (r3 == r2) {
    0x000528a2 ldrne r3, [sp, 0x1c]                              |         r3 = *(arg_1ch);
                                                                 |     }
                                                                 |     if (r3 != r2) {
    0x000528a4 ldreq r3, [r3, 8]                                 |         r3 = *((r3 + 8));
                                                                 |     }
                                                                 |     if (r3 == r2) {
    0x000528a6 addne r3, 1                                       |         r3++;
                                                                 |     }
    0x000528a8 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x000528aa b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_635:
    0x000528ae ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x000528b0 ldr r2, [pc, 0x128]                               |     
    0x000528b2 add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x000528b6 add r2, pc                                        |     r2 = 0xa5296;
    0x000528b8 b.w 0x512cc                                       |     goto label_151;
                                                                 | label_370:
    0x000528bc ldr r7, [sp, 0x2c]                                |     r7 = *(arg_2ch);
    0x000528be add.w r1, r4, 0x48                                |     r1 = r4 + 0x48;
    0x000528c2 mov r0, r7                                        |     r0 = r7;
    0x000528c4 bl 0xb570                                         |     fcn_0000b570 (r0, r1);
    0x000528c8 ldr r3, [r7, 0x20]                                |     r3 = *((r7 + 0x20));
    0x000528ca ldrh r2, [r7, 0x2c]                               |     r2 = *((r7 + 0x2c));
    0x000528cc ldrh r7, [r7, 0x2e]                               |     r7 = *((r7 + 0x2e));
    0x000528ce add r2, r3                                        |     r2 += r3;
    0x000528d0 ldr r3, [r4, 0x48]                                |     r3 = *((r4 + 0x48));
    0x000528d2 str r2, [r4, 0x54]                                |     *((r4 + 0x54)) = r2;
    0x000528d4 b.w 0x4e382                                       |     goto label_152;
                                                                 | label_499:
    0x000528d8 ldr r2, [pc, 0x104]                               |     
    0x000528da add r2, pc                                        |     r2 = 0xa52be;
    0x000528dc b.w 0x50d26                                       |     goto label_153;
                                                                 | label_315:
    0x000528e0 movs r3, 0                                        |     r3 = 0;
    0x000528e2 ldr r0, [r4]                                      |     r0 = *(r4);
    0x000528e4 mov r1, sl                                        |     r1 = sl;
    0x000528e6 str.w r3, [sl]                                    |     __asm ("str.w r3, [sl]");
    0x000528ea bl 0x2ef2c                                        |     r0 = fcn_0002ef2c (r0, r1);
    0x000528ee mov r6, r0                                        |     r6 = r0;
    0x000528f0 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000528f2 beq.w 0x52100                                     |         goto label_154;
                                                                 |     }
                                                                 | label_207:
    0x000528f6 mov sb, r6                                        |     sb = r6;
                                                                 | label_202:
    0x000528f8 ldrb.w r3, [fp, 0x40]                             |     r3 = *(arg_40h);
    0x000528fc cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000528fe bne.w 0x52ae2                                     |         goto label_226;
                                                                 |     }
    0x00052902 movw r3, 0xc0a                                    |     r3 = 0xc0a;
    0x00052906 cmp sb, r3                                        |     
                                                                 |     if (sb != r3) {
    0x00052908 bne.w 0x53ed0                                     |         goto label_700;
                                                                 |     }
    0x0005290c ldr r4, [sp, 0x24]                                |     r4 = *((sp + 0x24));
    0x0005290e mov r0, sb                                        |     r0 = sb;
    0x00052910 ldr r1, [pc, 0xd0]                                |     
    0x00052912 ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x00052914 ldr r3, [r4, 0x2c]                                |     r3 = *((r4 + 0x2c));
    0x00052916 str.w sb, [r4, 0x50]                              |     __asm ("str.w sb, [r4, 0x50]");
    0x0005291a add r1, pc                                        |     r1 = 0xa5302;
    0x0005291c str r3, [sp]                                      |     *(sp) = r3;
    0x0005291e ldr.w r3, [r4, 0xa8]                              |     r3 = *((r4 + 0xa8));
    0x00052922 blx 0x6820                                        |     fcn_00006820 ();
    0x00052926 mov r0, r4                                        |     r0 = r4;
    0x00052928 bl 0x335d0                                        |     fcn_000335d0 (r0);
    0x0005292c b.w 0x4d770                                       |     goto label_155;
                                                                 | label_376:
    0x00052930 mov r0, r5                                        |     r0 = r5;
    0x00052932 bl 0x17410                                        |     r0 = fcn_00017410 (r0);
    0x00052936 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00052938 beq.w 0x4e41a                                     |         goto label_156;
                                                                 |     }
    0x0005293c b.w 0x4d4ec                                       |     goto label_6;
                                                                 | label_209:
    0x00052940 mov r2, r8                                        |     r2 = r8;
    0x00052942 mov r1, r6                                        |     r1 = r6;
    0x00052944 mov r0, sl                                        |     r0 = sl;
    0x00052946 bl 0x1a768                                        |     fcn_0001a768 (r0, r1, r2);
                                                                 | label_208:
    0x0005294a mov r0, sl                                        |     r0 = sl;
    0x0005294c bl 0x171d4                                        |     r0 = fcn_000171d4 (r0);
    0x00052950 mov r4, r0                                        |     r4 = r0;
    0x00052952 ldrd r3, r0, [fp, 0xa4]                           |     __asm ("ldrd r3, r0, [arg_a4h]");
    0x00052956 mov r1, r4                                        |     r1 = r4;
    0x00052958 blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t) (r1, r3);
    0x0005295a mov r1, r4                                        |     r1 = r4;
    0x0005295c mov r0, fp                                        |     r0 = fp;
    0x0005295e bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x00052962 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_400:
    0x00052966 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00052968 mov r0, sl                                        |     r0 = sl;
    0x0005296a ldr r2, [pc, 0x7c]                                |     
    0x0005296c add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x00052970 add r2, pc                                        |     r2 = 0xa535e;
    0x00052972 b.w 0x50d2c                                       |     goto label_74;
                                                                 | label_402:
    0x00052976 ldr r2, [pc, 0x74]                                |     
    0x00052978 add r2, pc                                        |     r2 = 0xa536a;
    0x0005297a b.w 0x4eb62                                       |     goto label_157;
                                                                 | label_586:
    0x0005297e lsls r3, r5, 0x1f                                 |     r3 = r5 << 0x1f;
    0x00052980 it pl                                             |     
                                                                 |     if (r3 >= r5) {
    0x00052982 movpl r3, 1                                       |         r3 = 1;
                                                                 |         goto label_701;
                                                                 |     }
                                                                 |     if (r3 >= r5) {
                                                                 | label_701:
    0x00052984 bpl.w 0x4d572                                     |         goto label_158;
                                                                 |     }
    0x00052988 movw r3, 0x101                                    |     r3 = 0x101;
    0x0005298c ands r3, r6                                       |     r3 &= r6;
    0x0005298e subs r3, 1                                        |     r3--;
    0x00052990 it ne                                             |     
                                                                 |     if (r3 == 1) {
    0x00052992 movne r3, 1                                       |         r3 = 1;
                                                                 |     }
    0x00052994 b.w 0x4d572                                       |     goto label_158;
                                                                 | label_587:
    0x00052998 lsls r1, r2, 0x1c                                 |     r1 = r2 << 0x1c;
    0x0005299a itete mi                                          |     
                                                                 |     if (r1 >= r2) {
    0x0005299c ldrmi r3, [sp, 0x20]                              |         r3 = *(arg_20h);
                                                                 |     }
                                                                 |     if (r1 < r2) {
    0x0005299e ldrpl r3, [sp, 0x1c]                              |         r3 = *(arg_1ch);
                                                                 |     }
                                                                 |     if (r1 >= r2) {
    0x000529a0 ldrmi r3, [r3, 8]                                 |         r3 = *((r3 + 8));
                                                                 |     }
                                                                 |     if (r1 < r2) {
    0x000529a2 addpl r3, 1                                       |         r3++;
                                                                 |     }
    0x000529a4 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x000529a6 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_453:
    0x000529f0 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x000529f2 adds r3, 1                                        |     r3++;
    0x000529f4 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x000529f6 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_677:
    0x000529fa ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x000529fc mov.w r2, -1                                      |     r2 = -1;
    0x00052a00 mov r0, r4                                        |     r0 = r4;
    0x00052a02 mov r1, r2                                        |     r1 = r2;
    0x00052a04 str.w r3, [fp, 0x18]                              |     __asm ("str.w r3, [arg_18h]");
    0x00052a08 ldr r3, [sp, 0x28]                                |     r3 = *(arg_28h);
    0x00052a0a str.w r3, [fp, 0x50]                              |     __asm ("str.w r3, [arg_50h]");
    0x00052a0e ldr r3, [sp, 0x2c]                                |     r3 = *(arg_2ch);
    0x00052a10 str.w r3, [fp, 0x54]                              |     __asm ("str.w r3, [arg_54h]");
    0x00052a14 ldr r3, [sp, 0x34]                                |     r3 = *(arg_34h);
    0x00052a16 str.w r3, [fp, 0xa4]                              |     __asm ("str.w r3, [arg_a4h]");
    0x00052a1a movs r3, 1                                        |     r3 = 1;
    0x00052a1c bl 0x12250                                        |     fcn_00012250 (r0, r1, r2, r3);
    0x00052a20 movs r3, 1                                        |     r3 = 1;
    0x00052a22 strb.w r3, [fp, 0x3e]                             |     *(arg_3eh) = r3;
    0x00052a26 b.w 0x4ed74                                       |     goto label_159;
                                                                 | label_660:
    0x00052a2a ldr.w r8, [r8, sb]                                |     r8 = *((r8 + sb));
    0x00052a2e ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00052a30 str.w r8, [sp, 0xa8]                              |     __asm ("str.w r8, [arg_a8h]");
    0x00052a34 ldrb r3, [r3, 3]                                  |     r3 = *((r3 + 3));
    0x00052a36 tst.w r3, 0xc0                                    |     
                                                                 |     if ((r3 & 0xc0) == 0) {
    0x00052a3a beq.w 0x53160                                     |         goto label_702;
                                                                 |     }
    0x00052a3e cmp.w r8, 0xb                                     |     
                                                                 |     if (r8 < 0xb) {
    0x00052a42 bls.w 0x53136                                     |         goto label_703;
                                                                 |     }
    0x00052a46 tst.w r8, 1                                       |     
                                                                 |     if ((r8 & 1) != 0) {
    0x00052a4a beq 0x52a5e                                       |         
    0x00052a4c lsls r1, r3, 0x18                                 |         r1 = r3 << 0x18;
                                                                 |         if (r1 < r3) {
    0x00052a4e bmi 0x52a5e                                       |             goto label_704;
                                                                 |         }
                                                                 | label_196:
    0x00052a50 sub.w sl, r8, 0xc                                 |         sl = r8 - 0xc;
    0x00052a54 lsr.w r6, sl, 1                                   |         r6 = sl >> 1;
                                                                 | label_197:
    0x00052a58 cmp r6, 0                                         |         
                                                                 |         if (r6 != 0) {
    0x00052a5a bne.w 0x5366a                                     |             goto label_705;
                                                                 |         }
                                                                 |     }
                                                                 | label_704:
    0x00052a5e cmp.w r8, 0xd                                     |     
    0x00052a62 it hi                                             |     
                                                                 |     if (r8 <= 0xd) {
    0x00052a64 movhi r0, 0                                       |         r0 = 0;
                                                                 |     }
                                                                 |     if (r8 < 0xd) {
    0x00052a66 bls.w 0x5313a                                     |         goto label_706;
                                                                 |     }
                                                                 | label_192:
    0x00052a6a add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x00052a6c movs r3, 0                                        |     r3 = 0;
    0x00052a6e str r3, [r7, 0x24]                                |     *((r7 + 0x24)) = r3;
                                                                 | label_225:
    0x00052a70 mov r1, r8                                        |     r1 = r8;
    0x00052a72 mov r2, r5                                        |     r2 = r5;
    0x00052a74 bl 0xbe30                                         |     fcn_0000be30 (r0, r1, r2);
    0x00052a78 ldr r3, [r7, 0x24]                                |     r3 = *((r7 + 0x24));
    0x00052a7a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00052a7c beq.w 0x53634                                     |         goto label_707;
                                                                 |     }
    0x00052a80 ldr r2, [r7, 4]                                   |     r2 = *((r7 + 4));
    0x00052a82 str r3, [r5, 0x24]                                |     *((r5 + 0x24)) = r3;
    0x00052a84 ldr r3, [sp, 0x70]                                |     r3 = *(arg_70h);
    0x00052a86 str r2, [r5, 4]                                   |     *((r5 + 4)) = r2;
    0x00052a88 strb r3, [r5, 0x1e]                               |     *((r5 + 0x1e)) = r3;
    0x00052a8a ldrh r3, [r5, 0x1c]                               |     r3 = *((r5 + 0x1c));
    0x00052a8c bic r3, r3, 0x1800                                |     r3 = BIT_MASK (r3, 0x1800);
    0x00052a90 orr r3, r3, 0x200                                 |     r3 |= 0x200;
    0x00052a94 strh r3, [r5, 0x1c]                               |     *((r5 + 0x1c)) = r3;
    0x00052a96 b.w 0x4e41a                                       |     goto label_156;
                                                                 | label_651:
    0x00052a9a ldrh.w r3, [sl, 0x1c]                             |     r3 = *((sl + 0x1c));
    0x00052a9e movw r2, 0x2460                                   |     r2 = 0x2460;
    0x00052aa2 mov r4, sl                                        |     r4 = sl;
    0x00052aa4 tst r2, r3                                        |     
                                                                 |     if ((r2 & r3) != 0) {
    0x00052aa6 bne.w 0x53650                                     |         goto label_708;
                                                                 |     }
                                                                 | label_223:
    0x00052aaa ldr r1, [r4, 0x24]                                |     r1 = *((r4 + 0x24));
                                                                 |     if (r1 != 0) {
    0x00052aac cbz r1, 0x52ab8                                   |         
    0x00052aae ldr r0, [r4]                                      |         r0 = *(r4);
    0x00052ab0 bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
    0x00052ab4 movs r3, 0                                        |         r3 = 0;
    0x00052ab6 str r3, [r4, 0x24]                                |         *((r4 + 0x24)) = r3;
                                                                 |     }
    0x00052ab8 movs r3, 0                                        |     r3 = 0;
    0x00052aba str r3, [r4, 4]                                   |     *((r4 + 4)) = r3;
    0x00052abc blx 0x5fe8                                        |     fcn_00005fe8 ();
    0x00052ac0 ldr.w r1, [pc, 0xc58]                             |     r1 = *(0x0005371c);
    0x00052ac4 mov.w r2, 0xdb0                                   |     r2 = 0xdb0;
    0x00052ac8 add.w r3, r0, 0x14                                |     r3 = r0 + 0x14;
    0x00052acc movt r2, 1                                        |     r2 = (r2 & 0xFFFF) | 0x10000;
    0x00052ad0 movs r0, 0xb                                      |     r0 = 0xb;
    0x00052ad2 add r1, pc                                        |     r1 += pc;
    0x00052ad4 blx 0x6820                                        |     fcn_00006820 ();
    0x00052ad8 ldrb.w r3, [fp, 0x40]                             |     r3 = *(arg_40h);
    0x00052adc cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00052ade beq.w 0x53384                                     |         goto label_709;
                                                                 |     }
                                                                 | label_226:
    0x00052ae2 ldr.w r3, [pc, 0xc3c]                             |     
    0x00052ae6 mov.w sb, 7                                       |     sb = 7;
    0x00052aea ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x00052aec add r3, pc                                        |     r3 = 0xa6212;
    0x00052aee add.w r0, r2, 0x2c                                |     r0 = r2 + 0x2c;
    0x00052af2 b 0x524aa                                         |     goto label_160;
                                                                 | label_582:
    0x00052af4 ldrh.w r0, [sp, 0xdc]                             |     r0 = *(arg_dch);
    0x00052af8 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00052afa beq.w 0x50f2c                                     |         goto label_161;
                                                                 |     }
    0x00052afe ldr r2, [sp, 0xe0]                                |     r2 = *(arg_e0h);
    0x00052b00 b 0x52b0c                                         |     goto label_710;
                                                                 | label_162:
    0x00052b02 adds r3, 1                                        |     r3++;
    0x00052b04 adds r2, 0x28                                     |     r2 += 0x28;
    0x00052b06 cmp r3, r0                                        |     
                                                                 |     if (r3 == r0) {
    0x00052b08 beq.w 0x50f2c                                     |         goto label_161;
                                                                 |     }
                                                                 | label_710:
    0x00052b0c ldrh r1, [r2, 0x1c]                               |     r1 = *((r2 + 0x1c));
    0x00052b0e lsls r6, r1, 0x1f                                 |     r6 = r1 << 0x1f;
                                                                 |     if (r6 >= r1) {
    0x00052b10 bpl 0x52b02                                       |         goto label_162;
                                                                 |     }
    0x00052b12 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00052b14 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00052b16 subs r3, 1                                        |     r3--;
    0x00052b18 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00052b1a b.w 0x50f2c                                       |     goto label_161;
                                                                 | label_585:
    0x00052b1e ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00052b20 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00052b22 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00052b24 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_584:
    0x00052b28 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00052b2a beq.w 0x53570                                     |         goto label_711;
                                                                 |     }
    0x00052b2e ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00052b30 adds r3, 1                                        |     r3++;
    0x00052b32 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00052b34 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_638:
    0x00052b38 mov r0, r8                                        |     r0 = r8;
    0x00052b3a ldr r5, [r4]                                      |     r5 = *(r4);
    0x00052b3c bl 0xd140                                         |     fcn_0000d140 (r0);
    0x00052b40 ldr.w r3, [r8, 4]                                 |     r3 = *((r8 + 4));
    0x00052b44 ldrh r2, [r3, 0x16]                               |     r2 = *((r3 + 0x16));
    0x00052b46 lsls r0, r2, 0x1f                                 |     r0 = r2 << 0x1f;
    0x00052b48 it mi                                             |     
                                                                 |     if (r0 >= r2) {
    0x00052b4a movmi r6, 8                                       |         r6 = 8;
                                                                 |     }
                                                                 |     if (r0 >= r2) {
    0x00052b4c bmi 0x52b7a                                       |         
    0x00052b4e ldr r2, [r3, 0x2c]                                |         r2 = *((r3 + 0x2c));
    0x00052b50 movw r1, 0xffff                                   |         r1 = 0xffff;
    0x00052b54 strb.w r7, [r5, 0x50]                             |         *((r5 + 0x50)) = r7;
    0x00052b58 str r6, [r5, 0x10]                                |         *((r5 + 0x10)) = r6;
    0x00052b5a subs r2, 0                                        |         
    0x00052b5c strd r8, r3, [r5]                                 |         __asm ("strd r8, r3, [r5]");
    0x00052b60 it ne                                             |         
                                                                 |         if (r2 == 0) {
    0x00052b62 movne r2, 1                                       |             r2 = 1;
                                                                 |         }
    0x00052b64 str r2, [r5, 0x44]                                |         *((r5 + 0x44)) = r2;
    0x00052b66 ldr r2, [r3, 8]                                   |         r2 = *((r3 + 8));
    0x00052b68 strh.w r1, [r5, 0x54]                             |         *((r5 + 0x54)) = r1;
    0x00052b6c str r2, [r5, 8]                                   |         *((r5 + 8)) = r2;
                                                                 |         if (r2 != 0) {
    0x00052b6e cbz r2, 0x52b72                                   |             
    0x00052b70 str r5, [r2, 0xc]                                 |             *((r2 + 0xc)) = r5;
                                                                 |         }
    0x00052b72 movs r2, 0                                        |         r2 = 0;
    0x00052b74 str r5, [r3, 8]                                   |         *((r3 + 8)) = r5;
    0x00052b76 strb.w r2, [r5, 0x51]                             |         *((r5 + 0x51)) = r2;
                                                                 |     }
    0x00052b7a ldrb.w r2, [r8, 9]                                |     r2 = *((r8 + 9));
                                                                 |     if (r2 != 0) {
    0x00052b7e cbz r2, 0x52b90                                   |         
    0x00052b80 ldr.w r5, [r8, 0xc]                               |         r5 = *((r8 + 0xc));
    0x00052b84 subs r5, 1                                        |         r5--;
    0x00052b86 str.w r5, [r8, 0xc]                               |         __asm ("str.w r5, [r8, 0xc]");
    0x00052b8a cmp r5, 0                                         |         
                                                                 |         if (r5 == 0) {
    0x00052b8c beq.w 0x5357a                                     |             goto label_712;
                                                                 |         }
                                                                 |     }
                                                                 | label_215:
    0x00052b90 ldrb r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x00052b92 orr r3, r3, 4                                     |     r3 |= 4;
    0x00052b96 strb r3, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r3;
    0x00052b98 b.w 0x4da28                                       |     goto label_101;
                                                                 | label_674:
    0x00052b9c ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00052b9e ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00052ba0 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00052ba2 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_579:
    0x00052ba6 mov r0, r6                                        |     r0 = r6;
    0x00052ba8 bl 0x7dc8                                         |     fcn_00007dc8 (r0);
    0x00052bac b.w 0x50ea0                                       |     goto label_163;
                                                                 | label_655:
    0x00052bb0 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00052bb2 adds r3, 1                                        |     r3++;
    0x00052bb4 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00052bb6 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_479:
    0x00052bba ldr r0, [sp, 0x38]                                |     r0 = *(arg_38h);
    0x00052bbc bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x00052bc0 b.w 0x4fc80                                       |     goto label_164;
                                                                 | label_436:
    0x00052bc4 ldr r0, [r3, 0x38]                                |     r0 = *((r3 + 0x38));
    0x00052bc6 blx 0x63dc                                        |     fcn_000063dc ();
    0x00052bca strb r5, [r6, 0xa]                                |     *((r6 + 0xa)) = r5;
    0x00052bcc b.w 0x4f2e0                                       |     goto label_165;
                                                                 | label_386:
    0x00052bd0 ldr r0, [sp, 0x38]                                |     r0 = *(arg_38h);
    0x00052bd2 bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x00052bd6 b.w 0x4e64e                                       |     goto label_166;
                                                                 | label_581:
    0x00052bda ldr.w r0, [sl, 0xc]                               |     r0 = *((sl + 0xc));
    0x00052bde bl 0xd3a0                                         |     r0 = fcn_0000d3a0 (r0, r1);
    0x00052be2 mov sb, r0                                        |     sb = r0;
    0x00052be4 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00052be6 beq.w 0x4d4ec                                     |         goto label_6;
                                                                 |     }
    0x00052be8 add r4, sp, 0x204                                 |     r4 = sp + 0x204;
    0x00052bea ldrh.w r3, [sl, 6]                                |     r3 = *((sl + 6));
    0x00052bee mov r5, sb                                        |     r5 = sb;
    0x00052bf0 ldr r0, [r4, 8]                                   |     r0 = *((r4 + 8));
    0x00052bf2 adds r3, 1                                        |     r3++;
    0x00052bf4 b.w 0x50efc                                       |     goto label_167;
                                                                 | label_320:
    0x00052bf8 str.w r8, [sp, 0x1c]                              |     __asm ("str.w r8, [arg_1ch]");
    0x00052bfc b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_313:
    0x00052c00 mov r0, r6                                        |     r0 = r6;
    0x00052c02 bl 0x173c0                                        |     fcn_000173c0 (r0);
    0x00052c06 b.w 0x4d7c2                                       |     goto label_168;
                                                                 | label_536:
    0x00052c0a ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00052c0c adds r3, 1                                        |     r3++;
    0x00052c0e str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00052c10 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_302:
    0x00052c14 mov r0, r4                                        |     r0 = r4;
    0x00052c16 bl 0x173c0                                        |     fcn_000173c0 (r0);
    0x00052c1a b.w 0x4d55c                                       |     goto label_169;
                                                                 | label_301:
    0x00052c1e mov r0, r7                                        |     r0 = r7;
    0x00052c20 bl 0x173c0                                        |     fcn_000173c0 (r0);
    0x00052c24 b.w 0x4d554                                       |     goto label_170;
                                                                 | label_300:
    0x00052c28 ldr.w sb, [sp, 0x70]                              |     sb = *(arg_70h);
    0x00052c2c mov r1, r8                                        |     r1 = r8;
    0x00052c2e mov r0, r7                                        |     r0 = r7;
    0x00052c30 mov r2, sb                                        |     r2 = sb;
    0x00052c32 bl 0x25cf0                                        |     fcn_00025cf0 (r0, r1, r2);
    0x00052c36 mov r2, sb                                        |     r2 = sb;
    0x00052c38 mov r1, r8                                        |     r1 = r8;
    0x00052c3a mov r0, r4                                        |     r0 = r4;
    0x00052c3c bl 0x25cf0                                        |     fcn_00025cf0 (r0, r1, r2);
    0x00052c40 ldrb.w r3, [fp, 0x40]                             |     r3 = *(arg_40h);
    0x00052c44 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00052c46 bne.w 0x4d4ec                                     |         goto label_6;
                                                                 |     }
    0x00052c4a ldrh r3, [r7, 0x1c]                               |     r3 = *((r7 + 0x1c));
    0x00052c4c b.w 0x4d54e                                       |     goto label_171;
                                                                 | label_371:
    0x00052c50 mov r1, sl                                        |     r1 = sl;
    0x00052c52 bl 0x9d84                                         |     fcn_00009d84 (r0, r1);
    0x00052c56 ldr r3, [sp, 0x94]                                |     r3 = *(arg_94h);
    0x00052c58 b.w 0x4e3b0                                       |     goto label_172;
                                                                 | label_571:
    0x00052c5c blx 0x5fe8                                        |     fcn_00005fe8 ();
    0x00052c60 ldr.w r1, [pc, 0xac0]                             |     r1 = *(0x00053724);
    0x00052c64 add.w r3, r0, 0x14                                |     r3 = r0 + 0x14;
    0x00052c68 movw r2, 0xe123                                   |     r2 = 0xe123;
    0x00052c6c movs r0, 0xb                                      |     r0 = 0xb;
    0x00052c6e add r1, pc                                        |     r1 += pc;
    0x00052c70 blx 0x6820                                        |     fcn_00006820 ();
    0x00052c74 ldrb r3, [r4, 9]                                  |     r3 = *((r4 + 9));
    0x00052c76 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00052c78 bne.w 0x5318a                                     |         goto label_713;
                                                                 |     }
    0x00052c7c ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00052c7e mov.w sb, 0xb                                     |     sb = 0xb;
    0x00052c82 add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x00052c86 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00052c88 ldr r0, [r3, 0x2c]                                |     r0 = *((r3 + 0x2c));
    0x00052c8a b.w 0x50538                                       |     goto label_39;
                                                                 | label_594:
    0x00052c8e ldr r3, [r4, 0x10]                                |     r3 = *((r4 + 0x10));
    0x00052c90 ldr r1, [sp, 0x44]                                |     r1 = *(arg_44h);
    0x00052c92 add.w r3, r3, r3, lsl 2                           |     r3 += (r3 << 2);
    0x00052c96 add.w r3, r1, r3, lsl 3                           |     r3 = r1 + (r3 << 3);
    0x00052c9a ldr r7, [r3, 0x18]                                |     r7 = *((r3 + 0x18));
    0x00052c9c ldr r0, [r3, 4]                                   |     r0 = *((r3 + 4));
    0x00052c9e strd r7, r7, [r4, 0x48]                           |     __asm ("strd r7, r7, [r4, 0x48]");
    0x00052ca2 str r0, [r4, 0x54]                                |     *((r4 + 0x54)) = r0;
    0x00052ca4 b.w 0x4e39c                                       |     goto label_173;
                                                                 | label_514:
    0x00052ca8 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x00052caa ldrb r3, [r2, 9]                                  |     r3 = *((r2 + 9));
    0x00052cac cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00052cae beq.w 0x5134c                                     |         goto label_174;
                                                                 |     }
    0x00052cb2 ldr r4, [r2, 0xc]                                 |     r4 = *((r2 + 0xc));
    0x00052cb4 subs r4, 1                                        |     r4--;
    0x00052cb6 str r4, [r2, 0xc]                                 |     *((r2 + 0xc)) = r4;
    0x00052cb8 cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x00052cba bne.w 0x5134c                                     |         goto label_174;
                                                                 |     }
    0x00052cbe ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x00052cc0 mov r5, r2                                        |     r5 = r2;
    0x00052cc2 ldr r0, [r3, 0x38]                                |     r0 = *((r3 + 0x38));
    0x00052cc4 blx 0x63dc                                        |     fcn_000063dc ();
    0x00052cc8 strb r4, [r5, 0xa]                                |     *((r5 + 0xa)) = r4;
    0x00052cca b.w 0x5134c                                       |     goto label_174;
                                                                 | label_646:
    0x00052cce ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00052cd0 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00052cd2 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00052cd4 b.w 0x51622                                       |     goto label_113;
                                                                 | label_431:
    0x00052cd8 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00052cda ldr.w r5, [r3, 0xa8]                              |     r5 = *((r3 + 0xa8));
    0x00052cde cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00052ce0 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x00052ce4 b.w 0x4f222                                       |     goto label_175;
                                                                 | label_647:
    0x00052ce8 vmrs apsr_nzcv, fpscr                             |     __asm ("vmrs apsr_nzcv, fpscr");
    0x00052cec ite eq                                            |     
                                                                 |     if (r5 != 0) {
    0x00052cee moveq r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r5 == 0) {
    0x00052cf0 movne r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x00052cf2 b.w 0x51eb8                                       |     goto label_176;
                                                                 | label_504:
    0x00052cf6 ldr.w r3, [fp, 0x1e8]                             |     r3 = *(arg_1e8h);
    0x00052cfa adds r3, 1                                        |     r3++;
    0x00052cfc str.w r3, [fp, 0x1e8]                             |     __asm ("str.w r3, [arg_1e8h]");
    0x00052d00 b.w 0x500ec                                       |     goto label_177;
                                                                 | label_596:
    0x00052d04 mov r0, r7                                        |     r0 = r7;
    0x00052d06 bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x00052d0a b.w 0x512a6                                       |     goto label_178;
                                                                 | label_598:
    0x00052d0e ldr.w r0, [r8]                                    |     r0 = *(r8);
    0x00052d12 ldrb.w r2, [r0, 0x51]                             |     r2 = *((r0 + 0x51));
    0x00052d16 cmp r2, 1                                         |     
    0x00052d18 ittt ne                                           |     
                                                                 |     if (r2 == 1) {
    0x00052d1a movne r2, 1                                       |         r2 = 1;
                                                                 |     }
                                                                 |     if (r2 == 1) {
    0x00052d1c addne r7, sp, 0xd8                                |         r7 += arg_d8h;
                                                                 |     }
                                                                 |     if (r2 == 1) {
    0x00052d1e addne r4, sp, 0xdc                                |         r4 += arg_dch;
                                                                 |     }
                                                                 |     if (r2 == 1) {
    0x00052d20 beq.w 0x536a6                                     |         goto label_714;
                                                                 |     }
                                                                 | label_277:
    0x00052d24 str r2, [r7]                                      |     *(r7) = r2;
    0x00052d26 str r3, [r4]                                      |     *(r4) = r3;
    0x00052d28 b.w 0x51388                                       |     goto label_179;
                                                                 | label_321:
    0x00052d2c str.w r8, [sp, 0x1c]                              |     __asm ("str.w r8, [arg_1ch]");
    0x00052d30 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_374:
    0x00052d34 ldr r1, [r4, 0x54]                                |     r1 = *((r4 + 0x54));
    0x00052d36 str r1, [sp, 0x34]                                |     *(arg_34h) = r1;
    0x00052d38 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00052d3a beq.w 0x5394a                                     |         goto label_715;
                                                                 |     }
    0x00052d3e ldr r1, [sp, 0x34]                                |     r1 = *(arg_34h);
    0x00052d40 str r1, [sp, 0x4c]                                |     *(arg_4ch) = r1;
                                                                 | label_237:
    0x00052d42 ldr r0, [sp, 0x3c]                                |     r0 = *(arg_3ch);
    0x00052d44 add.w sl, sp, 0x94                                |     sl += arg_94h;
    0x00052d48 ldr r1, [sp, 0x34]                                |     r1 = *(arg_34h);
    0x00052d4a strd r4, r8, [sp, 0x50]                           |     __asm ("strd r4, r8, [sp, 0x50]");
    0x00052d4e ldr.w r3, [r0, r3, lsl 2]                         |     offset_56 = r3 << 2;
                                                                 |     r3 = *((r0 + offset_56));
    0x00052d52 add.w sb, r1, r2                                  |     sb = r1 + r2;
    0x00052d56 lsls r2, r6, 2                                    |     r2 = r6 << 2;
    0x00052d58 str.w r3, [sl]                                    |     __asm ("str.w r3, [sl]");
    0x00052d5c adds r7, r0, r2                                   |     r7 = r0 + r2;
    0x00052d5e ldr r3, [sp, 0x48]                                |     r3 = *(arg_48h);
    0x00052d60 ldr.w r3, [r8, r3, lsl 2]                         |     offset_57 = r3 << 2;
                                                                 |     r3 = *((r8 + offset_57));
    0x00052d64 mov r8, r5                                        |     r8 = r5;
    0x00052d66 add r3, r1                                        |     r3 += r1;
    0x00052d68 ldr.w r1, [pc, 0x9bc]                             |     r1 = *(0x00053728);
    0x00052d6c mov r5, r3                                        |     r5 = r3;
    0x00052d6e add r1, pc                                        |     r1 += pc;
    0x00052d70 str r1, [sp, 0x58]                                |     *(arg_58h) = r1;
    0x00052d72 add r1, sp, 0xa8                                  |     r1 += arg_a8h;
    0x00052d74 str r1, [sp, 0x48]                                |     *(arg_48h) = r1;
    0x00052d76 add.w r1, r2, 0x54                                |     r1 = r2 + 0x54;
    0x00052d7a adds r2, r4, r1                                   |     r2 = r4 + r1;
    0x00052d7c ldr r1, [sp, 0x48]                                |     r1 = *(arg_48h);
    0x00052d7e mov r4, r2                                        |     r4 = r2;
    0x00052d80 b 0x52dcc                                         |     goto label_716;
                                                                 | label_181:
    0x00052d82 add.w sb, sb, 1                                   |     sb++;
    0x00052d86 str r0, [r1]                                      |     *(r1) = r0;
                                                                 | label_182:
    0x00052d88 cmp r0, 0xb                                       |     
    0x00052d8a str r0, [r4, 4]!                                  |     *((r4 += 4)) = r0;
    0x00052d8e iteet ls                                          |     
                                                                 |     if (r0 > 0xb) {
    0x00052d90 ldrls r3, [sp, 0x58]                              |         r3 = *(arg_58h);
                                                                 |     }
                                                                 |     if (r0 <= 0xb) {
    0x00052d92 subhi r0, 0xc                                     |         r0 -= 0xc;
                                                                 |     }
                                                                 |     if (r0 <= 0xb) {
    0x00052d94 lsrhi ip, r0, 1                                   |         
                                                                 |     }
                                                                 |     if (r0 <= 0xb) {
    0x00052d98 adds r0, r0, r3                                   |         r0 += r3;
                                                                 |     }
    0x00052d9a it ls                                             |     
                                                                 |     if (r0 > r0) {
    0x00052d9c ldrbls ip, [r0, 0xa6c]                            |         ip = *((r0 + 0xa6c));
                                                                 |     }
    0x00052da0 ldr.w r0, [sl]                                    |     r0 = *(sl);
    0x00052da4 adds.w r0, r0, ip                                 |     r0 += ip;
    0x00052da8 str.w r0, [sl]                                    |     __asm ("str.w r0, [sl]");
                                                                 |     if (r0 >= r0) {
    0x00052dac bhs.w 0x5398a                                     |         goto label_717;
                                                                 |     }
    0x00052db0 str r0, [r7, 4]!                                  |     *((r7 += 4)) = r0;
    0x00052db4 adds r6, 1                                        |     r6++;
    0x00052db6 ldr r0, [sp, 0x28]                                |     r0 = *(arg_28h);
    0x00052db8 cmp r0, r6                                        |     
    0x00052dba ite lt                                            |     
                                                                 |     if (r0 >= r6) {
    0x00052dbc movlt r0, 0                                       |         r0 = 0;
                                                                 |     }
                                                                 |     if (r0 < r6) {
    0x00052dbe movge r0, 1                                       |         r0 = 1;
                                                                 |     }
    0x00052dc0 cmp sb, r5                                        |     
    0x00052dc2 it hs                                             |     
                                                                 |     if (sb < r5) {
    0x00052dc4 movhs r0, 0                                       |         r0 = 0;
                                                                 |     }
    0x00052dc6 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00052dc8 beq.w 0x521b4                                     |         goto label_180;
                                                                 |     }
                                                                 | label_716:
    0x00052dcc ldrb.w r0, [sb]                                   |     r0 = *(sb);
    0x00052dd0 lsls r3, r0, 0x18                                 |     r3 = r0 << 0x18;
                                                                 |     if (r3 >= r0) {
    0x00052dd2 bpl 0x52d82                                       |         goto label_181;
                                                                 |     }
    0x00052dd4 mov r0, sb                                        |     r0 = sb;
    0x00052dd6 str r1, [sp, 0x48]                                |     *(arg_48h) = r1;
    0x00052dd8 bl 0x9d84                                         |     fcn_00009d84 (r0, r1);
    0x00052ddc ldr r1, [sp, 0x48]                                |     r1 = *(arg_48h);
    0x00052dde add sb, r0                                        |     sb += r0;
    0x00052de0 ldr r0, [r1]                                      |     r0 = *(r1);
    0x00052de2 b 0x52d88                                         |     goto label_182;
                                                                 | label_640:
    0x00052de4 ldrd r2, r0, [r4]                                 |     __asm ("ldrd r2, r0, [r4]");
    0x00052de8 mov r3, sb                                        |     r3 = sb;
    0x00052dea ldr r1, [r7]                                      |     r1 = *(r7);
    0x00052dec str.w sb, [r4, 8]                                 |     __asm ("str.w sb, [r4, 8]");
    0x00052df0 str r2, [sp]                                      |     *(sp) = r2;
    0x00052df2 movs r2, 1                                        |     r2 = 1;
    0x00052df4 bl 0x119f0                                        |     r0 = fcn_000119f0 (r0, r1, r2, r3, r4);
    0x00052df8 mov r6, r0                                        |     r6 = r0;
    0x00052dfa b.w 0x51ce4                                       |     goto label_183;
                                                                 | label_679:
    0x00052dfe ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x00052e00 mov r3, r4                                        |     r3 = r4;
    0x00052e02 ldr r4, [sp, 0x24]                                |     r4 = *((sp + 0x24));
    0x00052e04 mov r1, fp                                        |     r1 = fp;
    0x00052e06 mov.w sb, 1                                       |     sb = 1;
    0x00052e0a add.w r8, r2, 1                                   |     r8 = r2 + 1;
    0x00052e0e ldr.w r2, [pc, 0x91c]                             |     r2 = *(0x0005372c);
    0x00052e12 add.w r0, r4, 0x2c                                |     r0 = r4 + 0x2c;
    0x00052e16 add r2, pc                                        |     r2 += pc;
    0x00052e18 bl 0x1c9d0                                        |     fcn_0001c9d0 (r0, r1);
    0x00052e1c ldr r0, [r4, 0x2c]                                |     r0 = *((r4 + 0x2c));
    0x00052e1e b.w 0x50538                                       |     goto label_39;
                                                                 | label_561:
    0x00052e22 mov r0, r8                                        |     r0 = r8;
    0x00052e24 blx 0x5f0c                                        |     fcn_00005f0c ();
    0x00052e28 ldr.w r2, [pc, 0x904]                             |     r2 = *(0x00053730);
    0x00052e2c mov r3, r0                                        |     r3 = r0;
    0x00052e2e ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x00052e30 mov r1, fp                                        |     r1 = fp;
    0x00052e32 add r2, pc                                        |     r2 += pc;
    0x00052e34 adds r0, 0x2c                                     |     r0 += 0x2c;
    0x00052e36 bl 0x1c9d0                                        |     fcn_0001c9d0 (r0, r1);
    0x00052e3a ldr r6, [r7, 0x40]                                |     r6 = *((r7 + 0x40));
    0x00052e3c b.w 0x50a3e                                       |     goto label_184;
                                                                 | label_362:
    0x00052e40 mov r0, r4                                        |     r0 = r4;
    0x00052e42 bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x00052e44 pld [pc, -0x7fb]                                  |     __asm ("pld aav.0x00000085");
                                                                 |     if (r5 != 0) {
    0x00052e48 cbnz r5, 0x52e7e                                  |         goto label_718;
                                                                 |     }
                                                                 | label_447:
    0x00052e4a ldr r3, [r5, 0xc]                                 |     r3 = *((r5 + 0xc));
    0x00052e4c str r4, [r5, 8]                                   |     *((r5 + 8)) = r4;
    0x00052e4e ldr r0, [r5]                                      |     r0 = *(r5);
    0x00052e50 subs r3, 1                                        |     r3--;
    0x00052e52 str r4, [r7, 0x3c]                                |     *((r7 + 0x3c)) = r4;
    0x00052e54 str r3, [r5, 0xc]                                 |     *((r5 + 0xc)) = r3;
    0x00052e56 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00052e58 bne.w 0x505d0                                     |         goto label_185;
                                                                 |     }
    0x00052e5c mov r1, r5                                        |     r1 = r5;
    0x00052e5e bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x00052e62 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00052e64 ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x00052e66 adds r3, 1                                        |     r3++;
    0x00052e68 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00052e6a ldrb.w r3, [r2, 0x58]                             |     r3 = *((r2 + 0x58));
    0x00052e6e bfi r3, r4, 2, 2                                  |     value_58 = BIT_MASK (2, 2);
                                                                 |     value_59 = r4 & value_58;
                                                                 |     value_58 = ~value_58;
                                                                 |     r3 &= value_58;
                                                                 |     r3 |= value_59;
    0x00052e72 strb.w r3, [r2, 0x58]                             |     *((r2 + 0x58)) = r3;
    0x00052e76 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_648:
    0x00052e7a lsrs r3, r6, 7                                    |     r3 = r6 >> 7;
    0x00052e7c movs r5, 2                                        |     r5 = 2;
                                                                 | label_718:
    0x00052e7e orn r3, r3, 0x7f                                  |     r3 |= 0x7f;
                                                                 |     r3 = ~r3;
    0x00052e82 strb.w r3, [sb]                                   |     *(sb) = r3;
    0x00052e86 and r3, r6, 0x7f                                  |     r3 = r6 & 0x7f;
    0x00052e8a strb.w r3, [sb, 1]                                |     *((sb + 1)) = r3;
    0x00052e8e b.w 0x506be                                       |     goto label_117;
                                                                 | label_459:
    0x00052e92 mov r0, r4                                        |     r0 = r4;
    0x00052e94 bl 0x173c0                                        |     fcn_000173c0 (r0);
    0x00052e98 ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x00052e9a mov r6, r0                                        |     r6 = r0;
    0x00052e9c bic r3, r3, 0x4000                                |     r3 = BIT_MASK (r3, 0x4000);
    0x00052ea0 bic r3, r3, 0x1c                                  |     r3 = BIT_MASK (r3, 0x1c);
    0x00052ea4 strh r3, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r3;
    0x00052ea6 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00052ea8 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x00052eac b.w 0x4d740                                       |     goto label_7;
                                                                 | label_695:
    0x00052eb0 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x00052eb2 mov r1, r6                                        |     r1 = r6;
    0x00052eb4 ldr r0, [r5]                                      |     r0 = *(r5);
    0x00052eb6 mov r2, r7                                        |     r2 = r7;
    0x00052eb8 mov sl, r6                                        |     sl = r6;
    0x00052eba bl 0x2a698                                        |     r0 = fcn_0002a698 (r0, r1, r2, r3);
    0x00052ebe mov r6, r0                                        |     r6 = r0;
    0x00052ec0 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00052ec2 bne.w 0x527e8                                     |         goto label_186;
                                                                 |     }
    0x00052ec6 ldr r3, [r7]                                      |     r3 = *(r7);
    0x00052ec8 ldrd r2, sb, [r3, 4]                              |     __asm ("ldrd r2, sb, [r3, 4]");
    0x00052ecc str.w r3, [sb, 0x44]                              |     __asm ("str.w r3, [sb, 0x44]");
    0x00052ed0 mov r3, sl                                        |     r3 = sl;
    0x00052ed2 cmp r3, 1                                         |     
    0x00052ed4 strd r5, r2, [sb, 0x34]                           |     __asm ("strd r5, r2, [sb, 0x34]");
    0x00052ed8 str.w sl, [sb, 0x48]                              |     __asm ("str.w sl, [sb, 0x48]");
                                                                 |     if (r3 == 1) {
    0x00052edc beq.w 0x53594                                     |         goto label_719;
                                                                 |     }
    0x00052ee0 mov r2, r0                                        |     r2 = r0;
    0x00052ee2 strb.w r0, [sb, 5]                                |     *((sb + 5)) = r0;
    0x00052ee6 mov r1, sl                                        |     r1 = sl;
    0x00052ee8 mov r0, r8                                        |     r0 = r8;
    0x00052eea bl 0x301ec                                        |     r0 = fcn_000301ec (r0, r1, r2);
    0x00052eee mov r5, r0                                        |     r5 = r0;
    0x00052ef0 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00052ef2 bne.w 0x535ac                                     |         goto label_720;
                                                                 |     }
    0x00052ef6 ldr r3, [sp, 0x2c]                                |     r3 = *(arg_2ch);
    0x00052ef8 cmp r3, 1                                         |     
                                                                 |     if (r3 < 1) {
    0x00052efa bls.w 0x53e22                                     |         goto label_721;
                                                                 |     }
    0x00052efe ldr r2, [sp, 0x28]                                |     r2 = *(arg_28h);
    0x00052f00 ldrb r3, [r2, 0x11]                               |     r3 = *((r2 + 0x11));
    0x00052f02 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00052f04 beq.w 0x53e60                                     |         goto label_722;
                                                                 |     }
    0x00052f08 add.w sl, sp, 0xb0                                |     sl += arg_b0h;
    0x00052f0c movs r1, 4                                        |     r1 = 4;
    0x00052f0e mov r2, sl                                        |     r2 = sl;
    0x00052f10 mov r0, r8                                        |     r0 = r8;
    0x00052f12 bl 0x11954                                        |     fcn_00011954 (r0, r1, r2);
    0x00052f16 ldr r6, [sp, 0xb0]                                |     r6 = *(arg_b0h);
    0x00052f18 ldr r3, [sp, 0x2c]                                |     r3 = *(arg_2ch);
    0x00052f1a cmp r3, r6                                        |     
                                                                 |     if (r3 == r6) {
    0x00052f1c beq.w 0x53df8                                     |         goto label_723;
                                                                 |     }
    0x00052f20 ldr.w r0, [sb, 0x44]                              |     r0 = *((sb + 0x44));
    0x00052f24 bl 0x2bd94                                        |     fcn_0002bd94 (r0);
    0x00052f28 ldr r0, [sp, 0x28]                                |     r0 = *(arg_28h);
    0x00052f2a mov r3, r5                                        |     r3 = r5;
    0x00052f2c mov r2, r7                                        |     r2 = r7;
    0x00052f2e mov r1, r6                                        |     r1 = r6;
    0x00052f30 ldr r0, [r0]                                      |     r0 = *(r0);
    0x00052f32 bl 0x2a698                                        |     r0 = fcn_0002a698 (r0, r1, r2, r3);
    0x00052f36 mov r5, r0                                        |     r5 = r0;
    0x00052f38 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00052f3a bne.w 0x53e16                                     |         goto label_724;
                                                                 |     }
    0x00052f3e ldr r1, [r7]                                      |     r1 = *(r7);
    0x00052f40 cmp r6, 1                                         |     
    0x00052f42 ldr.w sl, [sp, 0x28]                              |     sl = *(arg_28h);
    0x00052f46 it eq                                             |     
                                                                 |     if (r6 != 1) {
    0x00052f48 moveq r4, 0x64                                    |         r4 = 0x64;
                                                                 |     }
    0x00052f4a mov r3, r0                                        |     r3 = r0;
    0x00052f4c movs r2, 1                                        |     r2 = 1;
    0x00052f4e ldrd ip, sb, [r1, 4]                              |     __asm ("ldrd ip, sb, [r1, 4]");
    0x00052f52 mov r0, sl                                        |     r0 = sl;
    0x00052f54 str.w r1, [sb, 0x44]                              |     __asm ("str.w r1, [sb, 0x44]");
    0x00052f58 mov r1, sb                                        |     r1 = sb;
    0x00052f5a str.w ip, [sb, 0x38]                              |     __asm ("str.w ip, [sb, 0x38]");
    0x00052f5e str.w sl, [sb, 0x34]                              |     __asm ("str.w sl, [sb, 0x34]");
    0x00052f62 str.w r6, [sb, 0x48]                              |     __asm ("str.w r6, [sb, 0x48]");
    0x00052f66 strb.w r4, [sb, 5]                                |     *((sb + 5)) = r4;
    0x00052f6a str r5, [sp, 4]                                   |     *(arg_4h) = r5;
    0x00052f6c ldr r5, [sp, 0x2c]                                |     r5 = *(arg_2ch);
    0x00052f6e str r5, [sp]                                      |     *(sp) = r5;
    0x00052f70 bl 0x2f55c                                        |     r0 = fcn_0002f55c (r0, r1, r2, r3, r4, r5);
    0x00052f74 mov r5, r0                                        |     r5 = r0;
    0x00052f76 ldr.w r0, [sb, 0x44]                              |     r0 = *((sb + 0x44));
    0x00052f7a bl 0x2bd94                                        |     fcn_0002bd94 (r0);
    0x00052f7e cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x00052f80 bne.w 0x53e16                                     |         goto label_724;
                                                                 |     }
    0x00052f84 mov r3, r5                                        |     r3 = r5;
    0x00052f86 ldr.w r0, [sl]                                    |     r0 = *(sl);
    0x00052f8a mov r2, r7                                        |     r2 = r7;
    0x00052f8c mov r1, r6                                        |     r1 = r6;
    0x00052f8e str.w sl, [sp, 0x28]                              |     __asm ("str.w sl, [arg_28h]");
    0x00052f92 bl 0x2a698                                        |     r0 = fcn_0002a698 (r0, r1, r2, r3);
    0x00052f96 mov r5, r0                                        |     r5 = r0;
    0x00052f98 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00052f9a bne.w 0x53e16                                     |         goto label_724;
                                                                 |     }
    0x00052f9e ldr r1, [r7]                                      |     r1 = *(r7);
    0x00052fa0 mov r2, r6                                        |     r2 = r6;
    0x00052fa2 ldr r0, [sp, 0x28]                                |     r0 = *(arg_28h);
    0x00052fa4 ldrd r3, r7, [r1, 4]                              |     __asm ("ldrd r3, r7, [r1, 4]");
    0x00052fa8 str r1, [r7, 0x44]                                |     *((r7 + 0x44)) = r1;
    0x00052faa mov r1, r7                                        |     r1 = r7;
    0x00052fac str r3, [r7, 0x38]                                |     *((r7 + 0x38)) = r3;
    0x00052fae strb r4, [r7, 5]                                  |     *((r7 + 5)) = r4;
    0x00052fb0 str r0, [r7, 0x34]                                |     *((r7 + 0x34)) = r0;
    0x00052fb2 str r6, [r7, 0x48]                                |     *((r7 + 0x48)) = r6;
    0x00052fb4 bl 0x2fc54                                        |     r0 = fcn_0002fc54 (r0, r1, r2, r3);
    0x00052fb8 mov r5, r0                                        |     r5 = r0;
    0x00052fba ldr r0, [r7, 0x44]                                |     r0 = *((r7 + 0x44));
    0x00052fbc bl 0x2bd94                                        |     fcn_0002bd94 (r0);
    0x00052fc0 cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x00052fc2 bne.w 0x53e16                                     |         goto label_724;
                                                                 |     }
    0x00052fc6 mov r5, r6                                        |     r5 = r6;
                                                                 | label_270:
    0x00052fc8 ldr.w r3, [pc, 0x768]                             |     
    0x00052fcc subs r4, r6, 1                                    |     r4 = r6 - 1;
    0x00052fce ldr r6, [sp, 0x28]                                |     r6 = *(arg_28h);
    0x00052fd0 movw sb, 0xcccd                                   |     
    0x00052fd4 movt sb, 0xcccc                                   |     sb = 0xcccccccd;
    0x00052fd8 add r3, pc                                        |     r3 = 0xa6710;
    0x00052fda ldr.w r0, [r3, 0x110]                             |     r0 = *(0xa6820);
    0x00052fde mov sl, r6                                        |     sl = r6;
    0x00052fe0 ldr r1, [r6, 0x20]                                |     r1 = *((r6 + 0x20));
    0x00052fe2 bl 0x5dc60                                        |     r0 = fcn_0005dc60 (r0, r1, r2);
    0x00052fe6 adds r7, r0, 1                                    |     r7 = r0 + 1;
    0x00052fe8 b 0x52fec                                         |     
                                                                 |     while (r7 == r4) {
                                                                 | label_187:
    0x00052fea subs r4, 1                                        |         r4--;
    0x00052fec cmp r7, r4                                        |         
    0x00052fee beq 0x52fea                                       |         
                                                                 |     }
    0x00052ff0 cmp r4, 1                                         |     
    0x00052ff2 it ls                                             |     
                                                                 |     if (r4 > 1) {
    0x00052ff4 movls r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r4 >= 1) {
    0x00052ff6 bls 0x53018                                       |         
    0x00052ff8 ldr.w r3, [sl, 0x24]                              |         r3 = *((sl + 0x24));
    0x00052ffc subs r0, r4, 2                                    |         r0 = r4 - 2;
    0x00052ffe umull r3, r6, sb, r3                              |         r3:r6 = sb * r3;
    0x00053002 lsrs r6, r6, 2                                    |         r6 >>= 2;
    0x00053004 adds r6, 1                                        |         r6++;
    0x00053006 mov r1, r6                                        |         r1 = r6;
    0x00053008 bl 0x5dc60                                        |         r0 = fcn_0005dc60 (r0, r1, r2);
    0x0005300c mul r2, r6, r0                                    |         r2 = r6 * r0;
    0x00053010 adds r3, r2, 2                                    |         r3 = r2 + 2;
    0x00053012 cmp r7, r3                                        |         
    0x00053014 it eq                                             |         
                                                                 |         if (r7 == r3) {
    0x00053016 addeq r3, r2, 3                                   |             r3 = r2 + 3;
                                                                 |             goto label_725;
                                                                 |         }
                                                                 |     }
                                                                 | label_725:
    0x00053018 cmp r3, r4                                        |     
                                                                 |     if (r3 == r4) {
    0x0005301a beq 0x52fea                                       |         goto label_187;
                                                                 |     }
    0x0005301c mov r2, r4                                        |     r2 = r4;
    0x0005301e movs r1, 4                                        |     r1 = 4;
    0x00053020 mov r0, r8                                        |     r0 = r8;
    0x00053022 asrs r4, r5, 0x1f                                 |     r4 = r5 >> 0x1f;
    0x00053024 mov r7, r5                                        |     r7 = r5;
    0x00053026 bl 0x2c060                                        |     r0 = fcn_0002c060 (r0, r1, r2);
    0x0005302a mov r6, r0                                        |     r6 = r0;
                                                                 | label_273:
    0x0005302c ldrb.w r3, [r8, 9]                                |     r3 = *((r8 + 9));
    0x00053030 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00053032 beq.w 0x52808                                     |         goto label_188;
                                                                 |     }
    0x00053036 b.w 0x527f8                                       |     goto label_189;
                                                                 | label_696:
    0x0005303a ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0005303c mov sb, r6                                        |     sb = r6;
    0x0005303e ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x00053040 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00053044 adds r3, 1                                        |     r3++;
    0x00053046 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00053048 movs r3, 4                                        |     r3 = 4;
    0x0005304a vstr d16, [r2, 0x10]                              |     __asm ("vstr d16, [r2, 0x10]");
    0x0005304e strh r3, [r2, 0x1c]                               |     *((r2 + 0x1c)) = r3;
    0x00053050 b.w 0x4d742                                       |     goto label_25;
                                                                 | label_490:
    0x00053054 ldrd r7, r3, [r6, 8]                              |     __asm ("ldrd r7, r3, [r6, 8]");
    0x00053058 mov r0, fp                                        |     r0 = fp;
    0x0005305a add r7, r3                                        |     r7 += r3;
    0x0005305c adds r3, 0x12                                     |     r3 += 0x12;
    0x0005305e lsl.w r8, r7, 2                                   |     r8 = r7 << 2;
    0x00053062 add.w r1, r8, r7                                  |     r1 = r8 + r7;
    0x00053066 add.w r1, r3, r1, lsl 1                           |     r1 = r3 + (r1 << 1);
    0x0005306a add.w r1, r2, r1, lsl 2                           |     r1 = r2 + (r1 << 2);
    0x0005306e bl 0xdb58                                         |     r0 = fcn_0000db58 (r0, r1);
    0x00053072 mov r5, r0                                        |     r5 = r0;
    0x00053074 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00053076 beq.w 0x4d4ec                                     |         goto label_6;
                                                                 |     }
    0x0005307a ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0005307c movw r2, 0x2460                                   |     r2 = 0x2460;
    0x00053080 tst r2, r3                                        |     
                                                                 |     if ((r2 & r3) != 0) {
    0x00053082 bne.w 0x5362c                                     |         goto label_726;
                                                                 |     }
                                                                 | label_219:
    0x00053086 ldr r1, [r4, 0x24]                                |     r1 = *((r4 + 0x24));
                                                                 |     if (r1 != 0) {
    0x00053088 cbz r1, 0x53094                                   |         
    0x0005308a ldr r0, [r4]                                      |         r0 = *(r4);
    0x0005308c bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
    0x00053090 movs r3, 0                                        |         r3 = 0;
    0x00053092 str r3, [r4, 0x24]                                |         *((r4 + 0x24)) = r3;
                                                                 |     }
    0x00053094 ldr r1, [sp, 0x24]                                |     r1 = *((sp + 0x24));
    0x00053096 add.w r2, r8, r7                                  |     r2 = r8 + r7;
    0x0005309a mov.w sl, 0                                       |     sl = 0;
    0x0005309e ldr r3, [r6, 0xc]                                 |     r3 = *((r6 + 0xc));
    0x000530a0 str r5, [r4, 0x10]                                |     *((r4 + 0x10)) = r5;
    0x000530a2 add.w r2, r5, r2, lsl 3                           |     r2 = r5 + (r2 << 3);
    0x000530a6 ldr r0, [r1, 4]                                   |     r0 = *((r1 + 4));
    0x000530a8 ldr.w sb, [r1, 8]                                 |     sb = *((r1 + 8));
    0x000530ac adds r2, 0x48                                     |     r2 += 0x48;
    0x000530ae ldr.w r8, [r1, 0x1c]                              |     r8 = *((r1 + 0x1c));
    0x000530b2 ldr.w lr, [r1, 0x38]                              |     
    0x000530b6 ldr.w ip, [r1, 0x24]                              |     ip = *((r1 + 0x24));
    0x000530ba ldr r1, [r1, 0x20]                                |     r1 = *((r1 + 0x20));
    0x000530bc str r1, [sp, 0x20]                                |     *(arg_20h) = r1;
    0x000530be ldr r1, [r6, 0x14]                                |     r1 = *((r6 + 0x14));
    0x000530c0 str r1, [sp, 0x28]                                |     *(arg_28h) = r1;
    0x000530c2 ldr r1, [sp, 0x24]                                |     r1 = *((sp + 0x24));
    0x000530c4 ldr.w r1, [r1, 0xc8]                              |     r1 = *((r1 + 0xc8));
    0x000530c8 str r1, [sp, 0x2c]                                |     *(arg_2ch) = r1;
    0x000530ca ldr r1, [sp, 0x24]                                |     r1 = *((sp + 0x24));
    0x000530cc ldr.w r1, [r1, 0xc4]                              |     r1 = *((r1 + 0xc4));
    0x000530d0 str.w sl, [r4, 4]                                 |     __asm ("str.w sl, [r4, 4]");
    0x000530d4 mov.w sl, 0x40                                    |     sl = 0x40;
    0x000530d8 strh.w sl, [r4, 0x1c]                             |     *((r4 + 0x1c)) = sl;
    0x000530dc ldr r4, [sp, 0x1c]                                |     r4 = *(arg_1ch);
    0x000530de str r0, [r5, 8]                                   |     *((r5 + 8)) = r0;
    0x000530e0 ldr r0, [sp, 0x20]                                |     r0 = *(arg_20h);
    0x000530e2 str r4, [r5, 0x2c]                                |     *((r5 + 0x2c)) = r4;
    0x000530e4 ldr r4, [sp, 0x28]                                |     r4 = *(arg_28h);
    0x000530e6 str r0, [r5, 0x30]                                |     *((r5 + 0x30)) = r0;
    0x000530e8 str.w sb, [r5, 0xc]                               |     __asm ("str.w sb, [r5, 0xc]");
    0x000530ec str r4, [r5, 0x18]                                |     *((r5 + 0x18)) = r4;
    0x000530ee ldr r4, [sp, 0x2c]                                |     r4 = *(arg_2ch);
    0x000530f0 str.w r8, [r5, 0x34]                              |     __asm ("str.w r8, [r5, 0x34]");
    0x000530f4 str.w lr, [r5, 0x14]                              |     __asm ("str.w lr, [r5, 0x14]");
    0x000530f8 str.w ip, [r5, 0x28]                              |     __asm ("str.w ip, [r5, 0x28]");
    0x000530fc str r4, [r5, 0x10]                                |     *((r5 + 0x10)) = r4;
    0x000530fe str r1, [r5, 0x38]                                |     *((r5 + 0x38)) = r1;
    0x00053100 add.w r1, r5, 0x48                                |     r1 = r5 + 0x48;
    0x00053104 ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x00053106 cmp r2, r1                                        |     
    0x00053108 strd r7, r3, [r5, 0x3c]                           |     __asm ("strd r7, r3, [r5, 0x3c]");
    0x0005310c str r0, [r5]                                      |     *(r5) = r0;
    0x0005310e ldr.w r0, [r0, 0xb8]                              |     r0 = *((r0 + 0xb8));
                                                                 |     if (r2 == r1) {
    0x00053112 beq 0x53120                                       |         goto label_727;
                                                                 |     }
    0x00053114 movs r4, 0x80                                     |     r4 = 0x80;
                                                                 |     do {
    0x00053116 strh r4, [r1, 0x1c]                               |         *((r1 + 0x1c)) = r4;
    0x00053118 str fp, [r1], 0x28                                |         *(r1) = fp;
                                                                 |         r1 += 0x28;
    0x0005311c cmp r2, r1                                        |         
    0x0005311e bne 0x53116                                       |         
                                                                 |     } while (r2 != r1);
                                                                 | label_727:
    0x00053120 ldr r2, [r6, 0x10]                                |     r2 = *((r6 + 0x10));
    0x00053122 b.w 0x4feea                                       |     goto label_190;
                                                                 | label_415:
    0x00053126 mov r1, r3                                        |     r1 = r3;
    0x00053128 b.w 0x4ee3c                                       |     goto label_191;
                                                                 | label_414:
    0x0005312c ldr r3, [sp, 0x38]                                |     r3 = *(arg_38h);
    0x0005312e movs r1, 0                                        |     r1 = 0;
    0x00053130 str r1, [r3, 4]                                   |     *((r3 + 4)) = r1;
    0x00053132 b.w 0x4ee3c                                       |     goto label_191;
                                                                 | label_703:
    0x00053136 lsls r0, r3, 0x18                                 |     r0 = r3 << 0x18;
                                                                 |     if (r0 >= r3) {
    0x00053138 bpl 0x53168                                       |         goto label_728;
                                                                 |     }
                                                                 | label_706:
    0x0005313a add r0, sp, 0xb0                                  |     r0 += arg_b0h;
    0x0005313c b 0x52a6a                                         |     goto label_192;
                                                                 | label_529:
    0x0005313e mov r3, r1                                        |     r3 = r1;
    0x00053140 b.w 0x50466                                       |     goto label_193;
                                                                 | label_526:
    0x00053144 mov r3, r1                                        |     r3 = r1;
    0x00053146 b.w 0x50402                                       |     goto label_194;
                                                                 | label_521:
    0x0005314a mov r3, r1                                        |     r3 = r1;
    0x0005314c b.w 0x503aa                                       |     goto label_195;
                                                                 | label_446:
    0x00053150 movs r3, 1                                        |     r3 = 1;
    0x00053152 strb.w r3, [fp, 0x40]                             |     *(arg_40h) = r3;
    0x00053156 ldr r0, [r7]                                      |     r0 = *(r7);
    0x00053158 ldr r3, [r5, 0x1c]                                |     r3 = *((r5 + 0x1c));
    0x0005315a blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0005315c b.w 0x4dbae                                       |     goto label_20;
                                                                 | label_702:
    0x00053160 cmp.w r8, 0xb                                     |     
                                                                 |     if (r8 > 0xb) {
    0x00053164 bhi.w 0x52a50                                     |         goto label_196;
                                                                 |     }
                                                                 | label_728:
    0x00053168 ldr.w r3, [pc, 0x5cc]                             |     
    0x0005316c add r3, pc                                        |     r3 = 0xa68a8;
    0x0005316e add r3, r8                                        |     r3 += r8;
    0x00053170 ldrb.w r6, [r3, 0xa6c]                            |     r6 = *((r3 + 0xa6c));
    0x00053174 b 0x52a58                                         |     goto label_197;
                                                                 | label_476:
    0x00053176 mov r3, r1                                        |     r3 = r1;
    0x00053178 b.w 0x4fc0e                                       |     goto label_198;
                                                                 | label_567:
    0x0005317c ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0005317e mov r0, fp                                        |     r0 = fp;
    0x00053180 ldr r1, [r3, 0x10]                                |     r1 = *((r3 + 0x10));
    0x00053182 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x00053186 b.w 0x50bd4                                       |     goto label_199;
                                                                 | label_713:
    0x0005318a ldr r5, [r4, 0xc]                                 |     r5 = *((r4 + 0xc));
    0x0005318c ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0005318e subs r5, 1                                        |     r5--;
    0x00053190 str r5, [r4, 0xc]                                 |     *((r4 + 0xc)) = r5;
    0x00053192 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00053194 beq.w 0x537bc                                     |         goto label_729;
                                                                 |     }
    0x00053198 add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x0005319c ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0005319e mov.w sb, 0xb                                     |     sb = 0xb;
    0x000531a2 ldr r0, [r3, 0x2c]                                |     r0 = *((r3 + 0x2c));
    0x000531a4 b.w 0x50538                                       |     goto label_39;
                                                                 | label_344:
    0x000531a8 movs r5, 2                                        |     r5 = 2;
    0x000531aa movs r1, 0x68                                     |     r1 = 0x68;
    0x000531ac mov r4, r5                                        |     r4 = r5;
    0x000531ae b.w 0x4de18                                       |     goto label_200;
                                                                 | label_632:
    0x000531b2 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x000531b4 mov r0, r4                                        |     r0 = r4;
    0x000531b6 adds r3, 1                                        |     r3++;
    0x000531b8 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x000531ba bl 0x2e7d8                                        |     fcn_0002e7d8 (r0);
    0x000531be ldrd r3, r2, [sp, 0x48]                           |     __asm ("ldrd r3, r2, [arg_48h]");
    0x000531c2 mov r6, r0                                        |     r6 = r0;
    0x000531c4 str r2, [r3, 0x44]                                |     *((r3 + 0x44)) = r2;
    0x000531c6 strb r2, [r3, 0x19]                               |     *((r3 + 0x19)) = r2;
    0x000531c8 strh r2, [r3, 0x1a]                               |     *((r3 + 0x1a)) = r2;
    0x000531ca cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x000531cc beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x000531d0 b.w 0x4d740                                       |     goto label_7;
                                                                 | label_556:
    0x000531d4 ldrd r3, r1, [r7, 0x20]                           |     __asm ("ldrd r3, r1, [r7, 0x20]");
    0x000531d8 cmp r1, r3                                        |     
                                                                 |     if (r1 != r3) {
    0x000531da beq 0x531ec                                       |         
    0x000531dc ldrb.w r3, [r7, 0x34]                             |         r3 = *((r7 + 0x34));
    0x000531e0 cmp r3, 1                                         |         
                                                                 |         if (r3 == 1) {
    0x000531e2 beq.w 0x53bf2                                     |             goto label_730;
                                                                 |         }
    0x000531e6 mov r0, r1                                        |         r0 = r1;
    0x000531e8 blx 0x6050                                        |         fcn_00006050 ();
                                                                 |     }
                                                                 | label_255:
    0x000531ec mov r0, fp                                        |     r0 = fp;
    0x000531ee ldr r1, [sp, 0x28]                                |     r1 = *(arg_28h);
    0x000531f0 ldr r4, [r7, 0x14]                                |     r4 = *((r7 + 0x14));
    0x000531f2 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x000531f6 ldr r2, [sp, 0x34]                                |     r2 = *(arg_34h);
    0x000531f8 adds r4, 1                                        |     r4++;
    0x000531fa ldr r0, [sp, 0x2c]                                |     r0 = *(arg_2ch);
    0x000531fc ldr r3, [r2, 0x10]                                |     r3 = *((r2 + 0x10));
    0x000531fe subs r3, r3, r4                                   |     r3 -= r4;
    0x00053200 str r3, [r2, 0x10]                                |     *((r2 + 0x10)) = r3;
    0x00053202 ldr r3, [r2, 0x14]                                |     r3 = *((r2 + 0x14));
    0x00053204 sbc.w r3, r3, r4, asr 31                          |     __asm ("sbc.w r3, r3, r4, asr 31");
    0x00053208 str r3, [r2, 0x14]                                |     *((r2 + 0x14)) = r3;
    0x0005320a bl 0xfdb8                                         |     fcn_0000fdb8 (r0);
    0x0005320e cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00053210 beq.w 0x50972                                     |         goto label_69;
                                                                 |     }
    0x00053214 b.w 0x4d4ec                                       |     goto label_6;
                                                                 | label_669:
    0x00053218 ldr r5, [sp, 0x48]                                |     r5 = *(arg_48h);
    0x0005321a mov r6, r7                                        |     r6 = r7;
    0x0005321c add.w sb, sb, 8                                   |     sb += 8;
                                                                 | label_264:
    0x00053220 ldrh.w r3, [sl, 0x18]                             |     r3 = *((sl + 0x18));
    0x00053224 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00053226 beq.w 0x53dbe                                     |         goto label_731;
                                                                 |     }
                                                                 | label_268:
    0x0005322a ldr.w r4, [sl, 0x10]                              |     r4 = *((sl + 0x10));
    0x0005322e subs r3, 1                                        |     r3--;
    0x00053230 strh.w r3, [sl, 0x18]                             |     *((sl + 0x18)) = r3;
    0x00053234 add.w r3, r4, 0x10                                |     r3 = r4 + 0x10;
    0x00053238 str.w r3, [sl, 0x10]                              |     __asm ("str.w r3, [sl, 0x10]");
    0x0005323c str.w r4, [sb]                                    |     __asm ("str.w r4, [sb]");
    0x00053240 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00053242 beq.w 0x53a18                                     |         goto label_732;
                                                                 |     }
    0x00053246 movs r3, 0                                        |     r3 = 0;
    0x00053248 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x0005324c str r3, [r4, 8]                                   |     *((r4 + 8)) = r3;
    0x0005324e add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x00053250 ldr.w r3, [r8, 8]                                 |     r3 = *((r8 + 8));
    0x00053254 movs r2, 0                                        |     r2 = 0;
    0x00053256 vstr d16, [r4]                                    |     __asm ("vstr d16, [r4]");
    0x0005325a str r3, [r7]                                      |     *(r7) = r3;
    0x0005325c strd r2, r2, [r8, 8]                              |     __asm ("strd r2, r2, [r8, 8]");
    0x00053260 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00053262 beq.w 0x53a14                                     |         goto label_269;
                                                                 |     }
    0x00053266 mov r0, r8                                        |     r0 = r8;
    0x00053268 mov r8, r3                                        |     r8 = r3;
    0x0005326a movs r3, 1                                        |     r3 = 1;
    0x0005326c str r5, [sp, 0x3c]                                |     *(arg_3ch) = r5;
    0x0005326e mov sb, r4                                        |     sb = r4;
    0x00053270 mov r5, r3                                        |     r5 = r3;
    0x00053272 b 0x532ac                                         |     
                                                                 |     while (r5 != 1) {
    0x00053274 subs r1, r5, 1                                    |         r1 = r5 - 1;
    0x00053276 mov r0, r7                                        |         r0 = r7;
    0x00053278 str r1, [sp, 0x48]                                |         *(arg_48h) = r1;
    0x0005327a bl 0x7858                                         |         fcn_00007858 (r0, r1);
    0x0005327e ldr r4, [r7]                                      |         r4 = *(r7);
    0x00053280 mov r2, r0                                        |         r2 = r0;
    0x00053282 cmp r4, 0                                         |         
                                                                 |         if (r4 == 0) {
    0x00053284 beq.w 0x53a0c                                     |             goto label_733;
                                                                 |         }
    0x00053288 ldr r2, [r4, 8]                                   |         r2 = *((r4 + 8));
    0x0005328a str r0, [r4, 0xc]                                 |         *((r4 + 0xc)) = r0;
    0x0005328c mov r0, r7                                        |         r0 = r7;
    0x0005328e ldr r1, [sp, 0x48]                                |         r1 = *(arg_48h);
    0x00053290 str r2, [r7]                                      |         *(r7) = r2;
    0x00053292 bl 0x7858                                         |         fcn_00007858 (r0, r1);
    0x00053296 str r0, [r4, 8]                                   |         *((r4 + 8)) = r0;
    0x00053298 mov r2, r4                                        |         r2 = r4;
    0x0005329a ldr r1, [r7]                                      |         r1 = *(r7);
                                                                 | label_201:
    0x0005329c adds r5, 1                                        |         r5++;
    0x0005329e mov r0, r8                                        |         r0 = r8;
    0x000532a0 str.w r2, [r8, 8]                                 |         __asm ("str.w r2, [r8, 8]");
    0x000532a4 cmp r1, 0                                         |         
                                                                 |         if (r1 == 0) {
    0x000532a6 beq.w 0x53de4                                     |             goto label_734;
                                                                 |         }
    0x000532aa mov r8, r1                                        |         r8 = r1;
    0x000532ac ldr.w r2, [r8, 8]                                 |         r2 = *((r8 + 8));
    0x000532b0 str r2, [r7]                                      |         *(r7) = r2;
    0x000532b2 str.w r0, [r8, 0xc]                               |         __asm ("str.w r0, [r8, 0xc]");
    0x000532b6 cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x000532b8 beq.w 0x53a0c                                     |             goto label_733;
                                                                 |         }
    0x000532bc cmp r5, 1                                         |         
    0x000532be bne 0x53274                                       |         
                                                                 |     }
    0x000532c0 ldr r1, [r2, 8]                                   |     r1 = *((r2 + 8));
    0x000532c2 movs r3, 0                                        |     r3 = 0;
    0x000532c4 str r1, [r7]                                      |     *(r7) = r1;
    0x000532c6 strd r3, r3, [r2, 8]                              |     __asm ("strd r3, r3, [r2, 8]");
    0x000532ca b 0x5329c                                         |     goto label_201;
                                                                 | label_685:
    0x000532cc mov sb, r0                                        |     sb = r0;
    0x000532ce b.w 0x528f8                                       |     goto label_202;
                                                                 | label_602:
    0x000532d2 cmp r4, 6                                         |     
    0x000532d4 mov sb, r0                                        |     sb = r0;
    0x000532d6 it ne                                             |     
                                                                 |     if (r4 != 6) {
    0x000532d8 strne r8, [sp, 0x1c]                              |         *(arg_1ch) = r8;
                                                                 |         goto label_735;
                                                                 |     }
                                                                 |     if (r4 == 6) {
                                                                 | label_735:
    0x000532dc beq.w 0x5148c                                     |         goto label_203;
                                                                 |     }
    0x000532e0 b.w 0x4d742                                       |     goto label_25;
                                                                 | label_601:
    0x000532e4 ldr r7, [r5, 4]                                   |     r7 = *((r5 + 4));
    0x000532e6 ldr r0, [r7, 0x48]                                |     r0 = *((r7 + 0x48));
                                                                 |     if (r0 != 0) {
    0x000532e8 cbnz r0, 0x532f6                                  |         goto label_736;
                                                                 |     }
    0x000532ea b.w 0x53bc0                                       |     goto label_737;
                                                                 |     do {
                                                                 | label_204:
    0x000532ee ldr r0, [r0, 0xc]                                 |         r0 = *((r0 + 0xc));
    0x000532f0 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x000532f2 beq.w 0x53bc0                                     |             goto label_737;
                                                                 |         }
                                                                 | label_736:
    0x000532f6 ldr r3, [r0, 4]                                   |         r3 = *((r0 + 4));
    0x000532f8 cmp sb, r3                                        |         
    0x000532fa bne 0x532ee                                       |         
                                                                 |     } while (sb != r3);
    0x000532fc ldr r3, [r0]                                      |     r3 = *(r0);
    0x000532fe cmp r5, r3                                        |     
                                                                 |     if (r5 != r3) {
    0x00053300 bne 0x532ee                                       |         goto label_204;
                                                                 |     }
                                                                 | label_253:
    0x00053302 ldrb r2, [r0, 8]                                  |     r2 = *((r0 + 8));
    0x00053304 cmp r2, r4                                        |     
    0x00053306 it lo                                             |     
                                                                 |     if (r2 >= r4) {
    0x00053308 strblo r4, [r0, 8]                                |         *((r0 + 8)) = r4;
                                                                 |     }
    0x0005330a ldrb r3, [r5, 9]                                  |     r3 = *((r5 + 9));
    0x0005330c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005330e beq.w 0x53a4c                                     |         goto label_738;
                                                                 |     }
    0x00053312 movs r4, 0                                        |     r4 = 0;
                                                                 | label_288:
    0x00053314 ldr r3, [r5, 0xc]                                 |     r3 = *((r5 + 0xc));
    0x00053316 subs r3, 1                                        |     r3--;
    0x00053318 str r3, [r5, 0xc]                                 |     *((r5 + 0xc)) = r3;
    0x0005331a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005331c beq.w 0x538f0                                     |         goto label_603;
                                                                 |     }
                                                                 | label_604:
    0x00053320 str.w r8, [sp, 0x1c]                              |     __asm ("str.w r8, [arg_1ch]");
    0x00053324 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00053326 beq.w 0x4d26a                                     |         goto label_2;
                                                                 |     }
    0x0005332a b.w 0x4d740                                       |     goto label_7;
                                                                 |     if (r6 <= 0) {
                                                                 | label_656:
    0x0005332e ble.w 0x52138                                     |         goto label_205;
                                                                 |     }
    0x00053332 tst.w r8, 1                                       |     
    0x00053336 it eq                                             |     
                                                                 |     if ((r8 & 1) != 0) {
    0x00053338 addeq r5, r8, 1                                   |         r5 = r8 + 1;
                                                                 |     }
    0x0005333c b.w 0x52138                                       |     goto label_205;
                                                                 | label_690:
    0x00053340 ldr r3, [r5, 0x18]                                |     r3 = *((r5 + 0x18));
    0x00053342 mov r1, r5                                        |     r1 = r5;
    0x00053344 mov r0, fp                                        |     r0 = fp;
    0x00053346 str.w r3, [fp, 0x1e0]                             |     __asm ("str.w r3, [arg_1e0h]");
    0x0005334a bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x0005334e cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x00053350 bne.w 0x526a2                                     |         goto label_206;
                                                                 |     }
    0x00053354 ldr.w r3, [fp, 0x1e8]                             |     r3 = *(arg_1e8h);
    0x00053358 subs r3, 1                                        |     r3--;
    0x0005335a str.w r3, [fp, 0x1e8]                             |     __asm ("str.w r3, [arg_1e8h]");
                                                                 | label_691:
    0x0005335e ldr.w r3, [fp, 0x140]                             |     r3 = *(arg_140h);
    0x00053362 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00053364 beq.w 0x53f9e                                     |         goto label_739;
                                                                 |     }
    0x00053368 mov r2, sb                                        |     r2 = sb;
    0x0005336a mov r1, sl                                        |     r1 = sl;
    0x0005336c mov r0, fp                                        |     r0 = fp;
    0x0005336e bl 0xa6e8                                         |     r0 = fcn_0000a6e8 (r0, r1, r2);
    0x00053372 mov r6, r0                                        |     r6 = r0;
    0x00053374 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00053376 bne.w 0x528f6                                     |         goto label_207;
                                                                 |     }
    0x0005337a ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0005337c adds r3, 1                                        |     r3++;
    0x0005337e str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00053380 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_709:
    0x00053384 ldr r3, [pc, 0x3b4]                               |     
    0x00053386 mov.w sb, 0xb                                     |     sb = 0xb;
    0x0005338a ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x0005338c add r3, pc                                        |     r3 = 0xa6acc;
    0x0005338e add.w r0, r2, 0x2c                                |     r0 = r2 + 0x2c;
    0x00053392 b.w 0x524aa                                       |     goto label_160;
                                                                 | label_432:
    0x00053396 ldrb r1, [r5]                                     |     r1 = *(r5);
    0x00053398 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0005339a beq.w 0x5294a                                     |         goto label_208;
                                                                 |     }
    0x0005339e mov r8, r3                                        |     r8 = r3;
    0x000533a0 ldr r3, [pc, 0x39c]                               |     
    0x000533a2 mov r6, r5                                        |     r6 = r5;
    0x000533a4 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x000533a6 str r2, [sp, 0x28]                                |     *(arg_28h) = r2;
    0x000533a8 add r3, pc                                        |     r3 = 0xa6aec;
    0x000533aa str r3, [sp, 0x34]                                |     *(arg_34h) = r3;
    0x000533ac ldr r3, [pc, 0x394]                               |     
    0x000533ae add r3, pc                                        |     r3 = 0xa6af6;
    0x000533b0 str r3, [sp, 0x3c]                                |     *(arg_3ch) = r3;
    0x000533b2 ldr r3, [pc, 0x394]                               |     
    0x000533b4 add r3, pc                                        |     r3 = 0xa6b02;
    0x000533b6 str r3, [sp, 0x4c]                                |     *(arg_4ch) = r3;
    0x000533b8 b 0x533c6                                         |     goto label_211;
                                                                 | label_210:
    0x000533ba add r5, r0                                        |     r5 += r0;
    0x000533bc add r8, r0                                        |     r8 += r0;
    0x000533be ldrb r3, [r5]                                     |     r3 = *(r5);
    0x000533c0 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000533c2 beq.w 0x52940                                     |         goto label_209;
                                                                 |     }
                                                                 | label_211:
    0x000533c6 mov r1, r7                                        |     r1 = r7;
    0x000533c8 mov r0, r5                                        |     r0 = r5;
    0x000533ca bl 0x143b8                                        |     fcn_000143b8 (r0, r1);
    0x000533ce ldr r3, [r7]                                      |     r3 = *(r7);
    0x000533d0 mov r4, r0                                        |     r4 = r0;
    0x000533d2 cmp r3, 0x87                                      |     
                                                                 |     if (r3 != 0x87) {
    0x000533d4 bne 0x533ba                                       |         goto label_210;
                                                                 |     }
    0x000533d6 mov r2, r8                                        |     r2 = r8;
    0x000533d8 mov r1, r6                                        |     r1 = r6;
    0x000533da mov r0, sl                                        |     r0 = sl;
    0x000533dc bl 0x1a768                                        |     fcn_0001a768 (r0, r1, r2);
    0x000533e0 add.w r3, r6, r8                                  |     r3 = r6 + r8;
    0x000533e4 str r3, [sp, 0x20]                                |     *(arg_20h) = r3;
    0x000533e6 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x000533e8 beq.w 0x5294a                                     |         goto label_208;
                                                                 |     }
    0x000533ec ldrb.w r3, [r6, r8]                               |     r3 = *((r6 + r8));
    0x000533f0 cmp r3, 0x3f                                      |     
                                                                 |     if (r3 == 0x3f) {
    0x000533f2 beq 0x534ca                                       |         goto label_740;
                                                                 |     }
    0x000533f4 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x000533f6 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x000533f8 ldrsh.w r1, [r3, 0x46]                            |     r1 = *((r3 + 0x46));
    0x000533fc ldr r0, [r3, 0x40]                                |     r0 = *((r3 + 0x40));
    0x000533fe mov r3, r4                                        |     r3 = r4;
    0x00053400 bl 0xaa50                                         |     fcn_0000aa50 (r0);
    0x00053404 ldr r3, [sp, 0x48]                                |     r3 = *(arg_48h);
    0x00053406 str r0, [r3]                                      |     *(r3) = r0;
                                                                 | label_213:
    0x00053408 add.w r2, r0, r0, lsl 2                           |     r2 = r0 + (r0 << 2);
    0x0005340c adds r3, r0, 1                                    |     r3 = r0 + 1;
    0x0005340e str r3, [sp, 0x28]                                |     *(arg_28h) = r3;
    0x00053410 lsls r3, r2, 3                                    |     r3 = r2 << 3;
    0x00053412 ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x00053414 subs r3, 0x28                                     |     r3 -= 0x28;
    0x00053416 ldr r2, [r2, 0x3c]                                |     r2 = *((r2 + 0x3c));
    0x00053418 add.w r8, r2, r3                                  |     r8 = r2 + r3;
    0x0005341c ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x0005341e adds r5, r3, r4                                   |     r5 = r3 + r4;
    0x00053420 ldrh.w r3, [r8, 0x1c]                             |     r3 = *((r8 + 0x1c));
    0x00053424 ands r1, r3, 1                                    |     r1 = r3 & 1;
                                                                 |     if (r1 != r3) {
    0x00053428 bne 0x534bc                                       |         goto label_741;
                                                                 |     }
    0x0005342a ands r2, r3, 4                                    |     r2 = r3 & 4;
                                                                 |     if (r2 != r3) {
    0x0005342e bne 0x534d8                                       |         goto label_742;
                                                                 |     }
    0x00053430 ands r6, r3, 8                                    |     r6 = r3 & 8;
                                                                 |     if (r6 != r3) {
    0x00053434 bne 0x53512                                       |         goto label_743;
                                                                 |     }
    0x00053436 ands r1, r3, 2                                    |     r1 = r3 & 2;
                                                                 |     if (r1 == r3) {
    0x0005343a beq 0x534fa                                       |         goto label_744;
                                                                 |     }
    0x0005343c ldr.w r3, [sb, 0x10]                              |     r3 = *((sb + 0x10));
    0x00053440 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x00053442 ldrb.w r3, [r3, 0x4d]                             |     r3 = *((r3 + 0x4d));
    0x00053446 cmp r3, 1                                         |     
    0x00053448 str r3, [sp, 0x2c]                                |     *(arg_2ch) = r3;
                                                                 |     if (r3 == 1) {
    0x0005344a beq.w 0x53b18                                     |         goto label_745;
                                                                 |     }
    0x0005344e mov r1, r6                                        |     r1 = r6;
    0x00053450 movs r2, 0x24                                     |     r2 = 0x24;
    0x00053452 add r0, sp, 0xdc                                  |     r0 += arg_dch;
    0x00053454 blx 0x5fcc                                        |     fcn_00005fcc ();
    0x00053458 ldr r3, [sp, 0x2c]                                |     r3 = *(arg_2ch);
    0x0005345a mov r0, r7                                        |     r0 = r7;
    0x0005345c ldr.w r2, [r8, 0x18]                              |     r2 = *((r8 + 0x18));
    0x00053460 ldr.w r1, [r8, 4]                                 |     r1 = *((r8 + 4));
    0x00053464 str.w sb, [r7]                                    |     __asm ("str.w sb, [r7]");
    0x00053468 str r6, [sp]                                      |     *(sp) = r6;
    0x0005346a bl 0x17978                                        |     fcn_00017978 (r0, r1, r2, r3, r4);
    0x0005346e ldrh r3, [r7, 0x1c]                               |     r3 = *((r7 + 0x1c));
    0x00053470 lsls r6, r3, 0x1e                                 |     r6 = r3 << 0x1e;
                                                                 |     if (r6 < r3) {
    0x00053472 bpl 0x53482                                       |         
    0x00053474 ldrb r3, [r7, 0x1e]                               |         r3 = *((r7 + 0x1e));
    0x00053476 cmp r3, 1                                         |         
                                                                 |         if (r3 == 1) {
    0x00053478 beq 0x53482                                       |             goto label_746;
                                                                 |         }
    0x0005347a movs r1, 1                                        |         r1 = 1;
    0x0005347c mov r0, r7                                        |         r0 = r7;
    0x0005347e bl 0x17460                                        |         fcn_00017460 (r0, r1);
                                                                 |     }
                                                                 | label_746:
    0x00053482 ldr r3, [r7, 4]                                   |     r3 = *((r7 + 4));
    0x00053484 movs r1, 0                                        |     r1 = 0;
    0x00053486 ldr r2, [pc, 0x2c4]                               |     
    0x00053488 mov r0, sl                                        |     r0 = sl;
    0x0005348a str r3, [sp]                                      |     *(sp) = r3;
    0x0005348c ldr r3, [r7, 0x18]                                |     r3 = *((r7 + 0x18));
    0x0005348e add r2, pc                                        |     r2 = 0xa6be0;
    0x00053490 bl 0x35538                                        |     fcn_00035538 (r0, r1);
    0x00053494 ldrh r3, [r7, 0x1c]                               |     r3 = *((r7 + 0x1c));
    0x00053496 movw r2, 0x2460                                   |     r2 = 0x2460;
    0x0005349a tst r2, r3                                        |     
                                                                 |     if ((r2 & r3) != 0) {
    0x0005349c bne.w 0x53bd6                                     |         goto label_747;
                                                                 |     }
                                                                 | label_254:
    0x000534a0 ldr r1, [r7, 0x24]                                |     r1 = *((r7 + 0x24));
                                                                 |     if (r1 != 0) {
    0x000534a2 cbz r1, 0x534aa                                   |         
    0x000534a4 ldr r0, [r7]                                      |         r0 = *(r7);
    0x000534a6 bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
                                                                 |     }
                                                                 | label_212:
    0x000534aa ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x000534ac ldrb r3, [r3, r4]                                 |     r3 = *((r3 + r4));
    0x000534ae cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000534b0 beq.w 0x5294a                                     |         goto label_208;
                                                                 |     }
    0x000534b4 mov r6, r5                                        |     r6 = r5;
    0x000534b6 mov.w r8, 0                                       |     r8 = 0;
    0x000534ba b 0x533c6                                         |     goto label_211;
                                                                 | label_741:
    0x000534bc ldr r1, [pc, 0x290]                               |     
    0x000534be movs r2, 4                                        |     r2 = 4;
    0x000534c0 mov r0, sl                                        |     r0 = sl;
    0x000534c2 add r1, pc                                        |     r1 = 0xa6c16;
    0x000534c4 bl 0x1a768                                        |     fcn_0001a768 (r0, r1, r2);
    0x000534c8 b 0x534aa                                         |     goto label_212;
                                                                 | label_740:
    0x000534ca cmp r4, 1                                         |     
                                                                 |     if (r4 <= 1) {
    0x000534cc bgt 0x534ec                                       |         
    0x000534ce ldr r3, [sp, 0x28]                                |         r3 = *(arg_28h);
    0x000534d0 ldr r2, [sp, 0x48]                                |         r2 = *(arg_48h);
    0x000534d2 mov r0, r3                                        |         r0 = r3;
    0x000534d4 str r3, [r2]                                      |         *(r2) = r3;
    0x000534d6 b 0x53408                                         |         goto label_213;
                                                                 | label_742:
    0x000534d8 ldrd r2, r3, [r8, 0x10]                           |         __asm ("ldrd r2, r3, [r8, 0x10]");
    0x000534dc mov r0, sl                                        |         r0 = sl;
    0x000534de strd r2, r3, [sp]                                 |         __asm ("strd r2, r3, [sp]");
    0x000534e2 ldr r2, [pc, 0x270]                               |         
    0x000534e4 add r2, pc                                        |         r2 = 0xa6c3e;
    0x000534e6 bl 0x35538                                        |         fcn_00035538 (r0, r1);
    0x000534ea b 0x534aa                                         |         goto label_212;
                                                                 |     }
    0x000534ec ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x000534ee ldr r1, [sp, 0x48]                                |     r1 = *(arg_48h);
    0x000534f0 adds r0, r3, 1                                    |     r0 = r3 + 1;
    0x000534f2 bl 0x864c                                         |     fcn_0000864c (r0, r1);
    0x000534f6 ldr r0, [r1]                                      |     r0 = *(r1);
    0x000534f8 b 0x53408                                         |     goto label_213;
                                                                 | label_744:
    0x000534fa ands r6, r3, 0x4000                               |     r6 = r3 & 0x4000;
                                                                 |     if (r6 == r3) {
    0x000534fe beq.w 0x53b32                                     |         goto label_748;
                                                                 |     }
    0x00053502 ldr r2, [pc, 0x254]                               |     
    0x00053504 mov r0, sl                                        |     r0 = sl;
    0x00053506 ldr.w r3, [r8, 0x10]                              |     r3 = *((r8 + 0x10));
    0x0005350a add r2, pc                                        |     r2 = 0xa6c68;
    0x0005350c bl 0x35538                                        |     fcn_00035538 (r0, r1);
    0x00053510 b 0x534aa                                         |     goto label_212;
                                                                 | label_743:
    0x00053512 mov r1, r2                                        |     r1 = r2;
    0x00053514 ldrd r2, r3, [r8, 8]                              |     __asm ("ldrd r2, r3, [r8, 8]");
    0x00053518 mov r0, sl                                        |     r0 = sl;
    0x0005351a strd r2, r3, [sp]                                 |     __asm ("strd r2, r3, [sp]");
    0x0005351e ldr r2, [pc, 0x23c]                               |     
    0x00053520 add r2, pc                                        |     r2 = 0xa6c82;
    0x00053522 bl 0x35538                                        |     fcn_00035538 (r0, r1);
    0x00053526 b 0x534aa                                         |     goto label_212;
                                                                 | label_642:
    0x00053528 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0005352a mov.w sb, 4                                       |     sb = 4;
    0x0005352e ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x00053530 adds r3, 1                                        |     r3++;
    0x00053532 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00053534 movs r3, 1                                        |     r3 = 1;
    0x00053536 strb r3, [r2, 0x1e]                               |     *((r2 + 0x1e)) = r3;
    0x00053538 b.w 0x4d742                                       |     goto label_25;
                                                                 | label_405:
    0x0005353c add r6, sp, 0xb0                                  |     r6 += arg_b0h;
    0x0005353e add r2, sp, 0xd8                                  |     r2 += arg_d8h;
    0x00053540 mov r3, r6                                        |     r3 = r6;
    0x00053542 movs r1, 0                                        |     r1 = 0;
    0x00053544 mov r0, fp                                        |     r0 = fp;
    0x00053546 bl 0xce84                                         |     fcn_0000ce84 (r0, r1, r2, r3);
    0x0005354a ldr r3, [sp, 0xb0]                                |     r3 = *(arg_b0h);
    0x0005354c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005354e beq.w 0x4ebbc                                     |         goto label_214;
                                                                 |     }
    0x00053552 movs r3, 0                                        |     r3 = 0;
    0x00053554 str.w r3, [fp, 0x48]                              |     __asm ("str.w r3, [arg_48h]");
    0x00053558 b.w 0x4ebbc                                       |     goto label_214;
                                                                 | label_345:
    0x0005355c ldr r2, [sp, 0x48]                                |     r2 = *(arg_48h);
    0x0005355e movs r3, 1                                        |     r3 = 1;
    0x00053560 mov.w sb, 7                                       |     sb = 7;
    0x00053564 strb r3, [r2, 0x19]                               |     *((r2 + 0x19)) = r3;
    0x00053566 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00053568 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0005356a str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x0005356c b.w 0x4d742                                       |     goto label_25;
                                                                 | label_711:
    0x00053570 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00053572 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00053574 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00053576 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_712:
    0x0005357a ldr r0, [r3, 0x38]                                |     r0 = *((r3 + 0x38));
    0x0005357c blx 0x63dc                                        |     fcn_000063dc ();
    0x00053580 strb.w r5, [r8, 0xa]                              |     *((r8 + 0xa)) = r5;
    0x00053584 b.w 0x52b90                                       |     goto label_215;
                                                                 | label_664:
    0x00053588 mov r0, r8                                        |     r0 = r8;
    0x0005358a bl 0x9bf4                                         |     r0 = fcn_00009bf4 (r0);
    0x0005358e mov r8, r0                                        |     r8 = r0;
    0x00053590 b.w 0x52266                                       |     goto label_216;
                                                                 | label_719:
    0x00053594 movs r3, 0x64                                     |     r3 = 0x64;
    0x00053596 mov r2, r0                                        |     r2 = r0;
    0x00053598 ldr r1, [sp, 0x2c]                                |     r1 = *(arg_2ch);
    0x0005359a mov r0, r8                                        |     r0 = r8;
    0x0005359c strb.w r3, [sb, 5]                                |     *((sb + 5)) = r3;
    0x000535a0 bl 0x301ec                                        |     r0 = fcn_000301ec (r0, r1, r2);
    0x000535a4 mov r5, r0                                        |     r5 = r0;
    0x000535a6 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000535a8 beq.w 0x53e22                                     |         goto label_721;
                                                                 |     }
                                                                 | label_720:
    0x000535ac ldr.w r0, [sb, 0x44]                              |     r0 = *((sb + 0x44));
    0x000535b0 mov r6, r5                                        |     r6 = r5;
    0x000535b2 bl 0x2bd94                                        |     fcn_0002bd94 (r0);
    0x000535b6 b.w 0x527e8                                       |     goto label_186;
                                                                 | label_511:
    0x000535ba mov r0, r4                                        |     r0 = r4;
    0x000535bc bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x000535c0 b.w 0x501f0                                       |     goto label_217;
                                                                 | label_693:
    0x000535c4 ldr.w r3, [r4, 0xe0]                              |     r3 = *((r4 + 0xe0));
    0x000535c8 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000535ca beq.w 0x53cec                                     |         goto label_749;
                                                                 |     }
                                                                 | label_262:
    0x000535ce movs r1, 4                                        |     r1 = 4;
    0x000535d0 mov r0, r4                                        |     r0 = r4;
    0x000535d2 bl 0xa194                                         |     r0 = fcn_0000a194 (r0, r1);
    0x000535d6 mov r6, r0                                        |     r6 = r0;
    0x000535d8 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000535da bne.w 0x53cc8                                     |         goto label_750;
                                                                 |     }
    0x000535de ldr.w r3, [r4, 0xd8]                              |     r3 = *((r4 + 0xd8));
    0x000535e2 ldr.w r2, [r4, 0x98]                              |     r2 = *((r4 + 0x98));
    0x000535e6 ldrb r1, [r4, 9]                                  |     r1 = *((r4 + 9));
    0x000535e8 ldr.w r0, [r4, 0xe0]                              |     r0 = *((r4 + 0xe0));
    0x000535ec bl 0x2a57c                                        |     fcn_0002a57c (r0, r1, r2, r3);
    0x000535f0 movs r3, 0                                        |     r3 = 0;
    0x000535f2 mov r6, r0                                        |     r6 = r0;
    0x000535f4 str.w r3, [r4, 0xe0]                              |     __asm ("str.w r3, [r4, 0xe0]");
    0x000535f8 mov r0, r4                                        |     r0 = r4;
    0x000535fa bl 0x7a14                                         |     fcn_00007a14 (r0);
    0x000535fe cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x00053600 bne.w 0x4edec                                     |         goto label_58;
                                                                 |     }
                                                                 | label_261:
    0x00053604 mov r1, r5                                        |     r1 = r5;
    0x00053606 mov r0, r4                                        |     r0 = r4;
    0x00053608 bl 0x2b6fc                                        |     fcn_0002b6fc (r0, r1);
    0x0005360c movs r1, 1                                        |     r1 = 1;
                                                                 | label_282:
    0x0005360e mov r0, r8                                        |     r0 = r8;
    0x00053610 bl 0x3124c                                        |     r0 = fcn_0003124c (r0, r1);
    0x00053614 subs r6, r0, 0                                    |     r6 = r0 - 0;
    0x00053616 it eq                                             |     
                                                                 |     if (r6 != r0) {
    0x00053618 moveq sb, r5                                      |         sb = r5;
                                                                 |     }
    0x0005361a b.w 0x4edec                                       |     goto label_58;
                                                                 | label_574:
    0x0005361e ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x00053620 ldr r0, [r3, 0x38]                                |     r0 = *((r3 + 0x38));
    0x00053622 blx 0x63dc                                        |     fcn_000063dc ();
    0x00053626 strb r5, [r4, 0xa]                                |     *((r4 + 0xa)) = r5;
    0x00053628 b.w 0x50cfa                                       |     goto label_218;
                                                                 | label_726:
    0x0005362c mov r0, r4                                        |     r0 = r4;
    0x0005362e bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x00053632 b 0x53086                                         |     goto label_219;
                                                                 | label_707:
    0x00053634 ldrh r3, [r5, 0x1c]                               |     r3 = *((r5 + 0x1c));
    0x00053636 and r3, r3, 0x1000                                |     r3 &= 0x1000;
    0x0005363a b.w 0x5223e                                       |     goto label_220;
                                                                 | label_641:
    0x0005363e ldr r7, [sp, 0x50]                                |     r7 = *(arg_50h);
    0x00053640 movs r6, 0                                        |     r6 = 0;
    0x00053642 b.w 0x52730                                       |     goto label_221;
                                                                 | label_570:
    0x00053646 mov r0, r4                                        |     r0 = r4;
    0x00053648 bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x0005364c b.w 0x50c4a                                       |     goto label_222;
                                                                 | label_708:
    0x00053650 mov r0, sl                                        |     r0 = sl;
    0x00053652 bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x00053656 b.w 0x52aaa                                       |     goto label_223;
                                                                 | label_650:
    0x0005365a add r4, sp, 0x90                                  |     r4 += arg_90h;
    0x0005365c mov r0, r5                                        |     r0 = r5;
    0x0005365e mov r1, r4                                        |     r1 = r4;
    0x00053660 bl 0x9d84                                         |     fcn_00009d84 (r0, r1);
    0x00053664 ldr r4, [sp, 0x90]                                |     r4 = *(arg_90h);
    0x00053666 b.w 0x52058                                       |     goto label_224;
                                                                 | label_705:
    0x0005366a add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x0005366c movs r2, 0x28                                     |     r2 = 0x28;
    0x0005366e movs r1, 0                                        |     r1 = 0;
    0x00053670 mov r0, r7                                        |     r0 = r7;
    0x00053672 blx 0x5fcc                                        |     fcn_00005fcc ();
    0x00053676 mov r1, r5                                        |     r1 = r5;
    0x00053678 mov r0, r7                                        |     r0 = r7;
    0x0005367a bl 0xff00                                         |     fcn_0000ff00 (r0, r1);
    0x0005367e ldr r3, [sp, 0x3c]                                |     r3 = *(arg_3ch);
    0x00053680 mov r2, r6                                        |     r2 = r6;
    0x00053682 ldr r0, [sp, 0x2c]                                |     r0 = *(arg_2ch);
    0x00053684 ldr.w r1, [r3, sb]                                |     r1 = *((r3 + sb));
    0x00053688 ldrb r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x0005368a str r7, [sp]                                      |     *(sp) = r7;
    0x0005368c eor r3, r3, 4                                     |     r3 ^= 4;
    0x00053690 ubfx r3, r3, 2, 1                                 |     r3 = (r3 >> 2) & ((1 << 1) - 1);
    0x00053694 bl 0x2f238                                        |     r0 = fcn_0002f238 (r0, r1, r2, r3, r4);
    0x00053698 mov r6, r0                                        |     r6 = r0;
    0x0005369a cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0005369c bne.w 0x53800                                     |         goto label_236;
                                                                 |     }
    0x000536a0 ldr r0, [r7, 4]                                   |     r0 = *((r7 + 4));
    0x000536a2 b.w 0x52a70                                       |     goto label_225;
                                                                 | label_714:
    0x000536a6 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x000536a8 add r4, sp, 0xdc                                  |     r4 += arg_dch;
    0x000536aa mov r1, r7                                        |     r1 = r7;
    0x000536ac bl 0xb5cc                                         |     fcn_0000b5cc (r0, r1);
    0x000536b0 ldr r2, [r7]                                      |     r2 = *(r7);
    0x000536b2 mvn r1, 0x80000000                                |     r1 = ~0x80000000;
    0x000536b6 ldr r3, [r4]                                      |     r3 = *(r4);
    0x000536b8 cmp r3, r1                                        |     
    0x000536ba it eq                                             |     
                                                                 |     if (r3 == r1) {
    0x000536bc cmpeq r2, -1                                      |         __asm ("cmpeq r2, -1");
                                                                 |     }
                                                                 |     if (r3 != r1) {
    0x000536c0 bne.w 0x53f1c                                     |         goto label_751;
                                                                 |     }
    0x000536c4 ldrb.w r3, [r8, 0x1c]                             |     r3 = *((r8 + 0x1c));
    0x000536c8 orr r3, r3, 2                                     |     r3 |= 2;
    0x000536cc strb.w r3, [r8, 0x1c]                             |     *((r8 + 0x1c)) = r3;
    0x000536d0 b.w 0x51388                                       |     goto label_179;
                                                                 | label_576:
    0x000536d4 movs r5, 0                                        |     r5 = 0;
    0x000536d6 mov r7, r5                                        |     r7 = r5;
    0x000536d8 b.w 0x4e458                                       |     goto label_52;
                                                                 | label_441:
    0x000536dc ldrb.w r3, [fp, 0x40]                             |     r3 = *(arg_40h);
    0x000536e0 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000536e2 bne.w 0x52ae2                                     |         goto label_226;
                                                                 |     }
    0x000536e6 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x000536e8 mov.w sb, 0xd                                     |     sb = 0xd;
    0x000536ec add.w r0, r3, 0x2c                                |     r0 = r3 + 0x2c;
                                                                 | label_283:
    0x000536f0 mov r3, sb                                        |     r3 = sb;
                                                                 | label_275:
    0x000536f2 ldr r2, [pc, 0x6c]                                |     
    0x000536f4 add r2, pc                                        |     r2 = 0xa6e5a;
    0x000536f6 add.w r3, r2, r3, lsl 2                           |     r3 = r2 + (r3 << 2);
    0x000536fa ldr.w r3, [r3, 0x158]                             |     r3 = *((r3 + 0x158));
    0x000536fe cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00053700 bne.w 0x524aa                                     |         goto label_160;
                                                                 |     }
    0x00053704 ldr r3, [pc, 0x5c]                                |     
    0x00053706 add r3, pc                                        |     r3 = 0xa6e6e;
    0x00053708 b.w 0x524aa                                       |     goto label_160;
                                                                 | label_419:
    0x0005370c ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x0005370e mov.w sb, 7                                       |     sb = 7;
    0x00053712 str r0, [r4, 0x34]                                |     *((r4 + 0x34)) = r0;
    0x00053714 ldr r0, [r3, 0x2c]                                |     r0 = *((r3 + 0x2c));
    0x00053716 b.w 0x50538                                       |     goto label_39;
                                                                 | label_358:
    0x00053768 movs r3, 0                                        |     r3 = 0;
    0x0005376a str r3, [sp, 0x7c]                                |     *(arg_7ch) = r3;
    0x0005376c b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_272:
    0x00053770 mov r5, r6                                        |     r5 = r6;
    0x00053772 mov r7, r6                                        |     r7 = r6;
    0x00053774 mov r4, r6                                        |     r4 = r6;
                                                                 | label_697:
    0x00053776 ldr.w r3, [r8, 4]                                 |     r3 = *((r8 + 4));
    0x0005377a ldr r0, [r3, 0x38]                                |     r0 = *((r3 + 0x38));
    0x0005377c blx 0x63dc                                        |     fcn_000063dc ();
    0x00053780 movs r3, 0                                        |     r3 = 0;
    0x00053782 strb.w r3, [r8, 0xa]                              |     *((r8 + 0xa)) = r3;
    0x00053786 b.w 0x52808                                       |     goto label_188;
                                                                 | label_515:
    0x0005378a ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x0005378c ldrb r3, [r2, 9]                                  |     r3 = *((r2 + 9));
    0x0005378e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00053790 bne.w 0x53c86                                     |         goto label_752;
                                                                 |     }
                                                                 | label_260:
    0x00053794 mov r0, fp                                        |     r0 = fp;
    0x00053796 ldr r1, [sp, 0x28]                                |     r1 = *(arg_28h);
    0x00053798 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x0005379c ldr r2, [sp, 0x34]                                |     r2 = *(arg_34h);
    0x0005379e ldr r0, [sp, 0x2c]                                |     r0 = *(arg_2ch);
    0x000537a0 ldr r3, [r2, 0x10]                                |     r3 = *((r2 + 0x10));
    0x000537a2 subs r3, 1                                        |     r3--;
    0x000537a4 str r3, [r2, 0x10]                                |     *((r2 + 0x10)) = r3;
    0x000537a6 ldr r3, [r2, 0x14]                                |     r3 = *((r2 + 0x14));
    0x000537a8 adc r3, r3, -1                                    |     __asm ("adc r3, r3, -1");
    0x000537ac str r3, [r2, 0x14]                                |     *((r2 + 0x14)) = r3;
    0x000537ae bl 0xfdb8                                         |     fcn_0000fdb8 (r0);
    0x000537b2 b.w 0x4d4ec                                       |     goto label_6;
                                                                 | label_503:
    0x000537b6 mov r3, r4                                        |     r3 = r4;
    0x000537b8 b.w 0x5008e                                       |     goto label_227;
                                                                 | label_729:
    0x000537bc adds r3, 1                                        |     r3++;
    0x000537be mov.w sb, 0xb                                     |     sb = 0xb;
    0x000537c2 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x000537c4 ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x000537c6 ldr r0, [r3, 0x38]                                |     r0 = *((r3 + 0x38));
    0x000537c8 blx 0x63dc                                        |     fcn_000063dc ();
    0x000537cc strb r5, [r4, 0xa]                                |     *((r4 + 0xa)) = r5;
    0x000537ce b.w 0x4d742                                       |     goto label_25;
                                                                 | label_307:
    0x000537d2 cmn.w r3, 0x3f                                    |     
    0x000537d6 rsb.w r8, r8, 0xaf                                |     r8 = 0xaf - r8;
    0x000537da sbcs r2, r2, -1                                   |     __asm ("sbcs r2, r2, -1");
    0x000537de uxtb.w r8, r8                                     |     r8 = (int8_t) r8;
                                                                 |     if (r3 >= 0x3f) {
    0x000537e2 blt 0x537ea                                       |         
    0x000537e4 rsbs r3, r3, 0                                    |         r3 -= ;
    0x000537e6 b.w 0x4d670                                       |         goto label_228;
                                                                 |     }
                                                                 | label_308:
    0x000537ea cmp.w r8, 0x57                                    |     
    0x000537ee it ne                                             |     
                                                                 |     if (r8 != 0x57) {
    0x000537f0 cmpne r5, 0                                       |         __asm ("cmpne r5, 0");
                                                                 |     }
    0x000537f2 ite ge                                            |     
                                                                 |     if (r8 < 0x57) {
    0x000537f4 movge r5, 1                                       |         r5 = 1;
                                                                 |     }
                                                                 |     if (r8 >= 0x57) {
    0x000537f6 movlt r5, 0                                       |         r5 = 0;
                                                                 |     }
    0x000537f8 subs r4, r5, 1                                    |     r4 = r5 - 1;
    0x000537fa mov r5, r4                                        |     r5 = r4;
    0x000537fc b.w 0x4d69e                                       |     goto label_229;
                                                                 | label_236:
    0x00053800 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00053802 mov sb, r6                                        |     sb = r6;
    0x00053804 adds r3, 1                                        |     r3++;
    0x00053806 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00053808 b.w 0x4d742                                       |     goto label_25;
                                                                 | label_616:
    0x0005380c cmp r2, 1                                         |     
    0x0005380e sbcs r4, r3, 0                                    |     __asm ("sbcs r4, r3, 0");
                                                                 |     if (r2 >= 1) {
    0x00053812 bge.w 0x53ef6                                     |         goto label_753;
                                                                 |     }
    0x00053816 cmp r0, 1                                         |     
    0x00053818 sbcs r4, r1, 0                                    |     __asm ("sbcs r4, r1, 0");
                                                                 |     if (r0 < 1) {
    0x0005381c blt 0x5383a                                       |         goto label_276;
                                                                 |     }
    0x0005381e rsbs.w ip, r2, 0                                  |     
    0x00053822 mvn r4, 0x80000000                                |     r4 = ~0x80000000;
    0x00053826 mvn.w r7, r0                                      |     r7 = ~r0;
    0x0005382a sbc.w lr, r3, r3, lsl 1                           |     __asm ("sbc.w lr, r3, r3, lsl 1");
    0x0005382e subs r4, r4, r1                                   |     r4 -= r1;
    0x00053830 cmp r7, ip                                        |     
    0x00053832 sbcs.w r4, r4, lr                                 |     __asm ("sbcs.w r4, r4, lr");
                                                                 |     if (r7 < ip) {
    0x00053836 blt.w 0x51752                                     |         goto label_230;
                                                                 |     }
                                                                 | label_276:
    0x0005383a subs r0, r0, r2                                   |     r0 -= r2;
    0x0005383c sbc.w r1, r1, r3                                  |     __asm ("sbc.w r1, r1, r3");
    0x00053840 b.w 0x5171c                                       |     goto label_84;
                                                                 | label_692:
    0x00053844 mov r0, r4                                        |     r0 = r4;
    0x00053846 bl 0x2f33c                                        |     r0 = fcn_0002f33c (r0);
    0x0005384a mov r6, r0                                        |     r6 = r0;
    0x0005384c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0005384e bne.w 0x528f6                                     |         goto label_207;
                                                                 |     }
    0x00053852 ldrb r3, [r4, 0x1a]                               |     r3 = *((r4 + 0x1a));
    0x00053854 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00053856 beq.w 0x539de                                     |         goto label_754;
                                                                 |     }
    0x0005385a ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0005385c ldr r1, [sp, 0x38]                                |     r1 = *(arg_38h);
    0x0005385e adds r3, 1                                        |     r3++;
    0x00053860 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00053862 ldrd r2, r3, [r4, 0x38]                           |     __asm ("ldrd r2, r3, [r4, 0x38]");
    0x00053866 strd r2, r3, [r1, 0x10]                           |     __asm ("strd r2, r3, [r1, 0x10]");
    0x0005386a b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_354:
    0x0005386e ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x00053870 ldr r1, [sp, 0x20]                                |     r1 = *(arg_20h);
    0x00053872 str r3, [r2, 0x50]                                |     *((r2 + 0x50)) = r3;
    0x00053874 add.w r0, r2, 0x2c                                |     r0 = r2 + 0x2c;
    0x00053878 ldr r3, [r1, 8]                                   |     r3 = *((r1 + 8));
    0x0005387a strb.w r3, [r2, 0x56]                             |     *((r2 + 0x56)) = r3;
    0x0005387e ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00053880 str r3, [r2, 0x4c]                                |     *((r2 + 0x4c)) = r3;
    0x00053882 mov r3, r1                                        |     r3 = r1;
    0x00053884 ldrb r1, [r1, 3]                                  |     r1 = *((r1 + 3));
    0x00053886 ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x00053888 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0005388a beq.w 0x5409e                                     |         goto label_755;
                                                                 |     }
    0x0005388e ldr.w r2, [pc, 0x8a4]                             |     r2 = *(0x00054134);
    0x00053892 add r2, pc                                        |     r2 += pc;
    0x00053894 add.w r2, r2, r1, lsl 2                           |     r2 += (r1 << 2);
    0x00053898 ldr.w r2, [r2, 0x6b4]                             |     r2 = *((r2 + 0x6b4));
    0x0005389c cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0005389e beq.w 0x5409e                                     |         goto label_755;
                                                                 |     }
    0x000538a2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000538a4 beq.w 0x54052                                     |         goto label_756;
                                                                 |     }
    0x000538a8 str r3, [sp]                                      |     *(sp) = r3;
    0x000538aa mov r3, r2                                        |     r3 = r2;
    0x000538ac ldr.w r2, [pc, 0x888]                             |     r2 = *(0x00054138);
    0x000538b0 mov r1, fp                                        |     r1 = fp;
    0x000538b2 add r2, pc                                        |     r2 += pc;
    0x000538b4 bl 0x1c9d0                                        |     fcn_0001c9d0 (r0, r1);
                                                                 | label_285:
    0x000538b8 ldr r1, [sp, 0x24]                                |     r1 = *((sp + 0x24));
    0x000538ba ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x000538bc ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x000538be ldr r0, [r3, 4]                                   |     r0 = *((r3 + 4));
    0x000538c0 ldr r3, [r1, 0x2c]                                |     r3 = *((r1 + 0x2c));
    0x000538c2 str r3, [sp]                                      |     *(sp) = r3;
    0x000538c4 ldr.w r3, [r1, 0xa8]                              |     r3 = *((r1 + 0xa8));
    0x000538c8 ldr.w r1, [pc, 0x870]                             |     
    0x000538cc add r1, pc                                        |     r1 = 0xa7a0c;
    0x000538ce blx 0x6820                                        |     fcn_00006820 ();
                                                                 | label_250:
    0x000538d2 ldr r0, [sp, 0x24]                                |     r0 = *((sp + 0x24));
    0x000538d4 bl 0x335d0                                        |     r0 = fcn_000335d0 (r0);
    0x000538d8 cmp r0, 5                                         |     
    0x000538da ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x000538dc mov r4, r0                                        |     r4 = r0;
                                                                 |     if (r0 == 5) {
    0x000538de beq.w 0x53a62                                     |         goto label_757;
                                                                 |     }
    0x000538e2 ldr r3, [r3, 0x50]                                |     r3 = *((r3 + 0x50));
    0x000538e4 cmp r3, 0                                         |     
    0x000538e6 ite ne                                            |     
                                                                 |     if (r3 == 0) {
    0x000538e8 movne r4, 1                                       |         r4 = 1;
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x000538ea moveq r4, 0x65                                    |         r4 = 0x65;
                                                                 |     }
    0x000538ec b.w 0x4d46e                                       |     goto label_0;
                                                                 | label_603:
    0x000538f0 ldr r3, [r5, 4]                                   |     r3 = *((r5 + 4));
    0x000538f2 ldr r0, [r3, 0x38]                                |     r0 = *((r3 + 0x38));
    0x000538f4 blx 0x63dc                                        |     fcn_000063dc ();
    0x000538f8 movs r3, 0                                        |     r3 = 0;
    0x000538fa strb r3, [r5, 0xa]                                |     *((r5 + 0xa)) = r3;
    0x000538fc b.w 0x51484                                       |     goto label_231;
                                                                 | label_589:
    0x00053900 ldr.w r3, [fp, 0x90]                              |     r3 = *(arg_90h);
    0x00053904 cmp r3, 1                                         |     
                                                                 |     if (r3 <= 1) {
    0x00053906 ble.w 0x53fd2                                     |         goto label_758;
                                                                 |     }
    0x0005390a ldr.w r3, [pc, 0x834]                             |     
    0x0005390e ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x00053910 add r3, pc                                        |     r3 = 0xa7a56;
    0x00053912 add.w r0, r2, 0x2c                                |     r0 = r2 + 0x2c;
    0x00053916 b.w 0x5103e                                       |     goto label_149;
                                                                 | label_407:
    0x0005391a ldr.w r1, [fp, 0x48]                              |     r1 = *(arg_48h);
    0x0005391e mov r3, r7                                        |     r3 = r7;
    0x00053920 mov r2, r8                                        |     r2 = r8;
    0x00053922 mov r0, r5                                        |     r0 = r5;
    0x00053924 bl 0x12250                                        |     r0 = fcn_00012250 (r0, r1, r2, r3);
    0x00053928 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005392a beq.w 0x4ec24                                     |         goto label_232;
                                                                 |     }
                                                                 | label_406:
    0x0005392e movs r6, 7                                        |     r6 = 7;
    0x00053930 b.w 0x4ed30                                       |     goto label_233;
                                                                 | label_684:
    0x00053934 cmp.w sl, 2                                       |     
                                                                 |     if (sl == 2) {
    0x00053938 beq.w 0x53aee                                     |         goto label_759;
                                                                 |     }
                                                                 | label_683:
    0x0005393c ldr.w r1, [fp, 0x1e0]                             |     r1 = *(arg_1e0h);
    0x00053940 cmp r1, r5                                        |     
                                                                 |     if (r1 != r5) {
    0x00053942 bne.w 0x52664                                     |         goto label_234;
                                                                 |     }
    0x00053946 b.w 0x52684                                       |     goto label_235;
                                                                 | label_715:
    0x0005394a add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x0005394c movs r2, 0x28                                     |     r2 = 0x28;
    0x0005394e mov r0, r7                                        |     r0 = r7;
    0x00053950 mov r6, r1                                        |     r6 = r1;
    0x00053952 blx 0x5fcc                                        |     fcn_00005fcc ();
    0x00053956 ldrb r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x00053958 mov r1, r6                                        |     r1 = r6;
    0x0005395a ldr r2, [sp, 0x48]                                |     r2 = *(arg_48h);
    0x0005395c ldr r0, [sp, 0x2c]                                |     r0 = *(arg_2ch);
    0x0005395e eor r3, r3, 4                                     |     r3 ^= 4;
    0x00053962 ldr.w r2, [r8, r2, lsl 2]                         |     offset_60 = r2 << 2;
                                                                 |     r2 = *((r8 + offset_60));
    0x00053966 ubfx r3, r3, 2, 1                                 |     r3 = (r3 >> 2) & ((1 << 1) - 1);
    0x0005396a str r7, [sp]                                      |     *(sp) = r7;
    0x0005396c bl 0x2f238                                        |     r0 = fcn_0002f238 (r0, r1, r2, r3, r4);
    0x00053970 mov r6, r0                                        |     r6 = r0;
    0x00053972 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00053974 bne.w 0x53800                                     |         goto label_236;
                                                                 |     }
    0x00053978 ldr r3, [sp, 0xdc]                                |     r3 = *(arg_dch);
    0x0005397a ldrd r2, r1, [r4, 0x50]                           |     __asm ("ldrd r2, r1, [r4, 0x50]");
    0x0005397e str r3, [sp, 0x34]                                |     *(arg_34h) = r3;
    0x00053980 ldrh r3, [r4, 0x16]                               |     r3 = *((r4 + 0x16));
    0x00053982 str r1, [sp, 0x4c]                                |     *(arg_4ch) = r1;
    0x00053984 mov r6, r3                                        |     r6 = r3;
    0x00053986 b.w 0x52d42                                       |     goto label_237;
                                                                 | label_717:
    0x0005398a mov r3, r5                                        |     r3 = r5;
    0x0005398c ldr r4, [sp, 0x50]                                |     r4 = *(arg_50h);
    0x0005398e mov r5, r8                                        |     r5 = r8;
    0x00053990 add.w sb, r3, 1                                   |     sb = r3 + 1;
    0x00053994 ldr.w r8, [sp, 0x54]                              |     r8 = *(arg_54h);
    0x00053998 b.w 0x521be                                       |     goto label_238;
                                                                 | label_659:
    0x0005399c ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x0005399e mov.w sb, 0xb                                     |     sb = 0xb;
    0x000539a2 adds r3, 1                                        |     r3++;
    0x000539a4 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x000539a6 blx 0x5fe8                                        |     fcn_00005fe8 ();
    0x000539aa ldr.w r1, [pc, 0x798]                             |     
    0x000539ae movw r2, 0x1ec5                                   |     
    0x000539b2 add.w r3, r0, 0x14                                |     r3 = r0 + 0x14;
    0x000539b6 movt r2, 1                                        |     r2 = 0x11ec5;
    0x000539ba movs r0, 0xb                                      |     r0 = 0xb;
    0x000539bc add r1, pc                                        |     r1 = 0xa7b06;
    0x000539be blx 0x6820                                        |     fcn_00006820 ();
    0x000539c2 b.w 0x4d742                                       |     goto label_25;
                                                                 | label_457:
    0x000539c6 ldr r1, [sp, 0x70]                                |     r1 = *(arg_70h);
    0x000539c8 mov r0, r4                                        |     r0 = r4;
    0x000539ca bl 0x20900                                        |     fcn_00020900 (r0, r1);
    0x000539ce ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x000539d0 b.w 0x4f80c                                       |     goto label_239;
                                                                 | label_597:
    0x000539d4 ldr r0, [r7, 0x1c]                                |     r0 = *((r7 + 0x1c));
    0x000539d6 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x000539da b.w 0x51342                                       |     goto label_240;
                                                                 | label_754:
    0x000539de ldr r0, [r4]                                      |     r0 = *(r4);
    0x000539e0 ldrb.w r3, [r0, 0x51]                             |     r3 = *((r0 + 0x51));
    0x000539e4 cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x000539e6 beq.w 0x53ba6                                     |         goto label_760;
                                                                 |     }
    0x000539ea ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x000539ec vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x000539f0 adds r3, 1                                        |     r3++;
    0x000539f2 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x000539f4 ldr r3, [sp, 0x38]                                |     r3 = *(arg_38h);
    0x000539f6 vstr d16, [r3, 0x10]                              |     __asm ("vstr d16, [r3, 0x10]");
    0x000539fa b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_458:
    0x000539fe ldr r1, [sp, 0x70]                                |     r1 = *(arg_70h);
    0x00053a00 mov r0, r4                                        |     r0 = r4;
    0x00053a02 bl 0x20900                                        |     fcn_00020900 (r0, r1);
    0x00053a06 ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x00053a08 b.w 0x4f84c                                       |     goto label_241;
                                                                 | label_733:
    0x00053a0c ldr r5, [sp, 0x3c]                                |     r5 = *(arg_3ch);
    0x00053a0e mov r4, sb                                        |     r4 = sb;
    0x00053a10 str.w r2, [r8, 8]                                 |     __asm ("str.w r2, [r8, 8]");
                                                                 | label_269:
    0x00053a14 str.w r8, [r4, 0xc]                               |     __asm ("str.w r8, [r4, 0xc]");
                                                                 | label_732:
    0x00053a18 ldrh.w r3, [sl, 0x1a]                             |     r3 = *((sl + 0x1a));
    0x00053a1c str r3, [sp, 0x3c]                                |     *(arg_3ch) = r3;
    0x00053a1e b.w 0x52318                                       |     goto label_242;
                                                                 | label_661:
    0x00053a22 mov r0, r5                                        |     r0 = r5;
    0x00053a24 bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x00053a28 b.w 0x52224                                       |     goto label_243;
                                                                 | label_613:
    0x00053a2c orrs.w r7, r7, r8                                 |     r7 |= r8;
                                                                 |     if (r7 != r7) {
    0x00053a30 bne.w 0x518be                                     |         goto label_244;
                                                                 |     }
    0x00053a34 ldr r3, [sp, 0x2c]                                |     r3 = *(arg_2ch);
    0x00053a36 ldr r1, [sp, 0x28]                                |     r1 = *(arg_28h);
    0x00053a38 ldr r2, [sp, 0x34]                                |     r2 = *(arg_34h);
    0x00053a3a mul r3, ip, r3                                    |     r3 = ip * r3;
    0x00053a3e umull r7, ip, ip, r1                              |     r7:ip = ip * r1;
    0x00053a42 mla r3, r1, r2, r3                                |     __asm ("mla r3, r1, r2, r3");
    0x00053a44 adds r3, 2                                        |     r3 += 2;
    0x00053a46 add ip, r3                                        |     
    0x00053a48 b.w 0x516d2                                       |     goto label_245;
                                                                 | label_738:
    0x00053a4c str.w r8, [sp, 0x1c]                              |     __asm ("str.w r8, [arg_1ch]");
    0x00053a50 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_637:
    0x00053a54 ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x00053a56 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00053a58 str r2, [r3, 0x4c]                                |     *((r3 + 0x4c)) = r2;
    0x00053a5a rsb.w r2, r5, 1                                   |     r2 = 1 - r5;
    0x00053a5e strb.w r2, [fp, 0x3e]                             |     *(arg_3eh) = r2;
                                                                 | label_757:
    0x00053a62 str r4, [r3, 0x50]                                |     *((r3 + 0x50)) = r4;
    0x00053a64 b.w 0x4d46e                                       |     goto label_0;
                                                                 | label_606:
    0x00053a68 bl 0x9bf4                                         |     fcn_00009bf4 (r0);
    0x00053a6c str r0, [r6, 8]                                   |     *((r6 + 8)) = r0;
    0x00053a6e b.w 0x51526                                       |     goto label_246;
                                                                 | label_652:
    0x00053a72 add r6, sp, 0x94                                  |     r6 += arg_94h;
    0x00053a74 mov r1, r6                                        |     r1 = r6;
    0x00053a76 bl 0x9d84                                         |     fcn_00009d84 (r0, r1);
    0x00053a7a ldr r1, [sp, 0x94]                                |     r1 = *(arg_94h);
    0x00053a7c b.w 0x52078                                       |     goto label_247;
                                                                 | label_317:
    0x00053a80 mov sb, r7                                        |     sb = r7;
    0x00053a82 b.w 0x50f1c                                       |     goto label_103;
                                                                 | label_694:
    0x00053a86 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00053a88 adds r3, 1                                        |     r3++;
    0x00053a8a str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00053a8c b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_680:
    0x00053a90 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00053a92 ldr.w r2, [pc, 0x6b4]                             |     r2 = *(0x00054148);
    0x00053a96 add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x00053a9a add r2, pc                                        |     r2 += pc;
    0x00053a9c b.w 0x512cc                                       |     goto label_151;
                                                                 | label_687:
    0x00053aa0 ldr.w r2, [pc, 0x6a8]                             |     
    0x00053aa4 movw r3, 0x313                                    |     r3 = 0x313;
    0x00053aa8 str r3, [r6, 0x50]                                |     *((r6 + 0x50)) = r3;
    0x00053aaa movs r3, 2                                        |     r3 = 2;
    0x00053aac add.w r0, r6, 0x2c                                |     r0 = r6 + 0x2c;
    0x00053ab0 strb.w r3, [r6, 0x56]                             |     *((r6 + 0x56)) = r3;
    0x00053ab4 add r2, pc                                        |     r2 = 0xa7c04;
    0x00053ab6 mov r4, sl                                        |     r4 = sl;
    0x00053ab8 bl 0x1c9d0                                        |     fcn_0001c9d0 (r0, r1);
    0x00053abc b.w 0x4d46e                                       |     goto label_0;
                                                                 | label_682:
    0x00053ac0 cmp r2, 0                                         |     
    0x00053ac2 it gt                                             |     
                                                                 |     if (r2 <= 0) {
    0x00053ac4 movgt r8, 0                                       |         r8 = 0;
                                                                 |     }
                                                                 |     if (r2 <= 0) {
    0x00053ac8 ble 0x53aee                                       |         goto label_759;
                                                                 |     }
                                                                 |     do {
    0x00053aca ldr.w r3, [fp, 0x10]                              |         r3 = *(arg_10h);
    0x00053ace add.w r3, r3, r8, lsl 4                           |         r3 += (r8 << 4);
    0x00053ad2 ldr r0, [r3, 4]                                   |         r0 = *((r3 + 4));
                                                                 |         if (r0 != 0) {
    0x00053ad4 cbz r0, 0x53ae0                                   |             
    0x00053ad6 movs r1, 4                                        |             r1 = 4;
    0x00053ad8 bl 0x2c0c8                                        |             fcn_0002c0c8 (r0, r1);
    0x00053adc ldr.w r2, [fp, 0x14]                              |             r2 = *(arg_14h);
                                                                 |         }
    0x00053ae0 add.w r8, r8, 1                                   |         r8++;
    0x00053ae4 cmp r2, r8                                        |         
    0x00053ae6 bgt 0x53aca                                       |         
                                                                 |     } while (r2 > r8);
    0x00053ae8 cmp r2, 0                                         |     
                                                                 |     if (r2 > 0) {
    0x00053aea bgt.w 0x525d2                                     |         goto label_248;
                                                                 |     }
                                                                 | label_759:
    0x00053aee ldr.w r3, [fp, 0x18]                              |     r3 = *(arg_18h);
    0x00053af2 lsls r6, r3, 0x1e                                 |     r6 = r3 << 0x1e;
                                                                 |     if (r6 < r3) {
    0x00053af4 bmi.w 0x54004                                     |         goto label_761;
                                                                 |     }
                                                                 | label_284:
    0x00053af8 ldr.w r1, [fp, 0x1e0]                             |     r1 = *(arg_1e0h);
    0x00053afc cmp r5, r1                                        |     
                                                                 |     if (r5 != r1) {
    0x00053afe bne.w 0x52664                                     |         goto label_234;
                                                                 |     }
    0x00053b02 b.w 0x5268c                                       |     goto label_249;
                                                                 | label_355:
    0x00053b06 ldr r3, [sp, 0x20]                                |     r3 = *(arg_20h);
    0x00053b08 ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x00053b0a ldr r1, [sp, 0x1c]                                |     r1 = *(arg_1ch);
    0x00053b0c ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x00053b0e str r0, [r2, 0x50]                                |     *((r2 + 0x50)) = r0;
    0x00053b10 str r1, [r2, 0x4c]                                |     *((r2 + 0x4c)) = r1;
    0x00053b12 strb.w r3, [r2, 0x56]                             |     *((r2 + 0x56)) = r3;
    0x00053b16 b 0x538d2                                         |     goto label_250;
                                                                 | label_745:
    0x00053b18 ldr.w r2, [r8, 4]                                 |     r2 = *((r8 + 4));
    0x00053b1c mov r1, r6                                        |     r1 = r6;
    0x00053b1e ldr.w r3, [r8, 0x18]                              |     r3 = *((r8 + 0x18));
    0x00053b22 mov r0, sl                                        |     r0 = sl;
    0x00053b24 str r2, [sp]                                      |     *(sp) = r2;
    0x00053b26 ldr.w r2, [pc, 0x628]                             |     r2 = *(0x00054150);
    0x00053b2a add r2, pc                                        |     r2 += pc;
    0x00053b2c bl 0x35538                                        |     fcn_00035538 (r0, r1);
    0x00053b30 b 0x534aa                                         |     goto label_212;
                                                                 | label_748:
    0x00053b32 ldr r1, [sp, 0x34]                                |     r1 = *(arg_34h);
    0x00053b34 movs r2, 2                                        |     r2 = 2;
    0x00053b36 mov r0, sl                                        |     r0 = sl;
    0x00053b38 bl 0x1a768                                        |     fcn_0001a768 (r0, r1, r2);
    0x00053b3c ldr.w r3, [r8, 0x18]                              |     r3 = *((r8 + 0x18));
    0x00053b40 cmp r3, 0                                         |     
    0x00053b42 str r3, [sp, 0x2c]                                |     *(arg_2ch) = r3;
                                                                 |     if (r3 <= 0) {
    0x00053b44 ble 0x53b5e                                       |         goto label_762;
                                                                 |     }
                                                                 |     do {
    0x00053b46 ldr.w r3, [r8, 4]                                 |         r3 = *((r8 + 4));
    0x00053b4a movs r1, 0                                        |         r1 = 0;
    0x00053b4c ldr r2, [sp, 0x3c]                                |         r2 = *(arg_3ch);
    0x00053b4e mov r0, sl                                        |         r0 = sl;
    0x00053b50 ldrb r3, [r3, r6]                                 |         r3 = *((r3 + r6));
    0x00053b52 adds r6, 1                                        |         r6++;
    0x00053b54 bl 0x35538                                        |         fcn_00035538 (r0, r1);
    0x00053b58 ldr r3, [sp, 0x2c]                                |         r3 = *(arg_2ch);
    0x00053b5a cmp r3, r6                                        |         
    0x00053b5c bne 0x53b46                                       |         
                                                                 |     } while (r3 != r6);
                                                                 | label_762:
    0x00053b5e ldr r1, [sp, 0x4c]                                |     r1 = *(arg_4ch);
    0x00053b60 movs r2, 1                                        |     r2 = 1;
    0x00053b62 mov r0, sl                                        |     r0 = sl;
    0x00053b64 bl 0x1a768                                        |     fcn_0001a768 (r0, r1, r2);
    0x00053b68 b 0x534aa                                         |     goto label_212;
                                                                 | label_569:
    0x00053b6a ldr r4, [r6]                                      |     r4 = *(r6);
                                                                 |     if (r4 == 0) {
    0x00053b6c cbz r4, 0x53b7c                                   |         goto label_763;
                                                                 |     }
                                                                 |     do {
    0x00053b6e mov r1, r4                                        |         r1 = r4;
    0x00053b70 ldr r4, [r4]                                      |         r4 = *(r4);
    0x00053b72 ldr r0, [r6, 4]                                   |         r0 = *((r6 + 4));
    0x00053b74 bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
    0x00053b78 cmp r4, 0                                         |         
    0x00053b7a bne 0x53b6e                                       |         
                                                                 |     } while (r4 != 0);
                                                                 | label_763:
    0x00053b7c movs r3, 0                                        |     r3 = 0;
    0x00053b7e str r3, [r6]                                      |     *(r6) = r3;
    0x00053b80 strd r3, r3, [r6, 8]                              |     __asm ("strd r3, r3, [r6, 8]");
    0x00053b84 str r3, [r6, 0x14]                                |     *((r6 + 0x14)) = r3;
    0x00053b86 mov.w r3, 0x10000                                 |     r3 = 0x10000;
    0x00053b8a str r3, [r6, 0x18]                                |     *((r6 + 0x18)) = r3;
    0x00053b8c b.w 0x50c30                                       |     goto label_251;
                                                                 | label_404:
    0x00053b90 ldr r0, [r2, 0x38]                                |     r0 = *((r2 + 0x38));
    0x00053b92 blx 0x63dc                                        |     fcn_000063dc ();
    0x00053b96 strb r6, [r4, 0xa]                                |     *((r4 + 0xa)) = r6;
    0x00053b98 b.w 0x4ebb2                                       |     goto label_252;
                                                                 | label_452:
    0x00053b9c ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00053b9e adds r3, 1                                        |     r3++;
    0x00053ba0 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00053ba2 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_760:
    0x00053ba6 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00053ba8 add r1, sp, 0xd8                                  |     r1 += arg_d8h;
    0x00053baa adds r3, 1                                        |     r3++;
    0x00053bac str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00053bae bl 0xb5cc                                         |     fcn_0000b5cc (r0, r1);
    0x00053bb2 ldrd r2, r3, [sp, 0xd8]                           |     __asm ("ldrd r2, r3, [arg_d8h]");
    0x00053bb6 ldr r1, [sp, 0x38]                                |     r1 = *(arg_38h);
    0x00053bb8 strd r2, r3, [r1, 0x10]                           |     __asm ("strd r2, r3, [r1, 0x10]");
    0x00053bbc b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_737:
    0x00053bc0 movs r0, 0x10                                     |     r0 = 0x10;
    0x00053bc2 bl 0x11e2c                                        |     r0 = fcn_00011e2c (r0);
                                                                 |     if (r0 != 0) {
    0x00053bc6 cbz r0, 0x53bde                                   |         
    0x00053bc8 ldr r2, [r7, 0x48]                                |         r2 = *((r7 + 0x48));
    0x00053bca strd r5, sb, [r0]                                 |         __asm ("strd r5, sb, [r0]");
    0x00053bce str r2, [r0, 0xc]                                 |         *((r0 + 0xc)) = r2;
    0x00053bd0 str r0, [r7, 0x48]                                |         *((r7 + 0x48)) = r0;
    0x00053bd2 b.w 0x53302                                       |         goto label_253;
                                                                 | label_747:
    0x00053bd6 mov r0, r7                                        |         r0 = r7;
    0x00053bd8 bl 0xfe84                                         |         fcn_0000fe84 (r0);
    0x00053bdc b 0x534a0                                         |         goto label_254;
                                                                 |     }
    0x00053bde ldrb r3, [r5, 9]                                  |     r3 = *((r5 + 9));
    0x00053be0 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00053be2 bne.w 0x54096                                     |         goto label_764;
                                                                 |     }
    0x00053be6 mov.w sb, 7                                       |     sb = 7;
    0x00053bea str.w r8, [sp, 0x1c]                              |     __asm ("str.w r8, [arg_1ch]");
    0x00053bee b.w 0x4d742                                       |     goto label_25;
                                                                 | label_730:
    0x00053bf2 ldr r0, [r7, 0x1c]                                |     r0 = *((r7 + 0x1c));
    0x00053bf4 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x00053bf8 b.w 0x531ec                                       |     goto label_255;
                                                                 | label_309:
    0x00053bfc sub.w r1, r3, 0x20                                |     r1 = r3 - 0x20;
    0x00053c00 lsl.w r2, r5, r3                                  |     r2 = r5 << r3;
    0x00053c04 lsl.w r1, r4, r1                                  |     r1 = r4 << r1;
    0x00053c08 orrs r2, r1                                       |     r2 |= r1;
    0x00053c0a rsb.w r1, r3, 0x20                                |     r1 = 0x20 - r3;
    0x00053c0e lsr.w r1, r4, r1                                  |     r1 = r4 >> r1;
    0x00053c12 lsls r4, r3                                       |     r4 <<= r3;
    0x00053c14 orrs r2, r1                                       |     r2 |= r1;
    0x00053c16 b.w 0x4d69c                                       |     goto label_256;
                                                                 | label_611:
    0x00053c1a adds r3, 0x40                                     |     r3 += 0x40;
    0x00053c1c b.w 0x515e0                                       |     goto label_257;
                                                                 | label_610:
    0x00053c20 mov r3, r1                                        |     r3 = r1;
    0x00053c22 b.w 0x515c0                                       |     goto label_258;
                                                                 | label_365:
    0x00053c26 ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x00053c28 ldr r1, [sp, 0x20]                                |     r1 = *(arg_20h);
    0x00053c2a ldr r0, [sp, 0x44]                                |     r0 = *(arg_44h);
    0x00053c2c ldr r3, [r2, 0x48]                                |     r3 = *((r2 + 0x48));
    0x00053c2e ldr r4, [r1, 4]                                   |     r4 = *((r1 + 4));
    0x00053c30 adds r3, 2                                        |     r3 += 2;
    0x00053c32 orr r3, r3, 1                                     |     r3 |= 1;
    0x00053c36 str r3, [r2, 0x48]                                |     *((r2 + 0x48)) = r3;
    0x00053c38 movs r3, 0x28                                     |     r3 = 0x28;
    0x00053c3a mla r4, r3, r4, r0                                |     __asm ("mla r4, r3, r4, r0");
    0x00053c3e ldr r3, [r1, 8]                                   |     r3 = *((r1 + 8));
    0x00053c40 cmp r3, 0                                         |     
    0x00053c42 it gt                                             |     
                                                                 |     if (r3 <= 0) {
    0x00053c44 ldrgt r5, [sp, 0x20]                              |         r5 = *(arg_20h);
                                                                 |     }
    0x00053c46 str r4, [r2, 0x14]                                |     *((r2 + 0x14)) = r4;
                                                                 |     if (r3 <= 0) {
    0x00053c48 ble 0x53c6e                                       |         goto label_765;
                                                                 |     }
                                                                 | label_259:
    0x00053c4a ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x00053c4c lsls r0, r3, 0x13                                 |     r0 = r3 << 0x13;
                                                                 |     if (r0 >= r3) {
    0x00053c4e bpl 0x53c5c                                       |         goto label_766;
                                                                 |     }
    0x00053c50 mov r0, r4                                        |     r0 = r4;
    0x00053c52 bl 0x17410                                        |     r0 = fcn_00017410 (r0);
    0x00053c56 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00053c58 bne.w 0x4d4ec                                     |         goto label_6;
                                                                 |     }
                                                                 | label_766:
    0x00053c5c mov r0, r4                                        |     r0 = r4;
    0x00053c5e add.w sb, sb, 1                                   |     sb++;
    0x00053c62 bl 0x184b8                                        |     fcn_000184b8 (r0);
    0x00053c66 ldr r3, [r5, 8]                                   |     r3 = *((r5 + 8));
    0x00053c68 adds r4, 0x28                                     |     r4 += 0x28;
    0x00053c6a cmp r3, sb                                        |     
                                                                 |     if (r3 > sb) {
    0x00053c6c bgt 0x53c4a                                       |         goto label_259;
                                                                 |     }
                                                                 | label_765:
    0x00053c6e ldrb.w r3, [fp, 0x40]                             |     r3 = *(arg_40h);
    0x00053c72 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00053c74 bne.w 0x4d4ec                                     |         goto label_6;
                                                                 |     }
    0x00053c78 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00053c7a movs r4, 0x64                                     |     r4 = 0x64;
    0x00053c7c ldr r2, [sp, 0x24]                                |     r2 = *((sp + 0x24));
    0x00053c7e adds r3, 1                                        |     r3++;
    0x00053c80 str r3, [r2, 0x4c]                                |     *((r2 + 0x4c)) = r3;
    0x00053c82 b.w 0x4d46e                                       |     goto label_0;
                                                                 | label_752:
    0x00053c86 ldr r4, [r2, 0xc]                                 |     r4 = *((r2 + 0xc));
    0x00053c88 subs r4, 1                                        |     r4--;
    0x00053c8a str r4, [r2, 0xc]                                 |     *((r2 + 0xc)) = r4;
    0x00053c8c cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x00053c8e bne.w 0x53794                                     |         goto label_260;
                                                                 |     }
    0x00053c92 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x00053c94 mov r5, r2                                        |     r5 = r2;
    0x00053c96 ldr r0, [r3, 0x38]                                |     r0 = *((r3 + 0x38));
    0x00053c98 blx 0x63dc                                        |     fcn_000063dc ();
    0x00053c9c strb r4, [r5, 0xa]                                |     *((r5 + 0xa)) = r4;
    0x00053c9e b 0x53794                                         |     goto label_260;
                                                                 | label_310:
    0x00053ca0 mov.w r1, -1                                      |     r1 = -1;
    0x00053ca4 rsb.w r6, r3, 0x40                                |     r6 = 0x40 - r3;
    0x00053ca8 rsb.w r5, r3, 0x20                                |     r5 = 0x20 - r3;
    0x00053cac lsl.w r0, r1, r6                                  |     r0 = r1 << r6;
    0x00053cb0 lsl.w r5, r1, r5                                  |     r5 = r1 << r5;
    0x00053cb4 subs r3, 0x20                                     |     r3 -= 0x20;
    0x00053cb6 lsr.w r3, r1, r3                                  |     r3 = r1 >> r3;
    0x00053cba mov r1, r0                                        |     r1 = r0;
    0x00053cbc orrs r0, r5                                       |     r0 |= r5;
    0x00053cbe orrs r0, r3                                       |     r0 |= r3;
    0x00053cc0 orrs r4, r1                                       |     r4 |= r1;
    0x00053cc2 orrs r2, r0                                       |     r2 |= r0;
    0x00053cc4 b.w 0x4d69c                                       |     goto label_256;
                                                                 | label_750:
    0x00053cc8 ldr r0, [r4, 0x3c]                                |     r0 = *((r4 + 0x3c));
    0x00053cca ldr r3, [r0]                                      |     r3 = *(r0);
    0x00053ccc cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00053cce beq.w 0x4edec                                     |         goto label_58;
                                                                 |     }
    0x00053cd2 ldrb r2, [r4, 0xd]                                |     r2 = *((r4 + 0xd));
                                                                 |     if (r2 == 0) {
    0x00053cd4 cbnz r2, 0x53cdc                                  |         
    0x00053cd6 ldr r3, [r3, 0x20]                                |         r3 = *((r3 + 0x20));
    0x00053cd8 movs r1, 1                                        |         r1 = 1;
    0x00053cda blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t) (r1, r3);
                                                                 |     }
    0x00053cdc ldrb r3, [r4, 0x11]                               |     r3 = *((r4 + 0x11));
    0x00053cde cmp r3, 5                                         |     
                                                                 |     if (r3 == 5) {
    0x00053ce0 beq.w 0x4edec                                     |         goto label_58;
                                                                 |     }
    0x00053ce4 movs r3, 1                                        |     r3 = 1;
    0x00053ce6 strb r3, [r4, 0x11]                               |     *((r4 + 0x11)) = r3;
    0x00053ce8 b.w 0x4edec                                       |     goto label_58;
                                                                 | label_749:
    0x00053cec movs r1, 1                                        |     r1 = 1;
    0x00053cee mov r0, r4                                        |     r0 = r4;
    0x00053cf0 str r3, [sp, 0xd8]                                |     *(arg_d8h) = r3;
    0x00053cf2 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x00053cf4 bl 0xa194                                         |     r0 = fcn_0000a194 (r0, r1);
    0x00053cf8 mov r6, r0                                        |     r6 = r0;
    0x00053cfa cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00053cfc bne.w 0x4edec                                     |         goto label_58;
                                                                 |     }
    0x00053d00 mov r2, r0                                        |     r2 = r0;
    0x00053d02 ldr r0, [r4]                                      |     r0 = *(r4);
    0x00053d04 ldr.w r1, [r4, 0xe4]                              |     r1 = *((r4 + 0xe4));
    0x00053d08 mov r3, r7                                        |     r3 = r7;
    0x00053d0a ldr r6, [r0, 0x20]                                |     r6 = *((r0 + 0x20));
    0x00053d0c blx r6                                            |     r0 = uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x00053d0e mov r6, r0                                        |     r6 = r0;
    0x00053d10 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00053d12 bne.w 0x4edec                                     |         goto label_58;
                                                                 |     }
    0x00053d16 ldr r3, [sp, 0xd8]                                |     r3 = *(arg_d8h);
                                                                 |     if (r3 != 0) {
    0x00053d18 cbnz r3, 0x53d46                                  |         goto label_767;
                                                                 |     }
                                                                 | label_263:
    0x00053d1a ldr.w r3, [r4, 0xe0]                              |     r3 = *((r4 + 0xe0));
    0x00053d1e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00053d20 beq.w 0x53604                                     |         goto label_261;
                                                                 |     }
    0x00053d24 b 0x535ce                                         |     goto label_262;
                                                                 | label_636:
    0x00053d26 movw r3, 0x313                                    |     r3 = 0x313;
    0x00053d2a mov r0, r2                                        |     r0 = r2;
    0x00053d2c str r3, [r2, 0x50]                                |     *((r2 + 0x50)) = r3;
    0x00053d2e movs r3, 2                                        |     r3 = 2;
    0x00053d30 strb.w r3, [r2, 0x56]                             |     *((r2 + 0x56)) = r3;
    0x00053d34 adds r0, 0x2c                                     |     r0 += 0x2c;
    0x00053d36 ldr.w r2, [pc, 0x41c]                             |     
    0x00053d3a movs r4, 1                                        |     r4 = 1;
    0x00053d3c add r2, pc                                        |     r2 = 0xa7e96;
    0x00053d3e bl 0x1c9d0                                        |     fcn_0001c9d0 (r0, r1);
    0x00053d42 b.w 0x4d46e                                       |     goto label_0;
                                                                 | label_767:
    0x00053d46 mov r0, r4                                        |     r0 = r4;
    0x00053d48 bl 0xf2d8                                         |     r0 = fcn_0000f2d8 (r0);
    0x00053d4c mov r6, r0                                        |     r6 = r0;
    0x00053d4e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00053d50 beq 0x53d1a                                       |         goto label_263;
                                                                 |     }
    0x00053d52 b.w 0x4edec                                       |     goto label_58;
                                                                 | label_665:
    0x00053d56 add.w sb, sl, 0x14                                |     sb = sl + 0x14;
    0x00053d5a b.w 0x53220                                       |     goto label_264;
                                                                 | label_619:
    0x00053d5e ldr r1, [sp, 0x38]                                |     r1 = *(arg_38h);
    0x00053d60 mov.w r2, -1                                      |     r2 = -1;
    0x00053d64 mvn r3, 0x80000000                                |     r3 = ~0x80000000;
    0x00053d68 str.w r8, [sp, 0x1c]                              |     __asm ("str.w r8, [arg_1ch]");
    0x00053d6c strd r2, r3, [r1, 0x10]                           |     __asm ("strd r2, r3, [r1, 0x10]");
    0x00053d70 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_608:
    0x00053d74 ldr r3, [r5, 4]                                   |     r3 = *((r5 + 4));
    0x00053d76 ldr r0, [r3, 0x38]                                |     r0 = *((r3 + 0x38));
    0x00053d78 blx 0x63dc                                        |     fcn_000063dc ();
    0x00053d7c strb r4, [r5, 0xa]                                |     *((r5 + 0xa)) = r4;
    0x00053d7e b.w 0x51592                                       |     goto label_265;
                                                                 | label_461:
    0x00053d82 ldr r5, [r4, 8]                                   |     r5 = *((r4 + 8));
    0x00053d84 movs r6, 6                                        |     r6 = 6;
    0x00053d86 b.w 0x505a0                                       |     goto label_144;
                                                                 | label_623:
    0x00053d8a mov sl, fp                                        |     sl = fp;
    0x00053d8c mov fp, r0                                        |     
    0x00053d8e b.w 0x4de50                                       |     goto label_91;
                                                                 | label_498:
    0x00053d92 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00053d94 beq.w 0x51c2c                                     |         goto label_266;
                                                                 |     }
                                                                 | label_634:
    0x00053d98 mov.w r1, 0x204                                   |     r1 = 0x204;
    0x00053d9c mov r0, fp                                        |     r0 = fp;
    0x00053d9e bl 0x2dc10                                        |     fcn_0002dc10 (r0, r1);
    0x00053da2 movs r3, 1                                        |     r3 = 1;
    0x00053da4 strb.w r3, [fp, 0x3e]                             |     *(arg_3eh) = r3;
    0x00053da8 b.w 0x51c64                                       |     goto label_267;
                                                                 | label_614:
    0x00053dac mul r3, r0, r3                                    |     r3 = r0 * r3;
    0x00053db0 mla r3, r2, r1, r3                                |     __asm ("mla r3, r2, r1, r3");
    0x00053db4 umull r0, r1, r0, r2                              |     r0:r1 = r0 * r2;
    0x00053db8 add r1, r3                                        |     r1 += r3;
    0x00053dba b.w 0x5171c                                       |     goto label_84;
                                                                 | label_731:
    0x00053dbe ldr.w r0, [sl, 4]                                 |     r0 = *((sl + 4));
    0x00053dc2 mov.w r1, 0x3f8                                   |     r1 = 0x3f8;
    0x00053dc6 bl 0xd3a0                                         |     r0 = fcn_0000d3a0 (r0, r1);
    0x00053dca mov r3, r0                                        |     r3 = r0;
                                                                 |     if (r0 != 0) {
    0x00053dcc cbz r0, 0x53dea                                   |         
    0x00053dce ldr.w r2, [sl]                                    |         r2 = *(sl);
    0x00053dd2 adds r3, 8                                        |         r3 += 8;
    0x00053dd4 str r2, [r0]                                      |         *(r0) = r2;
    0x00053dd6 str.w r3, [sl, 0x10]                              |         __asm ("str.w r3, [sl, 0x10]");
    0x00053dda movs r3, 0x3f                                     |         r3 = 0x3f;
    0x00053ddc str.w r0, [sl]                                    |         __asm ("str.w r0, [sl]");
    0x00053de0 b.w 0x5322a                                       |         goto label_268;
                                                                 | label_734:
    0x00053de4 ldr r5, [sp, 0x3c]                                |         r5 = *(arg_3ch);
    0x00053de6 mov r4, sb                                        |         r4 = sb;
    0x00053de8 b 0x53a14                                         |         goto label_269;
                                                                 |     }
    0x00053dea ldrh.w r3, [sl, 0x1a]                             |     r3 = *((sl + 0x1a));
    0x00053dee str.w r0, [sb]                                    |     __asm ("str.w r0, [sb]");
    0x00053df2 str r3, [sp, 0x3c]                                |     *(arg_3ch) = r3;
    0x00053df4 b.w 0x52318                                       |     goto label_242;
                                                                 | label_723:
    0x00053df8 ldr.w r2, [sb, 0x48]                              |     r2 = *((sb + 0x48));
    0x00053dfc mov r1, sb                                        |     r1 = sb;
    0x00053dfe ldr.w r0, [sb, 0x34]                              |     r0 = *((sb + 0x34));
    0x00053e02 bl 0x2fc54                                        |     r0 = fcn_0002fc54 (r0, r1, r2, r3);
    0x00053e06 mov r5, r0                                        |     r5 = r0;
    0x00053e08 ldr.w r0, [sb, 0x44]                              |     r0 = *((sb + 0x44));
    0x00053e0c bl 0x2bd94                                        |     fcn_0002bd94 (r0);
    0x00053e10 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00053e12 beq.w 0x52fc8                                     |         goto label_270;
                                                                 |     }
                                                                 | label_724:
    0x00053e16 mov r6, r5                                        |     r6 = r5;
    0x00053e18 b.w 0x527e8                                       |     goto label_186;
                                                                 | label_595:
    0x00053e1c mov sb, r6                                        |     sb = r6;
    0x00053e1e b.w 0x4f156                                       |     goto label_271;
                                                                 | label_721:
    0x00053e22 movs r1, 9                                        |     r1 = 9;
    0x00053e24 mov r0, sb                                        |     r0 = sb;
    0x00053e26 bl 0x28d10                                        |     fcn_00028d10 (r0, r1);
    0x00053e2a ldr.w r0, [sb, 0x44]                              |     r0 = *((sb + 0x44));
    0x00053e2e bl 0x2bd94                                        |     fcn_0002bd94 (r0);
    0x00053e32 ldrb.w r3, [r8, 9]                                |     r3 = *((r8 + 9));
                                                                 |     if (r3 == 0) {
    0x00053e36 cbz r3, 0x53e80                                   |         goto label_768;
                                                                 |     }
    0x00053e38 ldr.w r3, [r8, 0xc]                               |     r3 = *((r8 + 0xc));
    0x00053e3c subs r6, r3, 1                                    |     r6 = r3 - 1;
    0x00053e3e str.w r6, [r8, 0xc]                               |     __asm ("str.w r6, [r8, 0xc]");
    0x00053e42 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00053e44 beq.w 0x53770                                     |         goto label_272;
                                                                 |     }
    0x00053e48 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00053e4a ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x00053e4c vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00053e50 adds r3, 1                                        |     r3++;
    0x00053e52 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00053e54 movs r3, 4                                        |     r3 = 4;
    0x00053e56 vstr d16, [r2, 0x10]                              |     __asm ("vstr d16, [r2, 0x10]");
    0x00053e5a strh r3, [r2, 0x1c]                               |     *((r2 + 0x1c)) = r3;
    0x00053e5c b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_722:
    0x00053e60 ldr.w r2, [sb, 0x48]                              |     r2 = *((sb + 0x48));
    0x00053e64 mov r1, sb                                        |     r1 = sb;
    0x00053e66 ldr.w r0, [sb, 0x34]                              |     r0 = *((sb + 0x34));
    0x00053e6a mov r7, r5                                        |     r7 = r5;
    0x00053e6c bl 0x2fc54                                        |     r0 = fcn_0002fc54 (r0, r1, r2, r3);
    0x00053e70 mov r6, r0                                        |     r6 = r0;
    0x00053e72 ldr.w r0, [sb, 0x44]                              |     r0 = *((sb + 0x44));
    0x00053e76 mov r4, r5                                        |     r4 = r5;
    0x00053e78 bl 0x2bd94                                        |     fcn_0002bd94 (r0);
    0x00053e7c b.w 0x5302c                                       |     goto label_273;
                                                                 | label_768:
    0x00053e80 ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00053e82 ldr r2, [sp, 0x38]                                |     r2 = *(arg_38h);
    0x00053e84 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00053e88 adds r3, 1                                        |     r3++;
    0x00053e8a str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00053e8c movs r3, 4                                        |     r3 = 4;
    0x00053e8e vstr d16, [r2, 0x10]                              |     __asm ("vstr d16, [r2, 0x10]");
    0x00053e92 strh r3, [r2, 0x1c]                               |     *((r2 + 0x1c)) = r3;
    0x00053e94 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_658:
    0x00053e98 ldrh.w r2, [sp, 0xf4]                             |     r2 = *(arg_f4h);
    0x00053e9c movw r1, 0x2460                                   |     r1 = 0x2460;
    0x00053ea0 add r7, sp, 0xd8                                  |     r7 += arg_d8h;
    0x00053ea2 tst r1, r2                                        |     
    0x00053ea4 bne 0x53ec4                                       |     
                                                                 |     while (1) {
    0x00053ea6 ldr r1, [r7, 0x24]                                |         r1 = *((r7 + 0x24));
                                                                 |         if (r1 != 0) {
    0x00053ea8 cbz r1, 0x53eb8                                   |             
    0x00053eaa ldr r0, [r7]                                      |             r0 = *(r7);
    0x00053eac str r3, [sp, 0x34]                                |             *(arg_34h) = r3;
    0x00053eae bl 0xe12c                                         |             fcn_0000e12c (r0, r1);
    0x00053eb2 ldr r3, [sp, 0x34]                                |             r3 = *(arg_34h);
    0x00053eb4 movs r2, 0                                        |             r2 = 0;
    0x00053eb6 str r2, [r7, 0x24]                                |             *((r7 + 0x24)) = r2;
                                                                 |         }
    0x00053eb8 movs r2, 0                                        |         r2 = 0;
    0x00053eba str r2, [r7, 4]                                   |         *((r7 + 4)) = r2;
    0x00053ebc movs r2, 1                                        |         r2 = 1;
    0x00053ebe strh r2, [r7, 0x1c]                               |         *((r7 + 0x1c)) = r2;
    0x00053ec0 b.w 0x521d0                                       |         goto label_274;
    0x00053ec4 mov r0, r7                                        |         r0 = r7;
    0x00053ec6 str r3, [sp, 0x34]                                |         *(arg_34h) = r3;
    0x00053ec8 bl 0xfe84                                         |         fcn_0000fe84 (r0);
    0x00053ecc ldr r3, [sp, 0x34]                                |         r3 = *(arg_34h);
    0x00053ece b 0x53ea6                                         |         
                                                                 |     }
                                                                 | label_700:
    0x00053ed0 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00053ed2 cmp.w sb, 0x204                                   |     
    0x00053ed6 add.w r0, r3, 0x2c                                |     r0 = r3 + 0x2c;
                                                                 |     if (sb == 0x204) {
    0x00053eda bne 0x53ee4                                       |         
    0x00053edc ldr r3, [pc, 0x278]                               |         
    0x00053ede add r3, pc                                        |         r3 = 0xa803a;
    0x00053ee0 b.w 0x524aa                                       |         goto label_160;
                                                                 |     }
    0x00053ee4 uxtb.w r3, sb                                     |     r3 = (int8_t) sb;
    0x00053ee8 cmp r3, 0x1a                                      |     
                                                                 |     if (r3 <= 0x1a) {
    0x00053eea ble.w 0x536f2                                     |         goto label_275;
                                                                 |     }
    0x00053eee ldr r3, [pc, 0x26c]                               |     
    0x00053ef0 add r3, pc                                        |     r3 = 0xa8052;
    0x00053ef2 b.w 0x524aa                                       |     goto label_160;
                                                                 | label_753:
    0x00053ef6 cmp r1, 0                                         |     
                                                                 |     if (r1 >= 0) {
    0x00053ef8 bge.w 0x5383a                                     |         goto label_276;
                                                                 |     }
    0x00053efc rsbs.w ip, r0, 1                                  |     
    0x00053f00 mov.w r4, -0x80000000                             |     r4 = -0x80000000;
    0x00053f04 sbc.w r7, r4, r1                                  |     __asm ("sbc.w r7, r4, r1");
    0x00053f08 rsbs.w lr, r2, 1                                  |     lr = 1 - r2;
    0x00053f0c sbc.w r4, r3, r3, lsl 1                           |     __asm ("sbc.w r4, r3, r3, lsl 1");
    0x00053f10 cmp lr, ip                                        |     
    0x00053f12 sbcs r4, r7                                       |     __asm ("sbcs r4, r7");
                                                                 |     if (lr >= ip) {
    0x00053f14 bge.w 0x5383a                                     |         goto label_276;
                                                                 |     }
    0x00053f18 b.w 0x51752                                       |     goto label_230;
                                                                 | label_751:
    0x00053f1c adds r2, 1                                        |     r2++;
    0x00053f1e adc r3, r3, 0                                     |     __asm ("adc r3, r3, 0");
    0x00053f22 b.w 0x52d24                                       |     goto label_277;
                                                                 | label_297:
    0x00053f26 blx 0x6498                                        |     r0 = fcn_00006498 ();
                                                                 | label_533:
    0x00053f2a mov r4, r0                                        |     r4 = r0;
    0x00053f2c mov sb, r4                                        |     sb = r4;
    0x00053f2e b.w 0x528f8                                       |     goto label_202;
                                                                 | label_532:
    0x00053f32 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00053f34 mov r4, r0                                        |     r4 = r0;
    0x00053f36 ldr r2, [sp, 0x1c]                                |     r2 = *(arg_1ch);
    0x00053f38 strd r2, r0, [r3, 0x4c]                           |     __asm ("strd r2, r0, [r3, 0x4c]");
    0x00053f3c b.w 0x4d46e                                       |     goto label_0;
                                                                 | label_375:
    0x00053f40 ldr r2, [sp, 0x20]                                |     r2 = *(arg_20h);
    0x00053f42 ldr r4, [r2, 0x10]                                |     r4 = *((r2 + 0x10));
    0x00053f44 movw r2, 0x2460                                   |     r2 = 0x2460;
    0x00053f48 tst r3, r2                                        |     
                                                                 |     if ((r3 & r2) != 0) {
    0x00053f4a bne 0x53fb8                                       |         goto label_769;
                                                                 |     }
                                                                 | label_279:
    0x00053f4c mov r3, r4                                        |     r3 = r4;
    0x00053f4e mov r2, r5                                        |     r2 = r5;
    0x00053f50 add.w r1, r4, 0x20                                |     r1 = r4 + 0x20;
                                                                 |     do {
    0x00053f54 ldr.w ip, [r3]                                    |         ip = *(r3);
    0x00053f58 adds r3, 0x10                                     |         r3 += 0x10;
    0x00053f5a ldr r7, [r3, -0xc]                                |         r7 = *((r3 - 0xc));
    0x00053f5e adds r2, 0x10                                     |         r2 += 0x10;
    0x00053f60 ldr r6, [r3, -0x8]                                |         r6 = *((r3 - 0x8));
    0x00053f64 ldr r0, [r3, -0x4]                                |         r0 = *((r3 - 0x4));
    0x00053f68 cmp r3, r1                                        |         
    0x00053f6a str ip, [r2, -0x10]                               |         *((r2 - 0x10)) = ip;
    0x00053f6e str r7, [r2, -0xc]                                |         *((r2 - 0xc)) = r7;
    0x00053f72 str r6, [r2, -0x8]                                |         *((r2 - 0x8)) = r6;
    0x00053f76 str r0, [r2, -0x4]                                |         *((r2 - 0x4)) = r0;
    0x00053f7a bne 0x53f54                                       |         
                                                                 |     } while (r3 != r1);
    0x00053f7c ldr r3, [r3]                                      |     r3 = *(r3);
    0x00053f7e str r3, [r2]                                      |     *(r2) = r3;
    0x00053f80 movs r2, 0                                        |     r2 = 0;
    0x00053f82 ldrh r3, [r4, 0x1c]                               |     r3 = *((r4 + 0x1c));
    0x00053f84 str r2, [r5, 0x20]                                |     *((r5 + 0x20)) = r2;
    0x00053f86 tst.w r3, 0x800                                   |     
    0x00053f8a ldrh r3, [r5, 0x1c]                               |     r3 = *((r5 + 0x1c));
                                                                 |     if ((r3 & 0x800) != 0) {
    0x00053f8c bne.w 0x4e410                                     |         goto label_278;
                                                                 |     }
    0x00053f90 bic r3, r3, 0x1c00                                |     r3 = BIT_MASK (r3, 0x1c00);
    0x00053f94 orr r3, r3, 0x800                                 |     r3 |= 0x800;
    0x00053f98 strh r3, [r5, 0x1c]                               |     *((r5 + 0x1c)) = r3;
    0x00053f9a b.w 0x4e41a                                       |     goto label_156;
                                                                 | label_739:
    0x00053f9e ldr r3, [sp, 0x1c]                                |     r3 = *(arg_1ch);
    0x00053fa0 adds r3, 1                                        |     r3++;
    0x00053fa2 str r3, [sp, 0x1c]                                |     *(arg_1ch) = r3;
    0x00053fa4 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_620:
    0x00053fa8 ldr r3, [sp, 0x38]                                |     r3 = *(arg_38h);
    0x00053faa orr r6, r6, 4                                     |     r6 |= 4;
    0x00053fae str.w r8, [sp, 0x1c]                              |     __asm ("str.w r8, [arg_1ch]");
    0x00053fb2 strh r6, [r3, 0x1c]                               |     *((r3 + 0x1c)) = r6;
    0x00053fb4 b.w 0x4d26a                                       |     goto label_2;
                                                                 | label_769:
    0x00053fb8 mov r0, r5                                        |     r0 = r5;
    0x00053fba bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x00053fbe b 0x53f4c                                         |     goto label_279;
                                                                 | label_408:
    0x00053fc0 mov r0, r4                                        |     r0 = r4;
    0x00053fc2 bl 0x11880                                        |     r0 = fcn_00011880 (r0);
    0x00053fc6 mov r1, r0                                        |     r1 = r0;
    0x00053fc8 b.w 0x4ec38                                       |     goto label_280;
                                                                 | label_670:
    0x00053fcc mov r2, r8                                        |     r2 = r8;
    0x00053fce b.w 0x52314                                       |     goto label_281;
                                                                 | label_758:
    0x00053fd2 cmp.w sb, 4                                       |     
                                                                 |     if (sb == 4) {
    0x00053fd6 bne 0x53fe0                                       |         
    0x00053fd8 movs r1, 2                                        |         r1 = 2;
    0x00053fda mov r0, r4                                        |         r0 = r4;
    0x00053fdc bl 0x2b6fc                                        |         fcn_0002b6fc (r0, r1);
                                                                 |     }
    0x00053fe0 movs r1, 2                                        |     r1 = 2;
    0x00053fe2 b.w 0x5360e                                       |     goto label_282;
                                                                 | label_409:
    0x00053fe6 mov r6, r3                                        |     r6 = r3;
    0x00053fe8 b.w 0x4ed30                                       |     goto label_233;
                                                                 | label_645:
    0x00053fec ldrb.w r3, [fp, 0x40]                             |     r3 = *(arg_40h);
    0x00053ff0 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00053ff2 bne.w 0x52ae2                                     |         goto label_226;
                                                                 |     }
    0x00053ff6 ldr r3, [sp, 0x24]                                |     r3 = *((sp + 0x24));
    0x00053ff8 mov.w sb, 0x14                                    |     sb = 0x14;
    0x00053ffc add.w r0, r3, 0x2c                                |     r0 = r3 + 0x2c;
    0x00054000 b.w 0x536f0                                       |     goto label_283;
                                                                 | label_761:
    0x00054004 ldr.w r3, [fp, 4]                                 |     r3 = *(arg_4h);
                                                                 |     if (r3 == 0) {
    0x00054008 cbz r3, 0x5401c                                   |         goto label_770;
                                                                 |     }
                                                                 |     do {
    0x0005400a ldrb.w r2, [r3, 0x58]                             |         r2 = *((r3 + 0x58));
    0x0005400e orr r2, r2, 0x20                                  |         r2 |= 0x20;
    0x00054012 strb.w r2, [r3, 0x58]                             |         *((r3 + 0x58)) = r2;
    0x00054016 ldr r3, [r3, 0x34]                                |         r3 = *((r3 + 0x34));
    0x00054018 cmp r3, 0                                         |         
    0x0005401a bne 0x5400a                                       |         
                                                                 |     } while (r3 != 0);
                                                                 | label_770:
    0x0005401c mov r0, fp                                        |     r0 = fp;
    0x0005401e bl 0x13968                                        |     fcn_00013968 (r0);
    0x00054022 ldr.w r3, [fp, 0x18]                              |     r3 = *(arg_18h);
    0x00054026 orr r3, r3, 2                                     |     r3 |= 2;
    0x0005402a str.w r3, [fp, 0x18]                              |     __asm ("str.w r3, [arg_18h]");
    0x0005402e b 0x53af8                                         |     goto label_284;
                                                                 | label_559:
    0x00054030 ldrh r3, [r7, 0x24]                               |     r3 = *((r7 + 0x24));
    0x00054032 movw r2, 0x2460                                   |     r2 = 0x2460;
    0x00054036 mov sl, r7                                        |     sl = r7;
    0x00054038 tst r2, r3                                        |     
                                                                 |     if ((r2 & r3) != 0) {
    0x0005403a bne 0x540ae                                       |         goto label_771;
                                                                 |     }
                                                                 | label_289:
    0x0005403c ldr.w r1, [sl, 0x2c]                              |     r1 = *((sl + 0x2c));
    0x00054040 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00054042 beq.w 0x4d4ec                                     |         goto label_6;
                                                                 |     }
    0x00054046 ldr.w r0, [sl, 8]                                 |     r0 = *((sl + 8));
    0x0005404a bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x0005404e b.w 0x4d4ec                                       |     goto label_6;
                                                                 | label_756:
    0x00054052 mov r3, r2                                        |     r3 = r2;
                                                                 |     do {
    0x00054054 ldr r2, [pc, 0x108]                               |         
    0x00054056 mov r1, fp                                        |         r1 = fp;
    0x00054058 add r2, pc                                        |         r2 = 0xa81bc;
    0x0005405a bl 0x1c9d0                                        |         fcn_0001c9d0 (r0, r1);
    0x0005405e b 0x538b8                                         |         goto label_285;
                                                                 | label_689:
    0x00054060 ldr r3, [r5, 0x18]                                |         r3 = *((r5 + 0x18));
    0x00054062 mov r1, r5                                        |         r1 = r5;
    0x00054064 mov r0, fp                                        |         r0 = fp;
    0x00054066 str.w r3, [fp, 0x1e0]                             |         __asm ("str.w r3, [arg_1e0h]");
    0x0005406a bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
    0x0005406e b.w 0x526a2                                       |         goto label_206;
                                                                 | label_688:
    0x00054072 ldr r3, [sp, 0x24]                                |         r3 = *((sp + 0x24));
    0x00054074 mov r8, r4                                        |         r8 = r4;
    0x00054076 ldr r2, [sp, 0x1c]                                |         r2 = *(arg_1ch);
    0x00054078 mov r4, r0                                        |         r4 = r0;
    0x0005407a str r2, [r3, 0x4c]                                |         *((r3 + 0x4c)) = r2;
    0x0005407c strb.w r8, [fp, 0x3e]                             |         *(arg_3eh) = r8;
    0x00054080 str r0, [r3, 0x50]                                |         *((r3 + 0x50)) = r0;
    0x00054082 b.w 0x4d46e                                       |         goto label_0;
                                                                 | label_686:
    0x00054086 movs r4, 1                                        |         r4 = 1;
    0x00054088 b.w 0x525b4                                       |         goto label_286;
                                                                 | label_653:
    0x0005408c mov r0, sl                                        |         r0 = sl;
    0x0005408e bl 0xfe84                                         |         fcn_0000fe84 (r0);
    0x00054092 b.w 0x520c4                                       |         goto label_287;
                                                                 | label_764:
    0x00054096 movs r6, 7                                        |         r6 = 7;
    0x00054098 mov r4, r6                                        |         r4 = r6;
    0x0005409a b.w 0x53314                                       |         goto label_288;
                                                                 | label_755:
    0x0005409e cmp r3, 0                                         |         
    0x000540a0 beq 0x54054                                       |         
                                                                 |     } while (r3 == 0);
    0x000540a2 ldr r2, [pc, 0xc0]                                |     
    0x000540a4 mov r1, fp                                        |     r1 = fp;
    0x000540a6 add r2, pc                                        |     r2 = 0xa8210;
    0x000540a8 bl 0x1c9d0                                        |     fcn_0001c9d0 (r0, r1);
    0x000540ac b 0x538b8                                         |     goto label_285;
                                                                 | label_771:
    0x000540ae mov r0, r8                                        |     r0 = r8;
    0x000540b0 bl 0xfe84                                         |     fcn_0000fe84 (r0);
    0x000540b4 b 0x5403c                                         |     goto label_289;
                                                                 | label_305:
    0x000540b6 orrs.w r4, r2, r3                                 |     r4 = r2 | r3;
                                                                 |     if (r4 == r2) {
    0x000540ba beq.w 0x51c08                                     |         goto label_290;
                                                                 |     }
    0x000540be cmp.w r3, -1                                      |     
    0x000540c2 it eq                                             |     
                                                                 |     if (r3 == -1) {
    0x000540c4 cmpeq r2, -1                                      |         __asm ("cmpeq r2, -1");
                                                                 |     }
                                                                 |     if (r3 != -1) {
    0x000540c8 beq 0x54124                                       |         
    0x000540ca bl 0x5e500                                        |         fcn_0005e500 (r0, r1, r2, r3);
    0x000540ce mov r0, r2                                        |         r0 = r2;
    0x000540d0 mov r1, r3                                        |         r1 = r3;
    0x000540d2 b.w 0x5171c                                       |         goto label_84;
                                                                 | label_455:
    0x000540d6 ldr.w r2, [fp, 0x128]                             |         r2 = *(arg_128h);
    0x000540da movs r3, 0                                        |         r3 = 0;
    0x000540dc ldr.w r1, [fp, 0x140]                             |         r1 = *(arg_140h);
    0x000540e0 adds r0, r2, 1                                    |         r0 = r2 + 1;
    0x000540e2 str.w r0, [fp, 0x128]                             |         __asm ("str.w r0, [arg_128h]");
    0x000540e6 str.w r3, [r1, r2, lsl 2]                         |         __asm ("str.w r3, [r1, r2, lsl 2]");
    0x000540ea ldr r3, [r3, 0xc]                                 |         r3 = *((r3 + 0xc));
    0x000540ec udf 0xff                                          |         __asm ("udf 0xff");
                                                                 | label_296:
    0x000540ee ldr r3, [sp, 0x1c]                                |         r3 = *(arg_1ch);
    0x000540f0 adds r3, 1                                        |         r3++;
    0x000540f2 str r3, [sp, 0x1c]                                |         *(arg_1ch) = r3;
    0x000540f4 b.w 0x4d26a                                       |         goto label_2;
                                                                 | label_633:
    0x000540f8 cmp.w r1, -1                                      |         
    0x000540fc it eq                                             |         
                                                                 |         if (r1 == -1) {
    0x000540fe cmpeq r0, -1                                      |             __asm ("cmpeq r0, -1");
                                                                 |         }
                                                                 |         if (r1 == -1) {
    0x00054102 beq 0x5412c                                       |             goto label_772;
                                                                 |         }
    0x00054104 vmov r0, r1, d13                                  |         __asm ("vmov r0, r1, d13");
    0x00054108 bl 0x5e5dc                                        |         fcn_0005e5dc (r0, r1);
    0x0005410c mov r2, r6                                        |         r2 = r6;
    0x0005410e mov r3, r5                                        |         r3 = r5;
    0x00054110 bl 0x5e500                                        |         fcn_0005e500 (r0, r1, r2, r3);
    0x00054114 mov r0, r2                                        |         r0 = r2;
    0x00054116 mov r1, r3                                        |         r1 = r3;
    0x00054118 bl 0x5e4a4                                        |         r0 = fcn_0005e4a4 (r0, r1, r2);
    0x0005411c vmov d12, r0, r1                                  |         __asm ("vmov d12, r0, r1");
    0x00054120 b.w 0x5176c                                       |         goto label_85;
                                                                 |     }
    0x00054124 movs r0, 0                                        |     r0 = 0;
    0x00054126 mov r1, r0                                        |     r1 = r0;
    0x00054128 b.w 0x5171c                                       |     goto label_84;
                                                                 | label_772:
    0x0005412c vmov.f64 d12, d8                                  |     __asm ("vmov.f64 d12, d8");
    0x00054130 b.w 0x5176c                                       |     goto label_85;
    0x0005e762 movs r0, r0                                       |     
    0x0005e764 movs r3, r1                                       |     r3 = r1;
    0x0005e766 movs r0, r0                                       |     
    0x0005e768 movs r6, r7                                       |     r6 = r7;
    0x0005e76a movs r0, r0                                       |     
    0x0005e76c movs r0, r2                                       |     r0 = r2;
    0x0005e76e movs r0, r0                                       |     
    0x0005e770 movs r6, r7                                       |     r6 = r7;
    0x0005e772 movs r0, r0                                       |     
    0x0005e774 movs r5, r4                                       |     r5 = r4;
    0x0005e776 movs r0, r0                                       |     
    0x0005e778 movs r6, r7                                       |     r6 = r7;
    0x0005e77a movs r0, r0                                       |     
    0x0005e77c movs r3, r6                                       |     r3 = r6;
    0x0005e77e movs r0, r0                                       |     
    0x0005e780 movs r6, r7                                       |     r6 = r7;
    0x0005e782 movs r0, r0                                       |     
    0x0005e784 movs r3, r0                                       |     r3 = r0;
    0x0005e786 movs r0, r0                                       |     
    0x0005e788 movs r6, r7                                       |     r6 = r7;
    0x0005e78a movs r0, r0                                       |     
    0x0005e78c movs r6, r0                                       |     r6 = r0;
    0x0005e78e movs r0, r0                                       |     
    0x0005e790 movs r6, r7                                       |     r6 = r7;
    0x0005e792 movs r0, r0                                       |     
    0x0005e794 movs r4, r2                                       |     r4 = r2;
    0x0005e796 movs r0, r0                                       |     
    0x0005e798 movs r6, r7                                       |     r6 = r7;
    0x0005e79a movs r0, r0                                       |     
    0x0005e79c movs r6, r1                                       |     r6 = r1;
    0x0005e79e movs r0, r0                                       |     
    0x0005e7a0 movs r6, r7                                       |     r6 = r7;
    0x0005e7a2 movs r0, r0                                       |     
    0x0005e7a4 movs r5, r1                                       |     r5 = r1;
    0x0005e7a6 movs r0, r0                                       |     
    0x0005e7a8 movs r6, r7                                       |     r6 = r7;
    0x0005e7aa movs r0, r0                                       |     
    0x0005e7ac movs r4, r4                                       |     
    0x0005e7ae movs r0, r0                                       |     
    0x0005e7b0 movs r6, r7                                       |     r6 = r7;
    0x0005e7b2 movs r0, r0                                       |     
    0x0005e7b4 movs r2, r2                                       |     
    0x0005e7b6 movs r0, r0                                       |     
    0x0005e7b8 movs r6, r7                                       |     r6 = r7;
    0x0005e7ba movs r0, r0                                       |     
    0x0005e7bc movs r7, r4                                       |     r7 = r4;
    0x0005e7be movs r0, r0                                       |     
    0x0005e7c0 movs r6, r7                                       |     r6 = r7;
    0x0005e7c2 movs r0, r0                                       |     
    0x0005e7c4 movs r2, r0                                       |     r2 = r0;
    0x0005e7c6 movs r0, r0                                       |     
    0x0005e7c8 movs r6, r7                                       |     r6 = r7;
    0x0005e7ca movs r0, r0                                       |     
    0x0005e7cc movs r0, r3                                       |     r0 = r3;
    0x0005e7ce movs r0, r0                                       |     
    0x0005e7d0 movs r6, r7                                       |     r6 = r7;
    0x0005e7d2 movs r0, r0                                       |     
    0x0005e7d4 movs r1, r1                                       |     
    0x0005e7d6 movs r0, r0                                       |     
    0x0005e7d8 movs r6, r7                                       |     r6 = r7;
    0x0005e7da movs r0, r0                                       |     
    0x0005e7dc movs r2, r1                                       |     r2 = r1;
    0x0005e7de movs r0, r0                                       |     
    0x0005e7e0 movs r6, r7                                       |     r6 = r7;
    0x0005e7e2 movs r0, r0                                       |     
    0x0005e7e4 movs r0, r0                                       |     
    0x0005e7e6 movs r0, r0                                       |     
    0x0005e7e8 movs r0, r0                                       |     
    0x0005e7ea movs r0, r0                                       |     
    0x0005e7ec strb r7, [r5, 1]                                  |     *((r5 + 1)) = r7;
    0x0005e7ee ldr r5, [r4, 0x64]                                |     r5 = *((r4 + 0x64));
    0x0005e7f0 strb r3, [r6, 0xd]                                |     *((r6 + 0xd)) = r3;
    0x0005e7f2 lsls r4, r5, 1                                    |     r4 = r5 << 1;
    0x0005e7f4 adds r2, 0x39                                     |     r2 += 0x39;
    0x0005e7f6 adds r3, 0x32                                     |     r3 += 0x32;
    0x0005e7f8 adds r7, 0x33                                     |     r7 += 0x33;
    0x0005e7fa adds r0, 0x32                                     |     r0 += 0x32;
    0x0005e7fc adds r6, 0x33                                     |     r6 += 0x33;
    0x0005e7fe adds r5, 0x38                                     |     r5 += 0x38;
    0x0005e800 adds r7, 0x34                                     |     r7 += 0x34;
    0x0005e802 adds r5, 0x37                                     |     r5 += 0x37;
    0x0005e804 movs r1, r0                                       |     r1 = r0;
    0x0005e806 movs r0, r0                                       |     
    0x0005e808 ldr r5, [r0, 0x44]                                |     r5 = *((r0 + 0x44));
    0x0005e80a strb r1, [r4, 1]                                  |     *((r4 + 1)) = r1;
    0x0005e80c invalid                                           |     
    0x0005e810 ldr r4, [r6, 0x14]                                |     r4 = *((r6 + 0x14));
    0x0005e812 str r5, [r5, 0x54]                                |     *((r5 + 0x54)) = r5;
    0x0005e814 movs r5, 0x3a                                     |     r5 = 0x3a;
    0x0005e816 adds r3, 0x2e                                     |     r3 += 0x2e;
    0x0005e818 movs r0, 0x66                                     |     r0 = 0x66;
    0x0005e81a strb r5, [r5, 0xd]                                |     *((r5 + 0xd)) = r5;
    0x0005e81c movs r0, r0                                       |     
    0x0005e81e movs r0, r0                                       |     
    0x0005e820 lsrs r3, r6, 9                                    |     r3 = r6 >> 9;
    0x0005e822 movs r0, r0                                       |     
    0x0005e824 ldr r6, [pc, 0x124]                               |     r6 = *(0x5e94c);
    0x0005e826 cmp r4, sl                                        |     
    0x0005e828 cmp r7, r8                                        |     
    0x0005e82a lsls r2, r2, 1                                    |     r2 <<= 1;
    0x0005e82c str r1, [r4, 0x54]                                |     *((r4 + 0x54)) = r1;
    0x0005e82e cmp r5, 0x73                                      |     
    0x0005e830 adds r5, 0x32                                     |     r5 += 0x32;
    0x0005e832 cmp r5, 0x36                                      |     
    0x0005e834 str r3, [r4, 0x24]                                |     *((r4 + 0x24)) = r3;
    0x0005e836 lsls r3, r4, 1                                    |     r3 = r4 << 1;
    0x0005e838 movs r0, r0                                       |     
    0x0005e83a movs r0, r0                                       |     
    0x0005e83c add r1, sb                                        |     r1 += sb;
    0x0005e83e lsls r7, r3, 1                                    |     r7 = r3 << 1;
    0x0005e840 ldr r7, [pc, 0x148]                               |     r7 = *(0x5e98c);
    0x0005e842 ldr r1, [pc, 0x15c]                               |     r1 = *(0x5e9a2);
    0x0005e844 lsls r4, r0, 1                                    |     r4 = r0 << 1;
    0x0005e846 movs r0, r0                                       |     
    0x0005e848 ldr r1, [pc, 0x13c]                               |     r1 = *(0x5e988);
    0x0005e84a lsls r4, r0, 1                                    |     r4 = r0 << 1;
    0x0005e84c ldr r6, [pc, 0x114]                               |     r6 = *(0x5e964);
    0x0005e84e rsbs r1, r0, 0                                    |     r1 = r0 - ;
    0x0005e850 cmp r4, sb                                        |     
    0x0005e852 muls r7, r3, r7                                   |     r7 = r3 * r7;
    0x0005e854 ldr r4, [pc, 0x13c]                               |     r4 = *(0x5e994);
    0x0005e856 ldr r5, [pc, 0x154]                               |     r5 = *(0x5e9ae);
    0x0005e858 ldrsh r6, [r1, r5]                                |     r6 = *((r1 + r5));
    0x0005e85a cmp r5, sb                                        |     
    0x0005e85c adcs r4, r2                                       |     __asm ("adcs r4, r2");
    0x0005e85e adcs r4, r0                                       |     __asm ("adcs r4, r0");
    0x0005e860 adcs r4, r2                                       |     __asm ("adcs r4, r2");
    0x0005e862 movs r0, r0                                       |     
    0x0005e864 str r3, [r2, r5]                                  |     *((r2 + r5)) = r3;
    0x0005e866 ldr r1, [pc, 0x130]                               |     r1 = *(0x5e99a);
    0x0005e868 cmp r4, sl                                        |     
    0x0005e86a lsls r7, r3, 1                                    |     r7 = r3 << 1;
    0x0005e86c str r1, [r4, 0x24]                                |     *((r4 + 0x24)) = r1;
    0x0005e86e strb r7, [r5, 9]                                  |     *((r5 + 9)) = r7;
    0x0005e870 movs r0, 0x74                                     |     r0 = 0x74;
    0x0005e872 strb r4, [r4, 0x15]                               |     *((r4 + 0x15)) = r4;
    0x0005e874 movs r0, 0x65                                     |     r0 = 0x65;
    0x0005e876 ldr r4, [r6, 0x74]                                |     r4 = "sqlite_master";
    0x0005e878 strh r0, [r4, r0]                                 |     *((r4 + r0)) = r0;
    0x0005e87a ldr r4, [pc, 0x13c]                               |     r4 = *(0x5e9ba);
    0x0005e87c rsbs r4, r1, 0                                    |     r4 = r1 - ;
    0x0005e87e muls r1, r0, r1                                   |     r1 = r0 * r1;
    0x0005e880 lsls r3, r1, 1                                    |     r3 = r1 << 1;
    0x0005e882 movs r0, r0                                       |     
    0x0005e884 ldr r5, [r6, 0x64]                                |     r5 = *(0x5e9c8);
    0x0005e886 ldr r3, [r5, 0x64]                                |     r3 = *(0x5ea2c);
    0x0005e888 strb r7, [r5, 0x1d]                               |     *((r5 + 0x1d)) = r7;
    0x0005e88a movs r0, 0x6e                                     |     r0 = 0x6e;
    0x0005e88c strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x0005e88e ldr r2, [r6, 0x74]                                |     r2 = "sqlite_master";
    0x0005e890 lsls r2, r6, 1                                    |     r2 = r6 << 1;
    0x0005e892 movs r0, r0                                       |     
    0x0005e894 strb r3, [r6, 0x11]                               |     *((r6 + 0x11)) = r3;
    0x0005e896 ldr r2, [r6, 0x14]                                |     r2 = "local time unavailable";
    0x0005e898 str r6, [r5, 0x74]                                |     *((r5 + 0x74)) = r6;
    0x0005e89a ldr r0, [r4, 0x70]                                |     r0 = *(0x5ea2a);
    0x0005e89c movs r0, 0x72                                     |     r0 = 0x72;
    0x0005e89e ldr r2, [r4, 0x44]                                |     r2 = *(0x5e9fe);
    0x0005e8a0 str r7, [r5, 0x24]                                |     *((r5 + 0x24)) = r7;
    0x0005e8a2 strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x0005e8a4 ldr r7, [r5, 0x74]                                |     r7 = *(0x5ea3c);
    0x0005e8a6 str r0, [r4, 0x20]                                |     *((r4 + 0x20)) = r0;
    0x0005e8a8 str r1, [r5, 0x74]                                |     *((r5 + 0x74)) = r1;
    0x0005e8aa movs r0, r0                                       |     
    0x0005e8ac ldr r5, [r6, 0x64]                                |     r5 = *(0x5e9c8);
    0x0005e8ae strb r7, [r5, 9]                                  |     *((r5 + 9)) = r7;
    0x0005e8b0 str r4, [r4, 0x54]                                |     *((r4 + 0x54)) = r4;
    0x0005e8b2 str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x0005e8b4 cmp r2, 0x64                                      |     
    0x0005e8b6 movs r0, r0                                       |     
    0x0005e8b8 ldrb r3, [r6, 9]                                  |     r3 = *((r6 + 9));
    0x0005e8ba movs r0, r0                                       |     
    0x0005e8bc lsls r2, r5, 1                                    |     r2 = r5 << 1;
    0x0005e8be ldrb r1, [r7, r4]                                 |     r1 = *((r7 + r4));
    0x0005e8c0 movs r2, r5                                       |     r2 = r5;
    0x0005e8c2 movs r0, r0                                       |     
    0x0005e8c4 strb r3, [r4, 9]                                  |     *((r4 + 9)) = r3;
    0x0005e8c6 str r5, [r4, 0x14]                                |     *((r4 + 0x14)) = r5;
    0x0005e8c8 str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x0005e8ca movs r0, r0                                       |     
    0x0005e8cc strb r4, [r6, 9]                                  |     *((r6 + 9)) = r4;
    0x0005e8ce str r1, [r5, 0x74]                                |     *((r5 + 0x74)) = r1;
    0x0005e8d0 str r7, [r4, 0x54]                                |     *((r4 + 0x54)) = r7;
    0x0005e8d2 lsls r2, r6, 1                                    |     r2 = r6 << 1;
    0x0005e8d4 str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x0005e8d6 strb r5, [r5, 1]                                  |     *((r5 + 1)) = r5;
    0x0005e8d8 movs r0, r0                                       |     
    0x0005e8da movs r0, r0                                       |     
    0x0005e8dc str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x0005e8de strb r5, [r5, 1]                                  |     *((r5 + 1)) = r5;
    0x0005e8e0 strb r7, [r5, 9]                                  |     *((r5 + 9)) = r7;
    0x0005e8e2 strb r1, [r4, 9]                                  |     *((r4 + 9)) = r1;
    0x0005e8e4 lsls r1, r7, 1                                    |     r1 = r7 << 1;
    0x0005e8e6 movs r0, r0                                       |     
    0x0005e8e8 ldr r5, [r4, 0x64]                                |     r5 = *(0x5ea1e);
    0x0005e8ea lsls r4, r4, 1                                    |     r4 <<= 1;
    0x0005e8ec ldrb r5, [r4, 1]                                  |     r5 = *((r4 + 1));
    0x0005e8ee ldr r0, [r6, 0x44]                                |     r0 = *(0x5e9a8);
    0x0005e8f0 ldr r1, [r4, 0x14]                                |     r1 = *(0x5e9ce);
    0x0005e8f2 lsls r6, r5, 1                                    |     r6 = r5 << 1;
    0x0005e8f4 adds r0, 0x32                                     |     r0 += 0x32;
    0x0005e8f6 adds r4, 0x31                                     |     r4 += 0x31;
    0x0005e8f8 adds r0, 0x2d                                     |     r0 += 0x2d;
    0x0005e8fa cmp r5, 0x38                                      |     
    0x0005e8fc adds r5, 0x31                                     |     r5 += 0x31;
    0x0005e8fe adds r1, 0x20                                     |     r1 += 0x20;
    0x0005e900 subs r2, 0x31                                     |     r2 -= 0x31;
    0x0005e902 adds r6, 0x34                                     |     r6 += 0x34;
    0x0005e904 adds r3, 0x3a                                     |     r3 += 0x3a;
    0x0005e906 movs r0, 0x33                                     |     r0 = 0x33;
    0x0005e908 adds r4, 0x39                                     |     r4 += 0x39;
                                                                 |     do {
    0x0005e90a adds r1, 0x39                                     |         r1 += 0x39;
    0x0005e90c str r2, [r4, 0x14]                                |         *((r4 + 0x14)) = r2;
    0x0005e90e str r7, [r6, 0x40]                                |         *((r6 + 0x40)) = r7;
    0x0005e910 adds r3, 0x37                                     |         r3 += 0x37;
    0x0005e912 adds r5, 0x38                                     |         r5 += 0x38;
    0x0005e914 subs r0, 0x32                                     |         r0 -= 0x32;
    0x0005e916 adds r1, 0x66                                     |         r1 += 0x66;
    0x0005e918 subs r0, 0x36                                     |         r0 -= 0x36;
    0x0005e91a adds r5, 0x36                                     |         r5 += 0x36;
    0x0005e91c str r7, [r6, 0x10]                                |         *((r6 + 0x10)) = r7;
    0x0005e91e str r4, [r4, 0x24]                                |         *((r4 + 0x24)) = r4;
    0x0005e920 adds r3, 0x34                                     |         r3 += 0x34;
    0x0005e922 adds r1, 0x61                                     |         r1 += 0x61;
    0x0005e924 subs r0, 0x39                                     |         r0 -= 0x39;
    0x0005e926 adds r3, 0x32                                     |         r3 += 0x32;
    0x0005e928 str r0, [r7, 0x10]                                |         *((r7 + 0x10)) = r0;
    0x0005e92a str r2, [r4, 0x44]                                |         *((r4 + 0x44)) = r2;
    0x0005e92c adds r1, 0x65                                     |         r1 += 0x65;
    0x0005e92e str r1, [r7, 0x50]                                |         *((r7 + 0x50)) = r1;
    0x0005e930 movs r0, r0                                       |         
    0x0005e932 movs r0, r0                                       |         
    0x0005e934 ldr r5, [r5, 0x14]                                |         r5 = *((r5 + 0x14));
    0x0005e936 strb r3, [r6, 0x15]                               |         *((r6 + 0x15)) = r3;
    0x0005e938 str r3, [r6, 0x54]                                |         *((r6 + 0x54)) = r3;
    0x0005e93a str r0, [r4, 0x10]                                |         *((r4 + 0x10)) = r0;
    0x0005e93c movs r0, 0x74                                     |         r0 = 0x74;
    0x0005e93e ldr r4, [r5, 0x14]                                |         r4 = *((r5 + 0x14));
    0x0005e940 str r6, [r5, 0x54]                                |         *((r5 + 0x54)) = r6;
    0x0005e942 movs r5, 0x20                                     |         r5 = 0x20;
    0x0005e944 movs r0, 0x64                                     |         r0 = 0x64;
    0x0005e946 str r7, [r5, 0x64]                                |         *((r5 + 0x64)) = r7;
    0x0005e948 ldrh r0, [r4, r4]                                 |         r0 = *((r4 + r4));
    0x0005e94a cmp r6, 0x25                                      |         
    0x0005e94c adds r0, 0x31                                     |         r0 += 0x31;
    0x0005e94e ldrb r3, [r6, r5]                                 |         r3 = *((r6 + r5));
    0x0005e950 movs r0, r0                                       |         
    0x0005e952 movs r0, r0                                       |         
    0x0005e954 bpl 0x5e90a                                       |         
                                                                 |     } while (r0 >= r0);
    0x0005e956 vst4.8 {d10, d12, d14, d16}, [r5:0x80], r0        |     __asm ("vst4.8 {d10, d12, d14, d16}, [r5:0x80], r0");
    0x0005e95a bvc 0x5ea24                                       |     __asm ("bvc aav.0x000000ff");
    0x0005ea24 str r4, [r5, 0x54]                                |     *((r5 + 0x54)) = r4;
    0x0005ea26 str r0, [r4, 0x30]                                |     *((r4 + 0x30)) = r0;
    0x0005ea28 ldr r7, [r5, 0x64]                                |     r7 = *((r5 + 0x64));
    0x0005ea2a strb r3, [r6, 0x11]                               |     *((r6 + 0x11)) = r3;
    0x0005ea2c strb r2, [r6, 0x15]                               |     *((r6 + 0x15)) = r2;
    0x0005ea2e strb r3, [r4, 0x11]                               |     *((r4 + 0x11)) = r3;
    0x0005ea30 strb r7, [r5, 9]                                  |     *((r5 + 9)) = r7;
    0x0005ea32 str r0, [r4, 0x60]                                |     *((r4 + 0x60)) = r0;
    0x0005ea34 ldr r1, [r4, 0x14]                                |     r1 = *((r4 + 0x14));
    0x0005ea36 str r4, [r5, 0x54]                                |     *((r5 + 0x54)) = r4;
    0x0005ea38 subs r2, 0x64                                     |     r2 -= 0x64;
    0x0005ea3a movs r5, 0x20                                     |     r5 = 0x20;
    0x0005ea3c lsls r3, r6, 1                                    |     r3 = r6 << 1;
    0x0005ea3e movs r0, r0                                       |     
    0x0005ea40 strb r6, [r6, 0x11]                               |     *((r6 + 0x11)) = r6;
    0x0005ea42 str r1, [r4, 0x24]                                |     *((r4 + 0x24)) = r1;
    0x0005ea44 str r4, [r5, 0x54]                                |     *((r5 + 0x54)) = r4;
    0x0005ea46 str r0, [r4, 0x30]                                |     *((r4 + 0x30)) = r0;
    0x0005ea48 ldr r7, [r5, 0x64]                                |     r7 = *((r5 + 0x64));
    0x0005ea4a strb r3, [r6, 0x11]                               |     *((r6 + 0x11)) = r3;
    0x0005ea4c strb r2, [r6, 0x15]                               |     *((r6 + 0x15)) = r2;
    0x0005ea4e strb r3, [r4, 0x11]                               |     *((r4 + 0x11)) = r3;
    0x0005ea50 strb r7, [r5, 9]                                  |     *((r5 + 9)) = r7;
    0x0005ea52 str r0, [r4, 0x40]                                |     *((r4 + 0x40)) = r0;
    0x0005ea54 str r1, [r5, 0x44]                                |     *((r5 + 0x44)) = r1;
    0x0005ea56 ldr r0, [r4, 0x60]                                |     r0 = *((r4 + 0x60));
    0x0005ea58 strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x0005ea5a str r0, [r4, 0x40]                                |     *((r4 + 0x40)) = r0;
    0x0005ea5c str r5, [r4, 0x34]                                |     *((r4 + 0x34)) = r5;
    0x0005ea5e str r4, [r5, 0x14]                                |     *((r5 + 0x14)) = r4;
    0x0005ea60 str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x0005ea62 strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x0005ea64 ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x0005ea66 ldr r5, [r4, 0x54]                                |     r5 = *((r4 + 0x54));
    0x0005ea68 subs r2, 0x61                                     |     r2 -= 0x61;
    0x0005ea6a movs r5, 0x20                                     |     r5 = 0x20;
    0x0005ea6c lsls r3, r6, 1                                    |     r3 = r6 << 1;
    0x0005ea6e movs r0, r0                                       |     
    0x0005ea70 movs r0, r0                                       |     
    0x0005ea72 movs r0, r0                                       |     
    0x0005ea74 ldr r5, [r4, 0x64]                                |     r5 = *((r4 + 0x64));
    0x0005ea76 movs r0, r0                                       |     
    0x0005ea78 ldr r0, [r4]                                      |     r0 = *(r4);
    0x0005ea7a str r1, [r5, 0x44]                                |     *((r5 + 0x44)) = r1;
    0x0005ea7c str r4, [r4, 0x54]                                |     *((r4 + 0x54)) = r4;
    0x0005ea7e lsls r6, r5, 1                                    |     r6 = r5 << 1;
    0x0005ea80 strh r5, [r2, r5]                                 |     *((r2 + r5)) = r5;
    0x0005ea82 ldr r6, [pc, 0x124]                               |     r6 = *(0x5ebaa);
    0x0005ea84 movs r0, 0x47                                     |     r0 = 0x47;
    0x0005ea86 cmp r4, sl                                        |     
    0x0005ea88 str r5, [r1, r1]                                  |     *((r1 + r1)) = r5;
    0x0005ea8a tst r0, r4                                        |     
    0x0005ea8c strb r5, [r5, r0]                                 |     *((r5 + r0)) = r5;
    0x0005ea8e cmp r2, sl                                        |     
    0x0005ea90 movs r0, 0x45                                     |     r0 = 0x45;
    0x0005ea92 movs r0, r0                                       |     
    0x0005ea94 ldr r6, [pc, 0x154]                               |     r6 = *(0x5ebec);
    0x0005ea96 ldr r7, [pc, 0x124]                               |     r7 = *(0x5ebbe);
    0x0005ea98 movs r0, 0x4e                                     |     r0 = 0x4e;
    0x0005ea9a ldr r4, [pc, 0x104]                               |     r4 = *(0x5eba2);
    0x0005ea9c lsls r4, r1, 1                                    |     r4 = r1 << 1;
    0x0005ea9e movs r0, r0                                       |     
    0x0005eaa0 ldr r6, [pc, 0x124]                               |     r6 = *(0x5ebc8);
    0x0005eaa2 cmp r4, sl                                        |     
    0x0005eaa4 strh r2, [r2, r5]                                 |     *((r2 + r5)) = r2;
    0x0005eaa6 muls r5, r0, r5                                   |     r5 = r0 * r5;
    0x0005eaa8 lsls r4, r2, 1                                    |     r4 = r2 << 1;
    0x0005eaaa movs r0, r0                                       |     
    0x0005eaac ldr r5, [r0, r1]                                  |     r5 = *((r0 + r1));
    0x0005eaae cmp r3, r8                                        |     
    0x0005eab0 strb r0, [r2, r1]                                 |     *((r2 + r1)) = r0;
    0x0005eab2 movs r0, r0                                       |     
    0x0005eab4 ldr r6, [pc, 0x154]                               |     r6 = "access to %s.%s is prohibited";
    0x0005eab6 ldr r7, [pc, 0x124]                               |     r7 = *(0x5ebde);
    0x0005eab8 lsls r6, r1, 1                                    |     r6 = r1 << 1;
    0x0005eaba movs r0, r0                                       |     
    0x0005eabc ldr r7, [pc, 0x10c]                               |     r7 = *(0x5ebcc);
    0x0005eabe str r5, [r1, r1]                                  |     *((r1 + r1)) = r5;
    0x0005eac0 strb r7, [r1, r5]                                 |     *((r1 + r5)) = r7;
    0x0005eac2 add r6, sb                                        |     r6 += sb;
    0x0005eac4 strh r0, [r4, r4]                                 |     *((r4 + r4)) = r0;
    0x0005eac6 rsbs r5, r2, 0                                    |     r5 = r2 - ;
    0x0005eac8 strb r1, [r2, r5]                                 |     *((r2 + r5)) = r1;
    0x0005eaca strh r5, [r0, r1]                                 |     *((r0 + r1)) = r5;
    0x0005eacc cmp r1, sb                                        |     
    0x0005eace movs r0, 0x53                                     |     r0 = 0x53;
    0x0005ead0 str r5, [r4, 0x40]                                |     *((r4 + 0x40)) = r5;
    0x0005ead2 asrs r0, r4                                       |     r0 >>= r4;
    0x0005ead4 add r6, sb                                        |     r6 += sb;
    0x0005ead6 movs r5, 0x20                                     |     r5 = 0x20;
    0x0005ead8 movs r0, 0x64                                     |     r0 = 0x64;
    0x0005eada strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005eadc movs r5, 0x28                                     |     r5 = 0x28;
    0x0005eade cmp r1, 0x73                                      |     
    0x0005eae0 movs r0, r0                                       |     
    0x0005eae2 movs r0, r0                                       |     
    0x0005eae4 strh r5, [r2, r5]                                 |     *((r2 + r5)) = r5;
    0x0005eae6 movs r0, 0x45                                     |     r0 = 0x45;
    0x0005eae8 cmp r4, sl                                        |     
    0x0005eaea str r5, [r1, r1]                                  |     *((r1 + r1)) = r5;
    0x0005eaec tst r0, r4                                        |     
    0x0005eaee strb r5, [r5, r0]                                 |     *((r5 + r0)) = r5;
    0x0005eaf0 cmp r2, sl                                        |     
    0x0005eaf2 movs r0, 0x45                                     |     r0 = 0x45;
    0x0005eaf4 ldr r7, [pc, 0x118]                               |     r7 = *(0x5ec10);
    0x0005eaf6 movs r0, 0x52                                     |     r0 = 0x52;
    0x0005eaf8 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005eafa movs r0, r0                                       |     
    0x0005eafc ldr r3, [r4, 0x74]                                |     r3 = *(0x5ec16);
    0x0005eafe strb r4, [r5, 0x15]                               |     *((r5 + 0x15)) = r4;
    0x0005eb00 ldr r5, [r5, 0x64]                                |     r5 = *((r5 + 0x64));
    0x0005eb02 str r5, [r4, 0x40]                                |     *((r4 + 0x40)) = r5;
    0x0005eb04 movs r0, r0                                       |     
    0x0005eb06 movs r0, r0                                       |     
    0x0005eb08 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005eb0a strb r6, [r5, 8]                                  |     *((r5 + 8)) = r6;
    0x0005eb0c strb r7, [r5, 0x1d]                               |     *((r5 + 0x1d)) = r7;
    0x0005eb0e str r1, [r5, 0x44]                                |     *((r5 + 0x44)) = r1;
    0x0005eb10 movs r0, r0                                       |     
    0x0005eb12 movs r0, r0                                       |     
    0x0005eb14 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005eb16 ldr r7, [pc, 0x80]                                |     r7 = *(0x5eb9a);
    0x0005eb18 movs r0, 0x52                                     |     r0 = 0x52;
    0x0005eb1a str r6, [r5, 0x14]                                |     *((r5 + 0x14)) = r6;
    0x0005eb1c str r5, [r5, 0x54]                                |     *((r5 + 0x54)) = r5;
    0x0005eb1e movs r5, 0x3d                                     |     r5 = 0x3d;
    0x0005eb20 lsls r1, r2, 1                                    |     r1 = r2 << 1;
    0x0005eb22 movs r0, r0                                       |     
    0x0005eb24 ldrb r4, [r6, 5]                                  |     r4 = *((r6 + 5));
    0x0005eb26 str r0, [r6, 0x54]                                |     *((r6 + 0x54)) = r0;
    0x0005eb28 movs r7, 0x3d                                     |     r7 = 0x3d;
    0x0005eb2a strb r4, [r6, 9]                                  |     *((r6 + 9)) = r4;
    0x0005eb2c str r1, [r5, 0x74]                                |     *((r5 + 0x74)) = r1;
    0x0005eb2e str r7, [r4, 0x54]                                |     *((r4 + 0x54)) = r7;
    0x0005eb30 movs r7, 0x72                                     |     r7 = 0x72;
    0x0005eb32 asrs r0, r4                                       |     r0 >>= r4;
    0x0005eb34 add r6, sb                                        |     r6 += sb;
    0x0005eb36 cmp r0, 0x20                                      |     
    0x0005eb38 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005eb3a movs r1, r5                                       |     r1 = r5;
    0x0005eb3c str r4, [r6, 0x24]                                |     *((r6 + 0x24)) = r4;
    0x0005eb3e ldrsh r4, [r5, r5]                                |     r4 = *((r5 + r5));
    0x0005eb40 str r6, [r5, 0x14]                                |     *((r5 + 0x14)) = r6;
    0x0005eb42 str r5, [r5, 0x54]                                |     *((r5 + 0x54)) = r5;
    0x0005eb44 movs r5, 0x3d                                     |     r5 = 0x3d;
    0x0005eb46 lsls r1, r2, 1                                    |     r1 = r2 << 1;
    0x0005eb48 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005eb4a movs r5, 0x3a                                     |     r5 = 0x3a;
    0x0005eb4c lsls r4, r4, 1                                    |     r4 <<= 1;
    0x0005eb4e movs r0, r0                                       |     
    0x0005eb50 ldr r6, [r5, 0x74]                                |     r6 = *((r5 + 0x74));
    0x0005eb52 movs r0, 0x74                                     |     r0 = 0x74;
    0x0005eb54 strb r1, [r4, 0x15]                               |     *((r4 + 0x15)) = r1;
    0x0005eb56 ldr r4, [r6, 4]                                   |     r4 = *(0x5ec10);
    0x0005eb58 strb r7, [r5, 9]                                  |     *((r5 + 9)) = r7;
    0x0005eb5a ldrb r1, [r5, 9]                                  |     r1 = *((r5 + 9));
    0x0005eb5c str r5, [r4, 0x44]                                |     *((r4 + 0x44)) = r5;
    0x0005eb5e movs r0, r0                                       |     
    0x0005eb60 strb r1, [r4, 0x15]                               |     *((r4 + 0x15)) = r1;
    0x0005eb62 ldr r4, [r6, 4]                                   |     r4 = *(0x5ec10);
    0x0005eb64 strb r7, [r5, 9]                                  |     *((r5 + 9)) = r7;
    0x0005eb66 ldrb r1, [r5, 9]                                  |     r1 = *((r5 + 9));
    0x0005eb68 strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x0005eb6a ldr r0, [r4, 0x50]                                |     r0 = *(0x5ec60);
    0x0005eb6c ldr r1, [r4, 0x44]                                |     r1 = *(0x5ec54);
    0x0005eb6e strb r6, [r4, 0x15]                               |     *((r4 + 0x15)) = r6;
    0x0005eb70 str r6, [r5, 0x34]                                |     *((r5 + 0x34)) = r6;
    0x0005eb72 ldr r4, [r6, 0x14]                                |     r4 = *(0x5ec20);
    0x0005eb74 ldr r7, [r5, 0x64]                                |     r7 = *((r5 + 0x64));
    0x0005eb76 movs r0, r0                                       |     
    0x0005eb78 ldr r3, [r4, 0x74]                                |     r3 = *(0x5ec94);
    0x0005eb7a strb r2, [r6, 9]                                  |     *((r6 + 9)) = r2;
    0x0005eb7c strb r5, [r6, 1]                                  |     *((r6 + 1)) = r5;
    0x0005eb7e movs r0, 0x74                                     |     r0 = 0x74;
    0x0005eb80 str r4, [r4, 0x14]                                |     *((r4 + 0x14)) = r4;
    0x0005eb82 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x0005eb84 str r2, [r4, 0x14]                                |     *((r4 + 0x14)) = r2;
    0x0005eb86 str r3, [r6, 0x54]                                |     *((r6 + 0x54)) = r3;
    0x0005eb88 movs r0, r0                                       |     
    0x0005eb8a movs r0, r0                                       |     
    0x0005eb8c ldr r5, [r6, 0x64]                                |     
    0x0005eb8e ldr r3, [r5, 0x64]                                |     r3 = *(0x5ecd4);
    0x0005eb90 strb r7, [r5, 0x1d]                               |     *((r5 + 0x1d)) = r7;
    0x0005eb92 movs r0, 0x6e                                     |     r0 = 0x6e;
    0x0005eb94 str r4, [r4, 0x14]                                |     *((r4 + 0x14)) = r4;
    0x0005eb96 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x0005eb98 str r2, [r4, 0x14]                                |     *((r4 + 0x14)) = r2;
    0x0005eb9a str r3, [r6, 0x54]                                |     *((r6 + 0x54)) = r3;
    0x0005eb9c movs r5, 0x20                                     |     r5 = 0x20;
    0x0005eb9e lsls r4, r2, 1                                    |     r4 = r2 << 1;
    0x0005eba0 strb r3, [r6, 5]                                  |     *((r6 + 5)) = r3;
    0x0005eba2 ldr r4, [r5, 0x14]                                |     r4 = *(0x5ec84);
    0x0005eba4 str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x0005eba6 lsls r7, r3, 1                                    |     r7 = r3 << 1;
    0x0005eba8 str r7, [r5, 0x24]                                |     *((r5 + 0x24)) = r7;
    0x0005ebaa str r2, [r5, 0x54]                                |     *((r5 + 0x54)) = r2;
    0x0005ebac strb r3, [r4, 0x11]                               |     *((r4 + 0x11)) = r3;
    0x0005ebae ldr r0, [r4, 0x60]                                |     r0 = *(0x5ece4);
    0x0005ebb0 ldr r1, [r4, 0x54]                                |     r1 = *(0x5ecd8);
    0x0005ebb2 movs r0, 0x65                                     |     r0 = 0x65;
    0x0005ebb4 str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x0005ebb6 str r3, [r6, 0x54]                                |     *((r6 + 0x54)) = r3;
    0x0005ebb8 strb r2, [r6, 0x19]                               |     *((r6 + 0x19)) = r2;
    0x0005ebba str r5, [r4, 0x44]                                |     *((r4 + 0x44)) = r5;
    0x0005ebbc str r0, [r4, 0x60]                                |     *((r4 + 0x60)) = r0;
    0x0005ebbe strb r7, [r5, 9]                                  |     *((r5 + 9)) = r7;
    0x0005ebc0 ldr r0, [r4, 0x10]                                |     r0 = *(0x5ec94);
    0x0005ebc2 strb r6, [r5, 0x11]                               |     *((r5 + 0x11)) = r6;
    0x0005ebc4 strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x0005ebc6 str r6, [r5, 0x14]                                |     *((r5 + 0x14)) = r6;
    0x0005ebc8 movs r0, 0x6c                                     |     r0 = 0x6c;
    0x0005ebca strb r5, [r6, 0xd]                                |     *((r6 + 0xd)) = r5;
    0x0005ebcc subs r2, 0x65                                     |     r2 -= 0x65;
    0x0005ebce movs r5, 0x20                                     |     r5 = 0x20;
    0x0005ebd0 lsls r3, r6, 1                                    |     r3 = r6 << 1;
    0x0005ebd2 movs r0, r0                                       |     
    0x0005ebd4 ldr r6, [r5, 0x74]                                |     r6 = *(0x5ece4);
    0x0005ebd6 strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x0005ebd8 str r5, [r6, 0x34]                                |     *((r6 + 0x34)) = r5;
    0x0005ebda movs r0, 0x68                                     |     r0 = 0x68;
    0x0005ebdc ldr r1, [r5, 0x64]                                |     r1 = *(0x5ecd4);
    0x0005ebde str r4, [r4, 0x54]                                |     *((r4 + 0x54)) = r4;
    0x0005ebe0 subs r2, 0x78                                     |     r2 -= 0x78;
    0x0005ebe2 movs r5, 0x20                                     |     r5 = 0x20;
    0x0005ebe4 lsls r3, r6, 1                                    |     r3 = r6 << 1;
    0x0005ebe6 movs r0, r0                                       |     
    0x0005ebe8 str r1, [r4, 0x34]                                |     *((r4 + 0x34)) = r1;
    0x0005ebea str r3, [r4, 0x54]                                |     *((r4 + 0x54)) = r3;
    0x0005ebec strb r3, [r6, 0xd]                                |     *((r6 + 0xd)) = r3;
    0x0005ebee strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x0005ebf0 movs r0, 0x6f                                     |     r0 = 0x6f;
    0x0005ebf2 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005ebf4 movs r5, 0x2e                                     |     r5 = 0x2e;
    0x0005ebf6 cmp r6, 0x73                                      |     
    0x0005ebf8 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005ebfa ldr r0, [r4, 0x10]                                |     r0 = *(0x5ec94);
    0x0005ebfc movs r0, 0x73                                     |     r0 = 0x73;
    0x0005ebfe strb r0, [r6, 9]                                  |     *((r6 + 9)) = r0;
    0x0005ec00 ldr r7, [r5, 4]                                   |     r7 = *(0x5ec74);
    0x0005ec02 str r1, [r5, 0x24]                                |     *((r5 + 0x24)) = r1;
    0x0005ec04 strb r1, [r5, 0x11]                               |     *((r5 + 0x11)) = r1;
    0x0005ec06 str r5, [r4, 0x44]                                |     *((r4 + 0x44)) = r5;
    0x0005ec08 movs r0, r0                                       |     
    0x0005ec0a movs r0, r0                                       |     
    0x0005ec0c str r1, [r4, 0x34]                                |     *((r4 + 0x34)) = r1;
    0x0005ec0e str r3, [r4, 0x54]                                |     *((r4 + 0x54)) = r3;
    0x0005ec10 strb r3, [r6, 0xd]                                |     *((r6 + 0xd)) = r3;
    0x0005ec12 strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x0005ec14 movs r0, 0x6f                                     |     r0 = 0x6f;
    0x0005ec16 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005ec18 movs r5, 0x2e                                     |     r5 = 0x2e;
    0x0005ec1a movs r0, 0x73                                     |     r0 = 0x73;
    0x0005ec1c strb r1, [r5, 0xd]                                |     *((r5 + 0xd)) = r1;
    0x0005ec1e strb r0, [r4]                                     |     *(r4) = r0;
    0x0005ec20 ldr r2, [r6, 0x74]                                |     r2 = *(0x5ed58);
    0x0005ec22 ldr r0, [r5, 0x14]                                |     r0 = *(0x5ec84);
    0x0005ec24 ldr r2, [r4, 0x14]                                |     r2 = *(0x5ec98);
    0x0005ec26 str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x0005ec28 lsls r4, r4, 1                                    |     r4 <<= 1;
    0x0005ec2a movs r0, r0                                       |     
    0x0005ec2c ldrb r5, [r0, 1]                                  |     r5 = *((r0 + 1));
    0x0005ec2e strb r0, [r6, 9]                                  |     *((r6 + 9)) = r0;
    0x0005ec30 strb r5, [r4, 0xd]                                |     *((r4 + 0xd)) = r5;
    0x0005ec32 ldr r3, [r6, 0x14]                                |     r3 = *(0x5ecf8);
    0x0005ec34 ldr r7, [r5, 0x64]                                |     r7 = *(0x5ecd4);
    0x0005ec36 strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x0005ec38 str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x0005ec3a movs r0, 0x65                                     |     r0 = 0x65;
    0x0005ec3c strb r1, [r5, 0xd]                                |     *((r5 + 0xd)) = r1;
    0x0005ec3e strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x0005ec40 ldr r7, [r5, 0x74]                                |     r7 = *(0x5ece4);
    0x0005ec42 ldr r0, [r4, 0x40]                                |     r0 = *(0x5ecc4);
    0x0005ec44 strb r1, [r4, 9]                                  |     *((r4 + 9)) = r1;
    0x0005ec46 str r7, [r4, 0x54]                                |     *((r4 + 0x54)) = r7;
    0x0005ec48 cmp r0, 0x20                                      |     
    0x0005ec4a str r5, [r5, 0x14]                                |     *((r5 + 0x14)) = r5;
    0x0005ec4c ldr r0, [r7, 0x14]                                |     r0 = *(0x5ecf8);
    0x0005ec4e strb r5, [r5, 0x15]                               |     *((r5 + 0x15)) = r5;
    0x0005ec50 movs r0, 0x6d                                     |     r0 = 0x6d;
    0x0005ec52 str r4, [r4, 0x54]                                |     *((r4 + 0x54)) = r4;
    0x0005ec54 strb r0, [r6, 0x11]                               |     *((r6 + 0x11)) = r0;
    0x0005ec56 movs r0, 0x68                                     |     r0 = 0x68;
    0x0005ec58 str r5, [r4, 0x40]                                |     *((r4 + 0x40)) = r5;
    0x0005ec5a movs r1, r5                                       |     r1 = r5;
    0x0005ec5c ldr r6, [r5, 0x74]                                |     r6 = *(0x5ece4);
    0x0005ec5e strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x0005ec60 str r5, [r6, 0x34]                                |     *((r6 + 0x34)) = r5;
    0x0005ec62 movs r0, 0x68                                     |     r0 = 0x68;
    0x0005ec64 ldr r3, [r4, 0x74]                                |     r3 = *(0x5ecf8);
    0x0005ec66 strb r4, [r5, 0x15]                               |     *((r5 + 0x15)) = r4;
    0x0005ec68 ldr r5, [r5, 0x64]                                |     
    0x0005ec6a movs r0, r0                                       |     
    0x0005ec6c ldr r1, [r4, 0x54]                                |     r1 = *(0x5ecd8);
    0x0005ec6e ldr r2, [r4, 0x14]                                |     r2 = *(0x5ec98);
    0x0005ec70 strb r7, [r4, 0x15]                               |     *((r4 + 0x15)) = r7;
    0x0005ec72 strb r7, [r5, 0x15]                               |     *((r5 + 0x15)) = r7;
    0x0005ec74 movs r0, 0x73                                     |     r0 = 0x73;
    0x0005ec76 ldr r3, [r4, 0x74]                                |     r3 = *(0x5ecf8);
    0x0005ec78 strb r4, [r5, 0x15]                               |     *((r5 + 0x15)) = r4;
    0x0005ec7a ldr r5, [r5, 0x64]                                |     
    0x0005ec7c ldr r0, [r4, 0x60]                                |     r0 = *(0x5ece4);
    0x0005ec7e ldr r1, [r4, 0x54]                                |     r1 = *(0x5ecd8);
    0x0005ec80 lsls r5, r4, 1                                    |     r5 = r4 << 1;
    0x0005ec82 movs r0, r0                                       |     
    0x0005ec84 ldr r7, [r5, 0x44]                                |     r7 = *(0x5ed7c);
    0x0005ec86 lsls r4, r4, 1                                    |     r4 <<= 1;
    0x0005ec88 str r6, [r5, 0x54]                                |     *((r5 + 0x54)) = r6;
    0x0005ec8a lsls r7, r6, 1                                    |     r7 = r6 << 1;
    0x0005ec8c ldr r5, [r5, 0x14]                                |     r5 = *(0x5ed4c);
    0x0005ec8e strb r3, [r6, 0x15]                               |     *((r6 + 0x15)) = r3;
    0x0005ec90 str r3, [r6, 0x54]                                |     *((r6 + 0x54)) = r3;
    0x0005ec92 ldr r0, [r4, 0x70]                                |     r0 = *(0x5ecf4);
    0x0005ec94 movs r0, 0x66                                     |     r0 = 0x66;
    0x0005ec96 ldr r1, [r4, 0x44]                                |     r1 = "%s: %s";
    0x0005ec98 str r1, [r5, 0x14]                                |     *((r5 + 0x14)) = r1;
    0x0005ec9a str r3, [r6, 0x54]                                |     *((r6 + 0x54)) = r3;
    0x0005ec9c movs r0, 0x64                                     |     r0 = 0x64;
    0x0005ec9e str r1, [r4, 0x74]                                |     *((r4 + 0x74)) = r1;
    0x0005eca0 strb r7, [r4, 9]                                  |     *((r4 + 9)) = r7;
    0x0005eca2 str r5, [r4, 0x74]                                |     *((r4 + 0x74)) = r5;
    0x0005eca4 strb r1, [r4, 0x11]                               |     *((r4 + 0x11)) = r1;
    0x0005eca6 movs r0, 0x65                                     |     r0 = 0x65;
    0x0005eca8 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005ecaa movs r0, r0                                       |     
    0x0005ecac strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005ecae movs r0, 0x3a                                     |     r0 = 0x3a;
    0x0005ecb0 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005ecb2 movs r5, 0x2e                                     |     r5 = 0x2e;
    0x0005ecb4 cmp r6, 0x73                                      |     
    0x0005ecb6 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005ecb8 movs r0, r0                                       |     
    0x0005ecba movs r0, r0                                       |     
    0x0005ecbc strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005ecbe movs r0, 0x3a                                     |     r0 = 0x3a;
    0x0005ecc0 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005ecc2 movs r5, 0x2e                                     |     r5 = 0x2e;
    0x0005ecc4 lsls r3, r6, 1                                    |     r3 = r6 << 1;
    0x0005ecc6 movs r0, r0                                       |     
    0x0005ecc8 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005ecca movs r0, 0x3a                                     |     r0 = 0x3a;
    0x0005eccc strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005ecce movs r0, r0                                       |     
    0x0005ecd0 str r4, [r4, 0x54]                                |     *((r4 + 0x54)) = r4;
    0x0005ecd2 str r6, [r4, 0x14]                                |     *((r4 + 0x14)) = r6;
    0x0005ecd4 ldr r5, [r6, 0x44]                                |     r5 = *(0x5ed28);
    0x0005ecd6 movs r0, 0x74                                     |     r0 = 0x74;
    0x0005ecd8 str r6, [r6, 0x14]                                |     *((r6 + 0x14)) = r6;
    0x0005ecda strb r4, [r5, 0x15]                               |     *((r5 + 0x15)) = r4;
    0x0005ecdc movs r0, 0x65                                     |     r0 = 0x65;
    0x0005ecde str r7, [r5, 0x64]                                |     *((r5 + 0x64)) = r7;
    0x0005ece0 str r0, [r4, 0x30]                                |     *((r4 + 0x30)) = r0;
    0x0005ece2 ldr r7, [r5, 0x44]                                |     r7 = *(0x5ed6c);
    0x0005ece4 ldr r5, [r6, 0x54]                                |     r5 = *(0x5ed38);
    0x0005ece6 movs r0, 0x6e                                     |     r0 = 0x6e;
    0x0005ece8 movs r5, 0x5b                                     |     r5 = 0x5b;
    0x0005ecea ldrb r3, [r6, r5]                                 |     r3 = *((r6 + r5));
    0x0005ecec ldr r0, [r4, 0x10]                                |     r0 = *(0x5ec94);
    0x0005ecee movs r0, 0x73                                     |     r0 = 0x73;
    0x0005ecf0 ldr r6, [r5, 0x74]                                |     r6 = *(0x5edac);
    0x0005ecf2 movs r0, 0x74                                     |     r0 = 0x74;
    0x0005ecf4 ldr r3, [r4, 0x74]                                |     r3 = *(0x5ecf8);
    0x0005ecf6 strb r6, [r5, 0xd]                                |     *((r5 + 0xd)) = r6;
    0x0005ecf8 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x0005ecfa strb r6, [r5, 0x11]                               |     *((r5 + 0x11)) = r6;
    0x0005ecfc movs r0, r0                                       |     
    0x0005ecfe movs r0, r0                                       |     
    0x0005ed00 ldr r6, [r4, 0x74]                                |     r6 = *(0x5ecf8);
    0x0005ed02 str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x0005ed04 str r1, [r5, 0x74]                                |     *((r5 + 0x74)) = r1;
    0x0005ed06 movs r0, 0x6e                                     |     r0 = 0x6e;
    0x0005ed08 str r3, [r5, 0x54]                                |     *((r5 + 0x54)) = r3;
    0x0005ed0a movs r0, 0x79                                     |     r0 = 0x79;
    0x0005ed0c ldr r7, [r5, 0x64]                                |     r7 = *(0x5ed9c);
    0x0005ed0e movs r5, 0x20                                     |     r5 = 0x20;
    0x0005ed10 movs r0, 0x73                                     |     r0 = 0x73;
    0x0005ed12 ldr r3, [r6, 4]                                   |     r3 = imp.mkdir;
    0x0005ed14 strb r7, [r5, 0x15]                               |     *((r5 + 0x15)) = r7;
    0x0005ed16 str r4, [r5, 0x44]                                |     *((r5 + 0x44)) = r4;
    0x0005ed18 strb r0, [r4, 8]                                  |     *((r4 + 8)) = r0;
    0x0005ed1a str r5, [r4, 0x64]                                |     *((r4 + 0x64)) = r5;
    0x0005ed1c strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x0005ed1e ldr r5, [r4, 0x64]                                |     
    0x0005ed20 str r3, [r4, 0x54]                                |     *((r4 + 0x54)) = r3;
    0x0005ed22 ldr r0, [r4, 0x70]                                |     r0 = *(0x5ecf4);
    0x0005ed24 ldr r6, [r5, 0x44]                                |     r6 = *(0x5ed2c);
    0x0005ed26 movs r0, 0x79                                     |     r0 = 0x79;
    0x0005ed28 ldr r7, [r5, 0x64]                                |     r7 = *(0x5ed4c);
    0x0005ed2a movs r0, 0x65                                     |     r0 = 0x65;
    0x0005ed2c ldr r3, [r4, 0x74]                                |     r3 = *(0x5ecf8);
    0x0005ed2e strb r4, [r5, 0x15]                               |     *((r5 + 0x15)) = r4;
    0x0005ed30 ldr r5, [r5, 0x64]                                |     
    0x0005ed32 ldr r0, [r4, 0x70]                                |     r0 = *(0x5ecf4);
    0x0005ed34 movs r0, 0x66                                     |     r0 = 0x66;
    0x0005ed36 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x0005ed38 ldr r2, [r4, 0x44]                                |     r2 = "%s: %s";
    0x0005ed3a movs r0, 0x65                                     |     r0 = 0x65;
    0x0005ed3c strb r5, [r4, r0]                                 |     *((r4 + r0)) = r5;
    0x0005ed3e movs r0, r0                                       |     
    0x0005ed40 strb r6, [r5, 0x15]                               |     *((r5 + 0x15)) = r6;
    0x0005ed42 str r5, [r5, 0x24]                                |     *((r5 + 0x24)) = r5;
    0x0005ed44 strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x0005ed46 ldr r0, [r4, 0x70]                                |     r0 = *(0x5ecf4);
    0x0005ed48 movs r0, 0x66                                     |     r0 = 0x66;
    0x0005ed4a ldr r3, [r4, 0x74]                                |     r3 = *(0x5ecf8);
    0x0005ed4c strb r4, [r5, 0x15]                               |     *((r5 + 0x15)) = r4;
    0x0005ed4e ldr r5, [r5, 0x64]                                |     r5 = *(0x5edb0);
    0x0005ed50 movs r0, 0x73                                     |     r0 = 0x73;
    0x0005ed52 ldr r1, [r5, 0x64]                                |     r1 = *(0x5ee14);
    0x0005ed54 str r0, [r4, 0x60]                                |     *((r4 + 0x60)) = r0;
    0x0005ed56 strb r7, [r5, 9]                                  |     *((r5 + 9)) = r7;
    0x0005ed58 ldr r5, [r4, 0x14]                                |     
    0x0005ed5a ldr r7, [r4, 0x64]                                |     r7 = *(0x5ece8);
    0x0005ed5c ldr r0, [r4, 0x30]                                |     r0 = *(0x5ecb4);
    0x0005ed5e ldrb r5, [r4, 5]                                  |     r5 = *((r4 + 5));
    0x0005ed60 str r0, [r4, 0x40]                                |     *((r4 + 0x40)) = r0;
    0x0005ed62 str r7, [r5, 0x54]                                |     *((r5 + 0x54)) = r7;
    0x0005ed64 movs r0, 0x73                                     |     r0 = 0x73;
    0x0005ed66 ldr r6, [r5, 0x74]                                |     r6 = *(0x5ed0c);
    0x0005ed68 movs r0, 0x74                                     |     r0 = 0x74;
    0x0005ed6a str r5, [r5, 0x14]                                |     *((r5 + 0x14)) = r5;
    0x0005ed6c str r4, [r6, 0x34]                                |     *((r6 + 0x34)) = r4;
    0x0005ed6e movs r0, 0x68                                     |     r0 = 0x68;
    0x0005ed70 ldr r4, [r6, 4]                                   |     r4 = *(0x5ed10);
    0x0005ed72 movs r0, 0x65                                     |     r0 = 0x65;
    0x0005ed74 strb r6, [r5, 0x15]                               |     *((r5 + 0x15)) = r6;
    0x0005ed76 str r5, [r5, 0x24]                                |     *((r5 + 0x24)) = r5;
    0x0005ed78 strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x0005ed7a ldr r0, [r4, 0x70]                                |     r0 = *(0x5ed80);
    0x0005ed7c movs r0, 0x66                                     |     r0 = 0x66;
    0x0005ed7e ldr r3, [r4, 0x74]                                |     r3 = *(0x5ed84);
    0x0005ed80 strb r4, [r5, 0x15]                               |     *((r5 + 0x15)) = r4;
    0x0005ed82 ldr r5, [r5, 0x64]                                |     r5 = imp.mkdir;
    0x0005ed84 movs r0, 0x73                                     |     r0 = 0x73;
    0x0005ed86 ldr r1, [r5, 0x64]                                |     r1 = *(0x5ed60);
    0x0005ed88 strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x0005ed8a str r0, [r5, 0x54]                                |     *((r5 + 0x54)) = r0;
    0x0005ed8c strb r0, [r4, 8]                                  |     *((r4 + 8)) = r0;
    0x0005ed8e str r5, [r4, 0x64]                                |     *((r4 + 0x64)) = r5;
    0x0005ed90 strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x0005ed92 ldr r5, [r4, 0x64]                                |     r5 = *(0x5ed74);
    0x0005ed94 str r3, [r4, 0x54]                                |     *((r4 + 0x54)) = r3;
    0x0005ed96 movs r0, 0x64                                     |     r0 = 0x64;
    0x0005ed98 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x0005ed9a ldr r2, [r4, 0x44]                                |     r2 = *(0x5ed54);
    0x0005ed9c lsls r5, r4, 1                                    |     r5 = r4 << 1;
    0x0005ed9e movs r0, r0                                       |     
    0x0005eda0 ldr r5, [r6, 0x64]                                |     
    0x0005eda2 ldr r3, [r5, 0x64]                                |     r3 = *(0x5edd4);
    0x0005eda4 strb r7, [r5, 0x1d]                               |     *((r5 + 0x1d)) = r7;
    0x0005eda6 movs r0, 0x6e                                     |     r0 = 0x6e;
    0x0005eda8 ldr r3, [r4, 0x74]                                |     r3 = *(0x5ed84);
    0x0005edaa strb r4, [r5, 0x15]                               |     *((r5 + 0x15)) = r4;
    0x0005edac ldr r5, [r5, 0x64]                                |     r5 = *(0x5edd4);
    0x0005edae movs r2, 0x20                                     |     r2 = 0x20;
    0x0005edb0 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005edb2 movs r0, 0x22                                     |     r0 = 0x22;
    0x0005edb4 ldr r1, [r5, 0x64]                                |     r1 = *(0x5ee38);
    0x0005edb6 str r0, [r4, 0x60]                                |     *((r4 + 0x60)) = r0;
    0x0005edb8 strb r7, [r5, 9]                                  |     *((r5 + 9)) = r7;
    0x0005edba ldr r5, [r4, 0x14]                                |     r5 = *(0x5ed24);
    0x0005edbc ldr r7, [r4, 0x64]                                |     r7 = *(0x5ed74);
    0x0005edbe ldr r0, [r4, 0x30]                                |     r0 = "number of columns in foreign key does not match the number of columns in the referenced table";
    0x0005edc0 ldrb r5, [r4, 5]                                  |     r5 = *((r4 + 5));
    0x0005edc2 str r0, [r4, 0x40]                                |     *((r4 + 0x40)) = r0;
    0x0005edc4 str r5, [r4, 0x64]                                |     *((r4 + 0x64)) = r5;
    0x0005edc6 ldr r1, [r5, 0x64]                                |     r1 = *(0x5ed88);
    0x0005edc8 strb r1, [r5, 0x11]                               |     *((r5 + 0x11)) = r1;
    0x0005edca ldr r1, [r5, 0x74]                                |     r1 = *(0x5ed98);
    0x0005edcc lsls r6, r5, 1                                    |     r6 = r5 << 1;
    0x0005edce movs r0, r0                                       |     
    0x0005edd0 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005edd2 str r0, [r4, 0x30]                                |     *((r4 + 0x30)) = r0;
    0x0005edd4 ldr r1, [r4, 0x64]                                |     r1 = *(0x5ed74);
    0x0005edd6 ldr r6, [r5, 0x74]                                |     r6 = *(0x5ed98);
    0x0005edd8 movs r0, 0x74                                     |     r0 = 0x74;
    0x0005edda strb r5, [r6, 0xd]                                |     *((r6 + 0xd)) = r5;
    0x0005eddc movs r0, 0x65                                     |     r0 = 0x65;
    0x0005edde str r6, [r6, 0x14]                                |     *((r6 + 0x14)) = r6;
    0x0005ede0 ldr r2, [r6, 0x14]                                |     r2 = *(0x5edac);
    0x0005ede2 str r1, [r4, 0x24]                                |     *((r4 + 0x24)) = r1;
    0x0005ede4 str r4, [r5, 0x54]                                |     *((r5 + 0x54)) = r4;
    0x0005ede6 lsls r3, r6, 1                                    |     r3 = r6 << 1;
    0x0005ede8 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005edea movs r5, 0x20                                     |     r5 = 0x20;
    0x0005edec movs r0, 0x54                                     |     r0 = 0x54;
    0x0005edee str r3, [r4, 0x14]                                |     *((r4 + 0x14)) = r3;
    0x0005edf0 ldr r6, [r5, 0x64]                                |     r6 = *(0x5ed88);
    0x0005edf2 strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x0005edf4 strb r0, [r4, 8]                                  |     *((r4 + 8)) = r0;
    0x0005edf6 str r5, [r4, 0x64]                                |     *((r4 + 0x64)) = r5;
    0x0005edf8 strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x0005edfa ldr r5, [r4, 0x64]                                |     r5 = *(0x5ed74);
    0x0005edfc str r3, [r4, 0x54]                                |     *((r4 + 0x54)) = r3;
    0x0005edfe ldr r0, [r4, 0x70]                                |     r0 = *(0x5ed80);
    0x0005ee00 ldr r2, [r4, 0x24]                                |     r2 = *(0x5ed34);
    0x0005ee02 str r5, [r4, 0x34]                                |     *((r4 + 0x34)) = r5;
    0x0005ee04 strb r4, [r6, 0xd]                                |     *((r6 + 0xd)) = r4;
    0x0005ee06 ldr r0, [r4, 0x10]                                |     r0 = *(0x5ed20);
    0x0005ee08 movs r0, 0x6e                                     |     r0 = 0x6e;
    0x0005ee0a str r4, [r4, 0x14]                                |     *((r4 + 0x14)) = r4;
    0x0005ee0c str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x0005ee0e str r2, [r4, 0x14]                                |     *((r4 + 0x14)) = r2;
    0x0005ee10 str r3, [r6, 0x54]                                |     *((r6 + 0x54)) = r3;
    0x0005ee12 movs r5, 0x20                                     |     r5 = 0x20;
    0x0005ee14 lsls r3, r6, 1                                    |     r3 = r6 << 1;
    0x0005ee16 movs r0, r0                                       |     
    0x0005ee18 ldr r6, [pc, 0x13c]                               |     r6 = "BINARY";
    0x0005ee1a movs r0, r0                                       |     
    0x0005ee1c strh r5, [r2, r5]                                 |     *((r2 + r5)) = r5;
    0x0005ee1e ldr r6, [pc, 0x124]                               |     r6 = *(0x5ef46);
    0x0005ee20 lsls r7, r0, 1                                    |     r7 = r0 << 1;
    0x0005ee22 movs r0, r0                                       |     
    0x0005ee24 movs r0, 0x61                                     |     r0 = 0x61;
    0x0005ee26 ldr r7, [pc, 0x128]                               |     r7 = *(0x5ef52);
    0x0005ee28 ldr r6, [pc, 0x124]                               |     r6 = *(0x5ef50);
    0x0005ee2a str r0, [r4, 0x30]                                |     *((r4 + 0x30)) = r0;
    0x0005ee2c str r4, [r5, 0x14]                                |     *((r5 + 0x14)) = r4;
    0x0005ee2e strb r5, [r6, 0xd]                                |     *((r6 + 0xd)) = r5;
    0x0005ee30 movs r0, 0x65                                     |     r0 = 0x65;
    0x0005ee32 strb r1, [r5, 0xd]                                |     *((r5 + 0xd)) = r1;
    0x0005ee34 strb r0, [r4, 8]                                  |     *((r4 + 8)) = r0;
    0x0005ee36 strb r5, [r4, 5]                                  |     *((r4 + 5)) = r5;
    0x0005ee38 ldr r5, [r6, 0x14]                                |     r5 = *(0x5ef64);
    0x0005ee3a str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x0005ee3c movs r0, 0x64                                     |     r0 = 0x64;
    0x0005ee3e str r2, [r4, 0x54]                                |     *((r4 + 0x54)) = r2;
    0x0005ee40 ldr r6, [r4, 0x74]                                |     r6 = *(0x5ed84);
    0x0005ee42 str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x0005ee44 movs r5, 0x20                                     |     r5 = 0x20;
    0x0005ee46 lsls r3, r6, 1                                    |     r3 = r6 << 1;
    0x0005ee48 ldr r5, [r6, 0x64]                                |     
    0x0005ee4a ldr r3, [r5, 0x64]                                |     r3 = *(0x5ee4c);
    0x0005ee4c strb r7, [r5, 0x1d]                               |     *((r5 + 0x1d)) = r7;
    0x0005ee4e movs r0, 0x6e                                     |     r0 = 0x6e;
    0x0005ee50 strb r7, [r5, 9]                                  |     *((r5 + 9)) = r7;
    0x0005ee52 strb r0, [r4, 0x14]                               |     *((r4 + 0x14)) = r0;
    0x0005ee54 strb r6, [r5, 0xd]                                |     *((r5 + 0xd)) = r6;
    0x0005ee56 strb r5, [r6, 1]                                  |     *((r6 + 1)) = r5;
    0x0005ee58 ldr r0, [r6, 0x74]                                |     r0 = *(0x5edf8);
    0x0005ee5a strb r2, [r6, 0x11]                               |     *((r6 + 0x11)) = r2;
    0x0005ee5c str r5, [r4, 0x44]                                |     *((r4 + 0x44)) = r5;
    0x0005ee5e ldr r0, [r4, 0x20]                                |     r0 = *(0x5ed30);
    0x0005ee60 ldr r7, [r5, 0x14]                                |     r7 = *(0x5edfc);
    0x0005ee62 movs r0, 0x6e                                     |     r0 = 0x6e;
    0x0005ee64 ldrb r4, [r6, 5]                                  |     r4 = *((r6 + 5));
    0x0005ee66 str r0, [r6, 0x54]                                |     *((r6 + 0x54)) = r0;
    0x0005ee68 movs r0, 0x3a                                     |     r0 = 0x3a;
    0x0005ee6a strb r5, [r4, r0]                                 |     *((r4 + r0)) = r5;
    0x0005ee6c movs r5, 0x20                                     |     r5 = 0x20;
    0x0005ee6e movs r5, 0x54                                     |     r5 = 0x54;
    0x0005ee70 movs r5, 0x73                                     |     r5 = 0x73;
    0x0005ee72 lsls r4, r2, 1                                    |     r4 = r2 << 1;
    0x0005ee74 ldr r1, [pc, 0x148]                               |     r1 = *(0x5efc0);
    0x0005ee76 ldr r0, [pc, 0x11c]                               |     r0 = *(0x5ef96);
    0x0005ee78 movs r0, 0x54                                     |     r0 = 0x54;
    0x0005ee7a ldr r1, [r4, 0x64]                                |     r1 = *(0x5ed74);
    0x0005ee7c movs r0, 0x64                                     |     r0 = 0x64;
    0x0005ee7e strb r6, [r0, r5]                                 |     *((r0 + r5)) = r6;
    0x0005ee80 ldr r4, [pc, 0x130]                               |     
    0x0005ee82 ldr r7, [pc, 0x80]                                |     r7 = *(0x5ef06);
    0x0005ee84 strb r5, [r2, r1]                                 |     *((r2 + r1)) = r5;
    0x0005ee86 strh r5, [r0, r1]                                 |     *((r0 + r1)) = r5;
    0x0005ee88 ldr r2, [pc, 0x80]                                |     r2 = *(0x5ef0c);
    0x0005ee8a ldr r1, [pc, 0x13c]                               |     r1 = *(0x5efca);
    0x0005ee8c strb r6, [r1, 0xd]                                |     *((r1 + 0xd)) = r6;
    0x0005ee8e str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x0005ee90 str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x0005ee92 ldr r0, [r4, 0x60]                                |     r0 = *(0x5f014);
    0x0005ee94 strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x0005ee96 str r0, [r4, 0x30]                                |     *((r4 + 0x30)) = r0;
    0x0005ee98 strb r5, [r6, 9]                                  |     *((r6 + 9)) = r5;
    0x0005ee9a str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x0005ee9c strb r6, [r5, 0x11]                               |     *((r5 + 0x11)) = r6;
    0x0005ee9e ldrb r4, [r5, 5]                                  |     r4 = *((r5 + 5));
    0x0005eea0 strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x0005eea2 strb r5, [r6, 1]                                  |     *((r6 + 1)) = r5;
    0x0005eea4 ldr r0, [r6, 0x74]                                |     r0 = *(0x5edf8);
    0x0005eea6 strb r2, [r6, 0x11]                               |     *((r6 + 0x11)) = r2;
    0x0005eea8 str r5, [r4, 0x44]                                |     *((r4 + 0x44)) = r5;
    0x0005eeaa movs r0, r0                                       |     
    0x0005eeac str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x0005eeae ldr r2, [r4, 0x44]                                |     r2 = *(0x5eff8);
    0x0005eeb0 movs r0, 0x65                                     |     r0 = 0x65;
    0x0005eeb2 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005eeb4 ldr r0, [r4, 0x50]                                |     r0 = *(0x5f004);
    0x0005eeb6 ldrb r1, [r4, 5]                                  |     r1 = *((r4 + 5));
    0x0005eeb8 ldr r0, [r4, 0x60]                                |     r0 = *(0x5f014);
    0x0005eeba strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x0005eebc str r0, [r4, 0x20]                                |     *((r4 + 0x20)) = r0;
    0x0005eebe movs r0, 0x65                                     |     r0 = 0x65;
    0x0005eec0 ldr r5, [r5, 0x74]                                |     r5 = *(0x5ee5c);
    0x0005eec2 ldr r4, [r4, 0x14]                                |     r4 = *(0x5efc8);
    0x0005eec4 ldr r6, [r4, 0x14]                                |     r6 = *(0x5efdc);
    0x0005eec6 str r5, [r4, 0x44]                                |     *((r4 + 0x44)) = r5;
    0x0005eec8 movs r0, r0                                       |     
    0x0005eeca movs r0, r0                                       |     
    0x0005eecc str r3, [r4, 0x14]                                |     *((r4 + 0x14)) = r3;
    0x0005eece ldr r6, [r5, 0x64]                                |     r6 = *(0x5eec0);
    0x0005eed0 strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x0005eed2 ldr r0, [r4, 0x50]                                |     r0 = *(0x5f018);
    0x0005eed4 str r7, [r5, 0x44]                                |     *((r5 + 0x44)) = r7;
    0x0005eed6 str r1, [r5, 0x64]                                |     *((r5 + 0x64)) = r1;
    0x0005eed8 movs r0, 0x79                                     |     r0 = 0x79;
    0x0005eeda strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x0005eedc str r0, [r4, 0x20]                                |     *((r4 + 0x20)) = r0;
    0x0005eede str r5, [r4, 0x34]                                |     *((r4 + 0x34)) = r5;
    0x0005eee0 strb r1, [r4, 0x15]                               |     *((r4 + 0x15)) = r1;
    0x0005eee2 str r3, [r6, 0x54]                                |     *((r6 + 0x54)) = r3;
    0x0005eee4 ldr r0, [r4, 0x10]                                |     r0 = *(0x5efd8);
    0x0005eee6 movs r0, 0x74                                     |     r0 = 0x74;
    0x0005eee8 strb r1, [r5, 0xd]                                |     *((r5 + 0xd)) = r1;
    0x0005eeea str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x0005eeec strb r0, [r4, 0x18]                               |     *((r4 + 0x18)) = r0;
    0x0005eeee str r1, [r5, 0x54]                                |     *((r5 + 0x54)) = r1;
    0x0005eef0 lsls r7, r6, 1                                    |     r7 = r6 << 1;
    0x0005eef2 movs r0, r0                                       |     
    0x0005eef4 str r6, [r6, 0x14]                                |     *((r6 + 0x14)) = r6;
    0x0005eef6 ldr r2, [r6, 0x14]                                |     r2 = *(0x5eed4);
    0x0005eef8 str r1, [r4, 0x24]                                |     *((r4 + 0x24)) = r1;
    0x0005eefa str r4, [r5, 0x54]                                |     *((r5 + 0x54)) = r4;
    0x0005eefc ldr r0, [r4, 0x60]                                |     r0 = "too many terms in %s BY clause";
    0x0005eefe ldr r5, [r6, 0x54]                                |     
    0x0005ef00 str r2, [r4, 0x54]                                |     *((r4 + 0x54)) = r2;
    0x0005ef02 movs r0, 0x72                                     |     r0 = 0x72;
    0x0005ef04 strb r5, [r5, 0x15]                               |     *((r5 + 0x15)) = r5;
    0x0005ef06 strb r3, [r6, 0x11]                               |     *((r6 + 0x11)) = r3;
    0x0005ef08 str r0, [r4, 0x20]                                |     *((r4 + 0x20)) = r0;
    0x0005ef0a movs r0, 0x65                                     |     r0 = 0x65;
    0x0005ef0c str r2, [r4, 0x54]                                |     *((r4 + 0x54)) = r2;
    0x0005ef0e strb r4, [r6, 0x1d]                               |     *((r6 + 0x1d)) = r4;
    0x0005ef10 str r5, [r4, 0x54]                                |     *((r4 + 0x54)) = r5;
    0x0005ef12 movs r0, 0x6e                                     |     r0 = 0x6e;
    0x0005ef14 adds r1, 0x3f                                     |     r1 += 0x3f;
    0x0005ef16 str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x0005ef18 str r6, [r5, 0x44]                                |     *((r5 + 0x44)) = r6;
    0x0005ef1a subs r7, 0x20                                     |     r7 -= 0x20;
    0x0005ef1c str r5, [r4, 0x40]                                |     *((r4 + 0x40)) = r5;
    0x0005ef1e movs r0, r0                                       |     
    0x0005ef20 ldr r4, [r6, 0x74]                                |     r4 = *(0x5ef34);
    0x0005ef22 movs r0, 0x6f                                     |     r0 = 0x6f;
    0x0005ef24 str r5, [r5, 0x14]                                |     *((r5 + 0x14)) = r5;
    0x0005ef26 ldrb r6, [r5, 5]                                  |     r6 = *((r5 + 5));
    0x0005ef28 strh r0, [r4, r4]                                 |     *((r4 + r4)) = r0;
    0x0005ef2a ldr r4, [pc, 0x144]                               |     r4 = *(0x5f072);
    0x0005ef2c strb r0, [r4, 0x18]                               |     *((r4 + 0x18)) = r0;
    0x0005ef2e strb r1, [r4, 9]                                  |     *((r4 + 9)) = r1;
    0x0005ef30 str r1, [r5, 0x14]                                |     *((r5 + 0x14)) = r1;
    0x0005ef32 ldr r2, [r4, 0x44]                                |     r2 = *(0x5f0b6);
    0x0005ef34 strb r5, [r4, 0xd]                                |     *((r4 + 0xd)) = r5;
    0x0005ef36 movs r0, r0                                       |     
    0x0005ef38 strb r4, [r4, 0x15]                               |     *((r4 + 0x15)) = r4;
    0x0005ef3a ldr r0, [r6, 0x44]                                |     r0 = *(0x5ef04);
    0x0005ef3c str r1, [r5, 0x34]                                |     *((r5 + 0x34)) = r1;
    0x0005ef3e strb r1, [r4, 0x11]                               |     *((r4 + 0x11)) = r1;
    0x0005ef40 movs r0, 0x65                                     |     r0 = 0x65;
    0x0005ef42 ldr r1, [pc, 0x15c]                               |     r1 = *(0x5f0a2);
    0x0005ef44 ldr r0, [pc, 0x150]                               |     r0 = *(0x5f098);
    0x0005ef46 strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x0005ef48 str r1, [r4, 0x24]                                |     *((r4 + 0x24)) = r1;
    0x0005ef4a str r4, [r5, 0x54]                                |     *((r5 + 0x54)) = r4;
    0x0005ef4c ldr r0, [r4, 0x60]                                |     r0 = *(0x5f0d2);
    0x0005ef4e ldr r1, [r4, 0x54]                                |     r1 = *(0x5f0c6);
    0x0005ef50 subs r2, 0x65                                     |     r2 -= 0x65;
    0x0005ef52 movs r5, 0x20                                     |     r5 = 0x20;
    0x0005ef54 lsls r3, r6, 1                                    |     r3 = r6 << 1;
    0x0005ef56 movs r0, r0                                       |     
    0x0005ef58 ldr r1, [pc, 0x108]                               |     r1 = *(0x5f064);
    0x0005ef5a adcs r6, r1                                       |     __asm ("adcs r6, r1");
    0x0005ef5c movs r1, r0                                       |     r1 = r0;
    0x0005ef5e movs r0, r0                                       |     
    0x0005ef60 ldr r6, [r4, 0x74]                                |     r6 = *(0x5f0e6);
    0x0005ef62 str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x0005ef64 str r1, [r5, 0x74]                                |     *((r5 + 0x74)) = r1;
    0x0005ef66 movs r0, 0x6e                                     |     r0 = 0x6e;
    0x0005ef68 str r3, [r5, 0x54]                                |     *((r5 + 0x54)) = r3;
    0x0005ef6a movs r1, 0x79                                     |     r1 = 0x79;
    0x0005ef6c ldr r5, [r5, 0x14]                                |     r5 = *(0x5ef28);
    0x0005ef6e ldr r3, [r6, 0x54]                                |     r3 = *(0x5f13a);
    0x0005ef70 strb r1, [r4, 0x11]                               |     *((r4 + 0x11)) = r1;
    0x0005ef72 ldr r3, [r4, 4]                                   |     r3 = *(0x5f076);
    0x0005ef74 cmp r5, 0x20                                      |     
    0x0005ef76 movs r2, 0x20                                     |     r2 = 0x20;
    0x0005ef78 strb r5, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r5;
    0x0005ef7a movs r0, 0x22                                     |     r0 = 0x22;
    0x0005ef7c str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x0005ef7e str r6, [r4, 0x54]                                |     *((r4 + 0x54)) = r6;
    0x0005ef80 str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x0005ef82 str r6, [r5, 0x34]                                |     *((r5 + 0x34)) = r6;
    0x0005ef84 ldr r1, [r5, 0x64]                                |     r1 = imp.mkdir;
    0x0005ef86 movs r0, 0x67                                     |     r0 = 0x67;
    0x0005ef88 movs r5, 0x22                                     |     r5 = 0x22;
    0x0005ef8a movs r2, 0x77                                     |     r2 = 0x77;
    0x0005ef8c movs r0, r0                                       |     
    0x0005ef8e movs r0, r0                                       |     
    0x0005ef90 ldr r7, [r5, 0x14]                                |     r7 = *(0x5ef3c);
    0x0005ef92 lsls r4, r4, 1                                    |     r4 <<= 1;
    0x0005ef94 ldr r7, [pc, 0x118]                               |     r7 = *(0x5f0b0);
    0x0005ef96 cmp r2, sl                                        |     
    0x0005ef98 bx sb                                             |     return uint32_t (*sb)() ();
    0x000602e0 ldr r6, [r4, 0x74]                                |     r6 = *((r4 + 0x74));
    0x000602e2 str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x000602e4 movs r0, r0                                       |     
    0x000602e6 movs r0, r0                                       |     
    0x000602e8 ldr r1, [r4, 0x44]                                |     r1 = *((r4 + 0x44));
    0x000602ea movs r0, 0x6c                                     |     r0 = 0x6c;
    0x000602ec adcs r6, r2                                       |     __asm ("adcs r6, r2");
    0x000602ee strb r4, [r1, r5]                                 |     *((r1 + r5)) = r4;
    0x000602f0 strh r5, [r0, r5]                                 |     *((r0 + r5)) = r5;
    0x000602f2 ldr r0, [r4, 0x50]                                |     r0 = *((r4 + 0x50));
    0x000602f4 strb r5, [r6, 0xd]                                |     *((r6 + 0xd)) = r5;
    0x000602f6 movs r0, 0x74                                     |     r0 = 0x74;
    0x000602f8 str r0, [r5, 0x14]                                |     *((r5 + 0x14)) = r0;
    0x000602fa str r6, [r6, 0x54]                                |     *((r6 + 0x54)) = r6;
    0x000602fc strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x000602fe str r0, [r5, 0x54]                                |     *((r5 + 0x54)) = r0;
    0x00060300 strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x00060302 ldr r1, [r4, 0x54]                                |     r1 = *((r4 + 0x54));
    0x00060304 movs r0, 0x65                                     |     r0 = 0x65;
    0x00060306 strb r6, [r5, 0x15]                               |     *((r5 + 0x15)) = r6;
    0x00060308 str r5, [r5, 0x24]                                |     *((r5 + 0x24)) = r5;
    0x0006030a strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x0006030c ldr r0, [r4, 0x70]                                |     r0 = *((r4 + 0x70));
    0x0006030e movs r0, 0x66                                     |     r0 = 0x66;
    0x00060310 str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x00060312 ldr r2, [r6, 0x54]                                |     r2 = *((r6 + 0x54));
    0x00060314 lsls r3, r6, 1                                    |     r3 = r6 << 1;
    0x00060316 movs r0, r0                                       |     
    0x00060318 cmp r3, sl                                        |     
    0x0006031a cmp r4, sb                                        |     
    0x0006031c strb r3, [r0, r1]                                 |     *((r0 + r1)) = r3;
    0x0006031e movs r0, 0x73                                     |     r0 = 0x73;
    0x00060320 ldr r4, [r6, 0x74]                                |     r4 = *((r6 + 0x74));
    0x00060322 strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x00060324 str r0, [r5, 0x54]                                |     *((r5 + 0x54)) = r0;
    0x00060326 ldr r0, [r4, 0x40]                                |     r0 = *((r4 + 0x40));
    0x00060328 str r5, [r4, 0x64]                                |     *((r4 + 0x64)) = r5;
    0x0006032a movs r0, 0x74                                     |     r0 = 0x74;
    0x0006032c ldr r1, [r4, 0x64]                                |     r1 = *((r4 + 0x64));
    0x0006032e movs r0, 0x64                                     |     r0 = 0x64;
    0x00060330 ldr r2, [r6, 0x14]                                |     r2 = *((r6 + 0x14));
    0x00060332 ldr r7, [r4, 4]                                   |     r7 = *((r4 + 4));
    0x00060334 movs r0, 0x74                                     |     r0 = 0x74;
    0x00060336 str r7, [r5, 0x64]                                |     *((r5 + 0x64)) = r7;
    0x00060338 movs r5, 0x20                                     |     r5 = 0x20;
    0x0006033a movs r0, 0x73                                     |     r0 = 0x73;
    0x0006033c ldr r4, [r4, 0x74]                                |     r4 = *((r4 + 0x74));
    0x0006033e ldr r0, [r4, 0x60]                                |     r0 = *((r4 + 0x60));
    0x00060340 strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x00060342 ldr r0, [r4]                                      |     r0 = *(r4);
    0x00060344 strb r1, [r4, 0x19]                               |     *((r4 + 0x19)) = r1;
    0x00060346 movs r0, 0x65                                     |     r0 = 0x65;
    0x00060348 ldr r4, [r6, 4]                                   |     r4 = *((r6 + 4));
    0x0006034a movs r0, 0x65                                     |     r0 = 0x65;
    0x0006034c str r3, [r6, 0x14]                                |     *((r6 + 0x14)) = r3;
    0x0006034e str r5, [r5, 0x54]                                |     *((r5 + 0x54)) = r5;
    0x00060350 ldr r0, [r4, 0x60]                                |     r0 = *((r4 + 0x60));
    0x00060352 ldr r5, [r6, 0x54]                                |     r5 = *((r6 + 0x54));
    0x00060354 str r2, [r4, 0x54]                                |     *((r4 + 0x54)) = r2;
    0x00060356 movs r0, 0x72                                     |     r0 = 0x72;
    0x00060358 str r7, [r5, 0x64]                                |     *((r5 + 0x64)) = r7;
    0x0006035a strb r0, [r4, 8]                                  |     *((r4 + 8)) = r0;
    0x0006035c strb r5, [r4, 0xd]                                |     *((r4 + 0xd)) = r5;
    0x0006035e ldr r5, [r6, 0x44]                                |     r5 = *((r6 + 0x44));
    0x00060360 movs r0, 0x74                                     |     r0 = 0x74;
    0x00060362 ldr r3, [r4, 0x74]                                |     r3 = *((r4 + 0x74));
    0x00060364 strb r4, [r5, 0x15]                               |     *((r5 + 0x15)) = r4;
    0x00060366 ldr r5, [r5, 0x64]                                |     r5 = *((r5 + 0x64));
    0x00060368 lsls r3, r6, 1                                    |     r3 = r6 << 1;
    0x0006036a movs r0, r0                                       |     
    0x0006036c strb r2, [r2, r1]                                 |     *((r2 + r1)) = r2;
    0x0006036e ldr r1, [pc, 0x148]                               |     r1 = *(0x604ba);
    0x00060370 lsls r5, r1, 1                                    |     r5 = r1 << 1;
    0x00060372 movs r0, r0                                       |     
    0x00060374 adcs r5, r1                                       |     __asm ("adcs r5, r1");
    0x00060376 muls r4, r2, r4                                   |     r4 = r2 * r4;
    0x00060378 lsls r0, r1, 1                                    |     r0 = r1 << 1;
    0x0006037a movs r0, r0                                       |     
    0x0006037c strb r3, [r6, 5]                                  |     *((r6 + 5)) = r3;
    0x0006037e str r4, [r5, 0x34]                                |     *((r5 + 0x34)) = r4;
    0x00060380 strb r1, [r5, 1]                                  |     *((r5 + 1)) = r1;
    0x00060382 str r0, [r5, 0x54]                                |     *((r5 + 0x54)) = r0;
    0x00060384 ldrsh r2, [r6, r5]                                |     r2 = *((r6 + r5));
    0x00060386 ldrb r5, [r4, 1]                                  |     r5 = *((r4 + 1));
    0x00060388 ldr r0, [r6, 0x74]                                |     r0 = *((r6 + 0x74));
    0x0006038a strb r2, [r6, 0x11]                               |     *((r6 + 0x11)) = r2;
    0x0006038c movs r0, r0                                       |     
    0x0006038e movs r0, r0                                       |     
    0x00060390 strb r1, [r4, 0x15]                               |     *((r4 + 0x15)) = r1;
    0x00060392 ldr r4, [r6, 0x74]                                |     r4 = *((r6 + 0x74));
    0x00060394 str r5, [r5, 0x14]                                |     *((r5 + 0x14)) = r5;
    0x00060396 ldr r4, [r6, 0x14]                                |     r4 = *((r6 + 0x14));
    0x00060398 movs r0, 0x63                                     |     r0 = 0x63;
    0x0006039a ldrb r5, [r4, 1]                                  |     r5 = *((r4 + 1));
    0x0006039c str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x0006039e strb r6, [r5, 0xd]                                |     *((r5 + 0xd)) = r6;
    0x000603a0 ldr r1, [r5, 0x74]                                |     r1 = *((r5 + 0x74));
    0x000603a2 movs r0, 0x6e                                     |     r0 = 0x6e;
    0x000603a4 ldr r4, [r5, 0x74]                                |     r4 = *((r5 + 0x74));
    0x000603a6 str r1, [r4, 0x44]                                |     *((r4 + 0x44)) = r1;
    0x000603a8 ldr r1, [r5, 0x64]                                |     r1 = *((r5 + 0x64));
    0x000603aa movs r0, 0x67                                     |     r0 = 0x67;
    0x000603ac str r6, [r4, 0x14]                                |     *((r4 + 0x14)) = r6;
    0x000603ae ldr r1, [r5, 0x44]                                |     r1 = *((r5 + 0x44));
    0x000603b0 str r5, [r4, 0x44]                                |     *((r4 + 0x44)) = r5;
    0x000603b2 movs r0, 0x3a                                     |     r0 = 0x3a;
    0x000603b4 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x000603b6 movs r0, r0                                       |     
    0x000603b8 strh r0, [r2, r1]                                 |     *((r2 + r1)) = r0;
    0x000603ba bx r8                                             |     return uint32_t (*r8)() ();
    0x00060c00 str r7, [r4, 0x74]                                |     *((r4 + 0x74)) = r7;
    0x00060c02 strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x00060c04 ldr r0, [r4, 0x70]                                |     r0 = *((r4 + 0x70));
    0x00060c06 movs r0, 0x6e                                     |     r0 = 0x6e;
    0x00060c08 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x00060c0a ldr r2, [r4, 0x44]                                |     r2 = *((r4 + 0x44));
    0x00060c0c subs r2, 0x65                                     |     r2 -= 0x65;
    0x00060c0e movs r5, 0x20                                     |     r5 = 0x20;
    0x00060c10 lsls r3, r2, 1                                    |     r3 = r2 << 1;
    0x00060c12 movs r0, r0                                       |     
    0x00060c14 strb r1, [r6, 0x15]                               |     *((r6 + 0x15)) = r1;
    0x00060c16 ldr r1, [r4, 0x44]                                |     r1 = *((r4 + 0x44));
    0x00060c18 str r1, [r5, 0x64]                                |     *((r5 + 0x64)) = r1;
    0x00060c1a str r1, [r5, 0x54]                                |     *((r5 + 0x54)) = r1;
    0x00060c1c movs r0, 0x64                                     |     r0 = 0x64;
    0x00060c1e str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x00060c20 ldr r2, [r4, 0x44]                                |     r2 = *((r4 + 0x44));
    0x00060c22 movs r0, 0x65                                     |     r0 = 0x65;
    0x00060c24 str r6, [r5, 0x14]                                |     *((r5 + 0x14)) = r6;
    0x00060c26 str r5, [r5, 0x54]                                |     *((r5 + 0x54)) = r5;
    0x00060c28 movs r0, 0x73                                     |     r0 = 0x73;
    0x00060c2a strb r1, [r4, 9]                                  |     *((r4 + 9)) = r1;
    0x00060c2c movs r0, 0x65                                     |     r0 = 0x65;
    0x00060c2e ldr r6, [r5, 0x74]                                |     r6 = *((r5 + 0x74));
    0x00060c30 movs r0, 0x74                                     |     r0 = 0x74;
    0x00060c32 ldr r1, [r4, 0x44]                                |     r1 = *((r4 + 0x44));
    0x00060c34 ldr r4, [r5, 0x74]                                |     r4 = *((r5 + 0x74));
    0x00060c36 str r7, [r6, 0x54]                                |     *((r6 + 0x54)) = r7;
    0x00060c38 movs r0, 0x64                                     |     r0 = 0x64;
    0x00060c3a ldr r7, [r5, 0x64]                                |     r7 = *((r5 + 0x64));
    0x00060c3c ldr r1, [pc, 0x80]                                |     r1 = *(0x60cc0);
    0x00060c3e strh r6, [r1, r5]                                 |     *((r1 + r5)) = r6;
    0x00060c40 strh r5, [r0, r1]                                 |     *((r0 + r1)) = r5;
    0x00060c42 cmp r4, 0x54                                      |     
    0x00060c44 strb r0, [r4, r4]                                 |     *((r4 + r4)) = r0;
    0x00060c46 add r0, sl                                        |     r0 += sl;
    0x00060c48 strb r1, [r0, r1]                                 |     *((r0 + r1)) = r1;
    0x00060c4a cmp r4, 0x45                                      |     
    0x00060c4c str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x00060c4e str r6, [r5, 0x44]                                |     *((r5 + 0x44)) = r6;
    0x00060c50 add r0, r4                                        |     r0 += r4;
    0x00060c52 ldr r4, [pc, 0x114]                               |     r4 = *(0x60d6a);
    0x00060c54 strb r5, [r0, r1]                                 |     *((r0 + r1)) = r5;
    0x00060c56 movs r0, 0x45                                     |     r0 = 0x45;
    0x00060c58 strb r3, [r6, 0x11]                               |     *((r6 + 0x11)) = r3;
    0x00060c5a strb r1, [r4, 0x11]                               |     *((r4 + 0x11)) = r1;
    0x00060c5c ldr r5, [r4, 0x54]                                |     r5 = *(0x60dbe);
    0x00060c5e ldr r5, [r4, 0x64]                                |     r5 = *(0x60dce);
    0x00060c60 strb r4, [r6, 0xd]                                |     *((r6 + 0xd)) = r4;
    0x00060c62 strb r0, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r0;
    0x00060c64 strb r1, [r5, 0x11]                               |     *((r5 + 0x11)) = r1;
    0x00060c66 ldr r0, [r5, 0x14]                                |     r0 = *(0x60de2);
    0x00060c68 movs r0, 0x6e                                     |     r0 = 0x6e;
    0x00060c6a strb r4, [r6, 9]                                  |     *((r6 + 9)) = r4;
    0x00060c6c str r1, [r5, 0x74]                                |     *((r5 + 0x74)) = r1;
    0x00060c6e str r7, [r4, 0x54]                                |     *((r4 + 0x54)) = r7;
    0x00060c70 strb r2, [r6, 0xd]                                |     *((r6 + 0xd)) = r2;
    0x00060c72 movs r0, r0                                       |     
    0x00060c74 ldr r4, [r6, 4]                                   |     r4 = *((r6 + 4));
    0x00060c76 movs r0, 0x65                                     |     r0 = 0x65;
    0x00060c78 ldr r6, [pc, 0x124]                               |     r6 = "table %s may not be altered";
    0x00060c7a cmp r4, r8                                        |     
    0x00060c7c cmp r0, fp                                        |     
    0x00060c7e movs r0, 0x44                                     |     r0 = 0x44;
    0x00060c80 ldr r2, [r0, r5]                                  |     r2 = *(0x60de2);
    0x00060c82 str r0, [r4, 0x30]                                |     *((r4 + 0x30)) = r0;
    0x00060c84 str r4, [r5, 0x14]                                |     *((r5 + 0x14)) = r4;
    0x00060c86 strb r5, [r6, 0xd]                                |     *((r6 + 0xd)) = r5;
    0x00060c88 movs r0, 0x65                                     |     r0 = 0x65;
    0x00060c8a strb r1, [r5, 0xd]                                |     *((r5 + 0xd)) = r1;
    0x00060c8c ldr r0, [r4, 0x60]                                |     r0 = *(0x60dca);
    0x00060c8e strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x00060c90 str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x00060c92 ldr r4, [r5, 0x44]                                |     r4 = *(0x60e12);
    0x00060c94 strb r7, [r5, 0x1d]                               |     *((r5 + 0x1d)) = r7;
    0x00060c96 str r5, [r4, 0x44]                                |     *((r4 + 0x44)) = r5;
    0x00060c98 ldr r0, [r4, 0x70]                                |     r0 = *(0x60e82);
    0x00060c9a movs r0, 0x6e                                     |     r0 = 0x6e;
    0x00060c9c str r5, [r2, r1]                                  |     *((r2 + r1)) = r5;
    0x00060c9e adcs r4, r0                                       |     __asm ("adcs r4, r0");
    0x00060ca0 cmp r4, sl                                        |     
    0x00060ca2 ldr r0, [r4, 0x70]                                |     r0 = *(0x60e82);
    0x00060ca4 movs r0, 0x72                                     |     r0 = 0x72;
    0x00060ca6 cmp r4, r8                                        |     
    0x00060ca8 cmp r4, sb                                        |     
    0x00060caa cmp r4, sl                                        |     
    0x00060cac strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x00060cae str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x00060cb0 str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x00060cb2 str r5, [r5, 0x54]                                |     *((r5 + 0x54)) = r5;
    0x00060cb4 strb r6, [r5, 0x11]                               |     *((r5 + 0x11)) = r6;
    0x00060cb6 movs r0, 0x73                                     |     r0 = 0x73;
    0x00060cb8 ldr r7, [r6, 0x14]                                |     r7 = *(0x60db4);
    0x00060cba ldr r4, [r6, 4]                                   |     r4 = *(0x60da4);
    0x00060cbc ldr r1, [r5, 0x64]                                |     r1 = *(0x60e32);
    0x00060cbe strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x00060cc0 ldr r2, [r6, 0x14]                                |     r2 = *(0x60db4);
    0x00060cc2 str r7, [r4, 0x74]                                |     *((r4 + 0x74)) = r7;
    0x00060cc4 strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x00060cc6 lsls r3, r6, 1                                    |     r3 = r6 << 1;
    0x00060cc8 ldr r4, [r6, 4]                                   |     r4 = *(0x60da4);
    0x00060cca movs r0, 0x65                                     |     r0 = 0x65;
    0x00060ccc ldr r7, [pc, 0x138]                               |     r7 = *(0x60e08);
    0x00060cce movs r0, 0x54                                     |     r0 = 0x54;
    0x00060cd0 ldr r6, [pc, 0x124]                               |     r6 = *(0x60df8);
    0x00060cd2 cmp r4, r8                                        |     
    0x00060cd4 cmp r0, fp                                        |     
    0x00060cd6 movs r0, 0x44                                     |     r0 = 0x44;
    0x00060cd8 ldr r3, [r4, 0x44]                                |     r3 = *(0x60de8);
    0x00060cda strb r1, [r4, 0x15]                               |     *((r4 + 0x15)) = r1;
    0x00060cdc str r3, [r6, 0x54]                                |     *((r6 + 0x54)) = r3;
    0x00060cde ldr r0, [r4, 0x10]                                |     r0 = *(0x60db4);
    0x00060ce0 movs r0, 0x73                                     |     r0 = 0x73;
    0x00060ce2 ldr r6, [r5, 0x74]                                |     r6 = *(0x60e42);
    0x00060ce4 movs r0, 0x74                                     |     r0 = 0x74;
    0x00060ce6 ldr r1, [r4, 0x44]                                |     r1 = *(0x60de8);
    0x00060ce8 ldr r4, [r5, 0x74]                                |     r4 = *(0x60e42);
    0x00060cea str r7, [r6, 0x54]                                |     *((r6 + 0x54)) = r7;
    0x00060cec movs r0, 0x64                                     |     r0 = 0x64;
    0x00060cee ldr r7, [r5, 0x64]                                |     r7 = *(0x60e32);
    0x00060cf0 strb r0, [r4, r4]                                 |     *((r4 + r4)) = r0;
    0x00060cf2 add r0, sl                                        |     r0 += sl;
    0x00060cf4 strb r1, [r0, r1]                                 |     *((r0 + r1)) = r1;
    0x00060cf6 movs r0, 0x45                                     |     r0 = 0x45;
    0x00060cf8 strb r7, [r5, 9]                                  |     *((r5 + 9)) = r7;
    0x00060cfa add r0, r4                                        |     r0 += r4;
    0x00060cfc ldr r4, [pc, 0x114]                               |     r4 = *(0x60e14);
    0x00060cfe strb r5, [r0, r1]                                 |     *((r0 + r1)) = r5;
    0x00060d00 movs r0, 0x45                                     |     r0 = 0x45;
    0x00060d02 strb r3, [r6, 0x11]                               |     *((r6 + 0x11)) = r3;
    0x00060d04 strb r1, [r4, 0x11]                               |     *((r4 + 0x11)) = r1;
    0x00060d06 ldr r5, [r4, 0x54]                                |     r5 = *(0x60e68);
    0x00060d08 ldr r5, [r4, 0x64]                                |     r5 = *(0x60e78);
    0x00060d0a strb r4, [r6, 0xd]                                |     *((r6 + 0xd)) = r4;
    0x00060d0c strb r0, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r0;
    0x00060d0e strb r1, [r5, 0x11]                               |     *((r5 + 0x11)) = r1;
    0x00060d10 ldr r0, [r5, 0x14]                                |     r0 = *(0x60e8c);
    0x00060d12 movs r0, 0x6e                                     |     r0 = 0x6e;
    0x00060d14 strb r4, [r6, 9]                                  |     *((r6 + 9)) = r4;
    0x00060d16 str r1, [r5, 0x74]                                |     *((r5 + 0x74)) = r1;
    0x00060d18 str r7, [r4, 0x54]                                |     *((r4 + 0x54)) = r7;
    0x00060d1a strb r2, [r6, 0xd]                                |     *((r6 + 0xd)) = r2;
    0x00060d1c movs r0, r0                                       |     
    0x00060d1e movs r0, r0                                       |     
    0x00060d20 ldr r6, [r5, 0x74]                                |     r6 = *(0x60eec);
    0x00060d22 strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x00060d24 str r5, [r6, 0x34]                                |     *((r6 + 0x34)) = r5;
    0x00060d26 movs r0, 0x68                                     |     r0 = 0x68;
    0x00060d28 strb r4, [r6, 9]                                  |     *((r6 + 9)) = r4;
    0x00060d2a str r1, [r5, 0x74]                                |     *((r5 + 0x74)) = r1;
    0x00060d2c str r7, [r4, 0x54]                                |     *((r4 + 0x54)) = r7;
    0x00060d2e subs r2, 0x72                                     |     r2 -= 0x72;
    0x00060d30 movs r5, 0x20                                     |     r5 = 0x20;
    0x00060d32 lsls r3, r2, 1                                    |     r3 = r2 << 1;
    0x00060d34 ldr r5, [r6, 0x64]                                |     r5 = *(0x60f50);
    0x00060d36 str r1, [r4, 0x24]                                |     *((r4 + 0x24)) = r1;
    0x00060d38 str r4, [r5, 0x54]                                |     *((r5 + 0x54)) = r4;
    0x00060d3a strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x00060d3c movs r0, 0x6f                                     |     r0 = 0x6f;
    0x00060d3e str r1, [r5, 0x44]                                |     *((r5 + 0x44)) = r1;
    0x00060d40 ldr r5, [r4, 0x64]                                |     r5 = *(0x60e78);
    0x00060d42 ldr r4, [r6, 0x14]                                |     r4 = *(0x60f00);
    0x00060d44 ldrb r6, [r4, 5]                                  |     r6 = *((r4 + 5));
    0x00060d46 strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x00060d48 str r0, [r5, 0x54]                                |     *((r5 + 0x54)) = r0;
    0x00060d4a ldr r0, [r4, 0x70]                                |     r0 = *(0x60f70);
    0x00060d4c ldr r2, [r4, 0x24]                                |     r2 = *(0x60f24);
    0x00060d4e str r5, [r4, 0x34]                                |     *((r4 + 0x34)) = r5;
    0x00060d50 movs r0, 0x74                                     |     r0 = 0x74;
    0x00060d52 ldr r4, [r6, 0x74]                                |     r4 = *(0x60f60);
    0x00060d54 str r0, [r4, 0x20]                                |     *((r4 + 0x20)) = r0;
    0x00060d56 movs r0, 0x65                                     |     r0 = 0x65;
    0x00060d58 str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x00060d5a ldr r1, [r5, 0x64]                                |     r1 = *(0x60edc);
    0x00060d5c str r4, [r4, 0x54]                                |     *((r4 + 0x54)) = r4;
    0x00060d5e str r0, [r7, 0x54]                                |     *((r7 + 0x54)) = r0;
    0x00060d60 lsls r4, r4, 1                                    |     r4 <<= 1;
    0x00060d62 movs r0, r0                                       |     
    0x00060d64 ldr r4, [r6, 4]                                   |     r4 = *(0x60ef0);
    0x00060d66 strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x00060d68 movs r0, 0x65                                     |     r0 = 0x65;
    0x00060d6a strb r1, [r5, 0xd]                                |     *((r5 + 0xd)) = r1;
    0x00060d6c str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x00060d6e strb r4, [r5, 9]                                  |     *((r5 + 9)) = r4;
    0x00060d70 str r5, [r4, 0x14]                                |     *((r4 + 0x14)) = r5;
    0x00060d72 ldrb r4, [r4, 5]                                  |     r4 = *((r4 + 5));
    0x00060d74 str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x00060d76 ldr r6, [r5, 0x74]                                |     
    0x00060d78 ldr r4, [r6, 4]                                   |     r4 = *(0x60ef0);
    0x00060d7a strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x00060d7c strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x00060d7e str r1, [r4, 0x24]                                |     *((r4 + 0x24)) = r1;
    0x00060d80 str r4, [r5, 0x54]                                |     *((r5 + 0x54)) = r4;
    0x00060d82 ldr r0, [r4, 0x70]                                |     r0 = *(0x60f60);
    0x00060d84 movs r0, 0x72                                     |     r0 = 0x72;
    0x00060d86 ldr r1, [r5, 0x64]                                |     r1 = *(0x60edc);
    0x00060d88 str r4, [r4, 0x54]                                |     *((r4 + 0x54)) = r4;
    0x00060d8a movs r0, 0x78                                     |     r0 = 0x78;
    0x00060d8c ldr r7, [r6, 0x14]                                |     r7 = *(0x60f00);
    0x00060d8e ldr r4, [r6, 4]                                   |     r4 = *(0x60ef0);
    0x00060d90 strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x00060d92 ldr r0, [r5, 0x14]                                |     r0 = *(0x60e8c);
    0x00060d94 movs r0, 0x73                                     |     r0 = 0x73;
    0x00060d96 str r6, [r5, 0x14]                                |     *((r5 + 0x14)) = r6;
    0x00060d98 str r5, [r5, 0x54]                                |     *((r5 + 0x54)) = r5;
    0x00060d9a movs r0, 0x3a                                     |     r0 = 0x3a;
    0x00060d9c strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x00060d9e movs r0, r0                                       |     
    0x00060da0 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x00060da2 ldr r2, [r4, 0x44]                                |     r2 = *(0x60f34);
    0x00060da4 movs r0, 0x65                                     |     r0 = 0x65;
    0x00060da6 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x00060da8 ldr r0, [r4, 0x50]                                |     r0 = *(0x60f40);
    0x00060daa ldrb r1, [r4, 5]                                  |     r1 = *((r4 + 5));
    0x00060dac ldr r0, [r4, 0x60]                                |     r0 = *(0x60f50);
    0x00060dae strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x00060db0 str r0, [r4, 0x20]                                |     *((r4 + 0x20)) = r0;
    0x00060db2 movs r0, 0x65                                     |     r0 = 0x65;
    0x00060db4 ldr r1, [r4, 0x44]                                |     r1 = *(0x60f34);
    0x00060db6 str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x00060db8 str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x00060dba lsls r4, r4, 1                                    |     r4 <<= 1;
    0x00060dbc ldr r6, [r6, 0x14]                                |     r6 = *(0x60f00);
    0x00060dbe strb r5, [r4, 0x1d]                               |     *((r4 + 0x1d)) = r5;
    0x00060dc0 movs r5, 0x20                                     |     r5 = 0x20;
    0x00060dc2 movs r0, 0x73                                     |     r0 = 0x73;
    0x00060dc4 str r5, [r5, 0x14]                                |     *((r5 + 0x14)) = r5;
    0x00060dc6 movs r0, 0x79                                     |     r0 = 0x79;
    0x00060dc8 ldr r6, [r5, 0x74]                                |     r6 = *(0x60eec);
    0x00060dca movs r0, 0x74                                     |     r0 = 0x74;
    0x00060dcc str r2, [r4, 0x54]                                |     *((r4 + 0x54)) = r2;
    0x00060dce str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x00060dd0 strb r4, [r5, 0x11]                               |     *((r5 + 0x11)) = r4;
    0x00060dd2 strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x00060dd4 str r5, [r4, 0x44]                                |     *((r4 + 0x44)) = r5;
    0x00060dd6 movs r0, r0                                       |     
    0x00060dd8 str r5, [r2, r1]                                  |     *((r2 + r1)) = r5;
    0x00060dda adcs r4, r0                                       |     __asm ("adcs r4, r0");
    0x00060ddc cmp r4, sl                                        |     
    0x00060dde movs r2, 0x20                                     |     r2 = 0x20;
    0x00060de0 strb r5, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r5;
    0x00060de2 cmp r6, 0x22                                      |     
    0x00060de4 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x00060de6 strh r0, [r4, r4]                                 |     *((r4 + r4)) = r0;
    0x00060de8 strb r5, [r0, r1]                                 |     *((r0 + r1)) = r5;
    0x00060dea strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x00060dec ldr r1, [r6, 0x44]                                |     r1 = *(0x60f30);
    0x00060dee subs r5, 0x20                                     |     r5 -= 0x20;
    0x00060df0 strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x00060df2 ldr r1, [r6, 0x44]                                |     r1 = *(0x60f30);
    0x00060df4 strb r1, [r5, 0x11]                               |     *((r5 + 0x11)) = r1;
    0x00060df6 ldrsh r5, [r4, r5]                                |     r5 = *((r4 + r5));
    0x00060df8 str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x00060dfa str r6, [r5, 0x14]                                |     *((r5 + 0x14)) = r6;
    0x00060dfc str r5, [r5, 0x54]                                |     *((r5 + 0x54)) = r5;
    0x00060dfe strb r7, [r3, 1]                                  |     *((r3 + 1)) = r7;
    0x00060e00 strb r1, [r4, 9]                                  |     *((r4 + 9)) = r1;
    0x00060e02 ldr r5, [r4, 0x64]                                |     r5 = *(0x60f54);
    0x00060e04 cmp r0, 0x74                                      |     
    0x00060e06 strb r3, [r6, 5]                                  |     *((r6 + 5)) = r3;
    0x00060e08 cmp r4, 0x6c                                      |     
    0x00060e0a movs r5, 0x20                                     |     r5 = 0x20;
    0x00060e0c cmp r4, 0x51                                      |     
    0x00060e0e movs r5, 0x20                                     |     r5 = 0x20;
    0x00060e10 cmp r1, 0x51                                      |     
    0x00060e12 ldrsb r0, [r4, r4]                                |     r0 = *((r4 + r4));
    0x00060e14 cmp r0, sb                                        |     
    0x00060e16 cmp r2, sl                                        |     
    0x00060e18 movs r5, 0x20                                     |     r5 = 0x20;
    0x00060e1a subs r3, 0x73                                     |     r3 -= 0x73;
    0x00060e1c movs r0, r0                                       |     
    0x00060e1e movs r0, r0                                       |     
    0x00060e20 str r5, [r2, r1]                                  |     *((r2 + r1)) = r5;
    0x00060e22 adcs r4, r0                                       |     __asm ("adcs r4, r0");
    0x00060e24 cmp r4, sl                                        |     
    0x00060e26 movs r5, 0x20                                     |     r5 = 0x20;
    0x00060e28 cmp r6, 0x51                                      |     
    0x00060e2a strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x00060e2c strh r0, [r4, r4]                                 |     *((r4 + r4)) = r0;
    0x00060e2e strb r5, [r0, r1]                                 |     *((r0 + r1)) = r5;
    0x00060e30 strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x00060e32 ldr r1, [r6, 0x44]                                |     r1 = *(0x60f30);
    0x00060e34 subs r5, 0x20                                     |     r5 -= 0x20;
    0x00060e36 orrs r0, r4                                       |     r0 |= r4;
    0x00060e38 strh r1, [r0, r5]                                 |     *((r0 + r5)) = r1;
    0x00060e3a movs r0, 0x45                                     |     r0 = 0x45;
    0x00060e3c ldr r0, [pc, 0x15c]                               |     r0 = *(0x60f9c);
    0x00060e3e ldr r6, [pc, 0x114]                               |     r6 = *(0x60f56);
    0x00060e40 strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x00060e42 strb r1, [r7, 1]                                  |     *((r7 + 1)) = r1;
    0x00060e44 movs r0, 0x65                                     |     r0 = 0x65;
    0x00060e46 movs r0, 0x3d                                     |     r0 = 0x3d;
    0x00060e48 strb r7, [r4, 0x10]                               |     *((r4 + 0x10)) = r7;
    0x00060e4a ldr r2, [r6, 0x14]                                |     r2 = *(0x60f6a);
    0x00060e4c str r7, [r4, 0x74]                                |     *((r4 + 0x74)) = r7;
    0x00060e4e strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x00060e50 movs r0, 0x27                                     |     r0 = 0x27;
    0x00060e52 ldr r0, [pc, 0x150]                               |     r0 = *(0x60fa6);
    0x00060e54 ldr r6, [pc, 0x114]                               |     r6 = *(0x60f6c);
    0x00060e56 strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x00060e58 ldr r1, [r6, 0x44]                                |     r1 = "UPDATE \"%w\".sqlite_sequence set name = %Q WHERE name = %Q";
    0x00060e5a strb r1, [r5, 0x11]                               |     *((r5 + 0x11)) = r1;
    0x00060e5c ldrsh r5, [r4, r5]                                |     r5 = *((r4 + r5));
    0x00060e5e str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x00060e60 str r6, [r5, 0x14]                                |     *((r5 + 0x14)) = r6;
    0x00060e62 str r5, [r5, 0x54]                                |     *((r5 + 0x54)) = r5;
    0x00060e64 strb r7, [r3, 0x11]                               |     *((r3 + 0x11)) = r7;
    0x00060e66 ldr r2, [r6, 0x14]                                |     r2 = *(0x60f80);
    0x00060e68 str r7, [r4, 0x74]                                |     *((r4 + 0x74)) = r7;
    0x00060e6a strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x00060e6c strb r0, [r5, 0xc]                                |     *((r5 + 0xc)) = r0;
    0x00060e6e ldr r1, [r6, 0x44]                                |     r1 = "UPDATE \"%w\".sqlite_sequence set name = %Q WHERE name = %Q";
    0x00060e70 movs r0, 0x2c                                     |     r0 = 0x2c;
    0x00060e72 str r5, [r4, r4]                                  |     *((r4 + r4)) = r5;
    0x00060e74 cmp r1, r5                                        |     
    0x00060e76 strh r4, [r1, r5]                                 |     *((r1 + r5)) = r4;
    0x00060e78 movs r0, 0x45                                     |     r0 = 0x45;
    0x00060e7a strb r3, [r6, 5]                                  |     *((r6 + 5)) = r3;
    0x00060e7c ldr r4, [r5, 0x14]                                |     r4 = *(0x60f68);
    0x00060e7e str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x00060e80 strb r7, [r3, 9]                                  |     *((r3 + 9)) = r7;
    0x00060e82 ldr r5, [r4, 0x64]                                |     r5 = *(0x60fcc);
    0x00060e84 ldr r1, [r4, 0x54]                                |     r1 = *(0x60fbc);
    0x00060e86 ldrsh r5, [r4, r5]                                |     r5 = *((r4 + r5));
    0x00060e88 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x00060e8a ldr r2, [r4, 0x44]                                |     r2 = *(0x60fac);
    0x00060e8c cmp r0, 0x65                                      |     
    0x00060e8e strb r3, [r6, 5]                                  |     *((r6 + 5)) = r3;
    0x00060e90 cmp r4, 0x6c                                      |     
    0x00060e92 movs r5, 0x20                                     |     r5 = 0x20;
    0x00060e94 cmp r1, 0x51                                      |     
    0x00060e96 cmp r0, r4                                        |     
    0x00060e98 add r6, sb                                        |     r6 += sb;
    0x00060e9a movs r0, 0x2c                                     |     r0 = 0x2c;
    0x00060e9c str r4, [r6, 0x24]                                |     *((r6 + 0x24)) = r4;
    0x00060e9e ldrsh r4, [r5, r5]                                |     r4 = *((r5 + r5));
    0x00060ea0 str r6, [r5, 0x14]                                |     *((r5 + 0x14)) = r6;
    0x00060ea2 str r5, [r5, 0x54]                                |     *((r5 + 0x54)) = r5;
    0x00060ea4 subs r5, 0x20                                     |     r5 -= 0x20;
    0x00060ea6 movs r5, 0x20                                     |     r5 = 0x20;
    0x00060ea8 cmp r4, 0x51                                      |     
    0x00060eaa ldr r0, [r4, 0x60]                                |     r0 = *(0x60fc8);
    0x00060eac ldr r1, [r4, 0x54]                                |     r1 = *(0x60fbc);
    0x00060eae movs r0, 0x65                                     |     r0 = 0x65;
    0x00060eb0 movs r0, 0x3d                                     |     r0 = 0x3d;
    0x00060eb2 adcs r3, r0                                       |     __asm ("adcs r3, r0");
    0x00060eb4 cmp r3, sl                                        |     
    0x00060eb6 ldrsb r0, [r4, r4]                                |     r0 = *((r4 + r4));
    0x00060eb8 cmp r0, sb                                        |     
    0x00060eba movs r0, 0x4e                                     |     r0 = 0x4e;
    0x00060ebc ldrb r4, [r6, 5]                                  |     r4 = *((r6 + 5));
    0x00060ebe str r0, [r6, 0x54]                                |     *((r6 + 0x54)) = r0;
    0x00060ec0 movs r7, 0x3d                                     |     r7 = 0x3d;
    0x00060ec2 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x00060ec4 ldr r2, [r4, 0x44]                                |     r2 = *(0x60fac);
    0x00060ec6 movs r7, 0x65                                     |     r7 = 0x65;
    0x00060ec8 strb r0, [r4, r0]                                 |     *((r4 + r0)) = r0;
    0x00060eca cmp r0, sb                                        |     
    0x00060ecc movs r0, 0x4e                                     |     r0 = 0x4e;
    0x00060ece str r5, [r4, r4]                                  |     *((r4 + r4)) = r5;
    0x00060ed0 ldrsb r0, [r4, r4]                                |     r0 = *((r4 + r4));
    0x00060ed2 cmp r0, sb                                        |     
    0x00060ed4 movs r0, 0x4e                                     |     r0 = 0x4e;
    0x00060ed6 str r6, [r5, 0x14]                                |     *((r5 + 0x14)) = r6;
    0x00060ed8 str r5, [r5, 0x54]                                |     *((r5 + 0x54)) = r5;
    0x00060eda ldr r4, [pc, 0x80]                                |     r4 = *(0x60f5e);
    0x00060edc ldr r3, [pc, 0x124]                               |     r3 = *(0x61004);
    0x00060ede movs r0, 0x45                                     |     r0 = 0x45;
    0x00060ee0 strb r7, [r4, 0xc]                                |     *((r4 + 0xc)) = r7;
    0x00060ee2 ldr r1, [r6, 0x44]                                |     r1 = "UPDATE \"%w\".sqlite_sequence set name = %Q WHERE name = %Q";
    0x00060ee4 strb r1, [r5, 0x11]                               |     *((r5 + 0x11)) = r1;
    0x00060ee6 ldrsh r5, [r4, r5]                                |     r5 = *((r4 + r5));
    0x00060ee8 strb r1, [r4, 0x15]                               |     *((r4 + 0x15)) = r1;
    0x00060eea ldr r4, [r6, 0x74]                                |     r4 = *(0x60fe0);
    0x00060eec ldr r1, [r5, 0x64]                                |     r1 = *(0x61030);
    0x00060eee str r4, [r4, 0x54]                                |     *((r4 + 0x54)) = r4;
    0x00060ef0 movs r5, 0x78                                     |     r5 = 0x78;
    0x00060ef2 movs r7, 0x25                                     |     r7 = 0x25;
    0x00060ef4 asrs r0, r4                                       |     r0 >>= r4;
    0x00060ef6 add r6, sb                                        |     r6 += sb;
    0x00060ef8 strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x00060efa strb r1, [r7, 1]                                  |     *((r7 + 1)) = r1;
    0x00060efc subs r5, 0x65                                     |     r5 -= 0x65;
    0x00060efe ldr r7, [r4, 0x10]                                |     r7 = *(0x60ff0);
    0x00060f00 str r6, [r5, 0x44]                                |     *((r5 + 0x44)) = r6;
    0x00060f02 ldrb r5, [r4, 1]                                  |     r5 = *((r4 + 1));
    0x00060f04 movs r0, 0x27                                     |     r0 = 0x27;
    0x00060f06 ldr r0, [pc, 0x150]                               |     r0 = *(0x6105a);
    0x00060f08 ldr r6, [pc, 0x114]                               |     r6 = *(0x61020);
    0x00060f0a movs r7, 0x20                                     |     r7 = 0x20;
    0x00060f0c strb r3, [r6, 5]                                  |     *((r6 + 5)) = r3;
    0x00060f0e ldr r4, [r5, 0x14]                                |     r4 = *(0x60fe0);
    0x00060f10 str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x00060f12 str r7, [r3, 0x14]                                |     *((r3 + 0x14)) = r7;
    0x00060f14 strb r5, [r6, 0x11]                               |     *((r6 + 0x11)) = r5;
    0x00060f16 ldr r7, [r5, 0x14]                                |     r7 = *(0x60fe0);
    0x00060f18 str r6, [r5, 0x44]                                |     *((r5 + 0x44)) = r6;
    0x00060f1a ldrb r5, [r4, 1]                                  |     r5 = *((r4 + 1));
    0x00060f1c movs r7, 0x5f                                     |     r7 = 0x5f;
    0x00060f1e ldrb r0, [r4, 0x10]                               |     r0 = *((r4 + 0x10));
    0x00060f20 movs r0, 0x7c                                     |     r0 = 0x7c;
    0x00060f22 str r5, [r4, r4]                                  |     *((r4 + r4)) = r5;
    0x00060f24 ldrb r0, [r4, 0x10]                               |     r0 = *((r4 + 0x10));
    0x00060f26 movs r0, 0x7c                                     |     r0 = 0x7c;
    0x00060f28 strb r3, [r6, 0x15]                               |     *((r6 + 0x15)) = r3;
    0x00060f2a strb r2, [r4, 0xd]                                |     *((r4 + 0xd)) = r2;
    0x00060f2c strb r4, [r6, 9]                                  |     *((r6 + 9)) = r4;
    0x00060f2e ldr r0, [r5, 0x60]                                |     r0 = *(0x6102c);
    0x00060f30 ldr r1, [r4, 0x54]                                |     r1 = *(0x61034);
    0x00060f32 cmp r4, 0x65                                      |     
    0x00060f34 str r5, [r4, 0x40]                                |     *((r4 + 0x40)) = r5;
    0x00060f36 adds r1, 0x2b                                     |     r1 += 0x2b;
    0x00060f38 cmp r1, 0x38                                      |     
    0x00060f3a cmp r0, r4                                        |     
    0x00060f3c strh r4, [r1, r5]                                 |     *((r1 + r5)) = r4;
    0x00060f3e movs r0, 0x45                                     |     r0 = 0x45;
    0x00060f40 str r6, [r5, 0x14]                                |     *((r5 + 0x14)) = r6;
    0x00060f42 str r5, [r5, 0x54]                                |     *((r5 + 0x54)) = r5;
    0x00060f44 cmp r0, r4                                        |     
    0x00060f46 add r6, sb                                        |     r6 += sb;
    0x00060f48 ldrsb r0, [r4, r4]                                |     r0 = *((r4 + r4));
    0x00060f4a cmp r0, sb                                        |     
    0x00060f4c cmp r2, sl                                        |     
    0x00060f4e strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x00060f50 ldr r2, [r4, 0x44]                                |     r2 = *(0x61024);
    0x00060f52 ldr r7, [r3, 0x64]                                |     r7 = "Cannot add a UNIQUE column";
    0x00060f54 ldr r1, [r4, 0x54]                                |     r1 = *(0x61034);
    0x00060f56 subs r5, 0x65                                     |     r5 -= 0x65;
    0x00060f58 str r5, [r4, r4]                                  |     *((r4 + r4)) = r5;
    0x00060f5a orrs r0, r4                                       |     r0 |= r4;
    0x00060f5c ldr r4, [pc, 0x13c]                               |     r4 = *(0x6109c);
    0x00060f5e adcs r4, r1                                       |     __asm ("adcs r4, r1");
    0x00060f60 cmp r4, sl                                        |     
    0x00060f62 ldr r0, [r4, 0x60]                                |     r0 = *(0x610fc);
    0x00060f64 str r7, [r5, 0x34]                                |     *((r5 + 0x34)) = r7;
    0x00060f66 strb r1, [r4, 0xd]                                |     *((r4 + 0xd)) = r1;
    0x00060f68 movs r0, 0x65                                     |     r0 = 0x65;
    0x00060f6a ldr r6, [pc, 0x104]                               |     r6 = *(0x61072);
    0x00060f6c movs r0, 0x44                                     |     r0 = 0x44;
    0x00060f6e strb r0, [r5, 0x10]                               |     *((r5 + 0x10)) = r0;
    0x00060f70 strb r1, [r7, 1]                                  |     *((r7 + 1)) = r1;
    0x00060f72 subs r5, 0x65                                     |     r5 -= 0x65;
    0x00060f74 strb r7, [r4, 0x10]                               |     *((r4 + 0x10)) = r7;
    0x00060f76 str r1, [r4, 0x24]                                |     *((r4 + 0x24)) = r1;
    0x00060f78 str r4, [r5, 0x54]                                |     *((r5 + 0x54)) = r4;
    0x00060f7a movs r0, 0x27                                     |     r0 = 0x27;
    0x00060f7c strh r7, [r1, r1]                                 |     *((r1 + r1)) = r7;
    0x00060f7e strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x00060f80 strb r1, [r7, 1]                                  |     *((r7 + 1)) = r1;
    0x00060f82 subs r5, 0x65                                     |     r5 -= 0x65;
    0x00060f84 ldr r7, [r4, 0x10]                                |     r7 = *(0x610ac);
    0x00060f86 str r6, [r5, 0x44]                                |     *((r5 + 0x44)) = r6;
    0x00060f88 ldrb r5, [r4, 1]                                  |     r5 = *((r4 + 1));
    0x00060f8a movs r0, 0x27                                     |     r0 = 0x27;
    0x00060f8c strh r7, [r1, r1]                                 |     *((r1 + r1)) = r7;
    0x00060f8e strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x00060f90 strb r1, [r7, 1]                                  |     *((r7 + 1)) = r1;
    0x00060f92 subs r5, 0x65                                     |     r5 -= 0x65;
    0x00060f94 strb r7, [r4, 0x10]                               |     *((r4 + 0x10)) = r7;
    0x00060f96 ldr r2, [r6, 0x14]                                |     
    0x00060f98 str r7, [r4, 0x74]                                |     *((r4 + 0x74)) = r7;
    0x00060f9a strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x00060f9c cmp r1, 0x27                                      |     
    0x00060f9e movs r3, r7                                       |     r3 = r7;
    0x00060fa0 strb r3, [r6, 5]                                  |     *((r6 + 5)) = r3;
    0x00060fa2 ldr r4, [r5, 0x14]                                |     r4 = *(0x60fe0);
    0x00060fa4 str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x00060fa6 strb r7, [r3, 0xd]                                |     *((r3 + 0xd)) = r7;
    0x00060fa8 strb r5, [r4, 5]                                  |     *((r4 + 5)) = r5;
    0x00060faa str r5, [r6, 0x54]                                |     *((r6 + 0x54)) = r5;
    0x00060fac str r6, [r5, 0x34]                                |     *((r5 + 0x34)) = r6;
    0x00060fae lsls r5, r4, 1                                    |     r5 = r4 << 1;
    0x00060fb0 str r5, [r2, r1]                                  |     *((r2 + r1)) = r5;
    0x00060fb2 adcs r4, r0                                       |     __asm ("adcs r4, r0");
    0x00060fb4 cmp r4, sl                                        |     
    0x00060fb6 movs r2, 0x20                                     |     r2 = 0x20;
    0x00060fb8 strb r5, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r5;
    0x00060fba cmp r6, 0x22                                      |     
    0x00060fbc strb r3, [r6, 5]                                  |     *((r6 + 5)) = r3;
    0x00060fbe ldr r4, [r5, 0x14]                                |     r4 = *(0x60fe0);
    0x00060fc0 str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x00060fc2 strb r7, [r3, 0xd]                                |     *((r3 + 0xd)) = r7;
    0x00060fc4 strb r5, [r4, 5]                                  |     *((r4 + 5)) = r5;
    0x00060fc6 str r5, [r6, 0x54]                                |     *((r6 + 0x54)) = r5;
    0x00060fc8 str r6, [r5, 0x34]                                |     *((r5 + 0x34)) = r6;
    0x00060fca movs r0, 0x65                                     |     r0 = 0x65;
    0x00060fcc str r3, [r6, 0x54]                                |     *((r6 + 0x54)) = r3;
    0x00060fce movs r0, 0x74                                     |     r0 = 0x74;
    0x00060fd0 str r6, [r5, 0x14]                                |     *((r5 + 0x14)) = r6;
    0x00060fd2 str r5, [r5, 0x54]                                |     *((r5 + 0x54)) = r5;
    0x00060fd4 subs r5, 0x20                                     |     r5 -= 0x20;
    0x00060fd6 movs r5, 0x20                                     |     r5 = 0x20;
    0x00060fd8 movs r0, 0x51                                     |     r0 = 0x51;
    0x00060fda ldr r0, [pc, 0x15c]                               |     r0 = *(0x6113a);
    0x00060fdc strh r5, [r0, r1]                                 |     *((r0 + r1)) = r5;
    0x00060fde movs r0, 0x45                                     |     r0 = 0x45;
    0x00060fe0 str r6, [r5, 0x14]                                |     *((r5 + 0x14)) = r6;
    0x00060fe2 str r5, [r5, 0x54]                                |     *((r5 + 0x54)) = r5;
    0x00060fe4 subs r5, 0x20                                     |     r5 -= 0x20;
    0x00060fe6 movs r5, 0x20                                     |     r5 = 0x20;
    0x00060fe8 lsls r1, r2, 1                                    |     r1 = r2 << 1;
    0x00060fea movs r0, r0                                       |     
    0x00060fec str r5, [r2, r1]                                  |     *((r2 + r1)) = r5;
    0x00060fee adcs r4, r0                                       |     __asm ("adcs r4, r0");
    0x00060ff0 cmp r4, sl                                        |     
    0x00060ff2 strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x00060ff4 ldr r1, [r6, 0x44]                                |     r1 = *(0x610b6);
    0x00060ff6 strb r1, [r5, 0x11]                               |     *((r5 + 0x11)) = r1;
    0x00060ff8 ldrsh r5, [r4, r5]                                |     r5 = *((r4 + r5));
    0x00060ffa str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x00060ffc strb r5, [r5, 1]                                  |     *((r5 + 1)) = r5;
    0x00060ffe ldr r7, [r3, 0x54]                                |     r7 = *(0x61058);
    0x00061000 strb r1, [r4, 0xd]                                |     *((r4 + 0xd)) = r1;
    0x00061002 str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x00061004 movs r0, 0x72                                     |     r0 = 0x72;
    0x00061006 cmp r3, sl                                        |     
    0x00061008 movs r0, 0x54                                     |     r0 = 0x54;
    0x0006100a strb r3, [r6, 5]                                  |     *((r6 + 5)) = r3;
    0x0006100c movs r0, 0x6c                                     |     r0 = 0x6c;
    0x0006100e movs r0, 0x3d                                     |     r0 = 0x3d;
    0x00061010 strb r3, [r6, 5]                                  |     *((r6 + 5)) = r3;
    0x00061012 ldr r4, [r5, 0x14]                                |     r4 = *(0x60fe0);
    0x00061014 str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x00061016 strb r7, [r3, 9]                                  |     *((r3 + 9)) = r7;
    0x00061018 ldr r5, [r4, 0x64]                                |     r5 = *(0x61044);
    0x0006101a ldr r1, [r4, 0x54]                                |     r1 = *(0x61034);
    0x0006101c ldrsh r5, [r4, r5]                                |     r5 = *((r4 + r5));
    0x0006101e strb r4, [r6, 9]                                  |     *((r6 + 9)) = r4;
    0x00061020 str r1, [r5, 0x74]                                |     *((r5 + 0x74)) = r1;
    0x00061022 str r7, [r4, 0x54]                                |     *((r4 + 0x54)) = r7;
    0x00061024 cmp r0, 0x72                                      |     
    0x00061026 strb r3, [r6, 5]                                  |     *((r6 + 5)) = r3;
    0x00061028 cmp r4, 0x6c                                      |     
    0x0006102a movs r5, 0x20                                     |     r5 = 0x20;
    0x0006102c cmp r1, 0x51                                      |     
    0x0006102e movs r0, 0x2c                                     |     r0 = 0x2c;
    0x00061030 str r4, [r6, 0x24]                                |     *((r6 + 0x24)) = r4;
    0x00061032 ldrsh r4, [r5, r5]                                |     r4 = *((r5 + r5));
    0x00061034 str r6, [r5, 0x14]                                |     *((r5 + 0x14)) = r6;
    0x00061036 str r5, [r5, 0x54]                                |     *((r5 + 0x54)) = r5;
    0x00061038 subs r5, 0x20                                     |     r5 -= 0x20;
    0x0006103a movs r5, 0x20                                     |     r5 = 0x20;
    0x0006103c movs r0, 0x51                                     |     r0 = 0x51;
    0x0006103e ldr r0, [pc, 0x15c]                               |     r0 = *(0x6119e);
    0x00061040 strh r5, [r0, r1]                                 |     *((r0 + r1)) = r5;
    0x00061042 movs r0, 0x45                                     |     r0 = 0x45;
    0x00061044 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x00061046 movs r3, r7                                       |     r3 = r7;
    0x00061048 str r3, [r0, 0x14]                                |     *((r0 + 0x14)) = r3;
    0x0006104a ldr r6, [r5, 0x64]                                |     r6 = *(0x610a8);
    0x0006104c strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x0006104e str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x00061050 str r4, [r4, 0x44]                                |     *((r4 + 0x44)) = r4;
    0x00061052 str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x00061054 str r0, [r4, r0]                                  |     *((r4 + r0)) = r0;
    0x00061056 ldr r1, [pc, 0x148]                               |     r1 = *(0x611a2);
    0x00061058 adcs r5, r1                                       |     __asm ("adcs r5, r1");
    0x0006105a ldr r2, [r2, r5]                                  |     r2 = *(0x61086);
    0x0006105c ldr r3, [pc, 0x80]                                |     r3 = *(0x610e0);
    0x0006105e ldr r5, [r0, r5]                                  |     r5 = *(0x6119e);
    0x00061060 str r0, [r4, 0x30]                                |     *((r4 + 0x30)) = r0;
    0x00061062 ldr r7, [r5, 0x44]                                |     r7 = *(0x611e2);
    0x00061064 ldr r5, [r6, 0x54]                                |     
    0x00061066 lsls r6, r5, 1                                    |     r6 = r5 << 1;
    0x00061068 str r3, [r0, 0x14]                                |     *((r0 + 0x14)) = r3;
    0x0006106a ldr r6, [r5, 0x64]                                |     r6 = *(0x61160);
    0x0006106c strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x0006106e str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x00061070 str r4, [r4, 0x44]                                |     *((r4 + 0x44)) = r4;
    0x00061072 str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x00061074 strb r0, [r4, r4]                                 |     *((r4 + r4)) = r0;
    0x00061076 ldr r1, [pc, 0x138]                               |     r1 = *(0x611b2);
    0x00061078 strb r1, [r2, r5]                                 |     *((r2 + r5)) = r1;
    0x0006107a movs r0, 0x45                                     |     r0 = 0x45;
    0x0006107c ldr r3, [r4, 0x74]                                |     r3 = *(0x61054);
    0x0006107e strb r4, [r5, 0x15]                               |     *((r5 + 0x15)) = r4;
    0x00061080 ldr r5, [r5, 0x64]                                |     r5 = *(0x61160);
    0x00061082 movs r0, r0                                       |     
    0x00061084 str r3, [r0, 0x14]                                |     *((r0 + 0x14)) = r3;
    0x00061086 ldr r6, [r5, 0x64]                                |     r6 = *(0x611c4);
    0x00061088 strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x0006108a str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x0006108c str r4, [r4, 0x44]                                |     *((r4 + 0x44)) = r4;
    0x0006108e str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x00061090 strh r0, [r4, r0]                                 |     *((r4 + r0)) = r0;
    0x00061092 mov r5, r8                                        |     r5 = r8;
    0x00061094 strh r5, [r0, r1]                                 |     *((r0 + r1)) = r5;
    0x00061096 ldr r6, [pc, 0x114]                               |     r6 = *(0x611ae);
    0x00061098 cmp r3, r8                                        |     
    0x0006109a movs r0, 0x53                                     |     r0 = 0x53;
    0x0006109c ldr r3, [r4, 0x74]                                |     r3 = *(0x61054);
    0x0006109e strb r4, [r5, 0x15]                               |     *((r5 + 0x15)) = r4;
    0x000610a0 ldr r5, [r5, 0x64]                                |     r5 = *((r5 + 0x64));
    0x000610a2 strb r0, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r0;
    0x000610a4 strb r1, [r5, 0x11]                               |     *((r5 + 0x11)) = r1;
    0x000610a6 movs r0, 0x68                                     |     r0 = 0x68;
    0x000610a8 ldr r6, [r5, 0x74]                                |     r6 = *((r5 + 0x74));
    0x000610aa cmp r5, 0x6e                                      |     
    0x000610ac strb r6, [r1, r5]                                 |     *((r1 + r5)) = r6;
    0x000610ae ldr r4, [pc, 0x130]                               |     r4 = *(0x611e2);
    0x000610b0 str r0, [r4, 0x40]                                |     *((r4 + 0x40)) = r0;
    0x000610b2 str r5, [r4, 0x64]                                |     *((r4 + 0x64)) = r5;
    0x000610b4 strb r1, [r4, 0x15]                               |     *((r4 + 0x15)) = r1;
    0x000610b6 strb r4, [r5, 0x11]                               |     *((r5 + 0x11)) = r4;
    0x000610b8 strb r0, [r4, 0x18]                               |     *((r4 + 0x18)) = r0;
    0x000610ba ldr r1, [r4, 0x44]                                |     r1 = *(0x61226);
    0x000610bc str r5, [r6, 0x54]                                |     *((r6 + 0x54)) = r5;
    0x000610be movs r0, r0                                       |     
    0x000610c0 str r3, [r0, 0x14]                                |     *((r0 + 0x14)) = r3;
    0x000610c2 ldr r6, [r5, 0x64]                                |     r6 = *((r5 + 0x64));
    0x000610c4 strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x000610c6 str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x000610c8 str r4, [r4, 0x44]                                |     *((r4 + 0x44)) = r4;
    0x000610ca str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x000610cc ldr r6, [pc, 0x80]                                |     r6 = *(0x61150);
    0x000610ce strb r7, [r1, r1]                                 |     *((r1 + r1)) = r7;
    0x000610d0 ldr r6, [pc, 0x80]                                |     r6 = *(0x61154);
    0x000610d2 ldr r4, [pc, 0x154]                               |     r4 = *(0x6122a);
    0x000610d4 movs r0, 0x4c                                     |     r0 = 0x4c;
    0x000610d6 ldr r3, [r4, 0x74]                                |     r3 = *(0x6129e);
    0x000610d8 strb r4, [r5, 0x15]                               |     *((r5 + 0x15)) = r4;
    0x000610da ldr r5, [r5, 0x64]                                |     r5 = *((r5 + 0x64));
    0x000610dc strb r0, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r0;
    0x000610de strb r1, [r5, 0x11]                               |     *((r5 + 0x11)) = r1;
    0x000610e0 movs r0, 0x68                                     |     r0 = 0x68;
    0x000610e2 str r4, [r4, 0x54]                                |     *((r4 + 0x54)) = r4;
    0x000610e4 str r6, [r4, 0x14]                                |     *((r4 + 0x14)) = r6;
    0x000610e6 ldr r5, [r6, 0x44]                                |     r5 = "virtual tables may not be altered";
    0x000610e8 movs r0, 0x74                                     |     r0 = 0x74;
    0x000610ea str r6, [r6, 0x14]                                |     *((r6 + 0x14)) = r6;
    0x000610ec strb r4, [r5, 0x15]                               |     *((r5 + 0x15)) = r4;
    0x000610ee movs r0, 0x65                                     |     r0 = 0x65;
    0x000610f0 strb r6, [r1, r5]                                 |     *((r1 + r5)) = r6;
    0x000610f2 ldr r4, [pc, 0x130]                               |     r4 = *(0x61226);
    0x000610f4 movs r0, r0                                       |     
    0x000610f6 movs r0, r0                                       |     
    0x000610f8 str r3, [r0, 0x14]                                |     *((r0 + 0x14)) = r3;
    0x000610fa ldr r6, [r5, 0x64]                                |     
    0x000610fc strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x000610fe str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x00061100 str r4, [r4, 0x44]                                |     *((r4 + 0x44)) = r4;
    0x00061102 str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x00061104 str r0, [r4, 0x30]                                |     *((r4 + 0x30)) = r0;
    0x00061106 ldr r7, [r5, 0x44]                                |     r7 = "sqlite_altertab_%s";
    0x00061108 ldr r5, [r6, 0x54]                                |     r5 = *(0x61250);
    0x0006110a movs r0, 0x6e                                     |     r0 = 0x6e;
    0x0006110c ldr r7, [r6, 0x14]                                |     r7 = *(0x61210);
    0x0006110e ldr r4, [r6, 4]                                   |     r4 = *(0x61200);
    0x00061110 ldr r0, [r4, 0x60]                                |     r0 = *(0x61260);
    0x00061112 ldr r7, [r5, 0x64]                                |     r7 = "UPDATE %Q.%s SET type='table', name=%Q, tbl_name=%Q, rootpage=0, sql=%Q WHERE rowid=#%d";
    0x00061114 str r5, [r5, 0x30]                                |     *((r5 + 0x30)) = r5;
    0x00061116 ldr r7, [r5, 0x64]                                |     r7 = "UPDATE %Q.%s SET type='table', name=%Q, tbl_name=%Q, rootpage=0, sql=%Q WHERE rowid=#%d";
    0x00061118 strb r3, [r6, 0x11]                               |     *((r6 + 0x11)) = r3;
    0x0006111a ldr r1, [r4, 0x64]                                |     r1 = *(0x61264);
    0x0006111c movs r0, 0x74                                     |     r0 = 0x74;
    0x0006111e str r4, [r4, 0x54]                                |     *((r4 + 0x54)) = r4;
    0x00061120 str r6, [r4, 0x14]                                |     *((r4 + 0x14)) = r6;
    0x00061122 ldr r5, [r6, 0x44]                                |     r5 = *(0x61240);
    0x00061124 lsls r4, r6, 1                                    |     r4 = r6 << 1;
    0x00061126 movs r0, r0                                       |     
    0x00061128 str r5, [r2, r1]                                  |     *((r2 + r1)) = r5;
    0x0006112a adcs r4, r0                                       |     __asm ("adcs r4, r0");
    0x0006112c cmp r4, sl                                        |     
    0x0006112e movs r2, 0x20                                     |     r2 = 0x20;
    0x00061130 strb r5, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r5;
    0x00061132 cmp r6, 0x22                                      |     
    0x00061134 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x00061136 strh r0, [r4, r4]                                 |     *((r4 + r4)) = r0;
    0x00061138 strb r5, [r0, r1]                                 |     *((r0 + r1)) = r5;
    0x0006113a strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x0006113c ldr r1, [r6, 0x44]                                |     r1 = *(0x61240);
    0x0006113e subs r5, 0x20                                     |     r5 -= 0x20;
    0x00061140 strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x00061142 str r5, [r6, 0x24]                                |     *((r6 + 0x24)) = r5;
    0x00061144 strb r3, [r6, 0x11]                               |     *((r6 + 0x11)) = r3;
    0x00061146 cmp r0, 0x72                                      |     
    0x00061148 strb r3, [r6, 5]                                  |     *((r6 + 5)) = r3;
    0x0006114a cmp r4, 0x6c                                      |     
    0x0006114c cmp r4, 0x31                                      |     
    0x0006114e str r5, [r4, 0x40]                                |     *((r4 + 0x40)) = r5;
    0x00061150 movs r0, 0x29                                     |     r0 = 0x29;
    0x00061152 ldrb r4, [r7, 0x11]                               |     r4 = *((r7 + 0x11));
    0x00061154 movs r7, 0x20                                     |     r7 = 0x20;
    0x00061156 movs r0, 0x2c                                     |     r0 = 0x2c;
    0x00061158 movs r0, 0x27                                     |     r0 = 0x27;
    0x0006115a ldrb r4, [r7, 0x11]                               |     r4 = *((r7 + 0x11));
    0x0006115c movs r5, 0x20                                     |     r5 = 0x20;
    0x0006115e movs r0, 0x51                                     |     r0 = 0x51;
    0x00061160 ldrb r4, [r7, 0x11]                               |     r4 = *((r7 + 0x11));
    0x00061162 strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x00061164 str r5, [r6, 0x24]                                |     *((r6 + 0x24)) = r5;
    0x00061166 strb r3, [r6, 0x11]                               |     *((r6 + 0x11)) = r3;
    0x00061168 cmp r0, 0x72                                      |     
    0x0006116a strb r3, [r6, 5]                                  |     *((r6 + 5)) = r3;
    0x0006116c cmp r4, 0x6c                                      |     
    0x0006116e str r5, [r4, 0x40]                                |     *((r4 + 0x40)) = r5;
    0x00061170 movs r0, 0x29                                     |     r0 = 0x29;
    0x00061172 ldr r0, [pc, 0x15c]                               |     r0 = *(0x612d2);
    0x00061174 strh r5, [r0, r1]                                 |     *((r0 + r1)) = r5;
    0x00061176 movs r0, 0x45                                     |     r0 = 0x45;
    0x00061178 ldrb r4, [r6, 5]                                  |     r4 = *((r6 + 5));
    0x0006117a str r0, [r6, 0x54]                                |     *((r6 + 0x54)) = r0;
    0x0006117c subs r5, 0x20                                     |     r5 -= 0x20;
    0x0006117e movs r7, 0x20                                     |     r7 = 0x20;
    0x00061180 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x00061182 ldr r2, [r4, 0x44]                                |     r2 = *(0x61244);
    0x00061184 movs r7, 0x65                                     |     r7 = 0x65;
    0x00061186 asrs r0, r4                                       |     r0 >>= r4;
    0x00061188 add r6, sb                                        |     r6 += sb;
    0x0006118a ldr r0, [r4, 0x60]                                |     r0 = *(0x61260);
    0x0006118c ldr r1, [r4, 0x54]                                |     r1 = *(0x61254);
    0x0006118e movs r0, 0x65                                     |     r0 = 0x65;
    0x00061190 movs r0, 0x3d                                     |     r0 = 0x3d;
    0x00061192 str r5, [r4, r4]                                  |     *((r4 + r4)) = r5;
    0x00061194 movs r0, r0                                       |     
    0x00061196 movs r0, r0                                       |     
    0x00061198 ldr r6, [r6, 0x14]                                |     r6 = *(0x61210);
    0x0006119a strb r2, [r6, 0x11]                               |     *((r6 + 0x11)) = r2;
    0x0006119c str r5, [r6, 0x14]                                |     *((r6 + 0x14)) = r5;
    0x0006119e movs r0, 0x6c                                     |     r0 = 0x6c;
    0x000611a0 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x000611a2 ldr r2, [r4, 0x44]                                |     r2 = *(0x61244);
    0x000611a4 strb r5, [r4, 0xd]                                |     *((r4 + 0xd)) = r5;
    0x000611a6 ldr r0, [r4, 0x50]                                |     r0 = *(0x61250);
    0x000611a8 ldrb r1, [r4, 5]                                  |     r1 = *((r4 + 5));
    0x000611aa ldr r0, [r4, 0x60]                                |     r0 = *(0x61260);
    0x000611ac strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x000611ae str r0, [r4, 0x20]                                |     *((r4 + 0x20)) = r0;
    0x000611b0 movs r0, 0x65                                     |     r0 = 0x65;
    0x000611b2 ldr r1, [r4, 0x44]                                |     r1 = *(0x61244);
    0x000611b4 str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x000611b6 str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x000611b8 lsls r4, r4, 1                                    |     r4 <<= 1;
    0x000611ba movs r0, r0                                       |     
    0x000611bc str r3, [r0, 0x14]                                |     *((r0 + 0x14)) = r3;
    0x000611be ldr r6, [r5, 0x64]                                |     r6 = *(0x612a4);
    0x000611c0 strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x000611c2 str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x000611c4 str r4, [r4, 0x44]                                |     *((r4 + 0x44)) = r4;
    0x000611c6 str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x000611c8 str r0, [r4, 0x30]                                |     *((r4 + 0x30)) = r0;
    0x000611ca ldr r7, [r5, 0x44]                                |     r7 = *(0x61284);
    0x000611cc ldr r5, [r6, 0x54]                                |     r5 = *(0x612f8);
    0x000611ce movs r0, 0x6e                                     |     r0 = 0x6e;
    0x000611d0 ldr r4, [r6, 0x74]                                |     r4 = *(0x61318);
    0x000611d2 str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x000611d4 strb r0, [r4, 0x18]                               |     *((r4 + 0x18)) = r0;
    0x000611d6 str r1, [r5, 0x54]                                |     *((r5 + 0x54)) = r1;
    0x000611d8 lsls r7, r6, 1                                    |     r7 = r6 << 1;
    0x000611da movs r0, r0                                       |     
    0x000611dc strb r3, [r6, 5]                                  |     *((r6 + 5)) = r3;
    0x000611de ldr r4, [r5, 0x14]                                |     r4 = "name='%q' AND type='table';
    0x000611e0 str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x000611e2 str r7, [r3, 0x14]                                |     *((r3 + 0x14)) = r7;
    0x000611e4 strb r4, [r5, 0x11]                               |     *((r5 + 0x11)) = r4;
    0x000611e6 strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x000611e8 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x000611ea ldrsh r2, [r4, r5]                                |     r2 = *((r4 + r5));
    0x000611ec strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x000611ee movs r0, r0                                       |     
    0x000611f0 ldr r1, [r5, 0x64]                                |     r1 = "statement too long";
    0x000611f2 str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x000611f4 strb r2, [r6, 9]                                  |     *((r6 + 9)) = r2;
    0x000611f6 strb r5, [r6, 1]                                  |     *((r6 + 1)) = r5;
    0x000611f8 lsls r4, r6, 1                                    |     r4 = r6 << 1;
    0x000611fa movs r0, r0                                       |     
    0x000611fc ldr r5, [r6, 0x64]                                |     r5 = *(0x61308);
    0x000611fe str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x00061200 ldr r3, [r4, 0x74]                                |     r3 = imp.mkdir;
    0x00061202 ldr r7, [r4, 0x64]                                |     r7 = "invalid rootpage";
    0x00061204 ldrb r1, [r5, 9]                                  |     r1 = *((r5 + 9));
    0x00061206 str r5, [r4, 0x44]                                |     *((r4 + 0x44)) = r5;
    0x00061208 strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x0006120a ldr r7, [r5, 0x34]                                |     r7 = "database schema is locked: %s";
    0x0006120c ldr r5, [r4, 0x64]                                |     r5 = "invalid rootpage";
    0x0006120e movs r0, 0x3a                                     |     r0 = 0x3a;
    0x00061210 movs r5, 0x22                                     |     r5 = 0x22;
    0x00061212 movs r2, 0x54                                     |     r2 = 0x54;
    0x00061214 movs r0, r0                                       |     
    0x00061216 movs r0, r0                                       |     
    0x00061218 strb r3, [r6, 5]                                  |     *((r6 + 5)) = r3;
    0x0006121a ldr r4, [r5, 0x14]                                |     r4 = "SELECT tbl,idx,stat FROM %Q.sqlite_stat1";
    0x0006121c str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x0006121e strb r7, [r3, 0xd]                                |     *((r3 + 0xd)) = r7;
    0x00061220 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x00061222 movs r5, 0x74                                     |     r5 = 0x74;
    0x00061224 lsls r4, r4, 1                                    |     r4 <<= 1;
    0x00061226 movs r0, r0                                       |     
    0x00061228 cmp r4, r8                                        |     
    0x0006122a cmp r4, sb                                        |     
    0x0006122c cmp r4, sl                                        |     
    0x0006122e mov r0, r4                                        |     r0 = r4;
    0x00061230 ldr r7, [pc, 0x148]                               |     r7 = *(0x6137c);
    0x00061232 movs r0, 0x4d                                     |     r0 = 0x4d;
    0x00061234 str r5, [r4, r4]                                  |     *((r4 + r4)) = r5;
    0x00061236 movs r5, 0x2e                                     |     r5 = 0x2e;
    0x00061238 movs r0, 0x73                                     |     r0 = 0x73;
    0x0006123a ldr r0, [pc, 0x15c]                               |     r0 = *(0x6139a);
    0x0006123c strh r5, [r0, r1]                                 |     *((r0 + r1)) = r5;
    0x0006123e movs r0, 0x45                                     |     r0 = 0x45;
    0x00061240 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x00061242 movs r5, 0x3d                                     |     r5 = 0x3d;
    0x00061244 lsls r1, r2, 1                                    |     r1 = r2 << 1;
    0x00061246 movs r0, r0                                       |     
    0x00061248 str r5, [r2, r1]                                  |     *((r2 + r1)) = r5;
    0x0006124a adcs r4, r0                                       |     __asm ("adcs r4, r0");
    0x0006124c cmp r4, sl                                        |     
    0x0006124e movs r5, 0x20                                     |     r5 = 0x20;
    0x00061250 cmp r6, 0x51                                      |     
    0x00061252 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x00061254 strh r0, [r4, r4]                                 |     *((r4 + r4)) = r0;
    0x00061256 strb r5, [r0, r1]                                 |     *((r0 + r1)) = r5;
    0x00061258 strb r0, [r4, 8]                                  |     *((r4 + 8)) = r0;
    0x0006125a ldr r7, [r5, 0x74]                                |     r7 = *(0x613e4);
    0x0006125c strb r4, [r6, 1]                                  |     *((r6 + 1)) = r4;
    0x0006125e str r1, [r4, 0x74]                                |     *((r4 + 0x74)) = r1;
    0x00061260 subs r5, 0x65                                     |     r5 -= 0x65;
    0x00061262 str r5, [r4, 0x40]                                |     *((r4 + 0x40)) = r5;
    0x00061264 ldrsb r0, [r4, r4]                                |     r0 = *((r4 + r4));
    0x00061266 cmp r0, sb                                        |     
    0x00061268 cmp r2, sl                                        |     
    0x0006126a movs r3, 0x20                                     |     r3 = 0x20;
    0x0006126c str r5, [r4, 0x40]                                |     *((r4 + 0x40)) = r5;
    0x0006126e asrs r0, r4                                       |     r0 >>= r4;
    0x00061270 add r6, sb                                        |     r6 += sb;
    0x00061272 strb r0, [r4, 8]                                  |     *((r4 + 8)) = r0;
    0x00061274 ldr r7, [r5, 0x74]                                |     r7 = *(0x613e4);
    0x00061276 strb r4, [r6, 1]                                  |     *((r6 + 1)) = r4;
    0x00061278 str r1, [r4, 0x74]                                |     *((r4 + 0x74)) = r1;
    0x0006127a subs r5, 0x65                                     |     r5 -= 0x65;
    0x0006127c movs r5, 0x23                                     |     r5 = 0x23;
    0x0006127e lsls r4, r4, 1                                    |     r4 <<= 1;
    0x00061280 strh r3, [r0, r1]                                 |     *((r0 + r1)) = r3;
    0x00061282 adcs r5, r0                                       |     __asm ("adcs r5, r0");
    0x00061284 cmp r4, sl                                        |     
    0x00061286 strb r0, [r4, r0]                                 |     *((r4 + r0)) = r0;
    0x00061288 rsbs r1, r0, 0                                    |     r1 = r0 - ;
    0x0006128a cmp r4, sb                                        |     
    0x0006128c movs r5, 0x20                                     |     r5 = 0x20;
    0x0006128e cmp r6, 0x51                                      |     
    0x00061290 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x00061292 movs r5, 0x28                                     |     r5 = 0x28;
    0x00061294 cmp r1, 0x73                                      |     
    0x00061296 movs r0, r0                                       |     
    0x00061298 str r4, [r6, 0x24]                                |     *((r6 + 0x24)) = r4;
    0x0006129a lsls r4, r5, 1                                    |     r4 = r5 << 1;
    0x0006129c strh r3, [r0, r1]                                 |     *((r0 + r1)) = r3;
    0x0006129e adcs r5, r0                                       |     __asm ("adcs r5, r0");
    0x000612a0 cmp r4, sl                                        |     
    0x000612a2 ldrsb r0, [r4, r0]                                |     r0 = *((r4 + r0));
    0x000612a4 strh r1, [r1, r1]                                 |     *((r1 + r1)) = r1;
    0x000612a6 strb r4, [r2, r5]                                 |     *((r2 + r5)) = r4;
    0x000612a8 ldr r4, [pc, 0x104]                               |     r4 = "cannot commit - no transaction is active";
    0x000612aa strb r0, [r4, r0]                                 |     *((r4 + r0)) = r0;
    0x000612ac rsbs r1, r0, 0                                    |     r1 = r0 - ;
    0x000612ae cmp r4, sb                                        |     
    0x000612b0 movs r5, 0x20                                     |     r5 = 0x20;
    0x000612b2 lsls r4, r2, 1                                    |     r4 = r2 << 1;
    0x000612b4 str r5, [r2, r1]                                  |     *((r2 + r1)) = r5;
    0x000612b6 adcs r4, r0                                       |     __asm ("adcs r4, r0");
    0x000612b8 cmp r4, sl                                        |     
    0x000612ba movs r5, 0x20                                     |     r5 = 0x20;
    0x000612bc cmp r6, 0x51                                      |     
    0x000612be strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x000612c0 strh r0, [r4, r4]                                 |     *((r4 + r4)) = r0;
    0x000612c2 strb r5, [r0, r1]                                 |     *((r0 + r1)) = r5;
    0x000612c4 strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x000612c6 strb r1, [r7, 1]                                  |     *((r7 + 1)) = r1;
    0x000612c8 subs r5, 0x65                                     |     r5 -= 0x65;
    0x000612ca strb r7, [r4, 0x10]                               |     *((r4 + 0x10)) = r7;
    0x000612cc str r1, [r4, 0x24]                                |     *((r4 + 0x24)) = r1;
    0x000612ce str r4, [r5, 0x54]                                |     *((r5 + 0x54)) = r4;
    0x000612d0 cmp r4, 0x27                                      |     
    0x000612d2 ldr r0, [r4, 0x60]                                |     r0 = *(0x61410);
    0x000612d4 ldr r1, [r4, 0x54]                                |     r1 = *(0x61404);
    0x000612d6 subs r5, 0x65                                     |     r5 -= 0x65;
    0x000612d8 str r5, [r4, r4]                                  |     *((r4 + r4)) = r5;
    0x000612da movs r0, 0x2c                                     |     r0 = 0x2c;
    0x000612dc str r4, [r6, 0x24]                                |     *((r6 + 0x24)) = r4;
    0x000612de ldrsh r4, [r5, r5]                                |     r4 = *((r5 + r5));
    0x000612e0 str r6, [r5, 0x14]                                |     *((r5 + 0x14)) = r6;
    0x000612e2 str r5, [r5, 0x54]                                |     *((r5 + 0x54)) = r5;
    0x000612e4 movs r5, 0x3d                                     |     r5 = 0x3d;
    0x000612e6 cmp r4, 0x51                                      |     
    0x000612e8 strb r0, [r4, 8]                                  |     *((r4 + 8)) = r0;
    0x000612ea ldr r7, [r5, 0x74]                                |     r7 = *(0x613e4);
    0x000612ec strb r4, [r6, 1]                                  |     *((r6 + 1)) = r4;
    0x000612ee str r1, [r4, 0x74]                                |     *((r4 + 0x74)) = r1;
    0x000612f0 subs r5, 0x65                                     |     r5 -= 0x65;
    0x000612f2 cmp r4, 0x30                                      |     
    0x000612f4 strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x000612f6 ldr r1, [r6, 0x44]                                |     r1 = *(0x612e8);
    0x000612f8 movs r5, 0x3d                                     |     r5 = 0x3d;
    0x000612fa movs r0, 0x51                                     |     r0 = 0x51;
    0x000612fc ldr r0, [pc, 0x15c]                               |     r0 = *(0x6145c);
    0x000612fe strh r5, [r0, r1]                                 |     *((r0 + r1)) = r5;
    0x00061300 movs r0, 0x45                                     |     r0 = 0x45;
    0x00061302 ldr r2, [r6, 0x74]                                |     r2 = *(0x61318);
    0x00061304 ldr r7, [r6, 0x14]                                |     r7 = *(0x612b8);
    0x00061306 subs r5, 0x64                                     |     r5 -= 0x64;
    0x00061308 movs r5, 0x23                                     |     r5 = 0x23;
    0x0006130a lsls r4, r4, 1                                    |     r4 <<= 1;
    0x0006130c str r6, [r5, 0x14]                                |     *((r5 + 0x14)) = r6;
    0x0006130e str r5, [r5, 0x54]                                |     *((r5 + 0x54)) = r5;
    0x00061310 movs r7, 0x3d                                     |     r7 = 0x3d;
    0x00061312 strb r5, [r4, 4]                                  |     *((r4 + 4)) = r5;
    0x00061314 movs r0, 0x27                                     |     r0 = 0x27;
    0x00061316 ldr r6, [pc, 0x104]                               |     r6 = *(0x6141e);
    0x00061318 movs r0, 0x44                                     |     r0 = 0x44;
    0x0006131a ldrb r4, [r6, 5]                                  |     r4 = *((r6 + 5));
    0x0006131c str r0, [r6, 0x54]                                |     *((r6 + 0x54)) = r0;
    0x0006131e movs r7, 0x3d                                     |     r7 = 0x3d;
    0x00061320 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x00061322 ldr r2, [r4, 0x44]                                |     r2 = *(0x613f4);
    0x00061324 movs r7, 0x65                                     |     r7 = 0x65;
    0x00061326 movs r0, r0                                       |     
    0x00061328 str r1, [r4, 0x44]                                |     *((r4 + 0x44)) = r1;
    0x0006132a strb r4, [r4, 9]                                  |     *((r4 + 9)) = r4;
    0x0006132c movs r0, r0                                       |     
    0x0006132e movs r0, r0                                       |     
    0x00061330 str r3, [r6, 0x54]                                |     *((r6 + 0x54)) = r3;
    0x00061332 str r4, [r5, 0x54]                                |     *((r5 + 0x54)) = r4;
    0x00061334 strb r3, [r4, 0x11]                               |     *((r4 + 0x11)) = r3;
    0x00061336 str r1, [r5, 0x44]                                |     *((r5 + 0x44)) = r1;
    0x00061338 movs r0, r0                                       |     
    0x0006133a movs r0, r0                                       |     
    0x0006133c str r4, [r4, 0x14]                                |     *((r4 + 0x14)) = r4;
    0x0006133e str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x00061340 str r2, [r4, 0x14]                                |     *((r4 + 0x14)) = r2;
    0x00061342 str r3, [r6, 0x54]                                |     *((r6 + 0x54)) = r3;
    0x00061344 strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x00061346 ldr r3, [r4, 4]                                   |     r3 = *(0x613b4);
    0x00061348 ldr r5, [r4, 0x54]                                |     r5 = *(0x61404);
    0x0006134a movs r0, 0x61                                     |     r0 = 0x61;
    0x0006134c strb r1, [r5, 0xd]                                |     *((r5 + 0xd)) = r1;
    0x0006134e ldr r0, [r4, 0x40]                                |     r0 = *(0x613f0);
    0x00061350 str r7, [r5, 0x34]                                |     *((r5 + 0x34)) = r7;
    0x00061352 str r3, [r5, 0x54]                                |     *((r5 + 0x54)) = r3;
    0x00061354 subs r2, 0x64                                     |     r2 -= 0x64;
    0x00061356 movs r5, 0x20                                     |     r5 = 0x20;
    0x00061358 lsls r3, r6, 1                                    |     r3 = r6 << 1;
    0x0006135a movs r0, r0                                       |     
    0x0006135c strb r3, [r6, 0x11]                               |     *((r6 + 0x11)) = r3;
    0x0006135e strb r1, [r4, 0x11]                               |     *((r4 + 0x11)) = r1;
    0x00061360 ldr r5, [r4, 0x54]                                |     r5 = *(0x61404);
    0x00061362 ldr r5, [r4, 0x64]                                |     r5 = *(0x61414);
    0x00061364 movs r0, 0x74                                     |     r0 = 0x74;
    0x00061366 ldr r4, [r6, 0x74]                                |     r4 = *(0x61492);
    0x00061368 movs r0, 0x6f                                     |     r0 = 0x6f;
    0x0006136a ldr r4, [r5, 0x74]                                |     r4 = *(0x61488);
    0x0006136c str r6, [r5, 0x74]                                |     *((r5 + 0x74)) = r6;
    0x0006136e movs r0, r0                                       |     
    0x00061370 ldr r1, [r5, 0x64]                                |     r1 = *(0x61478);
    0x00061372 str r6, [r6, 0x14]                                |     *((r6 + 0x14)) = r6;
    0x00061374 ldr r4, [r5, 0x14]                                |     r4 = *(0x61428);
    0x00061376 movs r0, 0x64                                     |     r0 = 0x64;
    0x00061378 ldr r2, [r6, 0x74]                                |     r2 = *(0x61492);
    0x0006137a strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x0006137c str r0, [r6, 0x14]                                |     *((r6 + 0x14)) = r0;
    0x0006137e str r7, [r4, 0x54]                                |     *((r4 + 0x54)) = r7;
    0x00061380 movs r0, r0                                       |     
    0x00061382 movs r0, r0                                       |     
    0x00061384 cmp r3, sl                                        |     
    0x00061386 cmp r4, sb                                        |     
    0x00061388 strb r3, [r0, r1]                                 |     *((r0 + r1)) = r3;
    0x0006138a strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x0006138c ldr r2, [r4, 0x44]                                |     r2 = *(0x6146c);
    0x0006138e ldr r4, [r5, 0x10]                                |     r4 = *(0x61424);
    0x00061390 ldrb r4, [r4, 1]                                  |     r4 = *((r4 + 1));
    0x00061392 strb r4, [r5, 0xc]                                |     *((r5 + 0xc)) = r4;
    0x00061394 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x00061396 movs r0, 0x74                                     |     r0 = 0x74;
    0x00061398 strh r6, [r0, r1]                                 |     *((r0 + r1)) = r6;
    0x0006139a ldr r5, [pc, 0x13c]                               |     
    0x0006139c movs r5, 0x20                                     |     r5 = 0x20;
    0x0006139e cmp r6, 0x51                                      |     
    0x000613a0 strb r3, [r6, 5]                                  |     *((r6 + 5)) = r3;
    0x000613a2 ldr r4, [r5, 0x14]                                |     r4 = *(0x614ee);
    0x000613a4 str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x000613a6 strb r7, [r3, 0xd]                                |     *((r3 + 0xd)) = r7;
    0x000613a8 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x000613aa adds r1, 0x74                                     |     r1 += 0x74;
    0x000613ac movs r0, r0                                       |     
    0x000613ae movs r0, r0                                       |     
    0x000613b0 str r3, [r4, 0x14]                                |     *((r4 + 0x14)) = r3;
    0x000613b2 ldr r6, [r5, 0x64]                                |     r6 = *(0x6153e);
    0x000613b4 strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x000613b6 str r0, [r4, 0x30]                                |     *((r4 + 0x30)) = r0;
    0x000613b8 ldr r7, [r5, 0x54]                                |     r7 = *(0x6152e);
    0x000613ba ldr r5, [r5, 0x14]                                |     r5 = *(0x614ee);
    0x000613bc movs r0, 0x74                                     |     r0 = 0x74;
    0x000613be movs r0, 0x2d                                     |     r0 = 0x2d;
    0x000613c0 ldr r6, [r5, 0x74]                                |     r6 = *(0x61562);
    0x000613c2 strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x000613c4 str r2, [r6, 0x14]                                |     *((r6 + 0x14)) = r2;
    0x000613c6 strb r6, [r5, 0xd]                                |     *((r5 + 0xd)) = r6;
    0x000613c8 str r1, [r4, 0x34]                                |     *((r4 + 0x34)) = r1;
    0x000613ca ldr r4, [r6, 0x14]                                |     r4 = *(0x61576);
    0x000613cc ldr r7, [r5, 0x64]                                |     r7 = *(0x61552);
    0x000613ce ldr r0, [r4, 0x10]                                |     r0 = *(0x61586);
    0x000613d0 movs r0, 0x73                                     |     r0 = 0x73;
    0x000613d2 str r1, [r4, 0x34]                                |     *((r4 + 0x34)) = r1;
    0x000613d4 ldr r4, [r6, 0x14]                                |     r4 = *(0x61576);
    0x000613d6 str r6, [r6, 0x54]                                |     *((r6 + 0x54)) = r6;
    0x000613d8 movs r0, r0                                       |     
    0x000613da movs r0, r0                                       |     
    0x000613dc str r3, [r4, 0x14]                                |     *((r4 + 0x14)) = r3;
    0x000613de ldr r6, [r5, 0x64]                                |     r6 = *(0x61552);
    0x000613e0 strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x000613e2 strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x000613e4 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x000613e6 strb r2, [r6, 0x11]                               |     *((r6 + 0x11)) = r2;
    0x000613e8 str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x000613ea strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x000613ec str r2, [r6, 0x14]                                |     *((r6 + 0x14)) = r2;
    0x000613ee strb r6, [r5, 0xd]                                |     *((r5 + 0xd)) = r6;
    0x000613f0 str r1, [r4, 0x34]                                |     *((r4 + 0x34)) = r1;
    0x000613f2 ldr r4, [r6, 0x14]                                |     r4 = *(0x61566);
    0x000613f4 ldr r7, [r5, 0x64]                                |     r7 = *(0x61552);
    0x000613f6 strb r0, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r0;
    0x000613f8 strb r1, [r5, 0x11]                               |     *((r5 + 0x11)) = r1;
    0x000613fa ldr r0, [r5, 0x14]                                |     r0 = *(0x61502);
    0x000613fc movs r0, 0x6e                                     |     r0 = 0x6e;
    0x000613fe movs r0, 0x61                                     |     r0 = 0x61;
    0x00061400 strb r4, [r6, 9]                                  |     *((r6 + 9)) = r4;
    0x00061402 ldr r1, [r4, 0x64]                                |     r1 = *(0x615ca);
    0x00061404 str r3, [r6, 0x14]                                |     *((r6 + 0x14)) = r3;
    0x00061406 strb r3, [r4, 0x11]                               |     *((r4 + 0x11)) = r3;
    0x00061408 ldr r1, [r5, 0x74]                                |     r1 = *(0x61562);
    0x0006140a lsls r6, r5, 1                                    |     r6 = r5 << 1;
    0x0006140c str r3, [r4, 0x14]                                |     *((r4 + 0x14)) = r3;
    0x0006140e ldr r6, [r5, 0x64]                                |     r6 = *(0x61552);
    0x00061410 strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x00061412 strb r0, [r4, 8]                                  |     *((r4 + 8)) = r0;
    0x00061414 ldr r7, [r5, 0x44]                                |     r7 = *(0x61532);
    0x00061416 str r4, [r5, 0x24]                                |     *((r5 + 0x24)) = r4;
    0x00061418 str r1, [r4, 0x34]                                |     *((r4 + 0x34)) = r1;
    0x0006141a movs r0, 0x6b                                     |     r0 = 0x6b;
    0x0006141c movs r0, 0x2d                                     |     r0 = 0x2d;
    0x0006141e ldr r6, [r5, 0x74]                                |     r6 = *(0x61562);
    0x00061420 strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x00061422 str r2, [r6, 0x14]                                |     *((r6 + 0x14)) = r2;
    0x00061424 strb r6, [r5, 0xd]                                |     *((r5 + 0xd)) = r6;
    0x00061426 str r1, [r4, 0x34]                                |     *((r4 + 0x34)) = r1;
    0x00061428 ldr r4, [r6, 0x14]                                |     r4 = *(0x61576);
    0x0006142a ldr r7, [r5, 0x64]                                |     r7 = *(0x61552);
    0x0006142c ldr r0, [r4, 0x10]                                |     r0 = *(0x61586);
    0x0006142e movs r0, 0x73                                     |     r0 = 0x73;
    0x00061430 str r1, [r4, 0x34]                                |     *((r4 + 0x34)) = r1;
    0x00061432 ldr r4, [r6, 0x14]                                |     r4 = *(0x61576);
    0x00061434 str r6, [r6, 0x54]                                |     *((r6 + 0x54)) = r6;
    0x00061436 movs r0, r0                                       |     
    0x00061438 strb r7, [r5, 0x15]                               |     *((r5 + 0x15)) = r7;
    0x0006143a movs r0, 0x74                                     |     r0 = 0x74;
    0x0006143c str r7, [r5, 0x64]                                |     *((r5 + 0x64)) = r7;
    0x0006143e movs r0, r0                                       |     
    0x00061440 ldr r1, [r5, 0x64]                                |     r1 = *(0x61552);
    0x00061442 ldr r4, [r6, 0x74]                                |     r4 = *(0x615d6);
    0x00061444 movs r0, r0                                       |     
    0x00061446 movs r0, r0                                       |     
    0x00061448 strb r1, [r0, r1]                                 |     *((r0 + r1)) = r1;
    0x0006144a adcs r4, r2                                       |     __asm ("adcs r4, r2");
    0x0006144c ldr r0, [pc, 0x10c]                               |     r0 = "cannot commit transaction - SQL statements in progress";
    0x0006144e movs r7, 0x20                                     |     r7 = 0x20;
    0x00061450 ldr r2, [r7, 0x50]                                |     r2 = *(0x615a2);
    0x00061452 ldr r5, [r4, 0x54]                                |     r5 = *(0x6162a);
    0x00061454 strb r7, [r5, 9]                                  |     *((r5 + 9)) = r7;
    0x00061456 subs r2, 0x79                                     |     r2 -= 0x79;
    0x00061458 movs r0, 0x27                                     |     r0 = 0x27;
    0x0006145a strh r1, [r0, r5]                                 |     *((r0 + r5)) = r1;
    0x0006145c strb r0, [r4, 0x18]                               |     *((r4 + 0x18)) = r0;
    0x0006145e str r1, [r4, 0x34]                                |     *((r4 + 0x34)) = r1;
    0x00061460 strb r5, [r6, 0x15]                               |     *((r6 + 0x15)) = r5;
    0x00061462 ldrsh r5, [r5, r5]                                |     r5 = *((r5 + r5));
    0x00061464 str r4, [r4, 0x24]                                |     *((r4 + 0x24)) = r4;
    0x00061466 movs r3, r7                                       |     r3 = r7;
    0x00061468 strb r1, [r0, r1]                                 |     *((r0 + r1)) = r1;
    0x0006146a adcs r4, r2                                       |     __asm ("adcs r4, r2");
    0x0006146c ldr r0, [pc, 0x10c]                               |     r0 = *(0x6157c);
    0x0006146e movs r7, 0x20                                     |     r7 = 0x20;
    0x00061470 movs r0, 0x27                                     |     r0 = 0x27;
    0x00061472 strh r1, [r0, r5]                                 |     *((r0 + r5)) = r1;
    0x00061474 strb r0, [r4, 0x18]                               |     *((r4 + 0x18)) = r0;
    0x00061476 str r1, [r4, 0x34]                                |     *((r4 + 0x34)) = r1;
    0x00061478 strb r5, [r6, 0x15]                               |     *((r6 + 0x15)) = r5;
    0x0006147a ldrsh r5, [r5, r5]                                |     r5 = *((r5 + r5));
    0x0006147c str r4, [r4, 0x24]                                |     *((r4 + 0x24)) = r4;
    0x0006147e movs r3, r7                                       |     r3 = r7;
    0x00061480 str r4, [r4, 0x14]                                |     *((r4 + 0x14)) = r4;
    0x00061482 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x00061484 str r2, [r4, 0x14]                                |     *((r4 + 0x14)) = r2;
    0x00061486 str r3, [r6, 0x54]                                |     *((r6 + 0x54)) = r3;
    0x00061488 str r0, [r4, 0x40]                                |     *((r4 + 0x40)) = r0;
    0x0006148a strb r1, [r5, 0xd]                                |     *((r5 + 0xd)) = r1;
    0x0006148c movs r0, 0x6b                                     |     r0 = 0x6b;
    0x0006148e ldr r1, [r5, 0x54]                                |     r1 = *(0x6167e);
    0x00061490 str r1, [r4, 0x74]                                |     *((r4 + 0x74)) = r1;
    0x00061492 movs r0, 0x65                                     |     r0 = 0x65;
    0x00061494 strb r1, [r5, 0xd]                                |     *((r5 + 0xd)) = r1;
    0x00061496 ldr r0, [r4, 0x50]                                |     r0 = *(0x61626);
    0x00061498 ldr r1, [r4, 0x44]                                |     r1 = *(0x6161a);
    0x0006149a ldr r6, [r4, 0x74]                                |     r6 = *(0x6164a);
    0x0006149c ldr r2, [r6, 0x54]                                |     r2 = *(0x6169e);
    0x0006149e str r5, [r4, 0x44]                                |     *((r4 + 0x44)) = r5;
    0x000614a0 movs r0, r0                                       |     
    0x000614a2 movs r0, r0                                       |     
    0x000614a4 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x000614a6 str r0, [r4, 0x30]                                |     *((r4 + 0x30)) = r0;
    0x000614a8 ldr r7, [r5, 0x64]                                |     r7 = *(0x6168e);
    0x000614aa strb r3, [r6, 0x11]                               |     *((r6 + 0x11)) = r3;
    0x000614ac str r2, [r6, 0x14]                                |     *((r6 + 0x14)) = r2;
    0x000614ae ldr r1, [r5, 0x64]                                |     r1 = *(0x6168e);
    0x000614b0 movs r0, 0x74                                     |     r0 = 0x74;
    0x000614b2 str r6, [r4, 0x14]                                |     *((r4 + 0x14)) = r6;
    0x000614b4 ldr r1, [r5, 0x44]                                |     r1 = *(0x6166e);
    0x000614b6 str r5, [r4, 0x44]                                |     *((r4 + 0x44)) = r5;
    0x000614b8 movs r0, 0x3a                                     |     r0 = 0x3a;
    0x000614ba strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x000614bc movs r0, r0                                       |     
    0x000614be movs r0, r0                                       |     
    0x000614c0 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x000614c2 str r0, [r4, 0x30]                                |     *((r4 + 0x30)) = r0;
    0x000614c4 ldr r7, [r5, 0x64]                                |     r7 = *(0x6168e);
    0x000614c6 strb r3, [r6, 0x11]                               |     *((r6 + 0x11)) = r3;
    0x000614c8 str r2, [r6, 0x14]                                |     *((r6 + 0x14)) = r2;
    0x000614ca ldr r1, [r5, 0x64]                                |     r1 = *(0x6168e);
    0x000614cc movs r0, 0x74                                     |     r0 = 0x74;
    0x000614ce str r6, [r4, 0x14]                                |     *((r4 + 0x14)) = r6;
    0x000614d0 ldr r1, [r5, 0x44]                                |     r1 = *(0x6166e);
    0x000614d2 str r5, [r4, 0x44]                                |     *((r4 + 0x44)) = r5;
    0x000614d4 movs r0, r0                                       |     
    0x000614d6 movs r0, r0                                       |     
    0x000614d8 str r1, [r4, 0x24]                                |     *((r4 + 0x24)) = r1;
    0x000614da strb r7, [r5, 9]                                  |     *((r5 + 9)) = r7;
    0x000614dc movs r0, 0x74                                     |     r0 = 0x74;
    0x000614de strb r1, [r4, 0x11]                               |     *((r4 + 0x11)) = r1;
    0x000614e0 movs r5, 0x20                                     |     r5 = 0x20;
    0x000614e2 movs r0, 0x64                                     |     r0 = 0x64;
    0x000614e4 ldr r1, [r5, 0x64]                                |     r1 = *(0x6168e);
    0x000614e6 ldrh r0, [r4, r4]                                 |     r0 = *((r4 + r4));
    0x000614e8 strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x000614ea subs r2, 0x5d                                     |     r2 -= 0x5d;
    0x000614ec movs r5, 0x20                                     |     r5 = 0x20;
    0x000614ee lsls r3, r6, 1                                    |     r3 = r6 << 1;
    0x000614f0 str r3, [r4, 0x14]                                |     *((r4 + 0x14)) = r3;
    0x000614f2 ldr r6, [r5, 0x64]                                |     r6 = *(0x6168e);
    0x000614f4 strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x000614f6 ldr r0, [r4, 0x70]                                |     r0 = *(0x61646);
    0x000614f8 str r0, [r6, 0x54]                                |     *((r6 + 0x54)) = r0;
    0x000614fa movs r0, 0x6e                                     |     r0 = 0x6e;
    0x000614fc str r3, [r6, 0x14]                                |     *((r6 + 0x14)) = r3;
    0x000614fe str r6, [r6, 0x54]                                |     *((r6 + 0x54)) = r6;
    0x00061500 ldr r0, [r6, 0x74]                                |     r0 = *(0x61702);
    0x00061502 ldr r1, [r5, 0x64]                                |     r1 = *(0x6168e);
    0x00061504 movs r0, 0x74                                     |     r0 = 0x74;
    0x00061506 movs r0, 0x2d                                     |     r0 = 0x2d;
    0x00061508 str r3, [r2, r5]                                  |     *((r2 + r5)) = r3;
    0x0006150a movs r0, 0x4c                                     |     r0 = 0x4c;
    0x0006150c strb r3, [r6, 0x11]                               |     *((r6 + 0x11)) = r3;
    0x0006150e strb r1, [r4, 0x11]                               |     *((r4 + 0x11)) = r1;
    0x00061510 ldr r5, [r4, 0x54]                                |     r5 = *(0x6162a);
    0x00061512 ldr r5, [r4, 0x64]                                |     r5 = *(0x6163a);
    0x00061514 strb r4, [r6, 0xd]                                |     *((r6 + 0xd)) = r4;
    0x00061516 ldr r0, [r4, 0x10]                                |     r0 = *(0x615e6);
    0x00061518 movs r0, 0x6e                                     |     r0 = 0x6e;
    0x0006151a strb r0, [r6, 9]                                  |     *((r6 + 9)) = r0;
    0x0006151c str r7, [r5, 0x74]                                |     *((r5 + 0x74)) = r7;
    0x0006151e str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x00061520 strb r3, [r6, 0xd]                                |     *((r6 + 0xd)) = r3;
    0x00061522 movs r0, r0                                       |     
    0x00061524 str r3, [r4, 0x14]                                |     *((r4 + 0x14)) = r3;
    0x00061526 ldr r6, [r5, 0x64]                                |     r6 = *(0x6169e);
    0x00061528 strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x0006152a strb r0, [r4, 8]                                  |     *((r4 + 8)) = r0;
    0x0006152c ldr r5, [r4, 0x44]                                |     
    0x0006152e str r5, [r4, 0x14]                                |     *((r4 + 0x14)) = r5;
    0x00061530 str r3, [r6, 0x54]                                |     *((r6 + 0x54)) = r3;
    0x00061532 strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x00061534 strb r1, [r4, 0x19]                               |     *((r4 + 0x19)) = r1;
    0x00061536 strb r5, [r4, 1]                                  |     *((r4 + 1)) = r5;
    0x00061538 ldr r7, [r5, 0x14]                                |     r7 = *(0x6162e);
    0x0006153a strb r6, [r5, 0x11]                               |     *((r5 + 0x11)) = r6;
    0x0006153c cmp r5, 0x20                                      |     
    0x0006153e strh r0, [r4, r4]                                 |     *((r4 + r4)) = r0;
    0x00061540 ldr r4, [pc, 0x144]                               |     r4 = *(0x61688);
    0x00061542 strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x00061544 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x00061546 str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x00061548 str r5, [r5, 0x54]                                |     *((r5 + 0x54)) = r5;
    0x0006154a strb r6, [r5, 0x11]                               |     *((r5 + 0x11)) = r6;
    0x0006154c movs r0, 0x73                                     |     r0 = 0x73;
    0x0006154e ldr r1, [r5, 0x64]                                |     r1 = *(0x6167e);
    0x00061550 strb r0, [r4]                                     |     *(r4) = r0;
    0x00061552 ldr r2, [r6, 0x74]                                |     r2 = *(0x61712);
    0x00061554 strb r7, [r4, 9]                                  |     *((r4 + 9)) = r7;
    0x00061556 strb r5, [r4, 0xd]                                |     *((r4 + 0xd)) = r5;
    0x00061558 lsls r3, r6, 1                                    |     r3 = r6 << 1;
    0x0006155a movs r0, r0                                       |     
    0x0006155c str r3, [r4, 0x14]                                |     *((r4 + 0x14)) = r3;
    0x0006155e ldr r6, [r5, 0x64]                                |     r6 = *(0x6167e);
    0x00061560 strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x00061562 str r0, [r4, 0x30]                                |     *((r4 + 0x30)) = r0;
    0x00061564 ldr r7, [r5, 0x54]                                |     r7 = *(0x6166e);
    0x00061566 ldr r5, [r5, 0x14]                                |     r5 = *(0x6162e);
    0x00061568 movs r0, 0x74                                     |     r0 = 0x74;
    0x0006156a strb r4, [r6, 9]                                  |     *((r6 + 9)) = r4;
    0x0006156c ldr r1, [r4, 0x64]                                |     r1 = *(0x616ec);
    0x0006156e str r3, [r6, 0x14]                                |     *((r6 + 0x14)) = r3;
    0x00061570 strb r3, [r4, 0x11]                               |     *((r4 + 0x11)) = r3;
    0x00061572 ldr r1, [r5, 0x74]                                |     r1 = *(0x616a2);
    0x00061574 movs r0, 0x6e                                     |     r0 = 0x6e;
    0x00061576 movs r0, 0x2d                                     |     r0 = 0x2d;
    0x00061578 str r3, [r2, r5]                                  |     *((r2 + r5)) = r3;
    0x0006157a movs r0, 0x4c                                     |     r0 = 0x4c;
    0x0006157c strb r3, [r6, 0x11]                               |     *((r6 + 0x11)) = r3;
    0x0006157e strb r1, [r4, 0x11]                               |     *((r4 + 0x11)) = r1;
    0x00061580 ldr r5, [r4, 0x54]                                |     r5 = *(0x616dc);
    0x00061582 ldr r5, [r4, 0x64]                                |     r5 = *(0x616ec);
    0x00061584 strb r4, [r6, 0xd]                                |     *((r6 + 0xd)) = r4;
    0x00061586 ldr r0, [r4, 0x10]                                |     r0 = *(0x61698);
    0x00061588 movs r0, 0x6e                                     |     r0 = 0x6e;
    0x0006158a strb r0, [r6, 9]                                  |     *((r6 + 9)) = r0;
    0x0006158c str r7, [r5, 0x74]                                |     *((r5 + 0x74)) = r7;
    0x0006158e str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x00061590 strb r3, [r6, 0xd]                                |     *((r6 + 0xd)) = r3;
    0x00061592 movs r0, r0                                       |     
    0x00061594 str r4, [r4, 0x14]                                |     *((r4 + 0x14)) = r4;
    0x00061596 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x00061598 str r2, [r4, 0x14]                                |     *((r4 + 0x14)) = r2;
    0x0006159a str r3, [r6, 0x54]                                |     *((r6 + 0x54)) = r3;
    0x0006159c strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x0006159e ldr r3, [r4, 4]                                   |     r3 = *(0x6168c);
    0x000615a0 ldr r5, [r4, 0x54]                                |     r5 = *(0x616dc);
    0x000615a2 movs r0, 0x61                                     |     r0 = 0x61;
    0x000615a4 str r0, [r5, 0x14]                                |     *((r5 + 0x14)) = r0;
    0x000615a6 movs r0, 0x73                                     |     r0 = 0x73;
    0x000615a8 ldr r3, [r4, 4]                                   |     r3 = *(0x6168c);
    0x000615aa ldr r1, [r4, 0x64]                                |     r1 = *(0x616ec);
    0x000615ac str r7, [r4, 0x54]                                |     *((r4 + 0x54)) = r7;
    0x000615ae lsls r4, r4, 1                                    |     r4 <<= 1;
    0x000615b0 cmp r3, sl                                        |     
    0x000615b2 cmp r4, sb                                        |     
    0x000615b4 strb r3, [r0, r1]                                 |     *((r0 + r1)) = r3;
    0x000615b6 ldr r0, [r4, 0x60]                                |     r0 = *(0x616e8);
    0x000615b8 ldr r1, [r4, 0x54]                                |     r1 = *(0x616dc);
    0x000615ba cmp r4, 0x65                                      |     
    0x000615bc strb r0, [r4, 8]                                  |     *((r4 + 8)) = r0;
    0x000615be ldr r7, [r5, 0x74]                                |     r7 = *(0x61750);
    0x000615c0 strb r4, [r6, 1]                                  |     *((r6 + 1)) = r4;
    0x000615c2 str r1, [r4, 0x74]                                |     *((r4 + 0x74)) = r1;
    0x000615c4 cmp r4, 0x65                                      |     
    0x000615c6 strb r0, [r4, 0xc]                                |     *((r4 + 0xc)) = r0;
    0x000615c8 ldr r1, [r6, 0x44]                                |     r1 = *(0x616c2);
    0x000615ca mov r0, r4                                        |     r0 = r4;
    0x000615cc ldr r7, [pc, 0x148]                               |     r7 = "cannot VACUUM - SQL statements in progress";
    0x000615ce movs r0, 0x4d                                     |     r0 = 0x4d;
    0x000615d0 movs r5, 0x27                                     |     r5 = 0x27;
    0x000615d2 movs r7, 0x71                                     |     r7 = 0x71;
    0x000615d4 movs r5, 0x2e                                     |     r5 = 0x2e;
    0x000615d6 movs r0, 0x73                                     |     r0 = 0x73;
    0x000615d8 ldr r0, [pc, 0x15c]                               |     r0 = *(0x61738);
    0x000615da strh r5, [r0, r1]                                 |     *((r0 + r1)) = r5;
    0x000615dc movs r0, 0x45                                     |     r0 = 0x45;
    0x000615de strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x000615e0 ldr r7, [pc, 0x80]                                |     r7 = *(0x61664);
    0x000615e2 add r2, sl                                        |     r2 += sl;
    0x000615e4 strh r5, [r0, r1]                                 |     *((r0 + r1)) = r5;
    0x000615e6 tst r0, r4                                        |     
    0x000615e8 movs r0, 0x59                                     |     r0 = 0x59;
    0x000615ea ldr r2, [r6, 0x74]                                |     r2 = *(0x616f2);
    0x000615ec ldr r7, [r6, 0x14]                                |     r7 = *(0x61692);
    0x000615ee lsls r4, r4, 1                                    |     r4 <<= 1;
    0x000615f0 str r5, [r1, 0x14]                                |     *((r1 + 0x14)) = r5;
    0x000615f2 ldr r1, [r5, 0x64]                                |     r1 = *(0x61740);
    0x000615f4 str r0, [r4, 0x60]                                |     *((r4 + 0x60)) = r0;
    0x000615f6 str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x000615f8 ldr r5, [r4, 0x44]                                |     r5 = *(0x616cc);
    0x000615fa strb r1, [r5, 0xd]                                |     *((r5 + 0xd)) = r1;
    0x000615fc subs r2, 0x74                                     |     r2 -= 0x74;
    0x000615fe movs r0, r4                                       |     r0 = r4;
    0x00061600 ldr r4, [r1, 0x14]                                |     r4 = *(0x61754);
    0x00061602 strb r3, [r6, 0x11]                               |     *((r6 + 0x11)) = r3;
    0x00061604 ldr r0, [r4, 0x70]                                |     r0 = *(0x617c4);
    0x00061606 movs r0, 0x66                                     |     r0 = 0x66;
    0x00061608 strb r4, [r6, 9]                                  |     *((r6 + 9)) = r4;
    0x0006160a str r5, [r4, 0x54]                                |     *((r4 + 0x54)) = r5;
    0x0006160c strb r0, [r4, 8]                                  |     *((r4 + 8)) = r0;
    0x0006160e ldr r7, [r5, 0x74]                                |     r7 = *(0x61740);
    0x00061610 strb r4, [r6, 0xd]                                |     *((r6 + 0xd)) = r4;
    0x00061612 movs r0, 0x3a                                     |     r0 = 0x3a;
    0x00061614 movs r0, r0                                       |     
    0x00061616 movs r0, r0                                       |     
    0x00061618 movs r0, r0                                       |     
    0x0006161a movs r0, r0                                       |     
    0x0006161c movs r5, 0x20                                     |     r5 = 0x20;
    0x0006161e movs r0, 0x64                                     |     r0 = 0x64;
    0x00061620 strb r1, [r5, 0xd]                                |     *((r5 + 0xd)) = r1;
    0x00061622 ldr r0, [r4, 0x60]                                |     r0 = *(0x617b4);
    0x00061624 strb r5, [r4, 0x19]                               |     *((r4 + 0x19)) = r5;
    0x00061626 strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x00061628 strb r0, [r4, 0x14]                               |     *((r4 + 0x14)) = r0;
    0x0006162a str r3, [r6, 0x54]                                |     *((r6 + 0x54)) = r3;
    0x0006162c lsls r4, r4, 1                                    |     r4 <<= 1;
    0x0006162e movs r0, r0                                       |     
    0x00061630 ldr r0, [r2, 0x74]                                |     r0 = *(0x61766);
    0x00061632 ldr r1, [r5, 0x64]                                |     r1 = *(0x61730);
    0x00061634 str r4, [r6, 0x54]                                |     *((r6 + 0x54)) = r4;
    0x00061636 movs r0, 0x72                                     |     r0 = 0x72;
    0x00061638 str r5, [r5, 0x14]                                |     *((r5 + 0x14)) = r5;
    0x0006163a movs r0, 0x70                                     |     r0 = 0x70;
    0x0006163c str r0, [r6, 0x14]                                |     *((r6 + 0x14)) = r0;
    0x0006163e str r7, [r4, 0x54]                                |     *((r4 + 0x54)) = r7;
    0x00061640 movs r5, 0x20                                     |     r5 = 0x20;
    0x00061642 movs r0, 0x64                                     |     r0 = 0x64;
    0x00061644 strb r1, [r5, 0xd]                                |     *((r5 + 0xd)) = r1;
    0x00061646 strb r0, [r4, 8]                                  |     *((r4 + 8)) = r0;
    0x00061648 str r5, [r4, 0x64]                                |     *((r4 + 0x64)) = r5;
    0x0006164a strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x0006164c ldr r5, [r4, 0x64]                                |     r5 = *(0x617b8);
    0x0006164e str r3, [r4, 0x54]                                |     *((r4 + 0x54)) = r3;
    0x00061650 lsls r4, r4, 1                                    |     r4 <<= 1;
    0x00061652 movs r0, r0                                       |     
    0x00061654 strb r7, [r1, 0x15]                               |     *((r1 + 0x15)) = r7;
    0x00061656 strb r4, [r6, 0xd]                                |     *((r6 + 0xd)) = r4;
    0x00061658 str r4, [r6, 0x14]                                |     *((r6 + 0x14)) = r4;
    0x0006165a str r6, [r5, 0x44]                                |     *((r5 + 0x44)) = r6;
    0x0006165c ldr r1, [r5, 0x64]                                |     r1 = *(0x6181c);
    0x0006165e movs r0, 0x67                                     |     r0 = 0x67;
    0x00061660 str r0, [r6, 0x14]                                |     *((r6 + 0x14)) = r0;
    0x00061662 str r7, [r4, 0x54]                                |     *((r4 + 0x54)) = r7;
    0x00061664 str r0, [r4, 0x30]                                |     *((r4 + 0x30)) = r0;
    0x00061666 strb r7, [r5, 0x15]                               |     *((r5 + 0x15)) = r7;
    0x00061668 strb r6, [r5, 0x11]                               |     *((r5 + 0x11)) = r6;
    0x0006166a str r0, [r4, 0x70]                                |     *((r4 + 0x70)) = r0;
    0x0006166c str r7, [r5, 0x54]                                |     *((r5 + 0x54)) = r7;
    0x0006166e movs r0, 0x73                                     |     r0 = 0x73;
    0x00061670 strb r6, [r4, 9]                                  |     *((r4 + 9)) = r6;
    0x00061672 ldr r7, [r5, 0x54]                                |     r7 = *(0x6180c);
    0x00061674 movs r5, 0x20                                     |     r5 = 0x20;
    0x00061676 movs r0, 0x64                                     |     r0 = 0x64;
    0x00061678 ldr r4, [r6, 0x74]                                |     r4 = *(0x616f2);
    0x0006167a movs r5, 0x20                                     |     r5 = 0x20;
    0x0006167c movs r0, 0x64                                     |     r0 = 0x64;
    0x0006167e strb r4, [r4, 0x15]                               |     *((r4 + 0x15)) = r4;
    0x00061680 ldr r2, [r6, 0x14]                                |     r2 = *(0x61692);
    0x00061682 str r6, [r5, 0x74]                                |     *((r5 + 0x74)) = r6;
    0x00061684 strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x00061686 ldr r0, [r5, 0x14]                                |     r0 = *(0x617cc);
    0x00061688 movs r0, 0x73                                     |     r0 = 0x73;
    0x0006168a ldr r1, [r4, 0x64]                                |     r1 = *(0x61756);
    0x0006168c ldr r1, [r4, 0x44]                                |     r1 = *(0x61736);
    0x0006168e strb r1, [r7, 0xd]                                |     *((r7 + 0xd)) = r1;
    0x00061690 strb r1, [r5, 0xd]                                |     *((r5 + 0xd)) = r1;
    0x00061692 movs r0, r0                                       |     
    0x00061694 ldr r4, [r6, 0x74]                                |     r4 = *(0x616f2);
    0x00061696 movs r0, 0x6f                                     |     r0 = 0x6f;
    0x00061698 str r5, [r5, 0x14]                                |     *((r5 + 0x14)) = r5;
    0x0006169a ldrb r6, [r5, 5]                                  |     r6 = *((r5 + 5));
    0x0006169c ldr r0, [r4, 0x40]                                |     r0 = *(0x61732);
    0x0006169e strb r5, [r4, 0x19]                               |     *((r4 + 0x19)) = r5;
    0x000616a0 ldr r5, [r4, 0x44]                                |     r5 = *(0x61736);
    0x000616a2 movs r0, 0x73                                     |     r0 = 0x73;
    0x000616a4 str r7, [r5, 0x64]                                |     *((r5 + 0x64)) = r7;
    0x000616a6 strb r0, [r4, 0x10]                               |     *((r4 + 0x10)) = r0;
    0x000616a8 ldr r2, [r6, 0x14]                                |     r2 = *(0x61692);
    0x000616aa str r7, [r4, 0x74]                                |     *((r4 + 0x74)) = r7;
    0x000616ac strb r5, [r4, 9]                                  |     *((r4 + 9)) = r5;
    0x000616ae strb r0, [r4, 8]                                  |     *((r4 + 8)) = r0;
    0x000616b0 str r5, [r4, 0x34]                                |     *((r4 + 0x34)) = r5;
    0x000616b2 strb r5, [r6, 9]                                  |     *((r6 + 9)) = r5;
    0x000616b4 ldr r3, [r6, 0x14]                                |     r3 = *(0x61692);
    0x000616b6 ldr r7, [r5, 0x64]                                |     r7 = *(0x6179a);
    0x000616b8 movs r0, r0                                       |     
    0x000616ba movs r0, r0                                       |     
    0x000616bc str r3, [r4, 0x14]                                |     *((r4 + 0x14)) = r3;
    0x000616be ldr r6, [r5, 0x64]                                |     r6 = *(0x6179a);
    0x000616c0 strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x000616c2 str r0, [r4, 0x30]                                |     *((r4 + 0x30)) = r0;
    0x000616c4 str r0, [r5, 0x14]                                |     *((r5 + 0x14)) = r0;
    0x000616c6 str r6, [r5, 0x74]                                |     *((r5 + 0x74)) = r6;
    0x000616c8 movs r0, 0x65                                     |     r0 = 0x65;
    0x000616ca strb r5, [r4, 0xc]                                |     *((r4 + 0xc)) = r5;
    0x000616cc strb r0, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r0;
    0x000616ce ldr r1, [r4, 0x44]                                |     r1 = *(0x61736);
    0x000616d0 ldr r0, [r4, 0x50]                                |     r0 = *(0x61742);
    0x000616d2 str r7, [r5, 0x44]                                |     *((r5 + 0x44)) = r7;
    0x000616d4 movs r0, 0x65                                     |     r0 = 0x65;
    0x000616d6 strb r6, [r4, 9]                                  |     *((r4 + 9)) = r6;
    0x000616d8 ldr r7, [r5, 0x54]                                |     r7 = *(0x6178a);
    0x000616da strb r0, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r0;
    0x000616dc strb r1, [r5, 0x11]                               |     *((r5 + 0x11)) = r1;
    0x000616de ldr r0, [r5, 0x14]                                |     r0 = *(0x6174a);
    0x000616e0 movs r0, 0x6e                                     |     r0 = 0x6e;
    0x000616e2 movs r0, 0x61                                     |     r0 = 0x61;
    0x000616e4 strb r4, [r6, 9]                                  |     *((r6 + 9)) = r4;
    0x000616e6 ldr r1, [r4, 0x64]                                |     r1 = *(0x61756);
    0x000616e8 str r3, [r6, 0x14]                                |     *((r6 + 0x14)) = r3;
    0x000616ea strb r3, [r4, 0x11]                               |     *((r4 + 0x11)) = r3;
    0x000616ec ldr r1, [r5, 0x74]                                |     r1 = *(0x617aa);
    0x000616ee lsls r6, r5, 1                                    |     r6 = r5 << 1;
    0x000616f0 str r3, [r4, 0x14]                                |     *((r4 + 0x14)) = r3;
    0x000616f2 ldr r6, [r5, 0x64]                                |     r6 = *(0x6179a);
    0x000616f4 strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x000616f6 ldrsb r0, [r4, r0]                                |     r0 = *((r4 + r0));
    0x000616f8 muls r1, r0, r1                                   |     r1 = r0 * r1;
    0x000616fa strb r5, [r2, r5]                                 |     *((r2 + r5)) = r5;
    0x000616fc movs r0, 0x4d                                     |     r0 = 0x4d;
    0x000616fe strb r6, [r4, 9]                                  |     *((r4 + 9)) = r6;
    0x00061700 ldr r7, [r5, 0x54]                                |     r7 = *(0x6178a);
    0x00061702 strb r0, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r0;
    0x00061704 strb r1, [r5, 0x11]                               |     *((r5 + 0x11)) = r1;
    0x00061706 ldr r0, [r5, 0x14]                                |     r0 = *(0x6174a);
    0x00061708 movs r0, 0x6e                                     |     r0 = 0x6e;
    0x0006170a movs r0, 0x61                                     |     r0 = 0x61;
    0x0006170c strb r4, [r6, 9]                                  |     *((r6 + 9)) = r4;
    0x0006170e ldr r1, [r4, 0x64]                                |     r1 = *(0x61756);
    0x00061710 str r3, [r6, 0x14]                                |     *((r6 + 0x14)) = r3;
    0x00061712 strb r3, [r4, 0x11]                               |     *((r4 + 0x11)) = r3;
    0x00061714 ldr r1, [r5, 0x74]                                |     r1 = *(0x617aa);
    0x00061716 lsls r6, r5, 1                                    |     r6 = r5 << 1;
    0x00061718 str r3, [r4, 0x14]                                |     *((r4 + 0x14)) = r3;
    0x0006171a ldr r6, [r5, 0x64]                                |     r6 = *(0x6179a);
    0x0006171c strb r7, [r5, 0x11]                               |     *((r5 + 0x11)) = r7;
    0x0006171e ldrsb r0, [r4, r0]                                |     r0 = *((r4 + r0));
    0x00061720 invalid                                           |     
    0x00061724 movs r0, 0x4d                                     |     r0 = 0x4d;
    0x00061726 movs r0, 0x2d                                     |     r0 = 0x2d;
    0x00061728 str r3, [r2, r5]                                  |     *((r2 + r5)) = r3;
    0x0006172a movs r0, 0x4c                                     |     r0 = 0x4c;
    0x0006172c strb r3, [r6, 0x11]                               |     *((r6 + 0x11)) = r3;
    0x0006172e strb r1, [r4, 0x11]                               |     *((r4 + 0x11)) = r1;
    0x00061730 ldr r5, [r4, 0x54]                                |     r5 = *(0x61746);
    0x00061732 ldr r5, [r4, 0x64]                                |     r5 = *(0x61756);
    0x00061734 strb r4, [r6, 0xd]                                |     *((r6 + 0xd)) = r4;
    0x00061736 ldr r0, [r4, 0x10]                                |     r0 = *(0x61702);
    0x00061738 movs r0, 0x6e                                     |     r0 = 0x6e;
    0x0006173a strb r0, [r6, 9]                                  |     *((r6 + 9)) = r0;
    0x0006173c str r7, [r5, 0x74]                                |     *((r5 + 0x74)) = r7;
    0x0006173e str r2, [r6, 0x54]                                |     *((r6 + 0x54)) = r2;
    0x00061740 strb r3, [r6, 0xd]                                |     *((r6 + 0xd)) = r3;
    0x00061742 movs r0, r0                                       |     
    0x00061744 strh r0, [r2, r1]                                 |     *((r2 + r1)) = r0;
    0x00061746 bx r8                                             |     return uint32_t (*r8)() ();
                                                                 | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x556b8 */
                                                             | #include <stdint.h>
                                                             |  
                                                             | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                             |  
    ; (fcn) fcn.000556b8 ()                                  | void fcn_000556b8 (int16_t arg1, int16_t arg2, int16_t arg4) {
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
                                                             |     r3 = arg4;
    0x000556b8 ldrd ip, r3, [r0, 0x14]                       |     __asm ("ldrd ip, r3, [r0, 0x14]");
    0x000556bc movs r2, 1                                    |     r2 = 1;
    0x000556be push.w {r4, r5, r6, r7, r8, sb, sl, lr}       |     
    0x000556c2 mov r6, r0                                    |     r6 = r0;
    0x000556c4 strb.w r2, [r0, 0x89]                         |     *((r0 + 0x89)) = r2;
    0x000556c8 cmp.w ip, 0                                   |     
    0x000556cc and r8, r3, 2                                 |     r8 = r3 & 2;
                                                             |     if (ip <= 0) {
    0x000556d0 ble 0x55726                                   |         goto label_3;
                                                             |     }
    0x000556d2 mov sb, r1                                    |     sb = r1;
    0x000556d4 movs r4, 0                                    |     r4 = 0;
    0x000556d6 b 0x556e8                                     |     goto label_1;
                                                             | label_0:
    0x000556d8 bl 0x55348                                    |     r0 = fcn_00055348 (r0, r1, r2, r3, r4);
    0x000556dc mov sl, r0                                    |     sl = r0;
                                                             |     if (r0 != 0) {
    0x000556de cbnz r0, 0x55744                              |         goto label_4;
                                                             |     }
    0x000556e0 ldr.w ip, [r6, 0x14]                          |     ip = *((r6 + 0x14));
                                                             |     do {
    0x000556e4 cmp ip, r4                                    |         
                                                             |         if (ip <= r4) {
    0x000556e6 ble 0x55712                                   |             goto label_5;
                                                             |         }
                                                             | label_1:
    0x000556e8 ldr r3, [r6, 0x10]                            |         r3 = *((r6 + 0x10));
    0x000556ea lsls r7, r4, 4                                |         r7 = r4 << 4;
    0x000556ec mov r1, r4                                    |         r1 = r4;
    0x000556ee mov r2, sb                                    |         r2 = sb;
    0x000556f0 mov r0, r6                                    |         r0 = r6;
    0x000556f2 add r3, r7                                    |         r3 += r7;
    0x000556f4 ldr r3, [r3, 0xc]                             |         r3 = *((r3 + 0xc));
    0x000556f6 ldrh.w r3, [r3, 0x4e]                         |         r3 = *((r3 + 0x4e));
    0x000556fa ands r5, r3, 1                                |         r5 = r3 & 1;
    0x000556fe it ne                                         |         
                                                             |         if (r5 == r3) {
    0x00055700 addne r4, 1                                   |             r4++;
                                                             |         }
    0x00055702 bne 0x556e4                                   |         
                                                             |     } while (r5 != r3);
    0x00055704 cmp r4, 1                                     |     
    0x00055706 add.w r4, r4, 1                               |     r4++;
                                                             |     if (r4 != 1) {
    0x0005570a bne 0x556d8                                   |         goto label_0;
                                                             |     }
    0x0005570c movs r4, 2                                    |     r4 = 2;
    0x0005570e cmp ip, r4                                    |     
                                                             |     if (ip > r4) {
    0x00055710 bgt 0x556e8                                   |         goto label_1;
                                                             |     }
                                                             | label_5:
    0x00055712 cmp.w ip, 1                                   |     
                                                             |     if (ip <= 1) {
    0x00055716 ble 0x55726                                   |         goto label_3;
                                                             |     }
    0x00055718 ldr r3, [r6, 0x10]                            |     r3 = *((r6 + 0x10));
    0x0005571a ldr r3, [r3, 0x1c]                            |     r3 = *((r3 + 0x1c));
    0x0005571c ldrh.w r3, [r3, 0x4e]                         |     r3 = *((r3 + 0x4e));
    0x00055720 ands r4, r3, 1                                |     r4 = r3 & 1;
    0x00055724 beq 0x55760                                   |     
                                                             |     while (r0 == 0) {
                                                             | label_3:
    0x00055726 mov.w sl, 0                                   |         sl = 0;
    0x0005572a strb.w sl, [r6, 0x89]                         |         *((r6 + 0x89)) = sl;
    0x0005572e cmp.w r8, 0                                   |         
                                                             |         if (r8 == 0) {
    0x00055732 bne 0x5575a                                   |             
    0x00055734 ldr r3, [r6, 0x18]                            |             r3 = *((r6 + 0x18));
    0x00055736 mov sl, r8                                    |             sl = r8;
    0x00055738 mov r0, sl                                    |             r0 = sl;
    0x0005573a bic r3, r3, 2                                 |             r3 = BIT_MASK (r3, 2);
    0x0005573e str r3, [r6, 0x18]                            |             *((r6 + 0x18)) = r3;
    0x00055740 pop.w {r4, r5, r6, r7, r8, sb, sl, pc}        |             
                                                             | label_4:
    0x00055744 ldr r3, [r6, 0x10]                            |             r3 = *((r6 + 0x10));
    0x00055746 add r3, r7                                    |             r3 += r7;
    0x00055748 ldr r0, [r3, 0xc]                             |             r0 = *((r3 + 0xc));
    0x0005574a bl 0x1386c                                    |             fcn_0001386c (r0);
    0x0005574e ldr r3, [r6, 0x10]                            |             r3 = *((r6 + 0x10));
    0x00055750 ldr r0, [r3, 0x1c]                            |             r0 = *((r3 + 0x1c));
    0x00055752 bl 0x1386c                                    |             fcn_0001386c (r0);
    0x00055756 strb.w r5, [r6, 0x89]                         |             *((r6 + 0x89)) = r5;
                                                             |         }
                                                             | label_2:
    0x0005575a mov r0, sl                                    |         r0 = sl;
    0x0005575c pop.w {r4, r5, r6, r7, r8, sb, sl, pc}        |         
    0x00055760 mov r2, sb                                    |         r2 = sb;
    0x00055762 movs r1, 1                                    |         r1 = 1;
    0x00055764 mov r0, r6                                    |         r0 = r6;
    0x00055766 bl 0x55348                                    |         r0 = fcn_00055348 (r0, r1, r2, r3, r4);
    0x0005576a mov sl, r0                                    |         sl = r0;
    0x0005576c cmp r0, 0                                     |         
    0x0005576e beq 0x55726                                   |         
                                                             |     }
    0x00055770 ldr r3, [r6, 0x10]                            |     r3 = *((r6 + 0x10));
    0x00055772 ldr r0, [r3, 0x1c]                            |     r0 = *((r3 + 0x1c));
    0x00055774 bl 0x1386c                                    |     fcn_0001386c (r0);
    0x00055778 strb.w r4, [r6, 0x89]                         |     *((r6 + 0x89)) = r4;
    0x0005577c b 0x5575a                                     |     goto label_2;
                                                             | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x559ec */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.000559ec ()                                      | void fcn_000559ec (int16_t arg_ch, int16_t arg_10h, int16_t arg_24h, int16_t arg_2ch, int16_t arg_30h, int16_t arg_34h, uint32_t arg1) {
                                                                 |     r0 = arg1;
                                                                 |     do {
                                                                 | label_1:
    0x00055826 ldr.w r2, [pc, 0x46c]                             |         r2 = *(0x00055c94);
    0x0005582a ldr.w r3, [pc, 0x460]                             |         r3 = *(0x55c8e);
    0x0005582e add r2, pc                                        |         r2 += pc;
    0x00055830 ldr r3, [r2, r3]                                  |         r3 = *((r2 + r3));
    0x00055832 ldr r2, [r3]                                      |         r2 = *(0x55c8e);
    0x00055834 ldr r3, [sp, 0x34]                                |         r3 = *(arg_34h);
    0x00055836 eors r2, r3                                       |         r2 ^= r3;
    0x00055838 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0005583c bne.w 0x55c78                                     |             goto label_12;
                                                                 |         }
    0x00055840 add sp, 0x3c                                      |         
    0x00055842 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_0:
    0x00055932 movw r6, 0xc0a                                    |         r6 = 0xc0a;
    0x00055936 cmp fp, r6                                        |         
    0x00055938 it ne                                             |         
                                                                 |         if (fp != r6) {
    0x0005593a cmpne fp, 7                                       |             __asm ("cmpne fp, 7");
                                                                 |         }
    0x0005593e ite eq                                            |         
                                                                 |         if (fp != r6) {
    0x00055940 moveq r6, 1                                       |             r6 = 1;
                                                                 |         }
                                                                 |         if (fp == r6) {
    0x00055942 movne r6, 0                                       |             r6 = 0;
                                                                 |         }
                                                                 | label_3:
    0x00055944 ldr r5, [r4, 0x14]                                |         r5 = *((r4 + 0x14));
    0x00055946 ldr r3, [r4, 0x10]                                |         r3 = *((r4 + 0x10));
    0x00055948 subs r5, 1                                        |         r5--;
    0x0005594a lsl.w sb, r5, 4                                   |         sb = r5 << 4;
    0x0005594e add r3, sb                                        |         r3 += sb;
    0x00055950 ldr r0, [r3, 4]                                   |         r0 = *((r3 + 4));
                                                                 |         if (r0 != 0) {
    0x00055952 cbz r0, 0x55962                                   |             
    0x00055954 bl 0x2dcf4                                        |             fcn_0002dcf4 (r0);
    0x00055958 ldr r3, [r4, 0x10]                                |             r3 = *((r4 + 0x10));
    0x0005595a movs r2, 0                                        |             r2 = 0;
    0x0005595c add r3, sb                                        |             r3 += sb;
    0x0005595e str r2, [r3, 4]                                   |             *((r3 + 4)) = r2;
    0x00055960 str r2, [r3, 0xc]                                 |             *((r3 + 0xc)) = r2;
                                                                 |         }
    0x00055962 mov r0, r4                                        |         r0 = r4;
    0x00055964 bl 0x13968                                        |         fcn_00013968 (r0);
    0x00055968 str r5, [r4, 0x14]                                |         *((r4 + 0x14)) = r5;
    0x0005596a cmp r6, 0                                         |         
                                                                 |         if (r6 != 0) {
    0x0005596c bne.w 0x55bb6                                     |             goto label_13;
                                                                 |         }
    0x00055970 ldr r1, [sp, 0x24]                                |         r1 = *(arg_24h);
    0x00055972 cmp r1, 0                                         |         
                                                                 |         if (r1 == 0) {
    0x00055974 beq.w 0x55c1e                                     |             goto label_14;
                                                                 |         }
                                                                 | label_6:
    0x00055978 mov r0, r8                                        |         r0 = r8;
    0x0005597a mov.w r2, -1                                      |         r2 = -1;
    0x0005597e blx 0x63a8                                        |         fcn_000063a8 ();
    0x00055982 ldr r1, [sp, 0x24]                                |         r1 = *(arg_24h);
    0x00055984 mov r0, r4                                        |         r0 = r4;
    0x00055986 bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
                                                                 | label_5:
    0x0005598a mov r1, fp                                        |         r1 = fp;
    0x0005598c mov r0, r8                                        |         r0 = r8;
    0x0005598e blx 0x62d0                                        |         fcn_000062d0 ();
    0x00055992 b 0x55826                                         |         
                                                                 |     } while (1);
    0x000559ec str.w r0, [sb, 0xc]                               |     __asm ("str.w r0, [sb, 0xc]");
    0x000559f0 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000559f2 beq.w 0x55bda                                     |         goto label_15;
                                                                 |     }
    0x000559f6 ldrb.w r3, [r0, 0x4c]                             |     r3 = *((r0 + 0x4c));
    0x000559fa ldr r1, [r4, 0x10]                                |     r1 = *((r4 + 0x10));
    0x000559fc cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000559fe beq.w 0x55bb2                                     |         goto label_16;
                                                                 |     }
    0x00055a02 ldr r3, [r1, 0xc]                                 |     r3 = *((r1 + 0xc));
    0x00055a04 ldrb.w r2, [r0, 0x4d]                             |     r2 = *((r0 + 0x4d));
    0x00055a08 ldrb.w r3, [r3, 0x4d]                             |     r3 = *((r3 + 0x4d));
    0x00055a0c cmp r2, r3                                        |     
                                                                 |     if (r2 == r3) {
    0x00055a0e beq.w 0x55bb2                                     |         goto label_16;
                                                                 |     }
    0x00055a12 ldr r1, [pc, 0x294]                               |     
    0x00055a14 mov r0, r4                                        |     r0 = r4;
    0x00055a16 mov.w sl, 1                                       |     sl = 1;
    0x00055a1a add r1, pc                                        |     r1 = 0xab6c8;
    0x00055a1c bl 0x1babc                                        |     fcn_0001babc (r0);
    0x00055a20 ldr r1, [r4, 0x10]                                |     r1 = *((r4 + 0x10));
    0x00055a22 str r0, [sp, 0x24]                                |     *(arg_24h) = r0;
                                                                 | label_4:
    0x00055a24 ldr.w r2, [sb, 4]                                 |     r2 = *((sb + 4));
    0x00055a28 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x00055a2a ldr r3, [r3]                                      |     r3 = *(r3);
    0x00055a2c ldrb r0, [r3, 0xc]                                |     r0 = *((r3 + 0xc));
                                                                 |     if (r0 == 0) {
    0x00055a2e cbnz r0, 0x55a44                                  |         
    0x00055a30 ldr.w r0, [r3, 0xe0]                              |         r0 = *((r3 + 0xe0));
                                                                 |         if (r0 != 0) {
    0x00055a34 cbz r0, 0x55a3e                                   |             
    0x00055a36 ldrb.w r0, [r0, 0x2b]                             |             r0 = *((r0 + 0x2b));
    0x00055a3a cmp r0, 2                                         |             
                                                                 |             if (r0 == 2) {
    0x00055a3c beq 0x55a44                                       |                 goto label_17;
                                                                 |             }
                                                                 |         }
    0x00055a3e ldrb.w r0, [r4, 0x41]                             |         r0 = *((r4 + 0x41));
    0x00055a42 strb r0, [r3, 4]                                  |         *((r3 + 4)) = r0;
                                                                 |     }
                                                                 | label_17:
    0x00055a44 ldr r3, [r1, 4]                                   |     r3 = *((r1 + 4));
                                                                 |     if (r3 != 0) {
    0x00055a46 cbz r3, 0x55a70                                   |         
    0x00055a48 mov r0, r3                                        |         r0 = r3;
    0x00055a4a str r2, [sp, 0x10]                                |         *(arg_10h) = r2;
    0x00055a4c str r3, [sp, 0xc]                                 |         *(arg_ch) = r3;
    0x00055a4e bl 0xd140                                         |         fcn_0000d140 (r0);
    0x00055a52 ldr r3, [sp, 0xc]                                 |         r3 = *(arg_ch);
    0x00055a54 ldr r2, [sp, 0x10]                                |         r2 = *(arg_10h);
    0x00055a56 ldr r0, [r3, 4]                                   |         r0 = *((r3 + 4));
    0x00055a58 ldrb r1, [r3, 9]                                  |         r1 = *((r3 + 9));
    0x00055a5a ldrh.w fp, [r0, 0x16]                             |         fp = *((r0 + 0x16));
    0x00055a5e ubfx fp, fp, 2, 1                                 |         fp = (fp >> 2) & ((1 << 1) - 1);
                                                                 |         if (r1 == 0) {
    0x00055a62 cbz r1, 0x55a70                                   |             goto label_9;
                                                                 |         }
    0x00055a64 ldr r1, [r3, 0xc]                                 |         r1 = *((r3 + 0xc));
    0x00055a66 subs r1, 1                                        |         r1--;
    0x00055a68 str r1, [r3, 0xc]                                 |         *((r3 + 0xc)) = r1;
    0x00055a6a cmp r1, 0                                         |         
                                                                 |         if (r1 == 0) {
    0x00055a6c beq.w 0x55c2e                                     |             goto label_18;
                                                                 |         }
                                                                 |     }
                                                                 | label_9:
    0x00055a70 mov r1, fp                                        |     r1 = fp;
    0x00055a72 mov r0, r2                                        |     r0 = r2;
    0x00055a74 bl 0x11908                                        |     fcn_00011908 (r0, r1);
    0x00055a78 ldr r3, [r4, 0x18]                                |     r3 = *((r4 + 0x18));
    0x00055a7a ldr.w r2, [sb, 4]                                 |     r2 = *((sb + 4));
    0x00055a7e and r3, r3, 0x1c                                  |     r3 &= 0x1c;
    0x00055a82 orr fp, r3, 3                                     |     
    0x00055a86 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x00055a88 mov r0, r2                                        |     r0 = r2;
    0x00055a8a str r2, [sp, 0xc]                                 |     *(arg_ch) = r2;
    0x00055a8c str r3, [sp, 0x10]                                |     *(arg_10h) = r3;
    0x00055a8e bl 0xd140                                         |     fcn_0000d140 (r0);
    0x00055a92 ldr r3, [sp, 0x10]                                |     r3 = *(arg_10h);
    0x00055a94 mov r1, fp                                        |     r1 = fp;
    0x00055a96 ldr r0, [r3]                                      |     r0 = *(r3);
    0x00055a98 bl 0x7a80                                         |     fcn_00007a80 (r0, r1);
    0x00055a9c ldr r2, [sp, 0xc]                                 |     r2 = *(arg_ch);
    0x00055a9e ldrb r3, [r2, 9]                                  |     r3 = *((r2 + 9));
                                                                 |     if (r3 != 0) {
    0x00055aa0 cbz r3, 0x55ab4                                   |         
    0x00055aa2 ldr r3, [r2, 0xc]                                 |         r3 = *((r2 + 0xc));
    0x00055aa4 add.w fp, r3, -1                                  |         
    0x00055aa8 str.w fp, [r2, 0xc]                               |         __asm ("str.w fp, [r2, 0xc]");
    0x00055aac cmp.w fp, 0                                       |         
                                                                 |         if (fp == 0) {
    0x00055ab0 beq.w 0x55c0e                                     |             goto label_19;
                                                                 |         }
                                                                 |     }
                                                                 | label_7:
    0x00055ab4 movs r3, 3                                        |     r3 = 3;
    0x00055ab6 mov r1, r5                                        |     r1 = r5;
    0x00055ab8 mov r0, r4                                        |     r0 = r4;
    0x00055aba strb.w r3, [sb, 8]                                |     *((sb + 8)) = r3;
    0x00055abe bl 0xd418                                         |     fcn_0000d418 (r0, r1);
    0x00055ac2 str.w r0, [sb]                                    |     __asm ("str.w r0, [sb]");
    0x00055ac6 cmp.w sl, 0                                       |     
                                                                 |     if (sl != 0) {
    0x00055aca bne.w 0x55c7c                                     |         goto label_20;
                                                                 |     }
    0x00055ace cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00055ad0 beq 0x55baa                                       |         goto label_21;
                                                                 |     }
    0x00055ad2 ldr r0, [r6, 8]                                   |     r0 = *((r6 + 8));
    0x00055ad4 blx 0x661c                                        |     r0 = fcn_0000661c ();
    0x00055ad8 cmp r0, 4                                         |     
                                                                 |     if (r0 > 4) {
    0x00055ada bgt 0x55b58                                       |         goto label_22;
                                                                 |     }
    0x00055adc cmp r0, 2                                         |     
                                                                 |     if (r0 > 2) {
    0x00055ade bgt 0x55af8                                       |         goto label_23;
                                                                 |     }
    0x00055ae0 subs r0, 1                                        |     r0--;
    0x00055ae2 cmp r0, 1                                         |     
                                                                 |     if (r0 > 1) {
    0x00055ae4 bhi 0x55b20                                       |         goto label_2;
                                                                 |     }
    0x00055ae6 ldr r3, [pc, 0x1c4]                               |     
    0x00055ae8 movs r2, 0x6e                                     |     r2 = 0x6e;
    0x00055aea add r3, pc                                        |     r3 = 0xab79c;
    0x00055aec adds r3, 1                                        |     r3++;
                                                                 |     do {
    0x00055aee cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x00055af0 beq 0x55be2                                       |             goto label_24;
                                                                 |         }
    0x00055af2 ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x00055af6 b 0x55aee                                         |         
                                                                 |     } while (1);
                                                                 | label_23:
    0x00055af8 ldr r0, [r6, 8]                                   |     r0 = *((r6 + 8));
    0x00055afa blx 0x63f4                                        |     fcn_000063f4 ();
    0x00055afe str r0, [sp, 0x2c]                                |     *(arg_2ch) = r0;
    0x00055b00 ldr r0, [r6, 8]                                   |     r0 = *((r6 + 8));
    0x00055b02 blx 0x5dfc                                        |     fcn_00005dfc ();
    0x00055b06 ldr r1, [r4, 0x14]                                |     r1 = *((r4 + 0x14));
    0x00055b08 mov r2, r0                                        |     r2 = r0;
    0x00055b0a str r0, [sp, 0x30]                                |     *(arg_30h) = r0;
    0x00055b0c mov r0, r4                                        |     r0 = r4;
    0x00055b0e ldr r3, [sp, 0x2c]                                |     r3 = *(arg_2ch);
    0x00055b10 subs r1, 1                                        |     r1--;
    0x00055b12 bl 0x16cf8                                        |     r0 = fcn_00016cf8 (r0, r1, r2, r3);
    0x00055b16 mov fp, r0                                        |     
    0x00055b18 cmp.w fp, 0                                       |     
                                                                 |     if (fp != 0) {
    0x00055b1c bne.w 0x55932                                     |         goto label_0;
                                                                 |     }
                                                                 | label_2:
    0x00055b20 ldr r2, [r4, 0x14]                                |     r2 = *((r4 + 0x14));
    0x00055b22 cmp r2, 0                                         |     
                                                                 |     if (r2 <= 0) {
    0x00055b24 ble 0x55b3e                                       |         goto label_25;
                                                                 |     }
                                                                 |     do {
    0x00055b26 ldr r3, [r4, 0x10]                                |         r3 = *((r4 + 0x10));
    0x00055b28 add.w r3, r3, sl, lsl 4                           |         r3 += (sl << 4);
    0x00055b2c ldr r0, [r3, 4]                                   |         r0 = *((r3 + 4));
                                                                 |         if (r0 != 0) {
    0x00055b2e cbz r0, 0x55b36                                   |             
    0x00055b30 bl 0xd140                                         |             fcn_0000d140 (r0);
    0x00055b34 ldr r2, [r4, 0x14]                                |             r2 = *((r4 + 0x14));
                                                                 |         }
    0x00055b36 add.w sl, sl, 1                                   |         sl++;
    0x00055b3a cmp sl, r2                                        |         
    0x00055b3c blt 0x55b26                                       |         
                                                                 |     } while (sl < r2);
                                                                 | label_25:
    0x00055b3e add r1, sp, 0x24                                  |     r1 += arg_24h;
    0x00055b40 mov r0, r4                                        |     r0 = r4;
    0x00055b42 bl 0x556b8                                        |     r0 = fcn_000556b8 (r0, r1, r2);
    0x00055b46 mov fp, r0                                        |     
    0x00055b48 mov r0, r4                                        |     r0 = r4;
    0x00055b4a bl 0x11680                                        |     fcn_00011680 (r0);
    0x00055b4e cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x00055b52 beq.w 0x55826                                     |         goto label_1;
                                                                 |     }
    0x00055b56 b 0x55932                                         |     goto label_0;
                                                                 | label_22:
    0x00055b58 cmp r0, 5                                         |     
                                                                 |     if (r0 != 5) {
    0x00055b5a bne 0x55b20                                       |         goto label_2;
                                                                 |     }
    0x00055b5c add r3, sp, 0x2c                                  |     r3 += arg_2ch;
    0x00055b5e add r2, sp, 0x30                                  |     r2 += arg_30h;
    0x00055b60 mov r1, sl                                        |     r1 = sl;
    0x00055b62 mov r0, r4                                        |     r0 = r4;
    0x00055b64 bl 0xce84                                         |     fcn_0000ce84 (r0, r1, r2, r3);
    0x00055b68 ldr r3, [sp, 0x2c]                                |     r3 = *(arg_2ch);
    0x00055b6a cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x00055b6c ble 0x55c44                                       |         goto label_26;
                                                                 |     }
                                                                 | label_10:
    0x00055b6e ldr r1, [r4, 0x14]                                |     r1 = *((r4 + 0x14));
    0x00055b70 mov r0, r4                                        |     r0 = r4;
    0x00055b72 ldr r2, [sp, 0x30]                                |     r2 = *(arg_30h);
    0x00055b74 subs r1, 1                                        |     r1--;
    0x00055b76 bl 0x16cf8                                        |     r0 = fcn_00016cf8 (r0, r1, r2, r3);
    0x00055b7a mov fp, r0                                        |     
    0x00055b7c cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x00055b80 beq 0x55b20                                       |         goto label_2;
                                                                 |     }
    0x00055b82 b 0x55932                                         |     goto label_0;
                                                                 | label_21:
    0x00055baa movs r6, 1                                        |     r6 = 1;
    0x00055bac mov.w fp, 7                                       |     
    0x00055bb0 b 0x55944                                         |     goto label_3;
                                                                 | label_16:
    0x00055bb2 mov sl, fp                                        |     sl = fp;
    0x00055bb4 b 0x55a24                                         |     goto label_4;
                                                                 | label_13:
    0x00055bb6 movs r3, 1                                        |     r3 = 1;
    0x00055bb8 ldr r1, [sp, 0x24]                                |     r1 = *(arg_24h);
    0x00055bba mov r0, r4                                        |     r0 = r4;
    0x00055bbc strb.w r3, [r4, 0x40]                             |     *((r4 + 0x40)) = r3;
    0x00055bc0 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x00055bc4 ldr r1, [pc, 0xec]                                |     
    0x00055bc6 mov r0, r4                                        |     r0 = r4;
    0x00055bc8 add r1, pc                                        |     r1 = 0xab880;
    0x00055bca bl 0x1babc                                        |     r0 = fcn_0001babc (r0);
    0x00055bce mov r1, r0                                        |     r1 = r0;
                                                                 | label_8:
    0x00055bd0 str r1, [sp, 0x24]                                |     *(arg_24h) = r1;
    0x00055bd2 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00055bd4 beq.w 0x5598a                                     |         goto label_5;
                                                                 |     }
    0x00055bd8 b 0x55978                                         |     goto label_6;
                                                                 | label_15:
    0x00055bda ldr r1, [r4, 0x10]                                |     r1 = *((r4 + 0x10));
    0x00055bdc mov.w sl, 7                                       |     sl = 7;
    0x00055be0 b 0x55a24                                         |     goto label_4;
                                                                 | label_24:
    0x00055be2 ldr r6, [pc, 0xd4]                                |     
    0x00055be4 mov r0, r4                                        |     r0 = r4;
    0x00055be6 add r6, pc                                        |     r6 = 0xab8a4;
    0x00055be8 subs r5, r3, r6                                   |     r5 = r3 - r6;
    0x00055bea bic r5, r5, 0xc0000000                            |     r5 = BIT_MASK (r5, 0xc0000000);
    0x00055bee adds r5, 1                                        |     r5++;
    0x00055bf0 mov r1, r5                                        |     r1 = r5;
    0x00055bf2 bl 0xd3a0                                         |     r0 = fcn_0000d3a0 (r0, r1);
    0x00055bf6 mov sb, r0                                        |     sb = r0;
                                                                 |     if (r0 != 0) {
    0x00055bf8 cbz r0, 0x55c02                                   |         
    0x00055bfa mov r2, r5                                        |         r2 = r5;
    0x00055bfc mov r1, r6                                        |         r1 = r6;
    0x00055bfe blx 0x6214                                        |         fcn_00006214 ();
                                                                 |     }
    0x00055c02 movs r6, 0                                        |     r6 = 0;
    0x00055c04 mov.w fp, 1                                       |     
    0x00055c08 str.w sb, [sp, 0x24]                              |     __asm ("str.w sb, [arg_24h]");
    0x00055c0c b 0x55944                                         |     goto label_3;
                                                                 | label_19:
    0x00055c0e ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x00055c10 ldr r0, [r3, 0x38]                                |     r0 = *((r3 + 0x38));
    0x00055c12 blx 0x63dc                                        |     fcn_000063dc ();
    0x00055c16 ldr r2, [sp, 0xc]                                 |     r2 = *(arg_ch);
    0x00055c18 strb.w fp, [r2, 0xa]                              |     *((r2 + 0xa)) = fp;
    0x00055c1c b 0x55ab4                                         |     goto label_7;
                                                                 | label_14:
    0x00055c1e ldr r1, [pc, 0x9c]                                |     
    0x00055c20 mov r2, r7                                        |     r2 = r7;
    0x00055c22 mov r0, r4                                        |     r0 = r4;
    0x00055c24 add r1, pc                                        |     r1 = 0xab8e6;
    0x00055c26 bl 0x1babc                                        |     r0 = fcn_0001babc (r0);
    0x00055c2a mov r1, r0                                        |     r1 = r0;
    0x00055c2c b 0x55bd0                                         |     goto label_8;
                                                                 | label_18:
    0x00055c2e ldr r0, [r0, 0x38]                                |     r0 = *((r0 + 0x38));
    0x00055c30 strd r3, r1, [sp, 0x10]                           |     __asm ("strd r3, r1, [sp, 0x10]");
    0x00055c34 str r2, [sp, 0xc]                                 |     *(arg_ch) = r2;
    0x00055c36 blx 0x63dc                                        |     fcn_000063dc ();
    0x00055c3a ldrd r3, r1, [sp, 0x10]                           |     __asm ("ldrd r3, r1, [arg_10h]");
    0x00055c3e ldr r2, [sp, 0xc]                                 |     r2 = *(arg_ch);
    0x00055c40 strb r1, [r3, 0xa]                                |     *((r3 + 0xa)) = r1;
    0x00055c42 b 0x55a70                                         |     goto label_9;
                                                                 | label_26:
    0x00055c44 ldr r3, [r4, 0x10]                                |     r3 = *((r4 + 0x10));
    0x00055c46 ldr r5, [r3, 4]                                   |     r5 = *((r3 + 4));
    0x00055c48 mov r0, r5                                        |     r0 = r5;
    0x00055c4a bl 0xd140                                         |     fcn_0000d140 (r0);
    0x00055c4e ldr r2, [r5, 4]                                   |     r2 = *((r5 + 4));
    0x00055c50 ldrb r0, [r5, 9]                                  |     r0 = *((r5 + 9));
    0x00055c52 ldrd r3, r1, [r2, 0x20]                           |     __asm ("ldrd r3, r1, [r2, 0x20]");
    0x00055c56 subs r6, r3, r1                                   |     r6 = r3 - r1;
                                                                 |     if (r0 != 0) {
    0x00055c58 cbz r0, 0x55c62                                   |         
    0x00055c5a ldr r3, [r5, 0xc]                                 |         r3 = *((r5 + 0xc));
    0x00055c5c subs r3, 1                                        |         r3--;
    0x00055c5e str r3, [r5, 0xc]                                 |         *((r5 + 0xc)) = r3;
                                                                 |         if (r3 == 0) {
    0x00055c60 cbz r3, 0x55c6c                                   |             goto label_27;
                                                                 |         }
                                                                 |     }
                                                                 | label_11:
    0x00055c62 cmp r6, 0                                         |     
                                                                 |     if (r6 <= 0) {
    0x00055c64 ble.w 0x55b20                                     |         goto label_2;
                                                                 |     }
    0x00055c68 ldr r3, [sp, 0x2c]                                |     r3 = *(arg_2ch);
    0x00055c6a b 0x55b6e                                         |     goto label_10;
                                                                 | label_27:
    0x00055c6c ldr r0, [r2, 0x38]                                |     r0 = *((r2 + 0x38));
    0x00055c6e blx 0x63dc                                        |     fcn_000063dc ();
    0x00055c72 strb.w sl, [r5, 0xa]                              |     *((r5 + 0xa)) = sl;
    0x00055c76 b 0x55c62                                         |     goto label_11;
                                                                 | label_12:
    0x00055c78 blx 0x6498                                        |     fcn_00006498 ();
                                                                 | label_20:
    0x00055c7c sub.w r3, sl, 7                                   |     r3 = sl - 7;
    0x00055c80 mov fp, sl                                        |     
    0x00055c82 rsbs r6, r3, 0                                    |     r6 = r3 - ;
    0x00055c84 adcs r6, r3                                       |     __asm ("adcs r6, r3");
    0x00055c86 b 0x55944                                         |     goto label_3;
                                                                 | }
    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x55f68 */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) fcn.00055f68 ()                              | void fcn_00055f68 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                         |     int16_t var_0h;
                                                         |     r0 = arg1;
                                                         |     r1 = arg2;
                                                         |     r2 = arg3;
                                                         |     r3 = arg4;
    0x00055f68 push.w {r4, r5, r6, r7, r8, lr}           |     
    0x00055f6c mov r6, r0                                |     r6 = r0;
    0x00055f6e ldr r0, [r0]                              |     r0 = *(r0);
    0x00055f70 sub sp, 8                                 |     
    0x00055f72 mov r7, r1                                |     r7 = r1;
    0x00055f74 mov r8, r2                                |     r8 = r2;
    0x00055f76 mov r5, r3                                |     r5 = r3;
    0x00055f78 ldrb.w r4, [r0, 0x89]                     |     r4 = *((r0 + 0x89));
    0x00055f7c cbz r4, 0x55fb6                           |     
                                                         |     while (1) {
    0x00055f7e mov r2, r5                                |         r2 = r5;
    0x00055f80 mov r1, r8                                |         r1 = r8;
    0x00055f82 bl 0x1401c                                |         r0 = fcn_0001401c (r0, r1, r2);
    0x00055f86 mov r4, r0                                |         r4 = r0;
                                                         |         if (r0 != 0) {
    0x00055f88 cbz r0, 0x55f92                           |             
    0x00055f8a mov r0, r4                                |             r0 = r4;
    0x00055f8c add sp, 8                                 |             
    0x00055f8e pop.w {r4, r5, r6, r7, r8, pc}            |             
                                                         |         }
                                                         |         if (r7 == 0) {
    0x00055f92 cbz r7, 0x55fd2                           |             goto label_2;
                                                         |         }
    0x00055f94 ldr r2, [pc, 0x50]                        |         
    0x00055f96 add r2, pc                                |         r2 = 0xabf82;
                                                         |         if (r5 == 0) {
                                                         | label_0:
    0x00055f98 cbz r5, 0x55fd8                           |             goto label_3;
                                                         |         }
    0x00055f9a ldr r1, [pc, 0x50]                        |         
    0x00055f9c mov r3, r5                                |         r3 = r5;
    0x00055f9e mov r0, r6                                |         r0 = r6;
    0x00055fa0 str.w r8, [sp]                            |         __asm ("str.w r8, [sp]");
    0x00055fa4 add r1, pc                                |         r1 = 0xabf96;
    0x00055fa6 bl 0x1ca34                                |         fcn_0001ca34 (r0);
                                                         | label_1:
    0x00055faa movs r3, 1                                |         r3 = 1;
    0x00055fac mov r0, r4                                |         r0 = r4;
    0x00055fae strb r3, [r6, 0x11]                       |         *((r6 + 0x11)) = r3;
    0x00055fb0 add sp, 8                                 |         
    0x00055fb2 pop.w {r4, r5, r6, r7, r8, pc}            |         
    0x00055fb6 adds r1, r6, 4                            |         r1 = r6 + 4;
    0x00055fb8 bl 0x556b8                                |         r0 = fcn_000556b8 (r0, r1, r2);
                                                         |         if (r0 != 0) {
    0x00055fbc cbz r0, 0x55fce                           |             
    0x00055fbe ldr r3, [r6, 0x40]                        |             r3 = *((r6 + 0x40));
    0x00055fc0 str r0, [r6, 0xc]                         |             *((r6 + 0xc)) = r0;
    0x00055fc2 mov r0, r4                                |             r0 = r4;
    0x00055fc4 adds r3, 1                                |             r3++;
    0x00055fc6 str r3, [r6, 0x40]                        |             *((r6 + 0x40)) = r3;
    0x00055fc8 add sp, 8                                 |             
    0x00055fca pop.w {r4, r5, r6, r7, r8, pc}            |             
                                                         |         }
    0x00055fce ldr r0, [r6]                              |         r0 = *(r6);
    0x00055fd0 b 0x55f7e                                 |         
                                                         |     }
                                                         | label_2:
    0x00055fd2 ldr r2, [pc, 0x1c]                        |     
    0x00055fd4 add r2, pc                                |     r2 = 0xabfca;
    0x00055fd6 b 0x55f98                                 |     goto label_0;
                                                         | label_3:
    0x00055fd8 ldr r1, [pc, 0x18]                        |     
    0x00055fda mov r3, r8                                |     r3 = r8;
    0x00055fdc mov r0, r6                                |     r0 = r6;
    0x00055fde add r1, pc                                |     r1 = 0xabfd6;
    0x00055fe0 bl 0x1ca34                                |     fcn_0001ca34 (r0);
    0x00055fe4 b 0x55faa                                 |     goto label_1;
                                                         | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x56c48 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00056c48 ()                                      | void fcn_00056c48 (int16_t arg_10h, int16_t arg_24h, int16_t arg_44h, int16_t arg_80h, int16_t arg_84h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_24h_2;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_40h;
                                                                 |     int16_t var_44h;
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_7ch;
                                                                 |     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;
                                                                 |     int16_t var_34h_2;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     int16_t var_40h_2;
                                                                 |     int16_t var_44h_2;
                                                                 |     int16_t var_48h;
                                                                 |     int16_t var_4ch;
                                                                 |     int16_t var_50h;
                                                                 |     int16_t var_54h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00056c48 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00056c4c mov sb, r0                                        |     sb = r0;
    0x00056c4e ldr r4, [pc, 0x3dc]                               |     
    0x00056c50 sub sp, 0x5c                                      |     
    0x00056c52 ldr r0, [pc, 0x3dc]                               |     r0 = *(0x57032);
    0x00056c54 add r4, pc                                        |     r4 = 0xadc86;
    0x00056c56 ldr.w sl, [sb]                                    |     sl = *(sb);
    0x00056c5a ldr r6, [sp, 0x80]                                |     r6 = *(arg_80h);
    0x00056c5c ldr r0, [r4, r0]                                  |     
    0x00056c5e ldr r0, [r0]                                      |     r0 = *(0xadc86);
    0x00056c60 str r0, [sp, 0x54]                                |     var_54h = r0;
    0x00056c62 mov.w r0, 0                                       |     r0 = 0;
    0x00056c66 str r3, [sp, 0x30]                                |     var_30h = r3;
    0x00056c68 ldrb.w r3, [sb, 0x1b6]                            |     r3 = *((sb + 0x1b6));
    0x00056c6c str r2, [sp, 0x24]                                |     var_24h = r2;
    0x00056c6e str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00056c70 ldr.w r3, [sl, 0x18]                              |     r3 = *((sl + 0x18));
    0x00056c74 lsls r2, r3, 0xc                                  |     r2 = r3 << 0xc;
                                                                 |     if (r2 >= r3) {
    0x00056c76 bpl.w 0x56dd0                                     |         goto label_11;
                                                                 |     }
    0x00056c7a ldr r0, [r1, 0x44]                                |     r0 = *((r1 + 0x44));
    0x00056c7c mov fp, r1                                        |     
    0x00056c7e ldr.w r5, [sl, 0x10]                              |     r5 = *((sl + 0x10));
    0x00056c82 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00056c84 beq.w 0x57016                                     |         goto label_17;
                                                                 |     }
    0x00056c88 ldr.w r1, [sl, 0x14]                              |     r1 = *((sl + 0x14));
    0x00056c8c mov r3, r5                                        |     r3 = r5;
    0x00056c8e movs r4, 0                                        |     r4 = 0;
    0x00056c90 cmp r1, 0                                         |     
                                                                 |     if (r1 > 0) {
    0x00056c92 bgt 0x56ca0                                       |         goto label_18;
                                                                 |     }
    0x00056c94 b 0x56ca6                                         |     goto label_2;
                                                                 |     do {
    0x00056c96 adds r4, 1                                        |         r4++;
    0x00056c98 adds r3, 0x10                                     |         r3 += 0x10;
    0x00056c9a cmp r4, r1                                        |         
                                                                 |         if (r4 == r1) {
    0x00056c9c beq.w 0x56dfc                                     |             goto label_19;
                                                                 |         }
                                                                 | label_18:
    0x00056ca0 ldr r2, [r3, 0xc]                                 |         r2 = *((r3 + 0xc));
    0x00056ca2 cmp r0, r2                                        |         
    0x00056ca4 bne 0x56c96                                       |         
                                                                 |     } while (r0 != r2);
                                                                 | label_2:
    0x00056ca6 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00056ca8 ldr.w r8, [fp, 0x10]                              |     r8 = *(arg_10h);
    0x00056cac str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00056cae cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x00056cb2 beq 0x56d58                                       |         goto label_20;
                                                                 |     }
    0x00056cb4 add r3, sp, 0x48                                  |     r3 += var_48h;
    0x00056cb6 mov r5, r8                                        |     r5 = r8;
    0x00056cb8 str r3, [sp, 0x28]                                |     var_28h = r3;
    0x00056cba add r3, sp, 0x4c                                  |     r3 += var_4ch;
    0x00056cbc str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x00056cbe str r4, [sp, 0x38]                                |     var_38h = r4;
                                                                 | label_0:
    0x00056cc0 movs r3, 0                                        |     r3 = 0;
    0x00056cc2 ldr r1, [r5, 8]                                   |     r1 = *((r5 + 8));
    0x00056cc4 strd r3, r3, [sp, 0x48]                           |     __asm ("strd r3, r3, [var_4ch]");
                                                                 |     if (r6 == 0) {
    0x00056cc8 cbz r6, 0x56d10                                   |         goto label_21;
                                                                 |     }
    0x00056cca ldr.w r0, [fp]                                    |     r0 = *(fp);
    0x00056cce blx 0x6164                                        |     r0 = fcn_00006164 ();
                                                                 |     if (r0 == 0) {
    0x00056cd2 cbz r0, 0x56d0e                                   |         goto label_22;
                                                                 |     }
    0x00056cd4 ldr r0, [r5, 0x14]                                |     r0 = *((r5 + 0x14));
    0x00056cd6 cmp r0, 0                                         |     
                                                                 |     if (r0 <= 0) {
    0x00056cd8 ble 0x56d4e                                       |         goto label_3;
                                                                 |     }
    0x00056cda ldr r7, [sp, 0x84]                                |     r7 = *(arg_84h);
    0x00056cdc movs r3, 0                                        |     r3 = 0;
    0x00056cde add.w r4, r5, 0x24                                |     r4 = r5 + 0x24;
    0x00056ce2 b 0x56d02                                         |     
                                                                 |     while (r2 < 0) {
    0x00056ce4 ldrsh.w r2, [fp, 0x24]                            |         r2 = *(arg_24h);
    0x00056ce8 cmp r7, 0                                         |         
    0x00056cea sub.w r2, r2, r1                                  |         r2 -= r1;
    0x00056cee clz r2, r2                                        |         r2 &= r2;
    0x00056cf2 lsr.w r2, r2, 5                                   |         r2 >>= 5;
    0x00056cf6 it eq                                             |         
                                                                 |         if (r7 != 0) {
    0x00056cf8 moveq r2, 0                                       |             r2 = 0;
                                                                 |         }
                                                                 |         if (r2 != 0) {
    0x00056cfa cbnz r2, 0x56d0e                                  |             goto label_22;
                                                                 |         }
    0x00056cfc adds r3, 1                                        |         r3++;
    0x00056cfe cmp r3, r0                                        |         
                                                                 |         if (r3 == r0) {
    0x00056d00 beq 0x56d4e                                       |             goto label_3;
                                                                 |         }
    0x00056d02 ldr.w r1, [r4, r3, lsl 3]                         |         offset_0 = r3 << 3;
                                                                 |         r1 = *((r4 + offset_0));
    0x00056d06 ldr.w r2, [r6, r1, lsl 2]                         |         offset_1 = r1 << 2;
                                                                 |         r2 = *((r6 + offset_1));
    0x00056d0a cmp r2, 0                                         |         
    0x00056d0c blt 0x56ce4                                       |         
                                                                 |     }
                                                                 | label_22:
    0x00056d0e ldr r1, [r5, 8]                                   |     r1 = *((r5 + 8));
                                                                 | label_21:
    0x00056d10 ldrb.w r3, [sb, 0x1b6]                            |     r3 = *((sb + 0x1b6));
    0x00056d14 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00056d16 beq 0x56dec                                       |         goto label_23;
                                                                 |     }
    0x00056d18 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00056d1a mov r0, sl                                        |     r0 = sl;
    0x00056d1c bl 0x1401c                                        |     r0 = fcn_0001401c (r0, r1, r2);
    0x00056d20 mov r4, r0                                        |     r4 = r0;
                                                                 |     if (r4 != 0) {
                                                                 | label_1:
    0x00056d22 cbz r4, 0x56d3c                                   |         
    0x00056d24 ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x00056d26 mov r2, r5                                        |         r2 = r5;
    0x00056d28 mov r1, r4                                        |         r1 = r4;
    0x00056d2a mov r0, sb                                        |         r0 = sb;
    0x00056d2c str r3, [sp]                                      |         *(sp) = r3;
    0x00056d2e ldr r3, [sp, 0x28]                                |         r3 = var_28h;
    0x00056d30 bl 0x1e334                                        |         fcn_0001e334 (r0, r1, r2, r3, r4, r5);
    0x00056d34 str r0, [sp, 0x34]                                |         var_34h_2 = r0;
    0x00056d36 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00056d38 beq.w 0x56e68                                     |             goto label_24;
                                                                 |         }
                                                                 |     }
    0x00056d3c ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00056d3e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00056d40 beq 0x56dd0                                       |         goto label_11;
                                                                 |     }
    0x00056d42 ldrb.w r3, [sl, 0x40]                             |     r3 = *((sl + 0x40));
    0x00056d46 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00056d48 bne 0x56dd0                                       |         goto label_11;
                                                                 |     }
    0x00056d4a cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00056d4c beq 0x56e02                                       |         goto label_25;
                                                                 |     }
                                                                 | label_3:
    0x00056d4e ldr r5, [r5, 4]                                   |     r5 = *((r5 + 4));
    0x00056d50 cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x00056d52 bne 0x56cc0                                       |         goto label_0;
                                                                 |     }
                                                                 | label_6:
    0x00056d54 ldr.w r0, [fp, 0x44]                              |     r0 = *(arg_44h);
                                                                 | label_20:
    0x00056d58 ldr.w r1, [fp]                                    |     r1 = *(fp);
    0x00056d5c mov r2, r1                                        |     r2 = r1;
                                                                 |     if (r1 == 0) {
    0x00056d5e cbz r1, 0x56d74                                   |         goto label_26;
                                                                 |     }
    0x00056d60 ldrb r2, [r1]                                     |     r2 = *(r1);
                                                                 |     if (r2 == 0) {
    0x00056d62 cbz r2, 0x56d74                                   |         goto label_26;
                                                                 |     }
    0x00056d64 mov r3, r1                                        |     r3 = r1;
                                                                 |     do {
    0x00056d66 ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x00056d6a cmp r2, 0                                         |         
    0x00056d6c bne 0x56d66                                       |         
                                                                 |     } while (r2 != 0);
    0x00056d6e subs r3, r3, r1                                   |     r3 -= r1;
    0x00056d70 bic r2, r3, 0xc0000000                            |     r2 = BIT_MASK (r3, 0xc0000000);
                                                                 | label_26:
    0x00056d74 adds r0, 0x38                                     |     r0 += 0x38;
    0x00056d76 bl 0x13f5c                                        |     r0 = fcn_00013f5c (r0, r1, r2);
    0x00056d7a mov r4, r0                                        |     r4 = r0;
                                                                 |     if (r0 != 0) {
    0x00056d7c cbz r0, 0x56dd0                                   |         
    0x00056d7e movs r5, 0                                        |         r5 = 0;
    0x00056d80 add r7, sp, 0x4c                                  |         r7 += var_4ch;
    0x00056d82 add.w r8, sp, 0x50                                |         r8 += var_50h;
                                                                 | label_10:
    0x00056d86 strd r5, r5, [sp, 0x4c]                           |         __asm ("strd r5, r5, [var_4ch]");
                                                                 |         if (r6 != 0) {
    0x00056d8a cbz r6, 0x56d9e                                   |             
    0x00056d8c ldr r3, [sp, 0x84]                                |             r3 = *(arg_84h);
    0x00056d8e mov r2, r6                                        |             r2 = r6;
    0x00056d90 mov r1, r4                                        |             r1 = r4;
    0x00056d92 mov r0, fp                                        |             r0 = fp;
    0x00056d94 bl 0x124a4                                        |             r0 = fcn_000124a4 (r0, r1, r2, r3);
    0x00056d98 cmp r0, 0                                         |             
                                                                 |             if (r0 == 0) {
    0x00056d9a beq.w 0x56fb2                                     |                 goto label_13;
                                                                 |             }
                                                                 |         }
    0x00056d9e ldrb r3, [r4, 0x18]                               |         r3 = *((r4 + 0x18));
                                                                 |         if (r3 == 0) {
    0x00056da0 cbnz r3, 0x56dac                                  |             
    0x00056da2 ldr.w r3, [sl, 0x18]                              |             r3 = *((sl + 0x18));
    0x00056da6 lsls r3, r3, 7                                    |             r3 <<= 7;
                                                                 |             if (r3 >= r3) {
    0x00056da8 bpl.w 0x56fbc                                     |                 goto label_27;
                                                                 |             }
                                                                 |         }
                                                                 | label_12:
    0x00056dac mov r3, r7                                        |         r3 = r7;
    0x00056dae mov r2, r4                                        |         r2 = r4;
    0x00056db0 mov r1, fp                                        |         r1 = fp;
    0x00056db2 mov r0, sb                                        |         r0 = sb;
    0x00056db4 str.w r8, [sp]                                    |         __asm ("str.w r8, [sp]");
    0x00056db8 bl 0x1e334                                        |         r0 = fcn_0001e334 (r0, r1, r2, r3, r4, r5);
    0x00056dbc cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00056dbe beq.w 0x56f68                                     |             goto label_28;
                                                                 |         }
    0x00056dc2 ldr r3, [sp, 0x1c]                                |         r3 = var_1ch;
                                                                 |         if (r3 == 0) {
    0x00056dc4 cbz r3, 0x56dd0                                   |             goto label_11;
                                                                 |         }
    0x00056dc6 ldrb.w r3, [sl, 0x40]                             |         r3 = *((sl + 0x40));
    0x00056dca cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00056dcc beq.w 0x56fb2                                     |             goto label_13;
                                                                 |         }
                                                                 |     }
                                                                 | label_11:
    0x00056dd0 ldr r2, [pc, 0x260]                               |     
    0x00056dd2 ldr r3, [pc, 0x25c]                               |     r3 = *(0x57032);
    0x00056dd4 add r2, pc                                        |     r2 = 0xade0c;
    0x00056dd6 ldr r3, [r2, r3]                                  |     r3 = *(0xade0c);
    0x00056dd8 ldr r2, [r3]                                      |     r2 = *(0xade0c);
    0x00056dda ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x00056ddc eors r2, r3                                       |     r2 ^= r3;
    0x00056dde mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x00056de2 bne.w 0x57028                                     |         goto label_29;
                                                                 |     }
    0x00056de6 add sp, 0x5c                                      |     
    0x00056de8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_23:
    0x00056dec mov r2, r1                                        |     r2 = r1;
    0x00056dee mov r0, sb                                        |     r0 = sb;
    0x00056df0 mov r1, r3                                        |     r1 = r3;
    0x00056df2 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00056df4 bl 0x55f68                                        |     r0 = fcn_00055f68 (r0, r1, r2, r3);
    0x00056df8 mov r4, r0                                        |     r4 = r0;
    0x00056dfa b 0x56d22                                         |     goto label_1;
                                                                 | label_19:
    0x00056dfc add.w r3, r5, r4, lsl 4                           |     r3 = r5 + (r4 << 4);
    0x00056e00 b 0x56ca6                                         |     goto label_2;
                                                                 | label_25:
    0x00056e02 ldr.w r8, [sb, 8]                                 |     r8 = *((sb + 8));
    0x00056e06 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x00056e0a beq.w 0x56fd2                                     |         goto label_30;
                                                                 |     }
                                                                 | label_14:
    0x00056e0e ldr r2, [r5, 0x14]                                |     r2 = *((r5 + 0x14));
    0x00056e10 ldr.w r3, [r8, 0x20]                              |     r3 = *((r8 + 0x20));
    0x00056e14 cmp r2, 0                                         |     
    0x00056e16 add r3, r2                                        |     r3 += r2;
    0x00056e18 add.w r3, r3, 1                                   |     r3++;
                                                                 |     if (r2 <= 0) {
    0x00056e1c ble 0x56e54                                       |         goto label_31;
                                                                 |     }
    0x00056e1e str.w sl, [sp, 0x34]                              |     __asm ("str.w sl, [var_34h_2]");
    0x00056e22 movs r7, 0                                        |     r7 = 0;
    0x00056e24 ldr.w sl, [sp, 0x24]                              |     sl = var_24h;
    0x00056e28 add.w r4, r5, 0x24                                |     r4 = r5 + 0x24;
    0x00056e2c str r6, [sp, 0x3c]                                |     var_3ch = r6;
    0x00056e2e mov r6, r3                                        |     r6 = r3;
                                                                 |     do {
    0x00056e30 ldr.w r2, [r4, r7, lsl 3]                         |         offset_2 = r7 << 3;
                                                                 |         r2 = *((r4 + offset_2));
    0x00056e34 movs r3, 0                                        |         r3 = 0;
    0x00056e36 str r3, [sp]                                      |         *(sp) = r3;
    0x00056e38 movs r1, 0x4c                                     |         r1 = 0x4c;
    0x00056e3a mov r3, r6                                        |         r3 = r6;
    0x00056e3c mov r0, r8                                        |         r0 = r8;
    0x00056e3e add r2, sl                                        |         r2 += sl;
    0x00056e40 adds r7, 1                                        |         r7++;
    0x00056e42 adds r2, 1                                        |         r2++;
    0x00056e44 bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00056e48 ldr r2, [r5, 0x14]                                |         r2 = *((r5 + 0x14));
    0x00056e4a cmp r2, r7                                        |         
    0x00056e4c bgt 0x56e30                                       |         
                                                                 |     } while (r2 > r7);
    0x00056e4e ldr.w sl, [sp, 0x34]                              |     sl = var_34h_2;
    0x00056e52 ldr r6, [sp, 0x3c]                                |     r6 = var_3ch;
                                                                 | label_31:
    0x00056e54 movs r3, 0                                        |     r3 = 0;
    0x00056e56 ldrb r2, [r5, 0x18]                               |     r2 = *((r5 + 0x18));
    0x00056e58 mov r0, r8                                        |     r0 = r8;
    0x00056e5a str r3, [sp]                                      |     *(sp) = r3;
    0x00056e5c movs r1, 0x83                                     |     r1 = 0x83;
    0x00056e5e mov.w r3, -1                                      |     r3 = -1;
    0x00056e62 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00056e66 b 0x56d4e                                         |     goto label_3;
                                                                 | label_24:
    0x00056e68 ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x00056e6a str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x00056e6c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00056e6e beq 0x56f5e                                       |         goto label_32;
                                                                 |     }
    0x00056e70 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00056e72 str r3, [sp, 0x40]                                |     var_40h_2 = r3;
                                                                 | label_9:
    0x00056e74 ldr r3, [r5, 0x14]                                |     r3 = *((r5 + 0x14));
    0x00056e76 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x00056e78 ble 0x56ee8                                       |         goto label_33;
                                                                 |     }
    0x00056e7a ldr r3, [sp, 0x40]                                |     r3 = var_40h_2;
    0x00056e7c mov.w r8, 0                                       |     r8 = 0;
    0x00056e80 str r6, [sp, 0x44]                                |     var_44h_2 = r6;
    0x00056e82 ldr r0, [sp, 0x34]                                |     r0 = var_34h_2;
    0x00056e84 ldr r6, [sp, 0x38]                                |     r6 = var_38h;
    0x00056e86 subs r7, r3, 4                                    |     r7 = r3 - 4;
    0x00056e88 b 0x56eb6                                         |     goto label_34;
                                                                 | label_4:
    0x00056e8a ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x00056e8c ldrsh.w r3, [r3, r8, lsl 1]                       |     offset_3 = r8 << 1;
                                                                 |     r3 = *((r3 + offset_3));
    0x00056e90 add.w r3, r3, r3, lsl 1                           |     r3 += (r3 << 1);
    0x00056e94 lsls r3, r3, 3                                    |     r3 <<= 3;
                                                                 | label_5:
    0x00056e96 ldr r2, [r2, r3]                                  |     r2 = *((r2 + r3));
    0x00056e98 mov r0, sb                                        |     r0 = sb;
    0x00056e9a ldr r1, [r4]                                      |     r1 = *(r4);
    0x00056e9c mov r3, r6                                        |     r3 = r6;
    0x00056e9e bl 0x1ccc0                                        |     r0 = fcn_0001ccc0 (r0, r1, r2, r3);
    0x00056ea2 sub.w r0, r0, 2                                   |     r0 -= 2;
    0x00056ea6 clz r0, r0                                        |     r0 &= r0;
    0x00056eaa lsrs r0, r0, 5                                    |     r0 >>= 5;
                                                                 |     do {
    0x00056eac ldr r3, [r5, 0x14]                                |         r3 = *((r5 + 0x14));
    0x00056eae add.w r8, r8, 1                                   |         r8++;
    0x00056eb2 cmp r3, r8                                        |         
                                                                 |         if (r3 <= r8) {
    0x00056eb4 ble 0x56ee4                                       |             goto label_35;
                                                                 |         }
                                                                 | label_34:
    0x00056eb6 ldrsh.w r3, [fp, 0x24]                            |         r3 = *(arg_24h);
    0x00056eba ldr r2, [r7, 4]!                                  |         r2 = *((r7 += 4));
    0x00056ebe cmp r2, r3                                        |         
    0x00056ec0 itt eq                                            |         
                                                                 |         if (r2 != r3) {
    0x00056ec2 moveq r3, -1                                      |             r3 = -1;
                                                                 |         }
                                                                 |         if (r2 == r3) {
    0x00056ec6 str r3, [r7]                                      |             *(r7) = r3;
                                                                 |         }
    0x00056ec8 ldr.w r3, [sl, 0x114]                             |         r3 = *((sl + 0x114));
    0x00056ecc cmp r3, 0                                         |         
    0x00056ece beq 0x56eac                                       |         
                                                                 |     } while (r3 == 0);
    0x00056ed0 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00056ed2 ldr r2, [r4, 4]                                   |     r2 = *((r4 + 4));
    0x00056ed4 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00056ed6 bne 0x56e8a                                       |         goto label_4;
                                                                 |     }
    0x00056ed8 ldrsh.w r3, [r4, 0x24]                            |     r3 = *((r4 + 0x24));
    0x00056edc add.w r3, r3, r3, lsl 1                           |     r3 += (r3 << 1);
    0x00056ee0 lsls r3, r3, 3                                    |     r3 <<= 3;
    0x00056ee2 b 0x56e96                                         |     goto label_5;
                                                                 | label_35:
    0x00056ee4 ldr r6, [sp, 0x44]                                |     r6 = var_44h_2;
    0x00056ee6 str r0, [sp, 0x34]                                |     var_34h_2 = r0;
                                                                 | label_33:
    0x00056ee8 ldr r3, [r4]                                      |     r3 = *(r4);
    0x00056eea mov r0, sb                                        |     r0 = sb;
    0x00056eec ldr r2, [r4, 0x20]                                |     r2 = *((r4 + 0x20));
    0x00056eee ldr r1, [sp, 0x38]                                |     r1 = var_38h;
    0x00056ef0 str r3, [sp]                                      |     *(sp) = r3;
    0x00056ef2 movs r3, 0                                        |     r3 = 0;
    0x00056ef4 bl 0x19dd4                                        |     fcn_00019dd4 (r0, r1, r2, r3, r4);
    0x00056ef8 ldr.w r3, [sb, 0x44]                              |     r3 = *((sb + 0x44));
    0x00056efc adds r3, 1                                        |     r3++;
    0x00056efe str.w r3, [sb, 0x44]                              |     __asm ("str.w r3, [sb, 0x44]");
    0x00056f02 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
                                                                 |     if (r3 != 0) {
    0x00056f04 cbnz r3, 0x56f3c                                  |         goto label_36;
                                                                 |     }
                                                                 | label_8:
    0x00056f06 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
                                                                 |     if (r3 != 0) {
    0x00056f08 cbnz r3, 0x56f1c                                  |         goto label_37;
                                                                 |     }
                                                                 | label_7:
    0x00056f0a ldr r1, [sp, 0x3c]                                |     r1 = var_3ch;
    0x00056f0c mov r0, sl                                        |     r0 = sl;
    0x00056f0e bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x00056f12 ldr r5, [r5, 4]                                   |     r5 = *((r5 + 4));
    0x00056f14 cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x00056f16 bne.w 0x56cc0                                     |         goto label_0;
                                                                 |     }
    0x00056f1a b 0x56d54                                         |     goto label_6;
                                                                 | label_37:
    0x00056f1c ldr r3, [sp, 0x34]                                |     r3 = var_34h_2;
    0x00056f1e mov r2, r4                                        |     r2 = r4;
    0x00056f20 ldr r1, [sp, 0x38]                                |     r1 = var_38h;
    0x00056f22 mov r0, sb                                        |     r0 = sb;
    0x00056f24 str r5, [sp]                                      |     *(sp) = r5;
    0x00056f26 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00056f28 ldr r3, [sp, 0x40]                                |     r3 = var_40h_2;
    0x00056f2a str r3, [sp, 4]                                   |     var_4h = r3;
    0x00056f2c ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00056f2e str r3, [sp, 8]                                   |     var_8h = r3;
    0x00056f30 movs r3, 1                                        |     r3 = 1;
    0x00056f32 str r3, [sp, 0xc]                                 |     var_7ch = r3;
    0x00056f34 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00056f36 bl 0x22450                                        |     fcn_00022450 (r0, r1, r2, r3, r4, r5, r6);
    0x00056f3a b 0x56f0a                                         |     goto label_7;
                                                                 | label_36:
    0x00056f3c ldr r3, [sp, 0x34]                                |     r3 = var_34h_2;
    0x00056f3e mov r2, r4                                        |     r2 = r4;
    0x00056f40 ldr r1, [sp, 0x38]                                |     r1 = var_38h;
    0x00056f42 mov r0, sb                                        |     r0 = sb;
    0x00056f44 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00056f46 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00056f48 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00056f4a ldr r3, [sp, 0x40]                                |     r3 = var_40h_2;
    0x00056f4c strd r5, r3, [sp]                                 |     __asm ("strd r5, r3, [sp]");
    0x00056f50 mov.w r3, -1                                      |     r3 = -1;
    0x00056f54 str r3, [sp, 0xc]                                 |     var_7ch = r3;
    0x00056f56 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00056f58 bl 0x22450                                        |     fcn_00022450 (r0, r1, r2, r3, r4, r5, r6);
    0x00056f5c b 0x56f06                                         |     goto label_8;
                                                                 | label_32:
    0x00056f5e ldr r3, [r5, 0x24]                                |     r3 = *((r5 + 0x24));
    0x00056f60 str r3, [sp, 0x50]                                |     var_50h = r3;
    0x00056f62 add r3, sp, 0x50                                  |     r3 += var_50h;
    0x00056f64 str r3, [sp, 0x40]                                |     var_40h_2 = r3;
    0x00056f66 b 0x56e74                                         |     goto label_9;
                                                                 | label_28:
    0x00056f68 mov r3, r0                                        |     r3 = r0;
    0x00056f6a mov r1, r0                                        |     r1 = r0;
    0x00056f6c mov r2, r0                                        |     r2 = r0;
    0x00056f6e mov r0, sl                                        |     r0 = sl;
    0x00056f70 bl 0x18644                                        |     fcn_00018644 (r0, r1, r2);
    0x00056f74 ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x00056f76 mov r1, r0                                        |     r1 = r0;
    0x00056f78 str r3, [sp, 0x20]                                |     var_20h = r3;
                                                                 |     if (r0 != 0) {
    0x00056f7a cbz r0, 0x56faa                                   |         
    0x00056f7c ldr r3, [r4]                                      |         r3 = *(r4);
    0x00056f7e ldrh r2, [r3, 0x28]                               |         r2 = *((r3 + 0x28));
    0x00056f80 str r3, [r0, 0x18]                                |         *((r0 + 0x18)) = r3;
    0x00056f82 ldr.w r0, [sb, 0x44]                              |         r0 = *((sb + 0x44));
    0x00056f86 add.w ip, r2, 1                                   |         
    0x00056f8a ldr r2, [r3]                                      |         r2 = *(r3);
    0x00056f8c str r2, [r1, 0x10]                                |         *((r1 + 0x10)) = r2;
    0x00056f8e strh.w ip, [r3, 0x28]                             |         *((r3 + 0x28)) = ip;
    0x00056f92 adds r3, r0, 1                                    |         r3 = r0 + 1;
    0x00056f94 str.w r3, [sb, 0x44]                              |         __asm ("str.w r3, [sb, 0x44]");
    0x00056f98 ldr r3, [sp, 0x30]                                |         r3 = var_30h;
    0x00056f9a str r0, [r1, 0x30]                                |         *((r1 + 0x30)) = r0;
                                                                 |         if (r3 != 0) {
    0x00056f9c cbnz r3, 0x56ff8                                  |             goto label_38;
                                                                 |         }
                                                                 | label_16:
    0x00056f9e ldr r3, [sp, 0x24]                                |         r3 = var_24h;
                                                                 |         if (r3 != 0) {
    0x00056fa0 cbnz r3, 0x56fdc                                  |             goto label_39;
                                                                 |         }
                                                                 | label_15:
    0x00056fa2 mov r0, sl                                        |         r0 = sl;
    0x00056fa4 str r5, [r1, 0x10]                                |         *((r1 + 0x10)) = r5;
    0x00056fa6 bl 0x12c54                                        |         fcn_00012c54 (r0, r1);
                                                                 |     }
    0x00056faa ldr r1, [sp, 0x20]                                |     r1 = var_20h;
    0x00056fac mov r0, sl                                        |     r0 = sl;
    0x00056fae bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
                                                                 | label_13:
    0x00056fb2 ldr r4, [r4, 0xc]                                 |     r4 = *((r4 + 0xc));
    0x00056fb4 cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x00056fb6 bne.w 0x56d86                                     |         goto label_10;
                                                                 |     }
    0x00056fba b 0x56dd0                                         |     goto label_11;
                                                                 | label_27:
    0x00056fbc ldr.w r3, [sb, 0x198]                             |     r3 = *((sb + 0x198));
    0x00056fc0 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00056fc2 bne.w 0x56dac                                     |         goto label_12;
                                                                 |     }
    0x00056fc6 ldrb.w r3, [sb, 0x14]                             |     r3 = *((sb + 0x14));
    0x00056fca cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00056fcc bne.w 0x56dac                                     |         goto label_12;
                                                                 |     }
    0x00056fd0 b 0x56fb2                                         |     goto label_13;
                                                                 | label_30:
    0x00056fd2 mov r0, sb                                        |     r0 = sb;
    0x00056fd4 bl 0x192c8                                        |     r0 = fcn_000192c8 (r0);
    0x00056fd8 mov r8, r0                                        |     r8 = r0;
    0x00056fda b 0x56e0e                                         |     goto label_14;
                                                                 | label_39:
    0x00056fdc str r3, [sp, 8]                                   |     var_8h = r3;
    0x00056fde mov r2, fp                                        |     r2 = fp;
    0x00056fe0 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00056fe2 mov r0, sb                                        |     r0 = sb;
    0x00056fe4 str r1, [sp, 0x28]                                |     var_28h = r1;
    0x00056fe6 strd r4, r3, [sp]                                 |     __asm ("strd r4, r3, [sp]");
    0x00056fea movs r3, 1                                        |     r3 = 1;
    0x00056fec str r3, [sp, 0xc]                                 |     var_7ch = r3;
    0x00056fee ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x00056ff0 bl 0x411fc                                        |     fcn_000411fc (r0, r1, r2, r3, r4, r5, r6);
    0x00056ff4 ldr r1, [sp, 0x28]                                |     r1 = var_28h;
    0x00056ff6 b 0x56fa2                                         |     goto label_15;
                                                                 | label_38:
    0x00056ff8 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00056ffa mov r2, fp                                        |     r2 = fp;
    0x00056ffc ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00056ffe mov r0, sb                                        |     r0 = sb;
    0x00057000 str r1, [sp, 0x28]                                |     var_28h = r1;
    0x00057002 strd r4, r3, [sp]                                 |     __asm ("strd r4, r3, [sp]");
    0x00057006 mov.w r3, -1                                      |     r3 = -1;
    0x0005700a str r3, [sp, 0xc]                                 |     var_7ch = r3;
    0x0005700c ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x0005700e bl 0x411fc                                        |     fcn_000411fc (r0, r1, r2, r3, r4, r5, r6);
    0x00057012 ldr r1, [sp, 0x28]                                |     r1 = var_28h;
    0x00057014 b 0x56f9e                                         |     goto label_16;
                                                                 | label_17:
    0x00057016 sub.w r3, r5, 0xf40000                            |     r3 = r5 - 0xf40000;
    0x0005701a movw r4, 0xbdc0                                   |     
    0x0005701e sub.w r3, r3, 0x2400                              |     r3 -= 0x2400;
    0x00057022 movt r4, 0xfff0                                   |     r4 = 0xfff0bdc0;
    0x00057026 b 0x56ca6                                         |     goto label_2;
                                                                 | label_29:
    0x00057028 blx 0x6498                                        |     r0 = fcn_00006498 ();
    0x0005702c asrs r4, r0, 0x20                                 |     r4 = r0 >> 0x20;
    0x0005702e movs r2, r0                                       |     r2 = r0;
    0x00057030 lsls r0, r1, 0xe                                  |     r0 = r1 << 0xe;
    0x00057032 movs r0, r0                                       |     
    0x00057034 lsrs r4, r0, 0x1a                                 |     r4 = r0 >> 0x1a;
    0x00057036 movs r2, r0                                       |     r2 = r0;
                                                                 | }
    ; assembly                               | /* r2dec pseudo code output */
                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x57660 */
                                             | #include <stdint.h>
                                             |  
    ; (fcn) fcn.00057660 ()                  | void fcn_00057660 (int16_t arg_f8h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                             |     int16_t var_1h;
                                             |     int16_t var_8h;
                                             |     int16_t var_10h;
                                             |     int16_t var_14h;
                                             |     int16_t var_15h;
                                             |     int16_t var_bp_2ch;
                                             |     int16_t var_0h;
                                             |     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;
                                             |     int32_t var_8ch;
                                             |     int32_t var_8ch_2;
                                             |     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;
                                             |     int32_t var_b0h;
                                             |     int32_t var_b8h;
                                             |     int32_t var_c0h;
                                             |     int16_t var_c8h;
                                             |     int16_t var_cch;
                                             |     r0 = arg1;
                                             |     r1 = arg2;
                                             |     r2 = arg3;
                                             |     r3 = arg4;
    0x00057660 svcmi 0xf0e92d                |     __asm ("svcmi aav.0x000000ff");
    0x00057664 mov sl, r2                    |     sl = r2;
    0x00057666 ldr.w r2, [pc, 0xbec]         |     
    0x0005766a mov r6, r3                    |     r6 = r3;
    0x0005766c sub sp, 0xd4                  |     
    0x0005766e movs r4, 0                    |     r4 = 0;
    0x00057670 ldr.w r3, [pc, 0xbe4]         |     r3 = *(0x58258);
    0x00057674 add r2, pc                    |     r2 = 0xaf8ce;
    0x00057676 str r1, [sp, 0x24]            |     var_24h = r1;
    0x00057678 ldr r5, [r0, 0x40]            |     r5 = *(arg_f8hx40);
    0x0005767a ldr r3, [r2, r3]              |     
    0x0005767c ldr r7, [r0]                  |     r7 = *(r0);
    0x0005767e ldr r3, [r3]                  |     r3 = *(0xaf8ce);
    0x00057680 str r3, [sp, 0xcc]            |     var_cch = r3;
    0x00057682 mov.w r3, 0                   |     r3 = 0;
    0x00057686 add r3, sp, 0x98              |     r3 += var_98h;
    0x00057688 strd r4, r4, [sp, 0x8c]       |     __asm ("strd r4, r4, [var_8ch]");
    0x0005768c strd r4, r4, [sp, 0x98]       |     __asm ("strd r4, r4, [var_98h]");
    0x00057690 strd r4, r4, [sp, 0xa0]       |     __asm ("strd r4, r4, [var_a0h]");
    0x00057694 str r4, [sp, 0xa8]            |     var_a8h = r4;
    0x00057696 str r3, [sp, 0x2c]            |     var_2ch = r3;
    0x00057698 cmp r5, 0                     |     
                                             |     if (r5 != 0) {
    0x0005769a bne.w 0x5788e                 |         goto label_20;
                                             |     }
    0x0005769c strh r0, [r7, 6]              |     *((r7 + 6)) = r0;
    0x0005769e ldrb.w r3, [r7, 0x40]         |     r3 = *((r7 + 0x40));
    0x000576a2 str r3, [sp, 0x30]            |     var_30h = r3;
    0x000576a4 cmp r3, 0                     |     
                                             |     if (r3 != 0) {
    0x000576a6 bne.w 0x5788c                 |         goto label_21;
                                             |     }
    0x000576aa mov r8, r0                    |     r8 = r0;
    0x000576ac cmp.w sl, 0                   |     
                                             |     if (sl == 0) {
    0x000576b0 beq.w 0x57920                 |         goto label_22;
                                             |     }
    0x000576b4 ldrh.w r3, [sl, 6]            |     r3 = *((sl + 6));
    0x000576b8 lsls r4, r3, 0x18             |     r4 = r3 << 0x18;
                                             |     if (r4 < r3) {
    0x000576ba bpl 0x576c6                   |         
    0x000576bc ldr.w r3, [sl, 0x34]          |         r3 = *((sl + 0x34));
    0x000576c0 cmp r3, 0                     |         
                                             |         if (r3 == 0) {
    0x000576c2 beq.w 0x5790c                 |             goto label_23;
                                             |         }
                                             |     }
    0x000576c6 ldr r3, [sp, 0x24]            |     r3 = var_24h;
    0x000576c8 ldr r4, [r3, 0x10]            |     r4 = *((r3 + 0x10));
    0x000576ca cmp r4, 0                     |     
                                             |     if (r4 == 0) {
    0x000576cc beq.w 0x578e0                 |         goto label_24;
                                             |     }
    0x000576d0 ldr r1, [sp, 0x24]            |     r1 = var_24h;
    0x000576d2 mov r0, r8                    |     r0 = r8;
    0x000576d4 bl 0x575d4                    |     r0 = fcn_000575d4 (r0, r1);
    0x000576d8 mov r4, r0                    |     r4 = r0;
    0x000576da cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x000576dc beq.w 0x578e0                 |         goto label_24;
                                             |     }
    0x000576e0 movs r3, 0                    |     r3 = 0;
    0x000576e2 str r3, [sp, 0x28]            |     var_28h = r3;
                                             | label_3:
    0x000576e4 ldr r1, [r4, 0x44]            |     r1 = *((r4 + 0x44));
    0x000576e6 ldr.w ip, [r7, 0x10]          |     ip = *((r7 + 0x10));
    0x000576ea cmp r1, 0                     |     
                                             |     if (r1 == 0) {
    0x000576ec beq.w 0x58276                 |         goto label_25;
                                             |     }
    0x000576f0 ldr r0, [r7, 0x14]            |     r0 = *((r7 + 0x14));
    0x000576f2 mov r3, ip                    |     r3 = ip;
    0x000576f4 cmp r0, 0                     |     
                                             |     if (r0 > 0) {
    0x000576f6 bgt 0x57704                   |         goto label_26;
                                             |     }
    0x000576f8 b 0x5770a                     |     goto label_4;
                                             |     do {
    0x000576fa adds r5, 1                    |         r5++;
    0x000576fc adds r3, 0x10                 |         r3 += 0x10;
    0x000576fe cmp r5, r0                    |         
                                             |         if (r5 == r0) {
    0x00057700 beq.w 0x5793c                 |             goto label_27;
                                             |         }
                                             | label_26:
    0x00057704 ldr r2, [r3, 0xc]             |         r2 = *((r3 + 0xc));
    0x00057706 cmp r1, r2                    |         
    0x00057708 bne 0x576fa                   |         
                                             |     } while (r1 != r2);
                                             | label_4:
    0x0005770a ldr r3, [r3]                  |     r3 = *(r3);
    0x0005770c movs r1, 0x12                 |     r1 = 0x12;
    0x0005770e ldr r2, [r4]                  |     r2 = *(r4);
    0x00057710 mov r0, r8                    |     r0 = r8;
    0x00057712 str r3, [sp]                  |     *(sp) = r3;
    0x00057714 movs r3, 0                    |     r3 = 0;
    0x00057716 bl 0x1cab0                    |     r0 = fcn_0001cab0 (r0);
    0x0005771a cmp r0, 0                     |     
                                             |     if (r0 != 0) {
    0x0005771c bne.w 0x57908                 |         goto label_28;
                                             |     }
    0x00057720 ldrb.w r3, [r4, 0x2c]         |     r3 = *((r4 + 0x2c));
    0x00057724 mov r1, r4                    |     r1 = r4;
    0x00057726 movs r2, 0x6c                 |     r2 = 0x6c;
    0x00057728 str r3, [sp, 0x3c]            |     var_3ch = r3;
    0x0005772a add r3, sp, 0x94              |     r3 += var_94h;
    0x0005772c str r3, [sp]                  |     *(sp) = r3;
    0x0005772e mov r3, r0                    |     r3 = r0;
    0x00057730 mov r0, r8                    |     r0 = r8;
    0x00057732 bl 0x126c4                    |     fcn_000126c4 (r0, r1, r2, r3, r4);
    0x00057736 ldr r3, [r4, 0xc]             |     r3 = *((r4 + 0xc));
    0x00057738 mov r1, r4                    |     r1 = r4;
    0x0005773a str r0, [sp, 0x38]            |     var_38h = r0;
    0x0005773c mov r0, r8                    |     r0 = r8;
    0x0005773e str r3, [sp, 0x40]            |     var_40h = r3;
    0x00057740 bl 0x24200                    |     r0 = fcn_00024200 (r0, r1);
    0x00057744 cmp r0, 0                     |     
                                             |     if (r0 != 0) {
    0x00057746 bne.w 0x57908                 |         goto label_28;
                                             |     }
    0x0005774a ldr r2, [sp, 0x94]            |     r2 = var_94h;
    0x0005774c mov r1, r4                    |     r1 = r4;
    0x0005774e mov r0, r8                    |     r0 = r8;
    0x00057750 bl 0x1e018                    |     r0 = fcn_0001e018 (r0, r1);
    0x00057754 cmp r0, 0                     |     
                                             |     if (r0 != 0) {
    0x00057756 bne.w 0x57908                 |         goto label_28;
                                             |     }
    0x0005775a ldr.w r3, [r8, 8]             |     r3 = *((r8 + 8));
    0x0005775e str r3, [sp, 0x34]            |     var_34h = r3;
    0x00057760 cmp r3, 0                     |     
                                             |     if (r3 == 0) {
    0x00057762 beq.w 0x578fa                 |         goto label_29;
                                             |     }
                                             | label_1:
    0x00057766 ldrb.w r3, [r8, 0x12]         |     r3 = *((r8 + 0x12));
                                             |     if (r3 == 0) {
    0x0005776a cbnz r3, 0x5777a              |         
    0x0005776c ldr r2, [sp, 0x34]            |         r2 = var_34h;
    0x0005776e ldrb.w r3, [r2, 0x58]         |         r3 = *((r2 + 0x58));
    0x00057772 orr r3, r3, 0x10              |         r3 |= 0x10;
    0x00057776 strb.w r3, [r2, 0x58]         |         *((r2 + 0x58)) = r3;
                                             |     }
    0x0005777a ldr r3, [sp, 0x38]            |     r3 = var_38h;
    0x0005777c mov r2, r5                    |     r2 = r5;
    0x0005777e mov r0, r8                    |     r0 = r8;
    0x00057780 orrs.w r3, r3, sl             |     r3 |= sl;
    0x00057784 ite ne                        |     
                                             |     if (r3 == r3) {
    0x00057786 movne r1, 1                   |         r1 = 1;
                                             |     }
                                             |     if (r3 != r3) {
    0x00057788 moveq r1, 0                   |         r1 = 0;
                                             |     }
    0x0005778a bl 0x43838                    |     fcn_00043838 (r0, r1, r2);
    0x0005778e subs r3, r6, 0                |     r3 = r6 - 0;
    0x00057790 it ne                         |     
                                             |     if (r3 == r6) {
    0x00057792 movne r3, 1                   |         r3 = 1;
                                             |     }
    0x00057794 cmp.w sl, 0                   |     
    0x00057798 it eq                         |     
                                             |     if (sl != 0) {
    0x0005779a orreq r3, r3, 1               |         r3 |= 1;
                                             |     }
    0x0005779e cmp r3, 0                     |     
                                             |     if (r3 == 0) {
    0x000577a0 beq.w 0x57f42                 |         goto label_30;
                                             |     }
                                             | label_6:
    0x000577a4 mov r2, r4                    |     r2 = r4;
    0x000577a6 mov r1, r5                    |     r1 = r5;
    0x000577a8 mov r0, r8                    |     r0 = r8;
    0x000577aa bl 0xd51c                     |     fcn_0000d51c (r0, r1, r2);
    0x000577ae ldrsh.w r3, [r4, 0x26]        |     r3 = *((r4 + 0x26));
    0x000577b2 ldr.w r1, [r8, 0x48]          |     r1 = *((r8 + 0x48));
    0x000577b6 str r0, [sp, 0x64]            |     var_64h = r0;
    0x000577b8 adds r2, r3, 1                |     r2 = r3 + 1;
    0x000577ba add r2, r1                    |     r2 += r1;
    0x000577bc adds r0, r1, 1                |     r0 = r1 + 1;
    0x000577be str.w r2, [r8, 0x48]          |     __asm ("str.w r2, [r8, 0x48]");
    0x000577c2 ldrb.w ip, [r4, 0x2c]         |     ip = *((r4 + 0x2c));
    0x000577c6 str r0, [sp, 0x48]            |     var_48h = r0;
    0x000577c8 tst.w ip, 0x10                |     
    0x000577cc iteee eq                      |     
                                             |     if ((ip & 0x10) != 0) {
    0x000577ce ldreq r2, [sp, 0x48]          |         r2 = var_48h;
                                             |     }
                                             |     if ((ip & 0x10) == 0) {
    0x000577d0 addne r2, 1                   |         r2++;
                                             |     }
                                             |     if ((ip & 0x10) == 0) {
    0x000577d2 strne r2, [r8, 0x48]          |         *((r8 + 0x48)) = r2;
                                             |     }
                                             |     if ((ip & 0x10) != 0) {
    0x000577d6 adds r2, r1, 2                |         r2 = r1 + 2;
                                             |     }
    0x000577d8 str r2, [sp, 0x44]            |     var_44h = r2;
    0x000577da ldr r2, [sp, 0x3c]            |     r2 = var_3ch;
    0x000577dc and r2, r2, 0x20              |     r2 &= 0x20;
    0x000577e0 str r2, [sp, 0x3c]            |     var_3ch = r2;
    0x000577e2 ldr r2, [sp, 0x44]            |     r2 = var_44h;
    0x000577e4 adds r2, 1                    |     r2++;
    0x000577e6 str r2, [sp, 0x5c]            |     var_5ch = r2;
    0x000577e8 cmp r6, 0                     |     
                                             |     if (r6 == 0) {
    0x000577ea beq.w 0x57f0c                 |         goto label_31;
                                             |     }
    0x000577ee ldr r0, [r6, 4]               |     r0 = *((r6 + 4));
    0x000577f0 cmp r0, 0                     |     
                                             |     if (r0 <= 0) {
    0x000577f2 ble.w 0x57f0c                 |         goto label_31;
                                             |     }
    0x000577f6 ldr r1, [r6]                  |     r1 = *(r6);
    0x000577f8 mov.w ip, -1                  |     
    0x000577fc mov r2, r1                    |     r2 = r1;
    0x000577fe add.w r0, r1, r0, lsl 3       |     r0 = r1 + (r0 << 3);
                                             |     do {
    0x00057802 str.w ip, [r2, 4]             |         __asm ("str.w ip, [r2, 4]");
    0x00057806 adds r2, 8                    |         r2 += 8;
    0x00057808 cmp r0, r2                    |         
    0x0005780a bne 0x57802                   |         
                                             |     } while (r0 != r2);
    0x0005780c movs r0, 1                    |     r0 = 1;
    0x0005780e mov.w r2, -1                  |     r2 = -1;
    0x00057812 str.w sl, [sp, 0x58]          |     __asm ("str.w sl, [var_58h]");
    0x00057816 mov fp, r2                    |     
    0x00057818 mov sl, r4                    |     sl = r4;
    0x0005781a mov.w sb, 0                   |     sb = 0;
    0x0005781e mov r4, r0                    |     r4 = r0;
    0x00057820 str r7, [sp, 0x50]            |     var_50h = r7;
    0x00057822 str r5, [sp, 0x60]            |     var_60h = r5;
    0x00057824 str.w r8, [sp, 0x4c]          |     __asm ("str.w r8, [var_4ch]");
                                             | label_0:
    0x00057828 cmp r3, 0                     |     
    0x0005782a lsl.w r7, sb, 3               |     r7 = sb << 3;
    0x0005782e itt gt                        |     
                                             |     if (r3 <= 0) {
    0x00057830 movgt r5, 0                   |         r5 = 0;
                                             |     }
                                             |     if (r3 <= 0) {
    0x00057832 movgt r8, r5                  |         r8 = r5;
                                             |     }
                                             |     if (r3 > 0) {
    0x00057834 bgt 0x5784a                   |         goto label_32;
                                             |     }
    0x00057836 b 0x57954                     |     goto label_33;
                                             |     do {
    0x00057838 ldrsh.w r3, [sl, 0x26]        |         r3 = *((sl + 0x26));
    0x0005783c adds r5, 1                    |         r5++;
    0x0005783e ldr r1, [r6]                  |         r1 = *(r6);
    0x00057840 add.w r8, r8, 0x18            |         r8 += 0x18;
    0x00057844 cmp r3, r5                    |         
                                             |         if (r3 <= r5) {
    0x00057846 ble.w 0x57954                 |             goto label_33;
                                             |         }
                                             | label_32:
    0x0005784a ldr.w r3, [sl, 4]             |         r3 = *((sl + 4));
    0x0005784e ldr r0, [r1, r7]              |         r0 = *((r1 + r7));
    0x00057850 ldr.w r1, [r3, r8]            |         r1 = *((r3 + r8));
    0x00057854 blx 0x6164                    |         r0 = fcn_00006164 ();
    0x00057858 cmp r0, 0                     |         
    0x0005785a bne 0x57838                   |         
                                             |     } while (r0 != 0);
    0x0005785c ldrsh.w r3, [sl, 0x24]        |     r3 = *((sl + 0x24));
    0x00057860 cmp r5, sb                    |     
    0x00057862 it ne                         |     
                                             |     if (r5 == sb) {
    0x00057864 movne r4, 0                   |         r4 = 0;
                                             |     }
    0x00057866 ldr r1, [r6]                  |     r1 = *(r6);
    0x00057868 cmp r3, r5                    |     
    0x0005786a it eq                         |     
                                             |     if (r3 != r5) {
    0x0005786c moveq fp, sb                  |         
                                             |     }
    0x0005786e ldrsh.w r3, [sl, 0x26]        |     r3 = *((sl + 0x26));
    0x00057872 adds r0, r1, r7               |     r0 = r1 + r7;
    0x00057874 str r5, [r0, 4]               |     *((r0 + 4)) = r5;
    0x00057876 cmp r3, r5                    |     
                                             |     if (r3 <= r5) {
    0x00057878 ble 0x57954                   |         goto label_33;
                                             |     }
                                             | label_5:
    0x0005787a ldr r3, [r6, 4]               |     r3 = *((r6 + 4));
    0x0005787c add.w sb, sb, 1               |     sb++;
    0x00057880 cmp r3, sb                    |     
                                             |     if (r3 <= sb) {
    0x00057882 ble 0x57976                   |         goto label_34;
                                             |     }
    0x00057884 ldrsh.w r3, [sl, 0x26]        |     r3 = *((sl + 0x26));
    0x00057888 ldr r1, [r6]                  |     r1 = *(r6);
    0x0005788a b 0x57828                     |     goto label_0;
                                             | label_21:
    0x0005788c mov r4, r5                    |     r4 = r5;
                                             | label_20:
    0x0005788e str r4, [sp, 0x28]            |     var_28h = r4;
                                             | label_2:
    0x00057890 ldr r1, [sp, 0x24]            |     r1 = var_24h;
    0x00057892 mov r0, r7                    |     r0 = r7;
    0x00057894 bl 0x12c54                    |     fcn_00012c54 (r0, r1);
    0x00057898 ldr r1, [sp, 0x28]            |     r1 = var_28h;
    0x0005789a mov r0, r7                    |     r0 = r7;
    0x0005789c bl 0x12ec8                    |     fcn_00012ec8 (r0);
    0x000578a0 cmp.w sl, 0                   |     
                                             |     if (sl == 0) {
    0x000578a4 beq 0x578ae                   |         void (*0x578ae)() ();
                                             |     }
                                             | label_24:
    0x000578e0 ldr r1, [sp, 0x24]            |     r1 = var_24h;
    0x000578e2 mov r0, r7                    |     r0 = r7;
    0x000578e4 bl 0x12c54                    |     fcn_00012c54 (r0, r1);
    0x000578e8 mov r1, r4                    |     r1 = r4;
    0x000578ea mov r0, r7                    |     r0 = r7;
    0x000578ec bl 0x12ec8                    |     fcn_00012ec8 (r0);
    0x000578f0 mov r1, sl                    |     r1 = sl;
    0x000578f2 mov r0, r7                    |     r0 = r7;
    0x000578f4 bl 0x12df8                    |     fcn_00012df8 (r0, r1);
    0x000578f8 b 0x578ae                     |     void (*0x578ae)() ();
                                             | label_29:
    0x000578fa mov r0, r8                    |     r0 = r8;
    0x000578fc bl 0x192c8                    |     fcn_000192c8 (r0);
    0x00057900 str r0, [sp, 0x34]            |     var_34h = r0;
    0x00057902 cmp r0, 0                     |     
                                             |     if (r0 != 0) {
    0x00057904 bne.w 0x57766                 |         goto label_1;
                                             |     }
                                             | label_28:
    0x00057908 movs r4, 0                    |     r4 = 0;
    0x0005790a b 0x57890                     |     goto label_2;
                                             | label_23:
    0x0005790c ldr r2, [sp, 0x30]            |     r2 = var_30h;
    0x0005790e mov r1, sl                    |     r1 = sl;
    0x00057910 ldr.w r3, [sl]                |     r3 = *(sl);
    0x00057914 mov r0, r7                    |     r0 = r7;
    0x00057916 str.w r2, [sl]                |     __asm ("str.w r2, [sl]");
    0x0005791a mov sl, r3                    |     sl = r3;
    0x0005791c bl 0x12df8                    |     fcn_00012df8 (r0, r1);
                                             | label_22:
    0x00057920 ldr r3, [sp, 0x24]            |     r3 = var_24h;
    0x00057922 ldr r4, [r3, 0x10]            |     r4 = *((r3 + 0x10));
                                             |     if (r4 != 0) {
    0x00057924 cbz r4, 0x57942               |         
    0x00057926 ldr r1, [sp, 0x24]            |         r1 = var_24h;
    0x00057928 mov r0, r8                    |         r0 = r8;
    0x0005792a bl 0x575d4                    |         r0 = fcn_000575d4 (r0, r1);
    0x0005792e mov r4, r0                    |         r4 = r0;
                                             |         if (r0 == 0) {
    0x00057930 cbz r0, 0x57942               |             goto label_35;
                                             |         }
    0x00057932 str.w sl, [sp, 0x28]          |         __asm ("str.w sl, [var_28h]");
    0x00057936 mov.w sl, 0                   |         sl = 0;
    0x0005793a b 0x576e4                     |         goto label_3;
                                             | label_27:
    0x0005793c add.w r3, ip, r5, lsl 4       |         r3 = ip + (r5 << 4);
    0x00057940 b 0x5770a                     |         goto label_4;
                                             |     }
                                             | label_35:
    0x00057942 ldr r1, [sp, 0x24]            |     r1 = var_24h;
    0x00057944 mov r0, r7                    |     r0 = r7;
    0x00057946 bl 0x12c54                    |     fcn_00012c54 (r0, r1);
    0x0005794a mov r1, sl                    |     r1 = sl;
    0x0005794c mov r0, r7                    |     r0 = r7;
    0x0005794e bl 0x12ec8                    |     fcn_00012ec8 (r0);
    0x00057952 b 0x578ae                     |     void (*0x578ae)() ();
                                             | label_33:
    0x00057954 ldr r0, [r1, r7]              |     r0 = *((r1 + r7));
    0x00057956 bl 0x12464                    |     fcn_00012464 (r0);
    0x0005795a ldr r3, [sp, 0x3c]            |     r3 = var_3ch;
    0x0005795c cmp r0, 0                     |     
    0x0005795e clz r3, r3                    |     r3 &= r3;
    0x00057962 lsr.w r3, r3, 5               |     r3 >>= 5;
    0x00057966 it eq                         |     
                                             |     if (r0 != 0) {
    0x00057968 moveq r3, 0                   |         r3 = 0;
                                             |     }
    0x0005796a cmp r3, 0                     |     
                                             |     if (r3 == 0) {
    0x0005796c beq.w 0x580da                 |         goto label_36;
                                             |     }
    0x00057970 movs r4, 0                    |     r4 = 0;
    0x00057972 mov fp, sb                    |     
    0x00057974 b 0x5787a                     |     goto label_5;
                                             | label_34:
    0x00057976 str r4, [sp, 0x68]            |     var_68h = r4;
    0x00057978 mov r4, sl                    |     r4 = sl;
    0x0005797a ldr.w sl, [sp, 0x58]          |     sl = var_58h;
    0x0005797e ldr r7, [sp, 0x50]            |     r7 = var_50h;
    0x00057980 ldr r5, [sp, 0x60]            |     r5 = var_60h;
    0x00057982 ldr.w r8, [sp, 0x4c]          |     r8 = var_4ch;
    0x00057986 str.w fp, [sp, 0x54]          |     __asm ("str.w fp, [var_54h]");
    0x0005798a cmp.w sl, 0                   |     
                                             |     if (sl == 0) {
    0x0005798e beq.w 0x58122                 |         goto label_37;
                                             |     }
    0x00057992 ldr r0, [sp, 0x34]            |     r0 = var_34h;
    0x00057994 movs r1, 0x14                 |     r1 = 0x14;
    0x00057996 ldr.w r3, [r8, 0x48]          |     r3 = *((r8 + 0x48));
    0x0005799a ldr.w fp, [r0, 0x20]          |     fp = *((r0 + 0x20));
    0x0005799e add.w sb, r3, 1               |     sb = r3 + 1;
    0x000579a2 movs r3, 0                    |     r3 = 0;
    0x000579a4 str.w sb, [r8, 0x48]          |     __asm ("str.w sb, [r8, 0x48]");
    0x000579a8 mov r2, sb                    |     r2 = sb;
    0x000579aa add.w ip, fp, 1               |     
    0x000579ae str.w ip, [sp]                |     __asm ("str.w ip, [sp]");
    0x000579b2 bl 0x18bf8                    |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000579b6 ldr r3, [sp, 0x68]            |     r3 = var_68h;
    0x000579b8 cmp r3, 0                     |     
    0x000579ba ldr r3, [sp, 0x5c]            |     r3 = var_5ch;
    0x000579bc it eq                         |     
                                             |     if (r3 == 0) {
                                             | label_16:
    0x00057e50 ldr.w r3, [r8, 0x19c]         |         r3 = *((r8 + 0x19c));
                                             |     }
    0x00057e54 cmp r3, 0                     |     
                                             |     if (r3 != 0) {
    0x00057e56 bne.w 0x57890                 |         goto label_2;
                                             |     }
    0x00057e5a mov r0, r8                    |     r0 = r8;
    0x00057e5c bl 0x221f4                    |     fcn_000221f4 (r0, r1, r2);
    0x00057e60 ldr r3, [r7, 0x18]            |     r3 = *((r7 + 0x18));
    0x00057e62 lsls r3, r3, 0x18             |     r3 <<= 0x18;
                                             |     if (r3 >= r3) {
    0x00057e64 bpl.w 0x57890                 |         goto label_2;
                                             |     }
                                             | label_31:
    0x00057f0c cmp.w sl, 0                   |     
                                             |     if (sl == 0) {
    0x00057f10 beq.w 0x5811c                 |         goto label_38;
                                             |     }
    0x00057f14 ldr r0, [sp, 0x34]            |     r0 = var_34h;
    0x00057f16 movs r1, 0x14                 |     r1 = 0x14;
    0x00057f18 ldr.w r3, [r8, 0x48]          |     r3 = *((r8 + 0x48));
    0x00057f1c ldr.w fp, [r0, 0x20]          |     fp = *((r0 + 0x20));
    0x00057f20 add.w sb, r3, 1               |     sb = r3 + 1;
    0x00057f24 movs r3, 0                    |     r3 = 0;
    0x00057f26 str.w sb, [r8, 0x48]          |     __asm ("str.w sb, [r8, 0x48]");
    0x00057f2a mov r2, sb                    |     r2 = sb;
    0x00057f2c add.w ip, fp, 1               |     
    0x00057f30 str.w ip, [sp]                |     __asm ("str.w ip, [sp]");
    0x00057f34 bl 0x18bf8                    |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00057f38 mov.w r3, -1                  |     r3 = -1;
    0x00057f3c str r3, [sp, 0x54]            |     var_54h = r3;
    0x00057f3e ldr r3, [sp, 0x5c]            |     r3 = var_5ch;
    0x00057f40 b 0x579c0                     |     void (*0x579c0)() ();
                                             | label_30:
    0x00057f42 ldr.w r3, [r8, 0x214]         |     r3 = *((r8 + 0x214));
    0x00057f46 cmp r3, 0                     |     
                                             |     if (r3 != 0) {
    0x00057f48 bne.w 0x577a4                 |         goto label_6;
                                             |     }
    0x00057f4c ldr.w r3, [sl, 0x44]          |     r3 = *((sl + 0x44));
    0x00057f50 cmp r3, 0                     |     
                                             |     if (r3 != 0) {
    0x00057f52 bne.w 0x577a4                 |         goto label_6;
                                             |     }
    0x00057f56 ldrb.w r1, [r8, 0x1b6]        |     r1 = *((r8 + 0x1b6));
    0x00057f5a mov r2, r4                    |     r2 = r4;
    0x00057f5c ldr.w r0, [r8]                |     r0 = *(r8);
    0x00057f60 bl 0x1258c                    |     r0 = fcn_0001258c (r0, r1, r2);
    0x00057f64 cmp r0, 0                     |     
                                             |     if (r0 != 0) {
    0x00057f66 bne.w 0x577a4                 |         goto label_6;
                                             |     }
    0x00057f6a ldrb.w r3, [r4, 0x2c]         |     r3 = *((r4 + 0x2c));
    0x00057f6e lsls r0, r3, 0x1b             |     r0 = r3 << 0x1b;
                                             |     if (r0 < r3) {
    0x00057f70 bmi.w 0x577a4                 |         goto label_6;
                                             |     }
    0x00057f74 ldr r3, [sp, 0xf8]            |     r3 = *(arg_f8h);
    0x00057f76 cmp r3, 0xa                   |     
                                             |     if (r3 == 0xa) {
    0x00057f78 beq.w 0x5893a                 |         goto label_39;
                                             |     }
    0x00057f7c ldr r3, [sp, 0xf8]            |     r3 = *(arg_f8h);
    0x00057f7e str r3, [sp, 0x5c]            |     var_5ch = r3;
                                             | label_9:
    0x00057f80 ldr.w r2, [sl, 0x20]          |     r2 = *((sl + 0x20));
    0x00057f84 ldr r3, [r2]                  |     r3 = *(r2);
    0x00057f86 cmp r3, 1                     |     
                                             |     if (r3 != 1) {
    0x00057f88 bne.w 0x577a4                 |         goto label_6;
                                             |     }
    0x00057f8c ldr r3, [r2, 0x1c]            |     r3 = *((r2 + 0x1c));
    0x00057f8e cmp r3, 0                     |     
                                             |     if (r3 != 0) {
    0x00057f90 bne.w 0x577a4                 |         goto label_6;
                                             |     }
    0x00057f94 ldr.w r3, [sl, 0x24]          |     r3 = *((sl + 0x24));
    0x00057f98 cmp r3, 0                     |     
                                             |     if (r3 != 0) {
    0x00057f9a bne.w 0x577a4                 |         goto label_6;
                                             |     }
    0x00057f9e ldr.w r3, [sl, 0x30]          |     r3 = *((sl + 0x30));
    0x00057fa2 cmp r3, 0                     |     
                                             |     if (r3 != 0) {
    0x00057fa4 bne.w 0x577a4                 |         goto label_6;
                                             |     }
    0x00057fa8 ldr.w r3, [sl, 0x28]          |     r3 = *((sl + 0x28));
    0x00057fac cmp r3, 0                     |     
                                             |     if (r3 != 0) {
    0x00057fae bne.w 0x577a4                 |         goto label_6;
                                             |     }
    0x00057fb2 ldr.w r3, [sl, 0x3c]          |     r3 = *((sl + 0x3c));
    0x00057fb6 cmp r3, 0                     |     
                                             |     if (r3 != 0) {
    0x00057fb8 bne.w 0x577a4                 |         goto label_6;
                                             |     }
    0x00057fbc ldr.w r3, [sl, 0x34]          |     r3 = *((sl + 0x34));
    0x00057fc0 cmp r3, 0                     |     
                                             |     if (r3 != 0) {
    0x00057fc2 bne.w 0x577a4                 |         goto label_6;
                                             |     }
    0x00057fc6 ldrh.w r3, [sl, 6]            |     r3 = *((sl + 6));
    0x00057fca lsls r1, r3, 0x1f             |     r1 = r3 << 0x1f;
                                             |     if (r1 < r3) {
    0x00057fcc bmi.w 0x577a4                 |         goto label_6;
                                             |     }
    0x00057fd0 ldr.w r3, [sl]                |     r3 = *(sl);
    0x00057fd4 ldr r1, [r3]                  |     r1 = *(r3);
    0x00057fd6 cmp r1, 1                     |     
                                             |     if (r1 != 1) {
    0x00057fd8 bne.w 0x577a4                 |         goto label_6;
                                             |     }
    0x00057fdc ldr r3, [r3, 4]               |     r3 = *((r3 + 4));
    0x00057fde ldr r3, [r3]                  |     r3 = *(r3);
    0x00057fe0 ldrb r3, [r3]                 |     r3 = *(r3);
    0x00057fe2 cmp r3, 0x74                  |     
                                             |     if (r3 != 0x74) {
    0x00057fe4 bne.w 0x577a4                 |         goto label_6;
                                             |     }
    0x00057fe8 adds r2, 8                    |     r2 += 8;
    0x00057fea movs r1, 0                    |     r1 = 0;
    0x00057fec mov r0, r8                    |     r0 = r8;
    0x00057fee bl 0x55ff8                    |     r0 = fcn_00055ff8 (r0, r1, r2);
    0x00057ff2 cmp r4, r0                    |     
                                             |     if (r4 == r0) {
    0x00057ff4 beq.w 0x577a4                 |         goto label_6;
                                             |     }
    0x00057ff8 cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x00057ffa beq.w 0x577a4                 |         goto label_6;
                                             |     }
    0x00057ffe ldrb.w r1, [r0, 0x2c]         |     r1 = *((r0 + 0x2c));
    0x00058002 ldrb.w r3, [r4, 0x2c]         |     r3 = *((r4 + 0x2c));
    0x00058006 eor r2, r1, 0x20              |     r2 = r1 ^ 0x20;
    0x0005800a eor r3, r3, 0x20              |     r3 ^= 0x20;
    0x0005800e ubfx r2, r2, 5, 1             |     r2 = (r2 >> 5) & ((1 << 1) - 1);
    0x00058012 ubfx r3, r3, 5, 1             |     r3 = (r3 >> 5) & ((1 << 1) - 1);
    0x00058016 cmp r3, r2                    |     
                                             |     if (r3 != r2) {
    0x00058018 bne.w 0x577a4                 |         goto label_6;
                                             |     }
    0x0005801c lsls r3, r1, 0x1b             |     r3 = r1 << 0x1b;
                                             |     if (r3 < r1) {
    0x0005801e bmi.w 0x577a4                 |         goto label_6;
                                             |     }
    0x00058022 ldr r3, [r0, 0xc]             |     r3 = *((r0 + 0xc));
    0x00058024 mov r2, r0                    |     r2 = r0;
    0x00058026 cmp r3, 0                     |     
                                             |     if (r3 != 0) {
    0x00058028 bne.w 0x577a4                 |         goto label_6;
                                             |     }
    0x0005802c ldrsh.w r0, [r4, 0x26]        |     r0 = *((r4 + 0x26));
    0x00058030 str r2, [sp, 0x48]            |     var_48h = r2;
    0x00058032 ldrsh.w r2, [r2, 0x26]        |     r2 = *((r2 + 0x26));
    0x00058036 cmp r0, r2                    |     
                                             |     if (r0 != r2) {
    0x00058038 bne.w 0x577a4                 |         goto label_6;
                                             |     }
    0x0005803c ldr r2, [sp, 0x48]            |     r2 = var_48h;
    0x0005803e ldrsh.w r1, [r4, 0x24]        |     r1 = *((r4 + 0x24));
    0x00058042 ldrsh.w r2, [r2, 0x24]        |     r2 = *((r2 + 0x24));
    0x00058046 cmp r1, r2                    |     
                                             |     if (r1 != r2) {
    0x00058048 bne.w 0x577a4                 |         goto label_6;
                                             |     }
    0x0005804c str r5, [sp, 0x44]            |     var_44h = r5;
    0x0005804e mov r5, r4                    |     r5 = r4;
    0x00058050 mov r4, r3                    |     r4 = r3;
                                             |     do {
    0x00058052 cmp r4, r0                    |         
                                             |         if (r4 >= r0) {
    0x00058054 bge.w 0x588fe                 |             goto label_40;
                                             |         }
    0x00058058 movs r3, 0x18                 |         r3 = 0x18;
    0x0005805a ldr r1, [r5, 4]               |         r1 = *((r5 + 4));
    0x0005805c mul r2, r3, r4                |         r2 = r3 * r4;
    0x00058060 ldr r3, [sp, 0x48]            |         r3 = var_48h;
    0x00058062 add.w fp, r1, r2              |         
    0x00058066 ldr r1, [r3, 4]               |         r1 = *((r3 + 4));
    0x00058068 add.w sb, r1, r2              |         sb = r1 + r2;
    0x0005806c ldrb.w r1, [fp, 0x15]         |         r1 = var_15h;
    0x00058070 ldrb.w r2, [sb, 0x15]         |         r2 = *((sb + 0x15));
    0x00058074 cmp r1, r2                    |         
                                             |         if (r1 != r2) {
    0x00058076 bne.w 0x588f6                 |             goto label_41;
                                             |         }
    0x0005807a ldr.w r0, [fp, 0x10]          |         r0 = var_10h;
    0x0005807e ldr.w r1, [sb, 0x10]          |         r1 = *((sb + 0x10));
    0x00058082 cmp r0, 0                     |         
                                             |         if (r0 == 0) {
    0x00058084 beq.w 0x588f0                 |             goto label_42;
                                             |         }
    0x00058088 cmp r1, 0                     |         
                                             |         if (r1 == 0) {
    0x0005808a beq.w 0x588f6                 |             goto label_41;
                                             |         }
    0x0005808e blx 0x6164                    |         r0 = fcn_00006164 ();
    0x00058092 cmp r0, 0                     |         
                                             |         if (r0 != 0) {
    0x00058094 bne.w 0x588f6                 |             goto label_41;
                                             |         }
                                             | label_8:
    0x00058098 ldrb.w r2, [fp, 0x14]         |         r2 = var_14h;
                                             |         if (r2 != 0) {
    0x0005809c cbz r2, 0x580a8               |             
    0x0005809e ldrb.w r2, [sb, 0x14]         |             r2 = *((sb + 0x14));
    0x000580a2 cmp r2, 0                     |             
                                             |             if (r2 == 0) {
    0x000580a4 beq.w 0x588f6                 |                 goto label_41;
                                             |             }
                                             |         }
                                             |         if (r4 != 0) {
    0x000580a8 cbz r4, 0x580d2               |             
    0x000580aa ldr.w r0, [fp, 8]             |             r0 = var_8h;
    0x000580ae ldr.w r1, [sb, 8]             |             r1 = *((sb + 8));
    0x000580b2 clz ip, r0                    |             
    0x000580b6 clz r2, r1                    |             r2 &= r1;
    0x000580ba lsr.w ip, ip, 5               |             
    0x000580be lsrs r2, r2, 5                |             r2 >>= 5;
    0x000580c0 cmp ip, r2                    |             
                                             |             if (ip != r2) {
    0x000580c2 bne.w 0x588f6                 |                 goto label_41;
                                             |             }
                                             |             if (r0 == 0) {
    0x000580c6 cbz r0, 0x580d2               |                 goto label_43;
                                             |             }
    0x000580c8 blx 0x67b8                    |             r0 = fcn_000067b8 ();
    0x000580cc cmp r0, 0                     |             
                                             |             if (r0 != 0) {
    0x000580ce bne.w 0x588f6                 |                 goto label_41;
                                             |             }
                                             |         }
                                             | label_43:
    0x000580d2 ldrsh.w r0, [r5, 0x26]        |         r0 = *((r5 + 0x26));
    0x000580d6 adds r4, 1                    |         r4++;
    0x000580d8 b 0x58052                     |         
                                             |     } while (1);
                                             | label_36:
    0x000580da ldr r2, [r6]                  |     r2 = *(r6);
    0x000580dc mov r1, r7                    |     r1 = r7;
    0x000580de ldrd r8, r7, [sp, 0x4c]       |     __asm ("ldrd r8, r7, [var_50h]");
    0x000580e2 ldr.w sl, [sp, 0x58]          |     sl = var_58h;
    0x000580e6 ldr r2, [r2, r1]              |     r2 = *((r2 + r1));
    0x000580e8 ldr r1, [pc, 0x178]           |     
    0x000580ea mov r0, r8                    |     r0 = r8;
    0x000580ec str r2, [sp]                  |     *(sp) = r2;
    0x000580ee add r1, pc                    |     r1 = 0xb0356;
    0x000580f0 ldr r2, [sp, 0x24]            |     r2 = var_24h;
    0x000580f2 bl 0x1ca34                    |     fcn_0001ca34 (r0);
    0x000580f6 movs r3, 1                    |     r3 = 1;
    0x000580f8 strb.w r3, [r8, 0x11]         |     *((r8 + 0x11)) = r3;
                                             | label_38:
    0x0005811c mov.w r3, -1                  |     r3 = -1;
    0x00058120 str r3, [sp, 0x54]            |     var_54h = r3;
                                             | label_37:
    0x00058122 ldr r2, [sp, 0x28]            |     r2 = var_28h;
    0x00058124 movs r3, 0                    |     r3 = 0;
    0x00058126 str.w r8, [sp, 0xac]          |     __asm ("str.w r8, [var_ach]");
    0x0005812a strd r3, r3, [sp, 0xb0]       |     __asm ("strd r3, r3, [var_8h]");
    0x0005812e strd r3, r3, [sp, 0xb8]       |     __asm ("strd r3, r3, [var_10h]");
    0x00058132 strd r3, r3, [sp, 0xc0]       |     __asm ("strd r3, r3, [var_14h]");
    0x00058136 str r3, [sp, 0xc8]            |     var_c8h = r3;
    0x00058138 cmp r2, 0                     |     
                                             |     if (r2 == 0) {
    0x0005813a beq 0x58236                   |         goto label_44;
                                             |     }
    0x0005813c ldr r2, [r2]                  |     r2 = *(r2);
    0x0005813e cmp r2, r3                    |     
    0x00058140 str r2, [sp, 0x50]            |     var_50h = r2;
    0x00058142 ittt le                       |     
                                             |     if (r2 > r3) {
    0x00058144 movle lr, r3                  |         lr = r3;
                                             |     }
                                             |     if (r2 <= r3) {
    0x00058146 clzle r3, r6                  |         __asm ("clzle r3, r6");
                                             |     }
                                             |     if (r2 > r3) {
    0x0005814a lsrs r3, r3, 5                |         r3 >>= 5;
                                             |         goto label_45;
                                             |     }
                                             |     if (r3 <= r3) {
                                             | label_45:
    0x0005814c ble 0x58242                   |         void (*0x58242)() ();
                                             |     }
    0x0005814e mov sb, r6                    |     sb = r6;
    0x00058150 str r7, [sp, 0x2c]            |     var_2ch = r7;
    0x00058152 str r4, [sp, 0x4c]            |     var_4ch = r4;
    0x00058154 add.w fp, sp, 0xac            |     
    0x00058158 ldr r4, [sp, 0x50]            |     r4 = var_50h;
    0x0005815a mov r5, r3                    |     r5 = r3;
    0x0005815c ldr r6, [sp, 0x28]            |     r6 = var_28h;
    0x0005815e mov r7, r3                    |     r7 = r3;
    0x00058160 b 0x5816c                     |     goto label_46;
                                             | label_7:
    0x00058162 adds r7, 1                    |     r7++;
    0x00058164 adds r5, 0x14                 |     r5 += 0x14;
    0x00058166 cmp r4, r7                    |     
                                             |     if (r4 == r7) {
    0x00058168 beq.w 0x582a2                 |         void (*0x582a2)() ();
                                             |     }
                                             | label_46:
    0x0005816c ldr r1, [r6, 4]               |     r1 = *((r6 + 4));
    0x0005816e ldr r1, [r1, r5]              |     r1 = *((r1 + r5));
    0x00058170 cmp r1, 0                     |     
                                             |     if (r1 == 0) {
    0x00058172 beq 0x58162                   |         goto label_7;
                                             |     }
    0x00058174 mov r0, fp                    |     r0 = fp;
    0x00058176 bl 0x1f318                    |     r0 = fcn_0001f318 (r0, r1);
    0x0005817a cmp r0, 0                     |     
                                             |     if (r0 == 0) {
    0x0005817c beq 0x58162                   |         goto label_7;
                                             |     }
    0x0005817e ldr r7, [sp, 0x2c]            |     r7 = var_2ch;
    0x00058180 mov r6, sb                    |     r6 = sb;
    0x00058182 ldr r1, [sp, 0x24]            |     r1 = var_24h;
    0x00058184 movs r4, 0                    |     r4 = 0;
    0x00058186 mov r0, r7                    |     r0 = r7;
    0x00058188 bl 0x12c54                    |     fcn_00012c54 (r0, r1);
    0x0005818c ldr r1, [sp, 0x28]            |     r1 = var_28h;
    0x0005818e mov r0, r7                    |     r0 = r7;
    0x00058190 bl 0x12ec8                    |     fcn_00012ec8 (r0);
    0x00058194 b.w 0x578ae                   |     void (*0x578ae)() ();
                                             | label_44:
    0x00058236 ldr r2, [sp, 0x28]            |     r2 = var_28h;
    0x00058238 clz r3, r6                    |     r3 &= r6;
    0x0005823c lsrs r3, r3, 5                |     r3 >>= 5;
    0x0005823e mov lr, r2                    |     lr = r2;
    0x00058240 str r2, [sp, 0x50]            |     var_50h = r2;
                                             | label_25:
    0x00058276 sub.w r3, ip, 0xf40000        |     r3 = ip - 0xf40000;
    0x0005827a movw r5, 0xbdc0               |     
    0x0005827e sub.w r3, r3, 0x2400          |     r3 -= 0x2400;
    0x00058282 movt r5, 0xfff0               |     r5 = 0xfff0bdc0;
    0x00058286 b.w 0x5770a                   |     goto label_4;
                                             | label_42:
    0x000588f0 cmp r1, 0                     |     
                                             |     if (r1 == 0) {
    0x000588f2 beq.w 0x58098                 |         goto label_8;
                                             |     }
                                             | label_41:
    0x000588f6 mov r4, r5                    |     r4 = r5;
    0x000588f8 ldr r5, [sp, 0x44]            |     r5 = var_44h;
    0x000588fa b.w 0x577a4                   |     goto label_6;
                                             | label_40:
    0x000588fe mov r4, r5                    |     r4 = r5;
    0x00058900 ldr r5, [sp, 0x44]            |     r5 = var_44h;
    0x00058902 ldr.w sb, [r4, 8]             |     sb = *((r4 + 8));
    0x00058906 mov fp, r6                    |     
    0x00058908 mov r6, r4                    |     r6 = r4;
    0x0005890a movs r3, 0                    |     r3 = 0;
    0x0005890c str r3, [sp, 0x60]            |     var_60h = r3;
                                             | label_10:
    0x0005890e cmp.w sb, 0                   |     
                                             |     if (sb == 0) {
    0x00058912 beq 0x5895a                   |         goto label_47;
                                             |     }
    0x00058914 ldrb.w r3, [sb, 0x36]         |     r3 = *((sb + 0x36));
    0x00058918 cmp r3, 0                     |     
    0x0005891a ldr r3, [sp, 0x60]            |     r3 = var_60h;
    0x0005891c it ne                         |     
                                             |     if (r3 == 0) {
    0x0005891e movne r3, 1                   |         r3 = 1;
                                             |     }
    0x00058920 str r3, [sp, 0x60]            |     var_60h = r3;
    0x00058922 ldr r3, [sp, 0x48]            |     r3 = var_48h;
    0x00058924 ldr r4, [r3, 8]               |     r4 = *((r3 + 8));
                                             |     do {
    0x00058926 cmp r4, 0                     |         
                                             |         if (r4 == 0) {
    0x00058928 beq 0x589ba                   |             goto label_48;
                                             |         }
    0x0005892a mov r1, r4                    |         r1 = r4;
    0x0005892c mov r0, sb                    |         r0 = sb;
    0x0005892e bl 0x125dc                    |         r0 = fcn_000125dc (r0, r1);
    0x00058932 cmp r0, 0                     |         
                                             |         if (r0 != 0) {
    0x00058934 bne 0x589b4                   |             goto label_49;
                                             |         }
    0x00058936 ldr r4, [r4, 0x14]            |         r4 = *((r4 + 0x14));
    0x00058938 b 0x58926                     |         
                                             |     } while (1);
                                             | label_39:
    0x0005893a ldrsh.w r3, [r4, 0x24]        |     r3 = *((r4 + 0x24));
    0x0005893e cmp r3, 0                     |     
                                             |     if (r3 >= 0) {
    0x00058940 blt 0x58952                   |         
    0x00058942 ldrb.w r3, [r4, 0x2d]         |         r3 = *((r4 + 0x2d));
    0x00058946 cmp r3, 0xa                   |         
    0x00058948 it eq                         |         
                                             |         if (r3 != 0xa) {
    0x0005894a moveq r3, 2                   |             r3 = 2;
                                             |         }
    0x0005894c str r3, [sp, 0x5c]            |         var_5ch = r3;
    0x0005894e b.w 0x57f80                   |         goto label_9;
                                             |     }
    0x00058952 movs r3, 2                    |     r3 = 2;
    0x00058954 str r3, [sp, 0x5c]            |     var_5ch = r3;
    0x00058956 b.w 0x57f80                   |     goto label_9;
                                             | label_47:
    0x0005895a mov r4, r6                    |     r4 = r6;
    0x0005895c mov r6, fp                    |     r6 = fp;
    0x0005895e ldr r1, [r4, 0x18]            |     r1 = *((r4 + 0x18));
                                             |     if (r1 == 0) {
    0x00058960 cbz r1, 0x58974               |         goto label_50;
                                             |     }
    0x00058962 ldr r3, [sp, 0x48]            |     r3 = var_48h;
    0x00058964 mov.w r2, -1                  |     r2 = -1;
    0x00058968 ldr r0, [r3, 0x18]            |     r0 = *((r3 + 0x18));
    0x0005896a bl 0xcb5c                     |     r0 = fcn_0000cb5c (r0, r1, r2);
    0x0005896e cmp r0, 0                     |     
                                             |     if (r0 != 0) {
    0x00058970 bne.w 0x577a4                 |         goto label_6;
                                             |     }
                                             | label_50:
    0x00058974 ldr.w r3, [r8]                |     r3 = *(r8);
    0x00058978 ldr r2, [r3, 0x18]            |     r2 = *((r3 + 0x18));
    0x0005897a lsls r1, r2, 0xc              |     r1 = r2 << 0xc;
                                             |     if (r1 >= r2) {
    0x0005897c bpl 0x58986                   |         goto label_51;
                                             |     }
    0x0005897e ldr r1, [r4, 0x10]            |     r1 = *((r4 + 0x10));
    0x00058980 cmp r1, 0                     |     
                                             |     if (r1 != 0) {
    0x00058982 bne.w 0x577a4                 |         goto label_6;
                                             |     }
                                             | label_51:
    0x00058986 ands r2, r2, 0x80             |     r2 &= 0x80;
    0x0005898a str r2, [sp, 0x68]            |     var_68h = r2;
                                             |     if (r2 != r2) {
    0x0005898c bne.w 0x577a4                 |         goto label_6;
                                             |     }
    0x00058990 ldr r1, [sp, 0x48]            |     r1 = var_48h;
    0x00058992 ldr r1, [r1, 0x44]            |     r1 = *((r1 + 0x44));
    0x00058994 cmp r1, 0                     |     
                                             |     if (r1 == 0) {
    0x00058996 beq.w 0x58dfa                 |         goto label_52;
                                             |     }
    0x0005899a ldr r0, [r3, 0x14]            |     r0 = *((r3 + 0x14));
    0x0005899c mov lr, r1                    |     lr = r1;
                                             |     do {
    0x0005899e cmp r2, r0                    |         
                                             |         if (r2 >= r0) {
    0x000589a0 bge 0x589c2                   |             goto label_53;
                                             |         }
    0x000589a2 ldr r1, [r3, 0x10]            |         r1 = *((r3 + 0x10));
    0x000589a4 add.w ip, r1, r2, lsl 4       |         
    0x000589a8 ldr.w ip, [ip, 0xc]           |         ip = *((ip + 0xc));
    0x000589ac cmp lr, ip                    |         
                                             |         if (lr == ip) {
    0x000589ae beq 0x589c2                   |             goto label_53;
                                             |         }
    0x000589b0 adds r2, 1                    |         r2++;
    0x000589b2 b 0x5899e                     |         
                                             |     } while (1);
                                             | label_49:
    0x000589b4 ldr.w sb, [sb, 0x14]          |     sb = *((sb + 0x14));
    0x000589b8 b 0x5890e                     |     goto label_10;
                                             | label_48:
    0x000589ba mov r4, r6                    |     r4 = r6;
    0x000589bc mov r6, fp                    |     r6 = fp;
    0x000589be b.w 0x577a4                   |     goto label_6;
                                             | label_53:
    0x000589c2 str r2, [sp, 0x54]            |     var_54h = r2;
                                             | label_19:
    0x000589c4 ldr.w sb, [r8, 8]             |     sb = *((r8 + 8));
    0x000589c8 cmp.w sb, 0                   |     
                                             |     if (sb == 0) {
    0x000589cc bne 0x589d6                   |         
    0x000589ce mov r0, r8                    |         r0 = r8;
    0x000589d0 bl 0x192c8                    |         r0 = fcn_000192c8 (r0);
    0x000589d4 mov sb, r0                    |         sb = r0;
                                             |     }
    0x000589d6 ldr r1, [sp, 0x54]            |     r1 = var_54h;
    0x000589d8 mov r0, r8                    |     r0 = r8;
    0x000589da bl 0x39214                    |     fcn_00039214 (r0, r1);
    0x000589de ldr.w r3, [r8, 0x44]          |     r3 = *((r8 + 0x44));
    0x000589e2 mov r2, r4                    |     r2 = r4;
    0x000589e4 mov r1, r5                    |     r1 = r5;
    0x000589e6 mov r0, r8                    |     r0 = r8;
    0x000589e8 str r3, [sp, 0x44]            |     var_44h = r3;
    0x000589ea adds r3, 2                    |     r3 += 2;
    0x000589ec str.w r3, [r8, 0x44]          |     __asm ("str.w r3, [r8, 0x44]");
    0x000589f0 bl 0xd51c                     |     fcn_0000d51c (r0, r1, r2);
    0x000589f4 ldr r2, [sp, 0x44]            |     r2 = var_44h;
    0x000589f6 ldrb.w r3, [r8, 0x13]         |     r3 = *((r8 + 0x13));
    0x000589fa str r0, [sp, 0x6c]            |     var_6ch = r0;
    0x000589fc adds r2, 1                    |     r2++;
    0x000589fe str r2, [sp, 0x4c]            |     var_4ch = r2;
    0x00058a00 cmp r3, 0                     |     
                                             |     if (r3 == 0) {
    0x00058a02 beq.w 0x58e06                 |         goto label_54;
                                             |     }
    0x00058a06 subs r2, r3, 1                |     r2 = r3 - 1;
    0x00058a08 uxtb r2, r2                   |     r2 = (int8_t) r2;
    0x00058a0a adds r1, r2, 6                |     r1 = r2 + 6;
    0x00058a0c strb.w r2, [r8, 0x13]         |     *((r8 + 0x13)) = r2;
    0x00058a10 ldr.w r1, [r8, r1, lsl 2]     |     offset_0 = r1 << 2;
                                             |     r1 = *((r8 + offset_0));
    0x00058a14 str r1, [sp, 0x58]            |     var_58h = r1;
    0x00058a16 cmp r2, 0                     |     
                                             |     if (r2 == 0) {
    0x00058a18 beq.w 0x58dec                 |         goto label_55;
                                             |     }
    0x00058a1c subs r3, 2                    |     r3 -= 2;
    0x00058a1e uxtb r3, r3                   |     r3 = (int8_t) r3;
    0x00058a20 strb.w r3, [r8, 0x13]         |     *((r8 + 0x13)) = r3;
    0x00058a24 adds r3, 6                    |     r3 += 6;
    0x00058a26 ldr.w r3, [r8, r3, lsl 2]     |     offset_1 = r3 << 2;
                                             |     r3 = *((r8 + offset_1));
    0x00058a2a str r3, [sp, 0x50]            |     var_50h = r3;
                                             | label_18:
    0x00058a2c movs r3, 0x36                 |     r3 = 0x36;
    0x00058a2e ldr r1, [sp, 0x4c]            |     r1 = var_4ch;
    0x00058a30 str r3, [sp]                  |     *(sp) = r3;
    0x00058a32 mov r2, r5                    |     r2 = r5;
    0x00058a34 mov r3, r4                    |     r3 = r4;
    0x00058a36 mov r0, r8                    |     r0 = r8;
    0x00058a38 bl 0x22140                    |     fcn_00022140 (r0, r1, r2, r3, r4);
    0x00058a3c ldrsh.w r3, [r4, 0x24]        |     r3 = *((r4 + 0x24));
    0x00058a40 cmp r3, 0                     |     
                                             |     if (r3 < 0) {
    0x00058a42 blt.w 0x58bca                 |         goto label_56;
                                             |     }
                                             | label_14:
    0x00058a46 ldr r3, [sp, 0x60]            |     r3 = var_60h;
                                             |     if (r3 == 0) {
    0x00058a48 cbnz r3, 0x58a52              |         
    0x00058a4a ldr r3, [sp, 0x5c]            |         r3 = var_5ch;
    0x00058a4c subs r3, 1                    |         r3--;
    0x00058a4e cmp r3, 1                     |         
                                             |         if (r3 < 1) {
    0x00058a50 bls 0x58a8e                   |             goto label_57;
                                             |         }
                                             |     }
                                             | label_13:
    0x00058a52 movs r3, 0                    |     r3 = 0;
    0x00058a54 ldr r2, [sp, 0x4c]            |     r2 = var_4ch;
    0x00058a56 movs r1, 0x6a                 |     r1 = 0x6a;
    0x00058a58 str r3, [sp]                  |     *(sp) = r3;
    0x00058a5a mov r0, sb                    |     r0 = sb;
    0x00058a5c bl 0x18bf8                    |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00058a60 movs r3, 0                    |     r3 = 0;
    0x00058a62 mov fp, r0                    |     
    0x00058a64 mov r2, r3                    |     r2 = r3;
    0x00058a66 movs r1, 0x10                 |     r1 = 0x10;
    0x00058a68 str r3, [sp]                  |     *(sp) = r3;
    0x00058a6a mov r0, sb                    |     r0 = sb;
    0x00058a6c bl 0x18bf8                    |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00058a70 ldr.w r3, [sb, 0x20]          |     r3 = *((sb + 0x20));
    0x00058a74 str r0, [sp, 0x60]            |     var_60h = r0;
    0x00058a76 cmp fp, r3                    |     
    0x00058a78 itttt lo                      |     
                                             |     if (fp >= r3) {
    0x00058a7a ldrlo r2, [sb, 4]             |         r2 = *((sb + 4));
                                             |     }
                                             |     if (fp >= r3) {
    0x00058a7e movlo r1, 0x14                |         r1 = 0x14;
                                             |     }
                                             |     if (fp < r3) {
    0x00058a80 mlalo r2, r1, fp, r2          |         __asm ("mlalo r2, r1, fp, r2");
                                             |     }
                                             |     if (fp < r3) {
    0x00058a84 str r3, [r2, 8]               |         *((r2 + 8)) = r3;
                                             |     }
    0x00058a86 subs r3, 1                    |     r3--;
    0x00058a88 ldr.w r2, [sb, 0x18]          |     r2 = *((sb + 0x18));
    0x00058a8c str r3, [r2, 0x58]            |     *((r2 + 0x58)) = r3;
                                             | label_57:
    0x00058a8e ldr r2, [sp, 0x48]            |     r2 = var_48h;
    0x00058a90 ldrb.w r3, [r2, 0x2c]         |     r3 = *((r2 + 0x2c));
    0x00058a94 ands fp, r3, 0x20             |     
                                             |     if (fp != r3) {
    0x00058a98 bne.w 0x58ba6                 |         goto label_58;
                                             |     }
    0x00058a9c movs r3, 0x35                 |     r3 = 0x35;
    0x00058a9e ldr r1, [sp, 0x44]            |     r1 = var_44h;
    0x00058aa0 mov r0, r8                    |     r0 = r8;
    0x00058aa2 str r3, [sp]                  |     *(sp) = r3;
    0x00058aa4 mov r3, r2                    |     r3 = r2;
    0x00058aa6 ldr r2, [sp, 0x54]            |     r2 = var_54h;
    0x00058aa8 bl 0x22140                    |     fcn_00022140 (r0, r1, r2, r3, r4);
    0x00058aac mov r3, fp                    |     r3 = fp;
    0x00058aae ldr r2, [sp, 0x44]            |     r2 = var_44h;
    0x00058ab0 movs r1, 0x6a                 |     r1 = 0x6a;
    0x00058ab2 mov r0, sb                    |     r0 = sb;
    0x00058ab4 str.w fp, [sp]                |     __asm ("str.w fp, [sp]");
    0x00058ab8 bl 0x18bf8                    |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00058abc ldrsh.w r3, [r4, 0x24]        |     r3 = *((r4 + 0x24));
    0x00058ac0 str r0, [sp, 0x68]            |     var_68h = r0;
    0x00058ac2 cmp r3, 0                     |     
                                             |     if (r3 >= 0) {
    0x00058ac4 bge.w 0x58bd4                 |         goto label_59;
                                             |     }
    0x00058ac8 ldr r3, [r4, 8]               |     r3 = *((r4 + 8));
    0x00058aca cmp r3, 0                     |     
                                             |     if (r3 == 0) {
    0x00058acc beq 0x58b94                   |         goto label_60;
                                             |     }
    0x00058ace ldr r3, [sp, 0x50]            |     r3 = var_50h;
    0x00058ad0 movs r1, 0x65                 |     r1 = 0x65;
    0x00058ad2 ldr r2, [sp, 0x44]            |     r2 = var_44h;
    0x00058ad4 mov r0, sb                    |     r0 = sb;
    0x00058ad6 str.w fp, [sp]                |     __asm ("str.w fp, [sp]");
    0x00058ada bl 0x18bf8                    |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00058ade str r0, [sp, 0x64]            |     var_64h = r0;
                                             | label_11:
    0x00058ae0 ldr.w fp, [sp, 0x58]          |     fp = var_58h;
    0x00058ae4 movs r3, 0                    |     r3 = 0;
    0x00058ae6 ldr r2, [sp, 0x44]            |     r2 = var_44h;
    0x00058ae8 movs r1, 0x64                 |     r1 = 0x64;
    0x00058aea str r3, [sp]                  |     *(sp) = r3;
    0x00058aec mov r0, sb                    |     r0 = sb;
    0x00058aee mov r3, fp                    |     r3 = fp;
    0x00058af0 bl 0x18bf8                    |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00058af4 ldr r2, [sp, 0x50]            |     r2 = var_50h;
    0x00058af6 mov r3, fp                    |     r3 = fp;
    0x00058af8 movs r1, 0x49                 |     r1 = 0x49;
    0x00058afa mov r0, sb                    |     r0 = sb;
    0x00058afc str r2, [sp]                  |     *(sp) = r2;
    0x00058afe ldr r2, [sp, 0x4c]            |     r2 = var_4ch;
    0x00058b00 bl 0x18bf8                    |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00058b04 ldr.w r3, [sb, 4]             |     r3 = *((sb + 4));
                                             |     if (r3 != 0) {
    0x00058b08 cbz r3, 0x58b1a               |         
    0x00058b0a ldr.w r2, [sb, 0x20]          |         r2 = *((sb + 0x20));
    0x00058b0e movs r1, 0x14                 |         r1 = 0x14;
    0x00058b10 mla r3, r1, r2, r3            |         __asm ("mla r3, r1, r2, r3");
    0x00058b14 movs r2, 0xb                  |         r2 = 0xb;
    0x00058b16 strb r2, [r3, -0x11]          |         *((r3 - 0x11)) = r2;
                                             |     }
    0x00058b1a mov.w fp, 0                   |     
    0x00058b1e ldr r2, [r4]                  |     r2 = *(r4);
    0x00058b20 mov r0, sb                    |     r0 = sb;
    0x00058b22 mov r3, fp                    |     r3 = fp;
    0x00058b24 mov.w r1, -1                  |     r1 = -1;
    0x00058b28 bl 0x1021c                    |     fcn_0001021c (r0, r1, r2, r3);
    0x00058b2c ldr r3, [sp, 0x64]            |     r3 = var_64h;
    0x00058b2e movs r1, 9                    |     r1 = 9;
    0x00058b30 ldr r2, [sp, 0x44]            |     r2 = var_44h;
    0x00058b32 mov r0, sb                    |     r0 = sb;
    0x00058b34 str.w fp, [sp]                |     __asm ("str.w fp, [sp]");
    0x00058b38 bl 0x18bf8                    |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00058b3c ldr r2, [sp, 0x44]            |     r2 = var_44h;
    0x00058b3e mov r3, fp                    |     r3 = fp;
    0x00058b40 movs r1, 0x3b                 |     r1 = 0x3b;
    0x00058b42 mov r0, sb                    |     r0 = sb;
    0x00058b44 str.w fp, [sp]                |     __asm ("str.w fp, [sp]");
    0x00058b48 bl 0x18bf8                    |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00058b4c ldr r2, [sp, 0x4c]            |     r2 = var_4ch;
    0x00058b4e mov r3, fp                    |     r3 = fp;
    0x00058b50 movs r1, 0x3b                 |     r1 = 0x3b;
    0x00058b52 mov r0, sb                    |     r0 = sb;
    0x00058b54 str.w fp, [sp]                |     __asm ("str.w fp, [sp]");
    0x00058b58 bl 0x18bf8                    |     fcn_00018bf8 (r0, r1, r2, r3, r4);
                                             | label_12:
    0x00058b5c ldr r3, [r4, 8]               |     r3 = *((r4 + 8));
    0x00058b5e str.w sl, [sp, 0x64]          |     __asm ("str.w sl, [var_64h]");
    0x00058b62 ldr.w sl, [sp, 0x4c]          |     sl = var_4ch;
    0x00058b66 str r6, [sp, 0x6c]            |     var_6ch = r6;
    0x00058b68 mov fp, r3                    |     
    0x00058b6a mov r6, r5                    |     r6 = r5;
    0x00058b6c str r7, [sp, 0x5c]            |     var_5ch = r7;
    0x00058b6e ldr r7, [sp, 0x44]            |     r7 = var_44h;
    0x00058b70 str r4, [sp, 0x44]            |     var_44h = r4;
                                             | label_17:
    0x00058b72 cmp.w fp, 0                   |     
                                             |     if (fp == 0) {
    0x00058b76 beq 0x58c74                   |         goto label_61;
                                             |     }
    0x00058b78 ldr r3, [sp, 0x48]            |     r3 = var_48h;
    0x00058b7a ldr r4, [r3, 8]               |     r4 = *((r3 + 8));
                                             |     do {
    0x00058b7c cmp r4, 0                     |         
                                             |         if (r4 == 0) {
    0x00058b7e beq.w 0x58e5c                 |             goto label_62;
                                             |         }
    0x00058b82 mov r1, r4                    |         r1 = r4;
    0x00058b84 mov r0, fp                    |         r0 = fp;
    0x00058b86 bl 0x125dc                    |         r0 = fcn_000125dc (r0, r1);
    0x00058b8a cmp r0, 0                     |         
                                             |         if (r0 != 0) {
    0x00058b8c bne.w 0x58ccc                 |             goto label_63;
                                             |         }
    0x00058b90 ldr r4, [r4, 0x14]            |         r4 = *((r4 + 0x14));
    0x00058b92 b 0x58b7c                     |         
                                             |     } while (1);
                                             | label_60:
    0x00058b94 str r3, [sp]                  |     *(sp) = r3;
    0x00058b96 movs r1, 0x46                 |     r1 = 0x46;
    0x00058b98 ldrd r2, r3, [sp, 0x4c]       |     __asm ("ldrd r2, r3, [var_50h]");
    0x00058b9c mov r0, sb                    |     r0 = sb;
    0x00058b9e bl 0x18bf8                    |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00058ba2 str r0, [sp, 0x64]            |     var_64h = r0;
    0x00058ba4 b 0x58ae0                     |     goto label_11;
                                             | label_58:
    0x00058ba6 ldr r3, [r4]                  |     r3 = *(r4);
    0x00058ba8 mov r1, r5                    |     r1 = r5;
    0x00058baa mov r0, r8                    |     r0 = r8;
    0x00058bac str r3, [sp]                  |     *(sp) = r3;
    0x00058bae movs r3, 1                    |     r3 = 1;
    0x00058bb0 ldr r2, [r4, 0x20]            |     r2 = *((r4 + 0x20));
    0x00058bb2 bl 0x19dd4                    |     fcn_00019dd4 (r0, r1, r2, r3, r4);
    0x00058bb6 ldr r2, [sp, 0x48]            |     r2 = var_48h;
    0x00058bb8 mov r0, r8                    |     r0 = r8;
    0x00058bba ldr r1, [sp, 0x54]            |     r1 = var_54h;
    0x00058bbc ldr r3, [r2]                  |     r3 = *(r2);
    0x00058bbe str r3, [sp]                  |     *(sp) = r3;
    0x00058bc0 movs r3, 0                    |     r3 = 0;
    0x00058bc2 ldr r2, [r2, 0x20]            |     r2 = *((r2 + 0x20));
    0x00058bc4 bl 0x19dd4                    |     fcn_00019dd4 (r0, r1, r2, r3, r4);
    0x00058bc8 b 0x58b5c                     |     goto label_12;
                                             | label_56:
    0x00058bca ldr r3, [r4, 8]               |     r3 = *((r4 + 8));
    0x00058bcc cmp r3, 0                     |     
                                             |     if (r3 != 0) {
    0x00058bce bne.w 0x58a52                 |         goto label_13;
                                             |     }
    0x00058bd2 b 0x58a46                     |     goto label_14;
                                             | label_59:
    0x00058bd4 ldr r3, [sp, 0x50]            |     r3 = var_50h;
    0x00058bd6 movs r1, 0x65                 |     r1 = 0x65;
    0x00058bd8 ldr r2, [sp, 0x44]            |     r2 = var_44h;
    0x00058bda mov r0, sb                    |     r0 = sb;
    0x00058bdc str.w fp, [sp]                |     __asm ("str.w fp, [sp]");
    0x00058be0 bl 0x18bf8                    |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00058be4 ldr r2, [sp, 0x50]            |     r2 = var_50h;
    0x00058be6 mov r3, fp                    |     r3 = fp;
    0x00058be8 movs r1, 0x44                 |     r1 = 0x44;
    0x00058bea str r0, [sp, 0x64]            |     var_64h = r0;
    0x00058bec mov r0, sb                    |     r0 = sb;
    0x00058bee str r2, [sp]                  |     *(sp) = r2;
    0x00058bf0 ldr r2, [sp, 0x4c]            |     r2 = var_4ch;
    0x00058bf2 bl 0x18bf8                    |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00058bf6 mov r2, r4                    |     r2 = r4;
    0x00058bf8 ldr r1, [sp, 0x5c]            |     r1 = var_5ch;
    0x00058bfa mov fp, r0                    |     
    0x00058bfc mov r0, r8                    |     r0 = r8;
    0x00058bfe bl 0x1c1ec                    |     fcn_0001c1ec (r0, r1, r2);
    0x00058c02 ldr.w r3, [sb, 0x20]          |     r3 = *((sb + 0x20));
    0x00058c06 cmp fp, r3                    |     
    0x00058c08 itttt lo                      |     
                                             |     if (fp >= r3) {
    0x00058c0a ldrlo r2, [sb, 4]             |         r2 = *((sb + 4));
                                             |     }
                                             |     if (fp >= r3) {
    0x00058c0e movlo r1, 0x14                |         r1 = 0x14;
                                             |     }
                                             |     if (fp < r3) {
    0x00058c10 mlalo r2, r1, fp, r2          |         __asm ("mlalo r2, r1, fp, r2");
                                             |     }
                                             |     if (fp < r3) {
    0x00058c14 str r3, [r2, 8]               |         *((r2 + 8)) = r3;
                                             |     }
    0x00058c16 subs r3, 1                    |     r3--;
    0x00058c18 ldr.w r2, [sb, 0x18]          |     r2 = *((sb + 0x18));
    0x00058c1c str r3, [r2, 0x58]            |     *((r2 + 0x58)) = r3;
    0x00058c1e ldr r3, [sp, 0x6c]            |     r3 = var_6ch;
    0x00058c20 cmp r3, 0                     |     
                                             |     if (r3 <= 0) {
    0x00058c22 ble.w 0x58ae0                 |         goto label_11;
                                             |     }
    0x00058c26 ldr.w r1, [r8, 8]             |     r1 = *((r8 + 8));
    0x00058c2a ldr r3, [r1, 0x18]            |     r3 = *((r1 + 0x18));
    0x00058c2c ldr r2, [r3, 0x54]            |     r2 = *((r3 + 0x54));
    0x00058c2e ldr r3, [r1, 0x20]            |     r3 = *((r1 + 0x20));
    0x00058c30 cmp r3, r2                    |     
    0x00058c32 mov fp, r3                    |     
                                             |     if (r3 < r2) {
    0x00058c34 bge 0x58c60                   |         
                                             | label_15:
    0x00058c36 movs r2, 0x14                 |         r2 = 0x14;
    0x00058c38 ldr r0, [r1, 4]               |         r0 = *((r1 + 4));
    0x00058c3a mul lr, r2, fp                |         lr = r2 * fp;
    0x00058c3e ldr r2, [sp, 0x6c]            |         r2 = var_6ch;
    0x00058c40 adds r3, 1                    |         r3++;
    0x00058c42 mov.w ip, 0x86                |         
    0x00058c46 str r3, [r1, 0x20]            |         *((r1 + 0x20)) = r3;
    0x00058c48 movs r1, 0                    |         r1 = 0;
    0x00058c4a add.w r3, r0, lr              |         r3 = r0 + lr;
    0x00058c4e str r2, [r3, 4]               |         *((r3 + 4)) = r2;
    0x00058c50 ldr r2, [sp, 0x50]            |         r2 = var_50h;
    0x00058c52 strb r1, [r3, 3]              |         *((r3 + 3)) = r1;
    0x00058c54 str r1, [r3, 0x10]            |         *((r3 + 0x10)) = r1;
    0x00058c56 strd r2, r1, [r3, 8]          |         __asm ("strd r2, r1, [r3, 8]");
    0x00058c5a strh.w ip, [r0, lr]           |         *((r0 + lr)) = ip;
    0x00058c5e b 0x58ae0                     |         goto label_11;
                                             |     }
    0x00058c60 mov r0, r1                    |     r0 = r1;
    0x00058c62 str r1, [sp, 0x5c]            |     var_5ch = r1;
    0x00058c64 bl 0x18b14                    |     r0 = fcn_00018b14 (r0);
    0x00058c68 cmp r0, 0                     |     
                                             |     if (r0 != 0) {
    0x00058c6a bne.w 0x58ae0                 |         goto label_11;
                                             |     }
    0x00058c6e ldr r1, [sp, 0x5c]            |     r1 = var_5ch;
    0x00058c70 ldr r3, [r1, 0x20]            |     r3 = *((r1 + 0x20));
    0x00058c72 b 0x58c36                     |     goto label_15;
                                             | label_61:
    0x00058c74 mov r5, r6                    |     r5 = r6;
    0x00058c76 ldrd r0, r6, [sp, 0x68]       |     __asm ("ldrd r0, r6, [var_68h]");
    0x00058c7a ldr r7, [sp, 0x5c]            |     r7 = var_5ch;
    0x00058c7c ldr r4, [sp, 0x44]            |     r4 = var_44h;
    0x00058c7e ldr.w sl, [sp, 0x64]          |     sl = var_64h;
                                             |     if (r0 != 0) {
    0x00058c82 cbz r0, 0x58ca0               |         
    0x00058c84 ldr.w r3, [sb, 0x20]          |         r3 = *((sb + 0x20));
    0x00058c88 cmp r0, r3                    |         
    0x00058c8a itttt lo                      |         
                                             |         if (r0 >= r3) {
    0x00058c8c ldrlo r2, [sb, 4]             |             r2 = *((sb + 4));
                                             |         }
                                             |         if (r0 >= r3) {
    0x00058c90 movlo r1, 0x14                |             r1 = 0x14;
                                             |         }
                                             |         if (r0 < r3) {
    0x00058c92 mlalo r2, r1, r0, r2          |             __asm ("mlalo r2, r1, r0, r2");
                                             |         }
                                             |         if (r0 < r3) {
    0x00058c96 str r3, [r2, 8]               |             *((r2 + 8)) = r3;
                                             |         }
    0x00058c98 subs r3, 1                    |         r3--;
    0x00058c9a ldr.w r2, [sb, 0x18]          |         r2 = *((sb + 0x18));
    0x00058c9e str r3, [r2, 0x58]            |         *((r2 + 0x58)) = r3;
                                             |     }
    0x00058ca0 ldr r3, [sp, 0x50]            |     r3 = var_50h;
                                             |     if (r3 != 0) {
    0x00058ca2 cbz r3, 0x58cac               |         
    0x00058ca4 mov r1, r3                    |         r1 = r3;
    0x00058ca6 mov r0, r8                    |         r0 = r8;
    0x00058ca8 bl 0xa4e8                     |         fcn_0000a4e8 (r0, r1);
                                             |     }
    0x00058cac ldr r3, [sp, 0x58]            |     r3 = var_58h;
                                             |     if (r3 != 0) {
    0x00058cae cbz r3, 0x58cb8               |         
    0x00058cb0 mov r1, r3                    |         r1 = r3;
    0x00058cb2 mov r0, r8                    |         r0 = r8;
    0x00058cb4 bl 0xa4e8                     |         fcn_0000a4e8 (r0, r1);
                                             |     }
    0x00058cb8 ldr r3, [sp, 0x60]            |     r3 = var_60h;
    0x00058cba cmp r3, 0                     |     
                                             |     if (r3 == 0) {
    0x00058cbc bne 0x58dac                   |         
    0x00058cbe ldrb.w r3, [r8, 0x12]         |         r3 = *((r8 + 0x12));
    0x00058cc2 cmp r3, 0                     |         
                                             |         if (r3 == 0) {
    0x00058cc4 bne 0x58d96                   |             
    0x00058cc6 ldr r4, [sp, 0x60]            |             r4 = var_60h;
    0x00058cc8 b.w 0x57e50                   |             goto label_16;
                                             | label_63:
    0x00058ccc ldr r3, [sp, 0x54]            |             r3 = var_54h;
    0x00058cce mov r2, r7                    |             r2 = r7;
    0x00058cd0 movs r1, 0x35                 |             r1 = 0x35;
    0x00058cd2 mov r0, sb                    |             r0 = sb;
    0x00058cd4 str r3, [sp]                  |             *(sp) = r3;
    0x00058cd6 ldr r3, [r4, 0x2c]            |             r3 = *((r4 + 0x2c));
    0x00058cd8 bl 0x18bf8                    |             fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00058cdc mov r1, r4                    |             r1 = r4;
    0x00058cde mov r0, r8                    |             r0 = r8;
    0x00058ce0 bl 0x220e4                    |             fcn_000220e4 (r0, r1);
    0x00058ce4 mov r2, sl                    |             r2 = sl;
    0x00058ce6 movs r1, 0x36                 |             r1 = 0x36;
    0x00058ce8 str r6, [sp]                  |             *(sp) = r6;
    0x00058cea mov r0, sb                    |             r0 = sb;
    0x00058cec ldr.w r3, [fp, 0x2c]          |             r3 = var_bp_2ch;
    0x00058cf0 bl 0x18bf8                    |             fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00058cf4 mov r1, fp                    |             r1 = fp;
    0x00058cf6 mov r0, r8                    |             r0 = r8;
    0x00058cf8 bl 0x220e4                    |             fcn_000220e4 (r0, r1);
    0x00058cfc ldr.w r3, [sb, 4]             |             r3 = *((sb + 4));
                                             |             if (r3 != 0) {
    0x00058d00 cbz r3, 0x58d12               |                 
    0x00058d02 ldr.w r2, [sb, 0x20]          |                 r2 = *((sb + 0x20));
    0x00058d06 movs r1, 0x14                 |                 r1 = 0x14;
    0x00058d08 mla r3, r1, r2, r3            |                 __asm ("mla r3, r1, r2, r3");
    0x00058d0c movs r2, 1                    |                 r2 = 1;
    0x00058d0e strb r2, [r3, -0x11]          |                 *((r3 - 0x11)) = r2;
                                             |             }
    0x00058d12 movs r5, 0                    |             r5 = 0;
    0x00058d14 mov r2, r7                    |             r2 = r7;
    0x00058d16 mov r3, r5                    |             r3 = r5;
    0x00058d18 movs r1, 0x6a                 |             r1 = 0x6a;
    0x00058d1a mov r0, sb                    |             r0 = sb;
    0x00058d1c str r5, [sp]                  |             *(sp) = r5;
    0x00058d1e bl 0x18bf8                    |             fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00058d22 ldr r3, [sp, 0x58]            |             r3 = var_58h;
    0x00058d24 mov r4, r0                    |             r4 = r0;
    0x00058d26 mov r2, r7                    |             r2 = r7;
    0x00058d28 movs r1, 0x63                 |             r1 = 0x63;
    0x00058d2a mov r0, sb                    |             r0 = sb;
    0x00058d2c str r5, [sp]                  |             *(sp) = r5;
    0x00058d2e bl 0x18bf8                    |             fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00058d32 movs r3, 1                    |             r3 = 1;
    0x00058d34 mov r2, sl                    |             r2 = sl;
    0x00058d36 movs r1, 0x6c                 |             r1 = 0x6c;
    0x00058d38 str r3, [sp]                  |             *(sp) = r3;
    0x00058d3a mov r0, sb                    |             r0 = sb;
    0x00058d3c ldr r3, [sp, 0x58]            |             r3 = var_58h;
    0x00058d3e bl 0x18bf8                    |             fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00058d42 mov r2, r7                    |             r2 = r7;
    0x00058d44 movs r1, 9                    |             r1 = 9;
    0x00058d46 adds r3, r4, 1                |             r3 = r4 + 1;
    0x00058d48 mov r0, sb                    |             r0 = sb;
    0x00058d4a str r5, [sp]                  |             *(sp) = r5;
    0x00058d4c bl 0x18bf8                    |             fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00058d50 ldr.w r3, [sb, 0x20]          |             r3 = *((sb + 0x20));
    0x00058d54 mov r0, sb                    |             r0 = sb;
    0x00058d56 cmp r4, r3                    |             
    0x00058d58 ittt lo                       |             
                                             |             if (r4 >= r3) {
    0x00058d5a ldrlo r2, [sb, 4]             |                 r2 = *((sb + 4));
                                             |             }
                                             |             if (r4 >= r3) {
    0x00058d5e movlo r1, 0x14                |                 r1 = 0x14;
                                             |             }
                                             |             if (r4 < r3) {
    0x00058d60 mla r2, r1, r4, r2            |                 __asm ("mla r2, r1, r4, r2");
                                             |             }
    0x00058d64 mov.w r4, 0                   |             r4 = 0;
    0x00058d68 mov.w r1, 0x3b                |             r1 = 0x3b;
    0x00058d6c it lo                         |             
                                             |             if (r4 >= r3) {
    0x00058d6e strlo r3, [r2, 8]             |                 *((r2 + 8)) = r3;
                                             |             }
    0x00058d70 subs r3, 1                    |             r3--;
    0x00058d72 ldr.w r2, [sb, 0x18]          |             r2 = *((sb + 0x18));
    0x00058d76 str r3, [r2, 0x58]            |             *((r2 + 0x58)) = r3;
    0x00058d78 mov r3, r4                    |             r3 = r4;
    0x00058d7a mov r2, r7                    |             r2 = r7;
    0x00058d7c str r4, [sp]                  |             *(sp) = r4;
    0x00058d7e bl 0x18bf8                    |             fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00058d82 mov r3, r4                    |             r3 = r4;
    0x00058d84 mov r2, sl                    |             r2 = sl;
    0x00058d86 movs r1, 0x3b                 |             r1 = 0x3b;
    0x00058d88 mov r0, sb                    |             r0 = sb;
    0x00058d8a str r4, [sp]                  |             *(sp) = r4;
    0x00058d8c bl 0x18bf8                    |             fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00058d90 ldr.w fp, [fp, 0x14]          |             fp = var_14h;
    0x00058d94 b 0x58b72                     |             goto label_17;
                                             |         }
    0x00058d96 ldr r1, [sp, 0x24]            |         r1 = var_24h;
    0x00058d98 mov r0, r7                    |         r0 = r7;
    0x00058d9a ldr r4, [sp, 0x60]            |         r4 = var_60h;
    0x00058d9c bl 0x12c54                    |         fcn_00012c54 (r0, r1);
    0x00058da0 ldr r1, [sp, 0x28]            |         r1 = var_28h;
    0x00058da2 mov r0, r7                    |         r0 = r7;
    0x00058da4 bl 0x12ec8                    |         fcn_00012ec8 (r0);
    0x00058da8 b.w 0x578a6                   |         void (*0x578a6)() ();
                                             |     }
    0x00058dac movs r3, 0                    |     r3 = 0;
    0x00058dae movs r1, 0x18                 |     r1 = 0x18;
    0x00058db0 mov r2, r3                    |     r2 = r3;
    0x00058db2 str r3, [sp]                  |     *(sp) = r3;
    0x00058db4 mov r0, sb                    |     r0 = sb;
    0x00058db6 bl 0x18bf8                    |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00058dba ldr.w r3, [sb, 0x20]          |     r3 = *((sb + 0x20));
    0x00058dbe ldr r0, [sp, 0x60]            |     r0 = var_60h;
    0x00058dc0 cmp r0, r3                    |     
    0x00058dc2 ittt lo                       |     
                                             |     if (r0 >= r3) {
    0x00058dc4 ldrlo r2, [sb, 4]             |         r2 = *((sb + 4));
                                             |     }
                                             |     if (r0 >= r3) {
    0x00058dc8 movlo r1, 0x14                |         r1 = 0x14;
                                             |     }
                                             |     if (r0 < r3) {
    0x00058dca mla r2, r1, r0, r2            |         __asm ("mla r2, r1, r0, r2");
                                             |     }
    0x00058dce ldr.w r1, [sb, 0x18]          |     r1 = *((sb + 0x18));
    0x00058dd2 mov r0, sb                    |     r0 = sb;
    0x00058dd4 it lo                         |     
                                             |     if (r0 >= r3) {
    0x00058dd6 strlo r3, [r2, 8]             |         *((r2 + 8)) = r3;
                                             |     }
    0x00058dd8 subs r3, 1                    |     r3--;
    0x00058dda str r3, [r1, 0x58]            |     *((r1 + 0x58)) = r3;
    0x00058ddc movs r3, 0                    |     r3 = 0;
    0x00058dde ldr r2, [sp, 0x4c]            |     r2 = var_4ch;
    0x00058de0 movs r1, 0x3b                 |     r1 = 0x3b;
    0x00058de2 str r3, [sp]                  |     *(sp) = r3;
    0x00058de4 bl 0x18bf8                    |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00058de8 b.w 0x577a4                   |     goto label_6;
                                             | label_55:
    0x00058dec ldr.w r3, [r8, 0x48]          |     r3 = *((r8 + 0x48));
                                             |     do {
    0x00058df0 adds r3, 1                    |         r3++;
    0x00058df2 str r3, [sp, 0x50]            |         var_50h = r3;
    0x00058df4 str.w r3, [r8, 0x48]          |         __asm ("str.w r3, [r8, 0x48]");
    0x00058df8 b 0x58a2c                     |         goto label_18;
                                             | label_52:
    0x00058dfa movw r3, 0xbdc0               |         
    0x00058dfe movt r3, 0xfff0               |         r3 = 0xfff0bdc0;
    0x00058e02 str r3, [sp, 0x54]            |         var_54h = r3;
    0x00058e04 b 0x589c4                     |         goto label_19;
                                             | label_54:
    0x00058e06 ldr.w r3, [r8, 0x48]          |         r3 = *((r8 + 0x48));
    0x00058e0a adds r3, 1                    |         r3++;
    0x00058e0c str r3, [sp, 0x58]            |         var_58h = r3;
    0x00058e0e str.w r3, [r8, 0x48]          |         __asm ("str.w r3, [r8, 0x48]");
    0x00058e12 b 0x58df0                     |         
                                             |     } while (1);
                                             | label_62:
    0x00058e5c ldr r3, [r4, 0x2c]            |     r3 = *((r4 + 0x2c));
    0x00058e5e udf 0xff                      |     __asm ("udf 0xff");
                                             | }
    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x592a0 */
                                                     | #include <stdint.h>
                                                     |  
    ; (fcn) fcn.000592a0 ()                          | void fcn_000592a0 (int16_t arg_28h, int16_t arg_2ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                     |     int16_t var_0h;
                                                     |     int16_t var_ch;
                                                     |     r0 = arg1;
                                                     |     r1 = arg2;
                                                     |     r2 = arg3;
                                                     |     r3 = arg4;
    0x000592a0 push.w {r4, r5, r6, r7, r8, lr}       |     
    0x000592a4 mov r4, r0                            |     r4 = r0;
    0x000592a6 ldr r5, [r0, 8]                       |     r5 = *((r0 + 8));
    0x000592a8 sub sp, 0x10                          |     
    0x000592aa mov r6, r1                            |     r6 = r1;
    0x000592ac mov r8, r3                            |     r8 = r3;
    0x000592ae cbz r5, 0x5930a                       |     
                                                     |     while (1) {
    0x000592b0 ldr r3, [sp, 0x28]                    |         r3 = *(arg_28h);
    0x000592b2 mov r1, r6                            |         r1 = r6;
    0x000592b4 mov r0, r4                            |         r0 = r4;
    0x000592b6 bl 0x58e74                            |         r0 = fcn_00058e74 (r0, r1, r2, r3, r4, r5, r6);
    0x000592ba mov r7, r0                            |         r7 = r0;
                                                     |         if (r0 != 0) {
    0x000592bc cbz r0, 0x59304                       |             
    0x000592be ldr r6, [r6]                          |             r6 = *(r6);
                                                     |             if (r6 != 0) {
    0x000592c0 cbz r6, 0x592ce                       |                 
    0x000592c2 ldr r3, [r4]                          |                 r3 = *(r4);
    0x000592c4 ldr r6, [r3, 0x18]                    |                 r6 = *((r3 + 0x18));
    0x000592c6 eor r6, r6, 0x40000                   |                 r6 ^= 0x40000;
    0x000592ca ubfx r6, r6, 0x12, 1                  |                 r6 = (r6 >> 0x12) & ((1 << 1) - 1);
                                                     |             }
    0x000592ce ldr r3, [r4, 0x48]                    |             r3 = *((r4 + 0x48));
    0x000592d0 mov r2, r8                            |             r2 = r8;
    0x000592d2 movs r1, 0x81                         |             r1 = 0x81;
    0x000592d4 mov r0, r5                            |             r0 = r5;
    0x000592d6 adds r3, 1                            |             r3++;
    0x000592d8 str r3, [r4, 0x48]                    |             *((r4 + 0x48)) = r3;
    0x000592da str r3, [sp]                          |             *(sp) = r3;
    0x000592dc ldr r3, [sp, 0x2c]                    |             r3 = *(arg_2ch);
    0x000592de bl 0x18bf8                            |             fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000592e2 mvn r3, 0x11                          |             r3 = ~0x11;
    0x000592e6 ldr r2, [r7, 8]                       |             r2 = *((r7 + 8));
    0x000592e8 mov.w r1, -1                          |             r1 = -1;
    0x000592ec mov r0, r5                            |             r0 = r5;
    0x000592ee bl 0x1021c                            |             fcn_0001021c (r0, r1, r2, r3);
    0x000592f2 ldr r3, [r5, 4]                       |             r3 = *((r5 + 4));
                                                     |             if (r3 == 0) {
    0x000592f4 cbz r3, 0x59304                       |                 goto label_0;
                                                     |             }
    0x000592f6 ldr r2, [r5, 0x20]                    |             r2 = *((r5 + 0x20));
    0x000592f8 add.w r2, r2, r2, lsl 2               |             r2 += (r2 << 2);
    0x000592fc add.w r3, r3, r2, lsl 2               |             r3 += (r2 << 2);
    0x00059300 strb r6, [r3, -0x11]                  |             *((r3 - 0x11)) = r6;
                                                     |         }
                                                     | label_0:
    0x00059304 add sp, 0x10                          |         
    0x00059306 pop.w {r4, r5, r6, r7, r8, pc}        |         
    0x0005930a str r2, [sp, 0xc]                     |         var_ch = r2;
    0x0005930c bl 0x192c8                            |         fcn_000192c8 (r0);
    0x00059310 ldr r2, [sp, 0xc]                     |         r2 = var_ch;
    0x00059312 mov r5, r0                            |         r5 = r0;
    0x00059314 b 0x592b0                             |         
                                                     |     }
                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x59374 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00059374 ()                                      | void fcn_00059374 (int16_t arg_60h, int16_t arg_64h, int16_t arg_68h, int16_t arg_6ch, int16_t arg_70h, int16_t arg_74h, 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;
                                                                 |     int32_t var_8h;
                                                                 |     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;
                                                                 |     int16_t var_34h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00059374 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00059378 sub sp, 0x3c                                      |     
    0x0005937a mov sb, r3                                        |     sb = r3;
    0x0005937c ldrsh.w r3, [sp, 0x68]                            |     r3 = *(arg_68h);
    0x00059380 mov r5, r1                                        |     r5 = r1;
    0x00059382 mov r6, r0                                        |     r6 = r0;
    0x00059384 ldr r7, [r0, 8]                                   |     r7 = *((r0 + 8));
    0x00059386 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x00059388 ldrb.w r3, [sp, 0x6c]                             |     r3 = *(arg_6ch);
    0x0005938c ldr r0, [r7, 0x18]                                |     r0 = *((r7 + 0x18));
    0x0005938e ldrb.w r4, [sp, 0x74]                             |     r4 = *(arg_74h);
    0x00059392 str r3, [sp, 0x34]                                |     var_34h = r3;
    0x00059394 ldrb.w r3, [sp, 0x70]                             |     r3 = *(arg_70h);
    0x00059398 str r2, [sp, 0x1c]                                |     var_1ch = r2;
    0x0005939a str r3, [sp, 0x20]                                |     var_20h = r3;
    0x0005939c bl 0x19ed0                                        |     fcn_00019ed0 (r0);
    0x000593a0 ldrb.w r3, [r5, 0x2c]                             |     r3 = *((r5 + 0x2c));
    0x000593a4 str r0, [sp, 0x24]                                |     var_24h = r0;
    0x000593a6 tst.w r3, 0x20                                    |     
    0x000593aa ite eq                                            |     
                                                                 |     if ((r3 & 0x20) != 0) {
    0x000593ac moveq r3, 0x44                                    |         r3 = 0x44;
                                                                 |     }
                                                                 |     if ((r3 & 0x20) == 0) {
    0x000593ae movne r3, 0x42                                    |         r3 = 0x42;
                                                                 |     }
    0x000593b0 str r3, [sp, 0x28]                                |     var_28h = r3;
    0x000593b2 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x000593b4 beq.w 0x59516                                     |         goto label_6;
                                                                 |     }
                                                                 | label_3:
    0x000593b8 ldr r3, [r6]                                      |     r3 = *(r6);
    0x000593ba ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x000593bc lsls r1, r3, 0xc                                  |     r1 = r3 << 0xc;
                                                                 |     if (r1 >= r3) {
    0x000593be bpl.w 0x594fc                                     |         goto label_7;
                                                                 |     }
    0x000593c2 ldr r1, [r5]                                      |     r1 = *(r5);
    0x000593c4 ldr r0, [r5, 0x44]                                |     r0 = *((r5 + 0x44));
    0x000593c6 mov r2, r1                                        |     r2 = r1;
                                                                 |     if (r1 == 0) {
    0x000593c8 cbz r1, 0x593de                                   |         goto label_8;
                                                                 |     }
    0x000593ca ldrb r2, [r1]                                     |     r2 = *(r1);
                                                                 |     if (r2 == 0) {
    0x000593cc cbz r2, 0x593de                                   |         goto label_8;
                                                                 |     }
    0x000593ce mov r3, r1                                        |     r3 = r1;
                                                                 |     do {
    0x000593d0 ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x000593d4 cmp r2, 0                                         |         
    0x000593d6 bne 0x593d0                                       |         
                                                                 |     } while (r2 != 0);
    0x000593d8 subs r3, r3, r1                                   |     r3 -= r1;
    0x000593da bic r2, r3, 0xc0000000                            |     r2 = BIT_MASK (r3, 0xc0000000);
                                                                 | label_8:
    0x000593de adds r0, 0x38                                     |     r0 += 0x38;
    0x000593e0 bl 0x13f5c                                        |     r0 = fcn_00013f5c (r0, r1, r2);
    0x000593e4 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000593e6 beq.w 0x594f4                                     |         goto label_9;
                                                                 |     }
                                                                 | label_0:
    0x000593ea ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x000593ec movs r2, 3                                        |     r2 = 3;
    0x000593ee str r2, [sp]                                      |     *(sp) = r2;
    0x000593f0 mov r0, r6                                        |     r0 = r6;
    0x000593f2 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x000593f4 strd r5, r3, [sp, 4]                              |     __asm ("strd r5, r3, [var_4h]");
    0x000593f8 movs r3, 0                                        |     r3 = 0;
    0x000593fa mov r2, r3                                        |     r2 = r3;
    0x000593fc bl 0x59230                                        |     fcn_00059230 (r0, r1, r2, r3);
    0x00059400 ldr r3, [r6]                                      |     r3 = *(r6);
    0x00059402 mov r8, r0                                        |     r8 = r0;
    0x00059404 ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x00059406 lsls r2, r3, 0xc                                  |     r2 = r3 << 0xc;
                                                                 |     if (r2 < r3) {
    0x00059408 bmi 0x59508                                       |         goto label_10;
                                                                 |     }
                                                                 | label_2:
    0x0005940a ldrsh.w r3, [r5, 0x26]                            |     r3 = *((r5 + 0x26));
    0x0005940e movs r4, 0                                        |     r4 = 0;
    0x00059410 ldr.w sl, [r6, 0x48]                              |     sl = *((r6 + 0x48));
    0x00059414 movs r1, 0x21                                     |     r1 = 0x21;
    0x00059416 ldr r2, [sp, 0x64]                                |     r2 = *(arg_64h);
    0x00059418 mov r0, r7                                        |     r0 = r7;
    0x0005941a adds r3, 1                                        |     r3++;
    0x0005941c add r3, sl                                        |     r3 += sl;
    0x0005941e add.w fp, sl, 1                                   |     
    0x00059422 str r3, [r6, 0x48]                                |     *((r6 + 0x48)) = r3;
    0x00059424 mov r3, fp                                        |     r3 = fp;
    0x00059426 str r4, [sp]                                      |     *(sp) = r4;
    0x00059428 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005942c ldrsh.w ip, [r5, 0x26]                            |     ip = *((r5 + 0x26));
    0x00059430 cmp ip, r4                                        |     
    0x00059432 ittt gt                                           |     
                                                                 |     if (ip <= r4) {
    0x00059434 addgt r3, sl, 2                                   |         r3 = sl + 2;
                                                                 |     }
                                                                 |     if (ip <= r4) {
    0x00059438 strgt fp, [sp, 0x30]                              |         var_30h = fp;
                                                                 |     }
                                                                 |     if (ip > r4) {
    0x0005943c mov sl, r3                                        |         sl = r3;
                                                                 |     }
                                                                 |     if (ip <= r4) {
    0x0005943e ble 0x5947a                                       |         goto label_11;
                                                                 |     }
                                                                 |     do {
    0x00059440 cmp.w r8, -1                                      |         
    0x00059444 add.w lr, sl, r4                                  |         lr = sl + r4;
    0x00059448 mov r3, r4                                        |         r3 = r4;
    0x0005944a mov r2, sb                                        |         r2 = sb;
    0x0005944c mov r1, r5                                        |         r1 = r5;
    0x0005944e mov r0, r7                                        |         r0 = r7;
                                                                 |         if (r8 != -1) {
    0x00059450 beq 0x59464                                       |             
    0x00059452 cmp r4, 0x1f                                      |             
    0x00059454 mov.w fp, 1                                       |             
    0x00059458 lsl.w fp, fp, r4                                  |             
                                                                 |             if (r4 > 0x1f) {
    0x0005945c bgt 0x59470                                       |                 goto label_12;
                                                                 |             }
    0x0005945e tst.w fp, r8                                      |             
                                                                 |             if ((fp & r8) == 0) {
    0x00059462 beq 0x59470                                       |                 goto label_12;
                                                                 |             }
                                                                 |         }
    0x00059464 str.w lr, [sp]                                    |         __asm ("str.w lr, [sp]");
    0x00059468 bl 0x26140                                        |         fcn_00026140 (r0, r1, r2, r3, r4);
    0x0005946c ldrsh.w ip, [r5, 0x26]                            |         ip = *((r5 + 0x26));
                                                                 | label_12:
    0x00059470 adds r4, 1                                        |         r4++;
    0x00059472 cmp ip, r4                                        |         
    0x00059474 bgt 0x59440                                       |         
                                                                 |     } while (ip > r4);
    0x00059476 ldr.w fp, [sp, 0x30]                              |     fp = var_30h;
                                                                 | label_11:
    0x0005947a movs r3, 1                                        |     r3 = 1;
    0x0005947c ldr r4, [r7, 0x20]                                |     r4 = *((r7 + 0x20));
    0x0005947e str r3, [sp]                                      |     *(sp) = r3;
    0x00059480 movs r2, 0x6d                                     |     r2 = 0x6d;
    0x00059482 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00059484 mov r0, r6                                        |     r0 = r6;
    0x00059486 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x00059488 str r5, [sp, 4]                                   |     var_4h = r5;
    0x0005948a str r3, [sp, 0x10]                                |     var_10h = r3;
    0x0005948c ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0005948e strd fp, r3, [sp, 8]                              |     __asm ("strd fp, r3, [var_4h_2]");
    0x00059492 movs r3, 0                                        |     r3 = 0;
    0x00059494 bl 0x59318                                        |     fcn_00059318 (r0, r1, r2, r3, r4, r5, r6);
    0x00059498 ldr r3, [r7, 0x20]                                |     r3 = *((r7 + 0x20));
    0x0005949a cmp r3, r4                                        |     
                                                                 |     if (r3 > r4) {
    0x0005949c bgt 0x59582                                       |         goto label_13;
                                                                 |     }
                                                                 | label_4:
    0x0005949e movs r3, 0                                        |     r3 = 0;
    0x000594a0 mov r2, fp                                        |     r2 = fp;
    0x000594a2 mov r1, r5                                        |     r1 = r5;
    0x000594a4 mov r0, r6                                        |     r0 = r6;
    0x000594a6 strd r3, r3, [sp]                                 |     __asm ("strd r3, r3, [sp]");
    0x000594aa bl 0x56c48                                        |     fcn_00056c48 (r0, r1, r2, r3, r4, r5, r6);
                                                                 | label_1:
    0x000594ae ldr r4, [r5, 0xc]                                 |     r4 = *((r5 + 0xc));
    0x000594b0 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x000594b2 beq 0x59598                                       |         goto label_14;
                                                                 |     }
                                                                 | label_5:
    0x000594b4 ldr r3, [r6]                                      |     r3 = *(r6);
    0x000594b6 ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x000594b8 lsls r3, r3, 0xc                                  |     r3 <<= 0xc;
                                                                 |     if (r3 < r3) {
    0x000594ba bmi 0x5952c                                       |         goto label_15;
                                                                 |     }
                                                                 | label_9:
    0x000594f4 ldr r3, [r5, 0x10]                                |     r3 = *((r5 + 0x10));
    0x000594f6 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000594f8 bne.w 0x593ea                                     |         goto label_0;
                                                                 |     }
                                                                 | label_7:
    0x000594fc ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x000594fe mov fp, r3                                        |     
    0x00059500 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00059502 bne.w 0x593ea                                     |         goto label_0;
                                                                 |     }
    0x00059506 b 0x594ae                                         |     goto label_1;
                                                                 | label_10:
    0x00059508 mov r1, r5                                        |     r1 = r5;
    0x0005950a mov r0, r6                                        |     r0 = r6;
    0x0005950c bl 0x1e9b0                                        |     r0 = fcn_0001e9b0 (r0, r1, r2, r3, r4, r5);
    0x00059510 orr.w r8, r8, r0                                  |     r8 |= r0;
    0x00059514 b 0x5940a                                         |     goto label_2;
                                                                 | label_6:
    0x00059516 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00059518 mov r2, sb                                        |     r2 = sb;
    0x0005951a ldr r1, [sp, 0x28]                                |     r1 = var_28h;
    0x0005951c str r3, [sp, 4]                                   |     var_4h = r3;
    0x0005951e ldr r3, [sp, 0x64]                                |     r3 = *(arg_64h);
    0x00059520 str r3, [sp]                                      |     *(sp) = r3;
    0x00059522 mov r3, r0                                        |     r3 = r0;
    0x00059524 mov r0, r7                                        |     r0 = r7;
    0x00059526 bl 0x19a3c                                        |     fcn_00019a3c (r0, r1, r2, r3, r4, r5);
    0x0005952a b 0x593b8                                         |     goto label_3;
                                                                 | label_15:
    0x0005952c ldr r1, [r5]                                      |     r1 = *(r5);
    0x0005952e ldr r0, [r5, 0x44]                                |     r0 = *((r5 + 0x44));
    0x00059530 mov r2, r1                                        |     r2 = r1;
                                                                 |     if (r1 == 0) {
    0x00059532 cbz r1, 0x59548                                   |         goto label_16;
                                                                 |     }
    0x00059534 ldrb r2, [r1]                                     |     r2 = *(r1);
                                                                 |     if (r2 == 0) {
    0x00059536 cbz r2, 0x59548                                   |         goto label_16;
                                                                 |     }
    0x00059538 mov r3, r1                                        |     r3 = r1;
                                                                 |     do {
    0x0005953a ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x0005953e cmp r2, 0                                         |         
    0x00059540 bne 0x5953a                                       |         
                                                                 |     } while (r2 != 0);
    0x00059542 subs r3, r3, r1                                   |     r3 -= r1;
    0x00059544 bic r2, r3, 0xc0000000                            |     r2 = BIT_MASK (r3, 0xc0000000);
                                                                 | label_16:
    0x00059548 adds r0, 0x38                                     |     r0 += 0x38;
    0x0005954a bl 0x13f5c                                        |     r0 = fcn_00013f5c (r0, r1, r2);
    0x0005954e mov r4, r0                                        |     r4 = r0;
    0x00059550 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00059552 beq 0x594bc                                       |         void (*0x594bc)() ();
                                                                 |     }
    0x00059554 mov.w sb, 0                                       |     sb = 0;
    0x00059558 mov.w r8, 2                                       |     r8 = 2;
                                                                 | label_13:
    0x00059582 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00059584 mov r2, sb                                        |     r2 = sb;
    0x00059586 mov r0, r7                                        |     r0 = r7;
    0x00059588 str r3, [sp, 4]                                   |     var_4h = r3;
    0x0005958a ldr r3, [sp, 0x64]                                |     r3 = *(arg_64h);
    0x0005958c str r3, [sp]                                      |     *(sp) = r3;
    0x0005958e ldrd r3, r1, [sp, 0x24]                           |     __asm ("ldrd r3, r1, [var_24h]");
    0x00059592 bl 0x19a3c                                        |     fcn_00019a3c (r0, r1, r2, r3, r4, r5);
    0x00059596 b 0x5949e                                         |     goto label_4;
                                                                 | label_14:
    0x00059598 ldr r3, [sp, 0x60]                                |     r3 = *(arg_60h);
    0x0005959a mov r0, r6                                        |     r0 = r6;
    0x0005959c str r4, [sp, 4]                                   |     var_4h = r4;
    0x0005959e str r3, [sp]                                      |     *(sp) = r3;
    0x000595a0 mov r3, sb                                        |     r3 = sb;
    0x000595a2 ldrb.w r2, [r5, 0x2c]                             |     r2 = *((r5 + 0x2c));
    0x000595a6 ldr r1, [r5, 8]                                   |     r1 = *((r5 + 8));
    0x000595a8 bl 0x3da14                                        |     fcn_0003da14 (r0, r1, r2, r3);
    0x000595ac ldr.w r8, [sp, 0x34]                              |     r8 = var_34h;
    0x000595b0 mov r2, sb                                        |     r2 = sb;
    0x000595b2 movs r1, 0x4b                                     |     r1 = 0x4b;
    0x000595b4 mov r0, r7                                        |     r0 = r7;
    0x000595b6 str r4, [sp]                                      |     *(sp) = r4;
    0x000595b8 mov r3, r8                                        |     r3 = r8;
    0x000595ba bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000595be mov r3, r8                                        |     r3 = r8;
    0x000595c0 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000595c2 beq.w 0x594b4                                     |         goto label_5;
                                                                 |     }
    0x000595c6 ldr r2, [r5]                                      |     r2 = *(r5);
    0x000595c8 mov r3, r4                                        |     r3 = r4;
    0x000595ca mov.w r1, -1                                      |     r1 = -1;
    0x000595ce mov r0, r7                                        |     r0 = r7;
    0x000595d0 bl 0x1021c                                        |     fcn_0001021c (r0, r1, r2, r3);
    0x000595d4 b 0x594b4                                         |     goto label_5;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x595d8 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.000595d8 ()                                      | void fcn_000595d8 (int16_t arg_4h, int16_t arg_20h, 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_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_64h;
                                                                 |     int16_t var_68h;
                                                                 |     int16_t var_6ch;
                                                                 |     int16_t var_70h;
                                                                 |     int16_t var_74h;
                                                                 |     int32_t var_74h_2;
                                                                 |     int32_t var_7ch;
                                                                 |     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;
                                                                 |     int16_t var_98h;
                                                                 |     int16_t var_9ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
    0x000595d8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x000595dc mov r7, r2                                        |     r7 = r2;
    0x000595de ldr.w r2, [pc, 0x79c]                             |     
    0x000595e2 sub sp, 0xa4                                      |     
    0x000595e4 movs r4, 0                                        |     r4 = 0;
    0x000595e6 mov r8, r1                                        |     r8 = r1;
    0x000595e8 ldr.w r3, [pc, 0x794]                             |     r3 = *(0x59d80);
    0x000595ec add r2, pc                                        |     r2 = 0xb336e;
    0x000595ee ldr r6, [r0]                                      |     r6 = *(r0);
    0x000595f0 ldr r3, [r2, r3]                                  |     
    0x000595f2 ldr r3, [r3]                                      |     r3 = *(0xb336e);
    0x000595f4 str r3, [sp, 0x9c]                                |     var_9ch = r3;
    0x000595f6 mov.w r3, 0                                       |     r3 = 0;
    0x000595fa ldr r3, [r0, 0x40]                                |     r3 = *((r0 + 0x40));
    0x000595fc strd r4, r4, [sp, 0x6c]                           |     __asm ("strd r4, r4, [var_70h]");
                                                                 |     if (r3 != 0) {
    0x00059600 cbnz r3, 0x5960e                                  |         goto label_0;
                                                                 |     }
    0x00059602 ldrb.w sl, [r6, 0x40]                             |     sl = *((r6 + 0x40));
    0x00059606 mov r4, r3                                        |     r4 = r3;
    0x00059608 cmp.w sl, 0                                       |     
    0x0005960c beq 0x59646                                       |     
                                                                 |     while (r2 == 0) {
                                                                 | label_0:
    0x0005960e mov r1, r8                                        |         r1 = r8;
    0x00059610 mov r0, r6                                        |         r0 = r6;
    0x00059612 bl 0x12c54                                        |         fcn_00012c54 (r0, r1);
    0x00059616 mov r1, r7                                        |         r1 = r7;
    0x00059618 mov r0, r6                                        |         r0 = r6;
    0x0005961a bl 0x12e68                                        |         fcn_00012e68 (r0);
    0x0005961e mov r1, r4                                        |         r1 = r4;
    0x00059620 mov r0, r6                                        |         r0 = r6;
    0x00059622 bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
    0x00059626 ldr.w r2, [pc, 0x75c]                             |         r2 = *(0x00059d84);
    0x0005962a ldr.w r3, [pc, 0x754]                             |         r3 = *(0x59d82);
    0x0005962e add r2, pc                                        |         r2 += pc;
    0x00059630 ldr r3, [r2, r3]                                  |         r3 = *((r2 + r3));
    0x00059632 ldr r2, [r3]                                      |         r2 = *(0x59d82);
    0x00059634 ldr r3, [sp, 0x9c]                                |         r3 = var_9ch;
    0x00059636 eors r2, r3                                       |         r2 ^= r3;
    0x00059638 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0005963c bne.w 0x59d56                                     |             goto label_23;
                                                                 |         }
    0x00059640 add sp, 0xa4                                      |         
    0x00059642 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
    0x00059646 mov r5, r0                                        |         r5 = r0;
    0x00059648 bl 0x575d4                                        |         r0 = fcn_000575d4 (r0, r1);
    0x0005964c mov r4, r0                                        |         r4 = r0;
    0x0005964e cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00059650 beq.w 0x59a06                                     |             goto label_24;
                                                                 |         }
    0x00059654 mov r1, r0                                        |         r1 = r0;
    0x00059656 mov r3, sl                                        |         r3 = sl;
    0x00059658 movs r2, 0x6d                                     |         r2 = 0x6d;
    0x0005965a mov r0, r5                                        |         r0 = r5;
    0x0005965c str.w sl, [sp]                                    |         __asm ("str.w sl, [sp]");
    0x00059660 bl 0x126c4                                        |         fcn_000126c4 (r0, r1, r2, r3, r4);
    0x00059664 ldr r3, [r4, 0xc]                                 |         r3 = *((r4 + 0xc));
    0x00059666 mov r1, r4                                        |         r1 = r4;
    0x00059668 str r0, [sp, 0x20]                                |         var_20h = r0;
    0x0005966a mov r0, r5                                        |         r0 = r5;
    0x0005966c str r3, [sp, 0x1c]                                |         var_1ch = r3;
    0x0005966e bl 0x24200                                        |         r0 = fcn_00024200 (r0, r1);
                                                                 |         if (r0 == 0) {
    0x00059672 cbz r0, 0x59688                                   |             goto label_25;
                                                                 |         }
                                                                 | label_1:
    0x00059674 ldr r2, [sp, 0x70]                                |         r2 = var_70h;
    0x00059676 movs r4, 0                                        |         r4 = 0;
                                                                 | label_2:
    0x00059678 cmp r2, 0                                         |         
    0x0005967a beq 0x5960e                                       |         
                                                                 |     }
    0x0005967c ldr r3, [sp, 0x6c]                                |     r3 = var_6ch;
    0x0005967e str.w r3, [r2, 0x1ec]                             |     __asm ("str.w r3, aav.0x000000ff");
    0x00059682 movs r3, 0                                        |     r3 = 0;
    0x00059684 str r3, [sp, 0x70]                                |     var_70h = r3;
    0x00059686 b 0x5960e                                         |     goto label_0;
                                                                 | label_25:
    0x00059688 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0005968a mov r1, r4                                        |     r1 = r4;
    0x0005968c mov r0, r5                                        |     r0 = r5;
    0x0005968e subs r2, r3, 0                                    |     r2 = r3 - 0;
    0x00059690 it ne                                             |     
                                                                 |     if (r2 == r3) {
    0x00059692 movne r2, 1                                       |         r2 = 1;
                                                                 |     }
    0x00059694 bl 0x1e018                                        |     fcn_0001e018 (r0, r1);
    0x00059698 str r0, [sp, 0x28]                                |     var_28h = r0;
    0x0005969a cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0005969c bne 0x59674                                       |         goto label_1;
                                                                 |     }
    0x0005969e ldr r1, [r4, 0x44]                                |     r1 = *((r4 + 0x44));
    0x000596a0 ldr.w ip, [r6, 0x10]                              |     ip = *((r6 + 0x10));
    0x000596a4 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x000596a6 beq.w 0x59cec                                     |         goto label_26;
                                                                 |     }
    0x000596aa ldr r0, [r6, 0x14]                                |     r0 = *((r6 + 0x14));
    0x000596ac mov r3, ip                                        |     r3 = ip;
    0x000596ae ldr.w sb, [sp, 0x28]                              |     sb = var_28h;
    0x000596b2 cmp r0, 0                                         |     
                                                                 |     if (r0 > 0) {
    0x000596b4 bgt 0x596c4                                       |         goto label_27;
                                                                 |     }
    0x000596b6 b 0x596ca                                         |     goto label_6;
                                                                 |     do {
    0x000596b8 add.w sb, sb, 1                                   |         sb++;
    0x000596bc adds r3, 0x10                                     |         r3 += 0x10;
    0x000596be cmp sb, r0                                        |         
                                                                 |         if (sb == r0) {
    0x000596c0 beq.w 0x59a2c                                     |             goto label_28;
                                                                 |         }
                                                                 | label_27:
    0x000596c4 ldr r2, [r3, 0xc]                                 |         r2 = *((r3 + 0xc));
    0x000596c6 cmp r1, r2                                        |         
    0x000596c8 bne 0x596b8                                       |         
                                                                 |     } while (r1 != r2);
                                                                 | label_6:
    0x000596ca ldr r3, [r3]                                      |     r3 = *(r3);
    0x000596cc movs r1, 9                                        |     r1 = 9;
    0x000596ce ldr r2, [r4]                                      |     r2 = *(r4);
    0x000596d0 mov r0, r5                                        |     r0 = r5;
    0x000596d2 str r3, [sp]                                      |     *(sp) = r3;
    0x000596d4 movs r3, 0                                        |     r3 = 0;
    0x000596d6 bl 0x1cab0                                        |     r0 = fcn_0001cab0 (r0);
    0x000596da cmp r0, 1                                         |     
    0x000596dc mov fp, r0                                        |     
                                                                 |     if (r0 == 1) {
    0x000596de beq 0x59674                                       |         goto label_1;
                                                                 |     }
    0x000596e0 ldr r2, [r5, 0x44]                                |     r2 = *((r5 + 0x44));
    0x000596e2 ldr r3, [r4, 8]                                   |     r3 = *((r4 + 8));
    0x000596e4 adds r1, r2, 1                                    |     r1 = r2 + 1;
    0x000596e6 str r2, [sp, 0x2c]                                |     var_2ch = r2;
    0x000596e8 str r1, [r5, 0x44]                                |     *((r5 + 0x44)) = r1;
    0x000596ea str r1, [sp, 0x30]                                |     var_30h = r1;
    0x000596ec str.w r2, [r8, 0x30]                              |     __asm ("str.w r2, [r8, 0x30]");
    0x000596f0 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000596f2 beq.w 0x59c0c                                     |         goto label_29;
                                                                 |     }
    0x000596f6 mov.w sl, 0                                       |     sl = 0;
    0x000596fa adds r1, r2, 2                                    |     r1 = r2 + 2;
                                                                 |     do {
    0x000596fc ldr r3, [r3, 0x14]                                |         r3 = *((r3 + 0x14));
    0x000596fe add.w r2, r1, sl                                  |         r2 = r1 + sl;
    0x00059702 add.w sl, sl, 1                                   |         sl++;
    0x00059706 cmp r3, 0                                         |         
    0x00059708 bne 0x596fc                                       |         
                                                                 |     } while (r3 != 0);
    0x0005970a str r2, [r5, 0x44]                                |     *((r5 + 0x44)) = r2;
                                                                 | label_15:
    0x0005970c ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
                                                                 |     if (r3 != 0) {
    0x0005970e cbz r3, 0x5971e                                   |         
    0x00059710 ldr r2, [r4]                                      |         r2 = *(r4);
    0x00059712 ldr.w r3, [r5, 0x1ec]                             |         r3 = *((r5 + 0x1ec));
    0x00059716 str r5, [sp, 0x70]                                |         var_70h = r5;
    0x00059718 str.w r2, [r5, 0x1ec]                             |         __asm ("str.w r2, aav.0x000000ff");
    0x0005971c str r3, [sp, 0x6c]                                |         var_6ch = r3;
                                                                 |     }
    0x0005971e ldr r3, [r5, 8]                                   |     r3 = *((r5 + 8));
    0x00059720 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00059722 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00059724 beq.w 0x59a0a                                     |         goto label_30;
                                                                 |     }
                                                                 | label_4:
    0x00059728 ldrb r3, [r5, 0x12]                               |     r3 = *((r5 + 0x12));
                                                                 |     if (r3 == 0) {
    0x0005972a cbnz r3, 0x5973a                                  |         
    0x0005972c ldr r2, [sp, 0x24]                                |         r2 = var_24h;
    0x0005972e ldrb.w r3, [r2, 0x58]                             |         r3 = *((r2 + 0x58));
    0x00059732 orr r3, r3, 0x10                                  |         r3 |= 0x10;
    0x00059736 strb.w r3, [r2, 0x58]                             |         *((r2 + 0x58)) = r3;
                                                                 |     }
    0x0005973a mov r2, sb                                        |     r2 = sb;
    0x0005973c movs r1, 1                                        |     r1 = 1;
    0x0005973e mov r0, r5                                        |     r0 = r5;
    0x00059740 bl 0x43838                                        |     fcn_00043838 (r0, r1, r2);
    0x00059744 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
                                                                 |     if (r3 != 0) {
    0x00059746 cbz r3, 0x5975a                                   |         
    0x00059748 ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x0005974a mov r2, r7                                        |         r2 = r7;
    0x0005974c mov r1, r4                                        |         r1 = r4;
    0x0005974e mov r0, r5                                        |         r0 = r5;
    0x00059750 bl 0x43670                                        |         fcn_00043670 (r0, r1, r2, r3);
    0x00059754 ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x00059756 strd r3, r3, [sp, 0x64]                           |         __asm ("strd r3, r3, [var_64h]");
                                                                 |     }
    0x0005975a movs r3, 0                                        |     r3 = 0;
    0x0005975c add r0, sp, 0x74                                  |     r0 += var_74h;
    0x0005975e strd r5, r8, [sp, 0x74]                           |     __asm ("strd r5, r8, [var_74h]");
    0x00059762 strd r3, r3, [sp, 0x7c]                           |     __asm ("strd r3, r3, [var_7ch]");
    0x00059766 strd r3, r3, [sp, 0x84]                           |     __asm ("strd r3, r3, [var_84h]");
    0x0005976a strd r3, r3, [sp, 0x8c]                           |     __asm ("strd r3, r3, [var_8ch]");
    0x0005976e cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x00059770 beq.w 0x59a32                                     |         goto label_31;
                                                                 |     }
    0x00059774 mov r1, r7                                        |     r1 = r7;
    0x00059776 bl 0x1f318                                        |     r0 = fcn_0001f318 (r0, r1);
    0x0005977a cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0005977c bne.w 0x59674                                     |         goto label_1;
                                                                 |     }
    0x00059780 ldr r3, [r6, 0x18]                                |     r3 = *((r6 + 0x18));
    0x00059782 lsls r3, r3, 0x18                                 |     r3 <<= 0x18;
                                                                 |     if (r3 < r3) {
    0x00059784 bmi.w 0x59a6e                                     |         goto label_32;
                                                                 |     }
    0x00059788 ldrb.w r2, [r4, 0x2c]                             |     r2 = *((r4 + 0x2c));
    0x0005978c mov.w r3, -1                                      |     r3 = -1;
    0x00059790 str r3, [sp, 0x48]                                |     var_48h = r3;
                                                                 | label_7:
    0x00059792 ands r2, r2, 0x20                                 |     r2 &= 0x20;
                                                                 |     if (r2 == r2) {
    0x00059796 beq.w 0x59a84                                     |         goto label_33;
                                                                 |     }
    0x0005979a ldr.w sb, [r4, 8]                                 |     sb = *((r4 + 8));
    0x0005979e mov r2, sb                                        |     r2 = sb;
    0x000597a0 cmp.w sb, 0                                       |     
                                                                 |     if (sb != 0) {
    0x000597a4 bne 0x597b0                                       |         goto label_34;
                                                                 |     }
    0x000597a6 b 0x59d76                                         |     goto label_35;
                                                                 |     do {
    0x000597a8 ldr r2, [r2, 0x14]                                |         r2 = *((r2 + 0x14));
    0x000597aa cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x000597ac beq.w 0x59d76                                     |             goto label_35;
                                                                 |         }
                                                                 | label_34:
    0x000597b0 ldrb.w r3, [r2, 0x37]                             |         r3 = *((r2 + 0x37));
    0x000597b4 and r3, r3, 3                                     |         r3 &= 3;
    0x000597b8 cmp r3, 2                                         |         
    0x000597ba bne 0x597a8                                       |         
                                                                 |     } while (r3 != 2);
    0x000597bc ldrd r0, r3, [r5, 0x44]                           |     __asm ("ldrd r0, r3, [r5, 0x44]");
    0x000597c0 mov sb, r2                                        |     sb = r2;
    0x000597c2 ldrsh.w r1, [r2, 0x32]                            |     r1 = *((r2 + 0x32));
    0x000597c6 movs r2, 0                                        |     r2 = 0;
    0x000597c8 str r2, [sp]                                      |     *(sp) = r2;
    0x000597ca str r2, [sp, 0x58]                                |     var_58h = r2;
    0x000597cc adds r2, r3, r1                                   |     r2 = r3 + r1;
    0x000597ce adds r3, 1                                        |     r3++;
    0x000597d0 str r3, [sp, 0x44]                                |     var_44h = r3;
    0x000597d2 adds r3, r0, 1                                    |     r3 = r0 + 1;
    0x000597d4 str r1, [sp, 0x38]                                |     var_38h = r1;
    0x000597d6 str r0, [sp, 0x40]                                |     var_40h = r0;
    0x000597d8 str r2, [r5, 0x48]                                |     *((r5 + 0x48)) = r2;
    0x000597da mov r2, r0                                        |     r2 = r0;
    0x000597dc str r3, [r5, 0x44]                                |     *((r5 + 0x44)) = r3;
    0x000597de mov r3, r1                                        |     r3 = r1;
    0x000597e0 ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x000597e2 movs r1, 0x38                                     |     r1 = 0x38;
    0x000597e4 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000597e8 mov r1, sb                                        |     r1 = sb;
    0x000597ea str r0, [sp, 0x5c]                                |     var_5ch = r0;
    0x000597ec mov r0, r5                                        |     r0 = r5;
    0x000597ee bl 0x220e4                                        |     fcn_000220e4 (r0, r1);
                                                                 | label_9:
    0x000597f2 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x000597f4 mov.w fp, 0                                       |     
    0x000597f8 mov r2, r7                                        |     r2 = r7;
    0x000597fa mov r1, r8                                        |     r1 = r8;
    0x000597fc mov r0, r5                                        |     r0 = r5;
    0x000597fe str r3, [sp, 8]                                   |     var_8h = r3;
    0x00059800 movs r3, 0xc                                      |     r3 = 0xc;
    0x00059802 strd fp, r3, [sp]                                 |     __asm ("strd fp, r3, [sp]");
    0x00059806 mov r3, fp                                        |     r3 = fp;
    0x00059808 bl 0x3ec04                                        |     fcn_0003ec04 (r0, r1, r2, r3, r4, r5, r6);
    0x0005980c str r0, [sp, 0x34]                                |     var_34h = r0;
    0x0005980e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00059810 beq.w 0x59674                                     |         goto label_1;
                                                                 |     }
    0x00059814 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00059816 add r2, sp, 0x94                                  |     r2 += var_94h;
    0x00059818 ldr r0, [r3, 0x3c]                                |     r0 = *((r3 + 0x3c));
    0x0005981a ldr r1, [r3, 0x40]                                |     r1 = *((r3 + 0x40));
    0x0005981c ldr r3, [r6, 0x18]                                |     r3 = *((r6 + 0x18));
    0x0005981e stm r2!, {r0, r1}                                 |     *(r2!) = r0;
                                                                 |     *((r2! + 4)) = r1;
    0x00059820 ldr r2, [sp, 0x34]                                |     r2 = var_34h;
    0x00059822 ldrb.w r2, [r2, 0x26]                             |     r2 = *((r2 + 0x26));
    0x00059826 str r2, [sp, 0x30]                                |     var_30h = r2;
    0x00059828 lsls r2, r3, 0x18                                 |     r2 = r3 << 0x18;
                                                                 |     if (r2 < r3) {
    0x0005982a bmi.w 0x59a1a                                     |         goto label_36;
                                                                 |     }
                                                                 | label_5:
    0x0005982e cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x00059832 beq.w 0x59c3e                                     |         goto label_37;
                                                                 |     }
    0x00059836 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x00059838 cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x0005983a ble 0x5987e                                       |         goto label_38;
                                                                 |     }
    0x0005983c str r6, [sp, 0x3c]                                |     var_3ch = r6;
    0x0005983e mov.w fp, 0                                       |     
    0x00059842 str r5, [sp, 0x50]                                |     var_50h = r5;
    0x00059844 str r7, [sp, 0x54]                                |     var_54h = r7;
    0x00059846 mov r7, r4                                        |     r7 = r4;
    0x00059848 ldr r6, [sp, 0x44]                                |     r6 = var_44h;
    0x0005984a ldr r5, [sp, 0x2c]                                |     r5 = var_2ch;
    0x0005984c ldr r4, [sp, 0x24]                                |     r4 = var_24h;
    0x0005984e str.w sl, [sp, 0x4c]                              |     __asm ("str.w sl, [var_4ch]");
    0x00059852 mov sl, r3                                        |     sl = r3;
                                                                 |     do {
    0x00059854 ldr.w r3, [sb, 4]                                 |         r3 = *((sb + 4));
    0x00059858 add.w r2, r6, fp                                  |         r2 = r6 + fp;
    0x0005985c mov r1, r7                                        |         r1 = r7;
    0x0005985e mov r0, r4                                        |         r0 = r4;
    0x00059860 ldrsh.w r3, [r3, fp, lsl 1]                       |         offset_0 = fp << 1;
                                                                 |         r3 = *((r3 + offset_0));
    0x00059864 add.w fp, fp, 1                                   |         
    0x00059868 str r2, [sp]                                      |         *(sp) = r2;
    0x0005986a mov r2, r5                                        |         r2 = r5;
    0x0005986c bl 0x26140                                        |         fcn_00026140 (r0, r1, r2, r3, r4);
    0x00059870 cmp fp, sl                                        |         
    0x00059872 bne 0x59854                                       |         
                                                                 |     } while (fp != sl);
    0x00059874 mov r4, r7                                        |     r4 = r7;
    0x00059876 ldr r6, [sp, 0x3c]                                |     r6 = var_3ch;
    0x00059878 ldrd sl, r5, [sp, 0x4c]                           |     __asm ("ldrd sl, r5, [var_50h]");
    0x0005987c ldr r7, [sp, 0x54]                                |     r7 = var_54h;
                                                                 | label_38:
    0x0005987e ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00059880 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00059882 bne.w 0x59ad4                                     |         goto label_39;
                                                                 |     }
    0x00059886 ldr r3, [r5, 0x48]                                |     r3 = *((r5 + 0x48));
    0x00059888 mov r1, sb                                        |     r1 = sb;
    0x0005988a ldr.w sl, [sp, 0x24]                              |     sl = var_24h;
    0x0005988e add.w fp, r3, 1                                   |     
    0x00059892 mov r0, sl                                        |     r0 = sl;
    0x00059894 str.w fp, [r5, 0x48]                              |     __asm ("str.w fp, [r5, 0x48]");
    0x00059898 bl 0xdafc                                         |     fcn_0000dafc (r0, r1);
    0x0005989c ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x0005989e movs r1, 0x30                                     |     r1 = 0x30;
    0x000598a0 ldr r2, [sp, 0x44]                                |     r2 = var_44h;
    0x000598a2 str r0, [sp, 4]                                   |     var_4h = r0;
    0x000598a4 mov r0, sl                                        |     r0 = sl;
    0x000598a6 str r3, [sp, 8]                                   |     var_8h = r3;
    0x000598a8 str.w fp, [sp]                                    |     __asm ("str.w fp, [sp]");
    0x000598ac bl 0x1977c                                        |     fcn_0001977c (r0, r1, r2, r3, r4, r5);
    0x000598b0 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x000598b2 movs r1, 0x6c                                     |     r1 = 0x6c;
    0x000598b4 ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x000598b6 mov r0, sl                                        |     r0 = sl;
    0x000598b8 str r3, [sp]                                      |     *(sp) = r3;
    0x000598ba mov r3, fp                                        |     r3 = fp;
    0x000598bc bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000598c0 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x000598c2 str r3, [sp, 0x38]                                |     var_38h = r3;
                                                                 | label_18:
    0x000598c4 ldr r0, [sp, 0x34]                                |     r0 = var_34h;
    0x000598c6 bl 0x18dcc                                        |     fcn_00018dcc (r0);
    0x000598ca movs r3, 0                                        |     r3 = 0;
    0x000598cc str r3, [sp, 0x34]                                |     var_34h = r3;
    0x000598ce str r3, [sp, 0x3c]                                |     var_3ch = r3;
                                                                 | label_11:
    0x000598d0 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x000598d2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000598d4 beq.w 0x59c80                                     |         goto label_40;
                                                                 |     }
                                                                 | label_19:
    0x000598d8 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x000598da cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000598dc beq.w 0x59aa4                                     |         goto label_41;
                                                                 |     }
    0x000598e0 ldr r2, [sp, 0x64]                                |     r2 = var_64h;
    0x000598e2 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x000598e4 ldr r1, [sp, 0x3c]                                |     r1 = var_3ch;
    0x000598e6 subs r3, r2, r3                                   |     r3 = r2 - r3;
    0x000598e8 ldrb r3, [r1, r3]                                 |     r3 = *((r1 + r3));
    0x000598ea mov sl, r3                                        |     sl = r3;
    0x000598ec cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000598ee bne.w 0x59ca2                                     |         goto label_42;
                                                                 |     }
                                                                 | label_10:
    0x000598f2 ldrb.w r3, [r4, 0x2c]                             |     r3 = *((r4 + 0x2c));
    0x000598f6 lsls r0, r3, 0x1b                                 |     r0 = r3 << 0x1b;
                                                                 |     if (r0 >= r3) {
    0x000598f8 bpl.w 0x59ba2                                     |         goto label_43;
                                                                 |     }
    0x000598fc ldr r3, [r4, 0x3c]                                |     r3 = *((r4 + 0x3c));
                                                                 |     if (r3 != 0) {
    0x000598fe cbnz r3, 0x59906                                  |         goto label_44;
                                                                 |     }
    0x00059900 b 0x5990c                                         |     goto label_45;
                                                                 |     do {
    0x00059902 ldr r3, [r3, 0x18]                                |         r3 = *((r3 + 0x18));
                                                                 |         if (r3 == 0) {
    0x00059904 cbz r3, 0x5990c                                   |             goto label_45;
                                                                 |         }
                                                                 | label_44:
    0x00059906 ldr r2, [r3]                                      |         r2 = *(r3);
    0x00059908 cmp r6, r2                                        |         
    0x0005990a bne 0x59902                                       |         
                                                                 |     } while (r6 != r2);
                                                                 | label_45:
    0x0005990c mov r1, r4                                        |     r1 = r4;
    0x0005990e mov r0, r5                                        |     r0 = r5;
    0x00059910 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00059912 bl 0x35634                                        |     fcn_00035634 (r0, r1);
    0x00059916 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00059918 movs r2, 0                                        |     r2 = 0;
    0x0005991a movs r1, 0xf                                      |     r1 = 0xf;
    0x0005991c strd fp, r3, [sp]                                 |     __asm ("strd fp, r3, [sp]");
    0x00059920 mvn r3, 9                                         |     r3 = ~9;
    0x00059924 ldr.w fp, [sp, 0x24]                              |     fp = var_24h;
    0x00059928 str r3, [sp, 8]                                   |     var_8h = r3;
    0x0005992a movs r3, 1                                        |     r3 = 1;
    0x0005992c mov r0, fp                                        |     r0 = fp;
    0x0005992e bl 0x1977c                                        |     fcn_0001977c (r0, r1, r2, r3, r4, r5);
    0x00059932 ldr.w r3, [fp, 4]                                 |     r3 = *(arg_4h);
                                                                 |     if (r3 != 0) {
    0x00059936 cbz r3, 0x5994a                                   |         
    0x00059938 ldr.w r2, [fp, 0x20]                              |         r2 = *(arg_20h);
    0x0005993c add.w r2, r2, r2, lsl 2                           |         r2 += (r2 << 2);
    0x00059940 add.w r3, r3, r2, lsl 2                           |         r3 += (r2 << 2);
    0x00059944 movs r2, 2                                        |         r2 = 2;
    0x00059946 strb r2, [r3, -0x11]                              |         *((r3 - 0x11)) = r2;
                                                                 |     }
    0x0005994a ldr.w r3, [r5, 0x198]                             |     r3 = *((r5 + 0x198));
    0x0005994e movs r2, 1                                        |     r2 = 1;
    0x00059950 cmp r3, 0                                         |     
    0x00059952 it eq                                             |     
                                                                 |     if (r3 != 0) {
    0x00059954 moveq r3, r5                                      |         r3 = r5;
                                                                 |     }
    0x00059956 strb r2, [r3, 0x15]                               |     *((r3 + 0x15)) = r2;
                                                                 | label_13:
    0x00059958 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x0005995a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005995c bne.w 0x59b84                                     |         goto label_46;
                                                                 |     }
    0x00059960 cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x00059964 beq.w 0x59c10                                     |         goto label_47;
                                                                 |     }
    0x00059968 ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x0005996a movs r1, 9                                        |     r1 = 9;
    0x0005996c ldr.w fp, [sp, 0x24]                              |     fp = var_24h;
    0x00059970 ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x00059972 str r3, [sp]                                      |     *(sp) = r3;
    0x00059974 add.w r3, sl, 1                                   |     r3 = sl + 1;
    0x00059978 mov r0, fp                                        |     r0 = fp;
    0x0005997a bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005997e ldr.w r3, [fp, 0x20]                              |     r3 = *(arg_20h);
    0x00059982 cmp sl, r3                                        |     
                                                                 |     if (sl < r3) {
    0x00059984 bhs 0x59994                                       |         
    0x00059986 ldr.w r2, [fp, 4]                                 |         r2 = *(arg_4h);
    0x0005998a add.w r1, sl, sl, lsl 2                           |         r1 = sl + (sl << 2);
    0x0005998e add.w r2, r2, r1, lsl 2                           |         r2 += (r1 << 2);
    0x00059992 str r3, [r2, 8]                                   |         *((r2 + 8)) = r3;
                                                                 |     }
                                                                 | label_16:
    0x00059994 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00059996 subs r3, 1                                        |     r3--;
    0x00059998 ldr r2, [r2, 0x18]                                |     r2 = *((r2 + 0x18));
    0x0005999a str r3, [r2, 0x58]                                |     *((r2 + 0x58)) = r3;
                                                                 | label_12:
    0x0005999c ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0005999e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000599a0 beq.w 0x59bcc                                     |         goto label_48;
                                                                 |     }
                                                                 | label_14:
    0x000599a4 ldrb r3, [r5, 0x12]                               |     r3 = *((r5 + 0x12));
                                                                 |     if (r3 != 0) {
    0x000599a6 cbnz r3, 0x599ae                                  |         goto label_3;
                                                                 |     }
    0x000599a8 ldr.w r3, [r5, 0x19c]                             |     r3 = *((r5 + 0x19c));
    0x000599ac cbz r3, 0x599b4                                   |     
                                                                 |     while (r2 >= r3) {
                                                                 | label_3:
    0x000599ae ldr r2, [sp, 0x70]                                |         r2 = var_70h;
    0x000599b0 ldr r4, [sp, 0x3c]                                |         r4 = var_3ch;
    0x000599b2 b 0x59678                                         |         goto label_2;
    0x000599b4 mov r0, r5                                        |         r0 = r5;
    0x000599b6 bl 0x221f4                                        |         fcn_000221f4 (r0, r1, r2);
    0x000599ba ldr r3, [r6, 0x18]                                |         r3 = *((r6 + 0x18));
    0x000599bc lsls r2, r3, 0x18                                 |         r2 = r3 << 0x18;
    0x000599be bpl 0x599ae                                       |         
                                                                 |     }
    0x000599c0 ldrb r3, [r5, 0x12]                               |     r3 = *((r5 + 0x12));
    0x000599c2 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000599c4 bne 0x599ae                                       |         goto label_3;
                                                                 |     }
    0x000599c6 ldr.w r3, [r5, 0x19c]                             |     r3 = *((r5 + 0x19c));
    0x000599ca cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000599cc bne 0x599ae                                       |         goto label_3;
                                                                 |     }
    0x000599ce ldr r4, [sp, 0x24]                                |     r4 = var_24h;
    0x000599d0 movs r1, 0x23                                     |     r1 = 0x23;
    0x000599d2 ldr r2, [sp, 0x48]                                |     r2 = var_48h;
    0x000599d4 str r3, [sp]                                      |     *(sp) = r3;
    0x000599d6 movs r3, 1                                        |     r3 = 1;
    0x000599d8 mov r0, r4                                        |     r0 = r4;
    0x000599da bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x000599de movs r1, 1                                        |     r1 = 1;
    0x000599e0 mov r0, r4                                        |     r0 = r4;
    0x000599e2 bl 0x100e4                                        |     fcn_000100e4 (r0, r1);
    0x000599e6 ldr r3, [r4]                                      |     r3 = *(r4);
    0x000599e8 ldrb.w r3, [r3, 0x40]                             |     r3 = *((r3 + 0x40));
    0x000599ec cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000599ee bne 0x599ae                                       |         goto label_3;
                                                                 |     }
    0x000599f0 str r3, [sp]                                      |     *(sp) = r3;
    0x000599f2 mov.w r2, -1                                      |     r2 = -1;
    0x000599f6 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x000599f8 ldr r1, [pc, 0x38c]                               |     
    0x000599fa ldr r4, [sp, 0x3c]                                |     r4 = var_3ch;
    0x000599fc ldr r0, [r3, 0x10]                                |     r0 = *((r3 + 0x10));
    0x000599fe movs r3, 1                                        |     r3 = 1;
    0x00059a00 add r1, pc                                        |     r1 = 0xb378c;
    0x00059a02 bl 0x17978                                        |     fcn_00017978 (r0, r1, r2, r3, r4);
                                                                 | label_24:
    0x00059a06 ldr r2, [sp, 0x70]                                |     r2 = var_70h;
    0x00059a08 b 0x59678                                         |     goto label_2;
                                                                 | label_30:
    0x00059a0a mov r0, r5                                        |     r0 = r5;
    0x00059a0c bl 0x192c8                                        |     fcn_000192c8 (r0);
    0x00059a10 str r0, [sp, 0x24]                                |     var_24h = r0;
    0x00059a12 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00059a14 beq.w 0x59674                                     |         goto label_1;
                                                                 |     }
    0x00059a18 b 0x59728                                         |     goto label_4;
                                                                 | label_36:
    0x00059a1a ldr r2, [sp, 0x48]                                |     r2 = var_48h;
    0x00059a1c movs r3, 1                                        |     r3 = 1;
    0x00059a1e ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x00059a20 movs r1, 0x25                                     |     r1 = 0x25;
    0x00059a22 str.w fp, [sp]                                    |     __asm ("str.w fp, [sp]");
    0x00059a26 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00059a2a b 0x5982e                                         |     goto label_5;
                                                                 | label_28:
    0x00059a2c add.w r3, ip, sb, lsl 4                           |     r3 = ip + (sb << 4);
    0x00059a30 b 0x596ca                                         |     goto label_6;
                                                                 | label_31:
    0x00059a32 ldr r3, [r6, 0x18]                                |     r3 = *((r6 + 0x18));
    0x00059a34 lsls r0, r3, 0x18                                 |     r0 = r3 << 0x18;
    0x00059a36 itt pl                                            |     
                                                                 |     if (r0 < r3) {
    0x00059a38 movpl r3, -1                                      |         r3 = -1;
                                                                 |     }
                                                                 |     if (r0 >= r3) {
    0x00059a3c str r3, [sp, 0x48]                                |         var_48h = r3;
                                                                 |     }
                                                                 |     if (r0 < r3) {
    0x00059a3e bmi 0x59a6e                                       |         goto label_32;
                                                                 |     }
                                                                 | label_8:
    0x00059a40 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00059a42 ldrb.w r2, [r4, 0x2c]                             |     r2 = *((r4 + 0x2c));
    0x00059a46 orrs r3, r7                                       |     r3 |= r7;
    0x00059a48 orrs.w r3, r3, fp                                 |     r3 |= fp;
                                                                 |     if (r3 != r3) {
    0x00059a4c bne.w 0x59792                                     |         goto label_7;
                                                                 |     }
    0x00059a50 ands r3, r2, 0x10                                 |     r3 = r2 & 0x10;
                                                                 |     if (r3 != r2) {
    0x00059a54 bne.w 0x59792                                     |         goto label_7;
                                                                 |     }
    0x00059a58 ldr r0, [r5]                                      |     r0 = *(r5);
    0x00059a5a mov r2, r3                                        |     r2 = r3;
    0x00059a5c mov r1, r4                                        |     r1 = r4;
    0x00059a5e bl 0x14130                                        |     r0 = fcn_00014130 (r0, r1, r2, r3);
    0x00059a62 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00059a64 beq.w 0x59cfe                                     |         goto label_49;
                                                                 |     }
    0x00059a68 ldrb.w r2, [r4, 0x2c]                             |     r2 = *((r4 + 0x2c));
    0x00059a6c b 0x59792                                         |     goto label_7;
                                                                 | label_32:
    0x00059a6e ldr r3, [r5, 0x48]                                |     r3 = *((r5 + 0x48));
    0x00059a70 movs r2, 0                                        |     r2 = 0;
    0x00059a72 ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x00059a74 movs r1, 0x19                                     |     r1 = 0x19;
    0x00059a76 adds r3, 1                                        |     r3++;
    0x00059a78 str r3, [r5, 0x48]                                |     *((r5 + 0x48)) = r3;
    0x00059a7a str r2, [sp]                                      |     *(sp) = r2;
    0x00059a7c str r3, [sp, 0x48]                                |     var_48h = r3;
    0x00059a7e bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00059a82 b 0x59a40                                         |     goto label_8;
                                                                 | label_33:
    0x00059a84 str r2, [sp]                                      |     *(sp) = r2;
    0x00059a86 movs r1, 0x1c                                     |     r1 = 0x1c;
    0x00059a88 ldr r3, [r5, 0x48]                                |     r3 = *((r5 + 0x48));
    0x00059a8a mov sb, r2                                        |     sb = r2;
    0x00059a8c ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x00059a8e str r2, [sp, 0x5c]                                |     var_5ch = r2;
    0x00059a90 adds r3, 1                                        |     r3++;
    0x00059a92 str r3, [r5, 0x48]                                |     *((r5 + 0x48)) = r3;
    0x00059a94 str r3, [sp, 0x58]                                |     var_58h = r3;
    0x00059a96 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00059a9a movs r2, 1                                        |     r2 = 1;
    0x00059a9c strd sb, sb, [sp, 0x40]                           |     __asm ("strd sb, sb, [var_44h]");
    0x00059aa0 str r2, [sp, 0x38]                                |     var_38h = r2;
    0x00059aa2 b 0x597f2                                         |     goto label_9;
                                                                 | label_41:
    0x00059aa4 cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x00059aa8 beq.w 0x59cb8                                     |         goto label_50;
                                                                 |     }
    0x00059aac ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00059aae movs r1, 0x6a                                     |     r1 = 0x6a;
    0x00059ab0 ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x00059ab2 ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x00059ab4 mov sl, r3                                        |     sl = r3;
    0x00059ab6 str r3, [sp]                                      |     *(sp) = r3;
    0x00059ab8 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00059abc str.w sl, [sp]                                    |     __asm ("str.w sl, [sp]");
    0x00059ac0 mov r3, fp                                        |     r3 = fp;
    0x00059ac2 mov sl, r0                                        |     sl = r0;
    0x00059ac4 ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x00059ac6 ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x00059ac8 movs r1, 0x63                                     |     r1 = 0x63;
    0x00059aca bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00059ace b 0x598f2                                         |     goto label_10;
                                                                 | label_17:
    0x00059ad0 str.w fp, [sp, 0x44]                              |     __asm ("str.w fp, [var_44h]");
                                                                 | label_39:
    0x00059ad4 add.w r1, sl, 2                                   |     r1 = sl + 2;
    0x00059ad8 mov r0, r6                                        |     r0 = r6;
    0x00059ada bl 0xd3a0                                         |     r0 = fcn_0000d3a0 (r0, r1);
    0x00059ade mov r3, r0                                        |     r3 = r0;
    0x00059ae0 str r0, [sp, 0x3c]                                |     var_3ch = r0;
    0x00059ae2 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00059ae4 beq.w 0x59ccc                                     |         goto label_51;
                                                                 |     }
    0x00059ae8 add.w r2, sl, 1                                   |     r2 = sl + 1;
    0x00059aec movs r1, 1                                        |     r1 = 1;
    0x00059aee blx 0x5fcc                                        |     fcn_00005fcc ();
    0x00059af2 ldr r1, [sp, 0x3c]                                |     r1 = var_3ch;
    0x00059af4 movs r2, 0                                        |     r2 = 0;
    0x00059af6 add sl, r1                                        |     sl += r1;
    0x00059af8 strb.w r2, [sl, 1]                                |     *((sl + 1)) = r2;
    0x00059afc ldr r3, [sp, 0x94]                                |     r3 = var_94h;
    0x00059afe cmp r3, r2                                        |     
    0x00059b00 ittt ge                                           |     
                                                                 |     if (r3 < r2) {
    0x00059b02 ldrge r0, [sp, 0x2c]                              |         r0 = var_2ch;
                                                                 |     }
                                                                 |     if (r3 < r2) {
    0x00059b04 subge r3, r3, r0                                  |         r3 -= r0;
                                                                 |     }
                                                                 |     if (r3 < r2) {
    0x00059b06 strbge r2, [r1, r3]                               |         *((r1 + r3)) = r2;
                                                                 |     }
    0x00059b08 ldr r3, [sp, 0x98]                                |     r3 = var_98h;
    0x00059b0a cmp r3, 0                                         |     
                                                                 |     if (r3 >= 0) {
    0x00059b0c blt 0x59b18                                       |         
    0x00059b0e ldr r2, [sp, 0x2c]                                |         r2 = var_2ch;
    0x00059b10 ldr r1, [sp, 0x3c]                                |         r1 = var_3ch;
    0x00059b12 subs r3, r3, r2                                   |         r3 -= r2;
    0x00059b14 movs r2, 0                                        |         r2 = 0;
    0x00059b16 strb r2, [r1, r3]                                 |         *((r1 + r3)) = r2;
                                                                 |     }
    0x00059b18 ldr r2, [sp, 0x5c]                                |     r2 = var_5ch;
                                                                 |     if (r2 != 0) {
    0x00059b1a cbz r2, 0x59b26                                   |         
    0x00059b1c ldr r3, [sp, 0x24]                                |         r3 = var_24h;
    0x00059b1e ldr r3, [r3, 0x20]                                |         r3 = *((r3 + 0x20));
    0x00059b20 cmp r2, r3                                        |         
                                                                 |         if (r2 < r3) {
    0x00059b22 blt.w 0x59ce2                                     |             goto label_52;
                                                                 |         }
                                                                 |     }
                                                                 | label_20:
    0x00059b26 mov.w fp, 0                                       |     
    0x00059b2a movs r1, 0x10                                     |     r1 = 0x10;
    0x00059b2c mov r2, fp                                        |     r2 = fp;
    0x00059b2e mov r3, fp                                        |     r3 = fp;
    0x00059b30 str.w fp, [sp]                                    |     __asm ("str.w fp, [sp]");
    0x00059b34 ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x00059b36 bl 0x18bf8                                        |     r0 = fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00059b3a mov sl, r0                                        |     sl = r0;
    0x00059b3c ldr r0, [sp, 0x34]                                |     r0 = var_34h;
    0x00059b3e bl 0x18dcc                                        |     fcn_00018dcc (r0);
    0x00059b42 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00059b44 ldr r0, [r3, 0x18]                                |     r0 = *((r3 + 0x18));
    0x00059b46 bl 0x19ed0                                        |     fcn_00019ed0 (r0);
    0x00059b4a mov r2, fp                                        |     r2 = fp;
    0x00059b4c str.w fp, [sp]                                    |     __asm ("str.w fp, [sp]");
    0x00059b50 ldr.w fp, [sp, 0x24]                              |     fp = var_24h;
    0x00059b54 mov r3, r0                                        |     r3 = r0;
    0x00059b56 str r0, [sp, 0x34]                                |     var_34h = r0;
    0x00059b58 movs r1, 0x10                                     |     r1 = 0x10;
    0x00059b5a mov r0, fp                                        |     r0 = fp;
    0x00059b5c bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00059b60 ldr.w r3, [fp, 0x20]                              |     r3 = *(arg_20h);
    0x00059b64 cmp sl, r3                                        |     
                                                                 |     if (sl < r3) {
    0x00059b66 bhs 0x59b76                                       |         
    0x00059b68 ldr r2, [sp, 0x24]                                |         r2 = var_24h;
    0x00059b6a add.w sl, sl, sl, lsl 2                           |         sl += (sl << 2);
    0x00059b6e ldr r2, [r2, 4]                                   |         r2 = *((r2 + 4));
    0x00059b70 add.w r2, r2, sl, lsl 2                           |         r2 += (sl << 2);
    0x00059b74 str r3, [r2, 8]                                   |         *((r2 + 8)) = r3;
                                                                 |     }
    0x00059b76 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00059b78 subs r3, 1                                        |     r3--;
    0x00059b7a ldr.w fp, [sp, 0x44]                              |     fp = var_44h;
    0x00059b7e ldr r2, [r2, 0x18]                                |     r2 = *((r2 + 0x18));
    0x00059b80 str r3, [r2, 0x58]                                |     *((r2 + 0x58)) = r3;
    0x00059b82 b 0x598d0                                         |     goto label_11;
                                                                 | label_46:
    0x00059b84 ldr r3, [sp, 0x34]                                |     r3 = var_34h;
    0x00059b86 ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x00059b88 mvns r1, r3                                       |     r1 = ~r3;
    0x00059b8a ldr r2, [r0, 0x18]                                |     r2 = *((r0 + 0x18));
                                                                 |     if (r1 >= r3) {
    0x00059b8c bmi 0x59b98                                       |         
    0x00059b8e ldr r3, [r2, 0x70]                                |         r3 = *((r2 + 0x70));
                                                                 |         if (r3 == 0) {
    0x00059b90 cbz r3, 0x59b98                                   |             goto label_53;
                                                                 |         }
    0x00059b92 ldr r0, [r0, 0x20]                                |         r0 = *((r0 + 0x20));
    0x00059b94 str.w r0, [r3, r1, lsl 2]                         |         __asm ("str.w r0, [r3, r1, lsl 2]");
                                                                 |     }
                                                                 | label_53:
    0x00059b98 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00059b9a ldr r3, [r3, 0x20]                                |     r3 = *((r3 + 0x20));
    0x00059b9c subs r3, 1                                        |     r3--;
    0x00059b9e str r3, [r2, 0x58]                                |     *((r2 + 0x58)) = r3;
    0x00059ba0 b 0x5999c                                         |     goto label_12;
                                                                 | label_43:
    0x00059ba2 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x00059ba4 mov r1, r4                                        |     r1 = r4;
    0x00059ba6 ldr r2, [sp, 0x20]                                |     r2 = var_20h;
    0x00059ba8 mov r0, r5                                        |     r0 = r5;
    0x00059baa strd fp, r3, [sp, 4]                              |     __asm ("strd fp, r3, [var_8h]");
    0x00059bae ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00059bb0 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00059bb2 ldrb r3, [r5, 0x12]                               |     r3 = *((r5 + 0x12));
    0x00059bb4 clz r3, r3                                        |     r3 &= r3;
    0x00059bb8 lsrs r3, r3, 5                                    |     r3 >>= 5;
    0x00059bba str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x00059bbc ldr r3, [sp, 0x68]                                |     r3 = var_68h;
    0x00059bbe str r3, [sp]                                      |     *(sp) = r3;
    0x00059bc0 movs r3, 0xa                                      |     r3 = 0xa;
    0x00059bc2 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x00059bc4 ldr r3, [sp, 0x64]                                |     r3 = var_64h;
    0x00059bc6 bl 0x59374                                        |     fcn_00059374 (r0, r1, r2, r3, r4, r5, r6);
    0x00059bca b 0x59958                                         |     goto label_13;
                                                                 | label_48:
    0x00059bcc ldrb.w r3, [r4, 0x2c]                             |     r3 = *((r4 + 0x2c));
    0x00059bd0 lsls r1, r3, 0x1b                                 |     r1 = r3 << 0x1b;
                                                                 |     if (r1 < r3) {
    0x00059bd2 bmi.w 0x599a4                                     |         goto label_14;
                                                                 |     }
    0x00059bd6 cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x00059bda beq.w 0x59d44                                     |         goto label_54;
                                                                 |     }
                                                                 | label_21:
    0x00059bde ldr r4, [r4, 8]                                   |     r4 = *((r4 + 8));
    0x00059be0 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x00059be2 beq.w 0x599a4                                     |         goto label_14;
                                                                 |     }
    0x00059be6 ldrd fp, sl, [sp, 0x24]                           |     __asm ("ldrd fp, sl, [var_24h]");
    0x00059bea mov.w sb, 0                                       |     sb = 0;
                                                                 |     do {
    0x00059bee ldr r2, [sp, 0x68]                                |         r2 = var_68h;
    0x00059bf0 movs r3, 0                                        |         r3 = 0;
    0x00059bf2 movs r1, 0x3b                                     |         r1 = 0x3b;
    0x00059bf4 mov r0, fp                                        |         r0 = fp;
    0x00059bf6 str.w sb, [sp]                                    |         __asm ("str.w sb, [sp]");
    0x00059bfa add r2, sl                                        |         r2 += sl;
    0x00059bfc add.w sl, sl, 1                                   |         sl++;
    0x00059c00 bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00059c04 ldr r4, [r4, 0x14]                                |         r4 = *((r4 + 0x14));
    0x00059c06 cmp r4, 0                                         |         
    0x00059c08 bne 0x59bee                                       |         
                                                                 |     } while (r4 != 0);
    0x00059c0a b 0x599a4                                         |     goto label_14;
                                                                 | label_29:
    0x00059c0c mov sl, r3                                        |     sl = r3;
    0x00059c0e b 0x5970c                                         |     goto label_15;
                                                                 | label_47:
    0x00059c10 ldr.w fp, [sp, 0x24]                              |     fp = var_24h;
    0x00059c14 mov r3, sl                                        |     r3 = sl;
    0x00059c16 mov r2, sb                                        |     r2 = sb;
    0x00059c18 movs r1, 0x10                                     |     r1 = 0x10;
    0x00059c1a str.w sb, [sp]                                    |     __asm ("str.w sb, [sp]");
    0x00059c1e mov r0, fp                                        |     r0 = fp;
    0x00059c20 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00059c24 ldr.w r3, [fp, 0x20]                              |     r3 = *(arg_20h);
    0x00059c28 mov r2, fp                                        |     r2 = fp;
    0x00059c2a cmp sl, r3                                        |     
    0x00059c2c itttt lo                                          |     
                                                                 |     if (sl >= r3) {
    0x00059c2e ldrlo r2, [fp, 4]                                 |         r2 = *(arg_4h);
                                                                 |     }
                                                                 |     if (sl >= r3) {
    0x00059c32 addlo sl, sl, sl, lsl 2                           |         sl += (sl << 2);
                                                                 |     }
                                                                 |     if (sl < r3) {
    0x00059c36 add.w r2, r2, sl, lsl 2                           |         r2 += (sl << 2);
                                                                 |     }
                                                                 |     if (sl < r3) {
    0x00059c3a str r3, [r2, 8]                                   |         *((r2 + 8)) = r3;
                                                                 |     }
    0x00059c3c b 0x59994                                         |     goto label_16;
                                                                 | label_37:
    0x00059c3e str.w sb, [sp, 4]                                 |     __asm ("str.w sb, [var_4h]");
    0x00059c42 mov.w r2, -1                                      |     r2 = -1;
    0x00059c46 ldr r3, [r5, 0x48]                                |     r3 = *((r5 + 0x48));
    0x00059c48 mov r1, r4                                        |     r1 = r4;
    0x00059c4a mov r0, r5                                        |     r0 = r5;
    0x00059c4c adds r3, 1                                        |     r3++;
    0x00059c4e str r3, [sp]                                      |     *(sp) = r3;
    0x00059c50 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00059c52 bl 0x26204                                        |     fcn_00026204 (r0, r1, r2, r3, r4, r5);
    0x00059c56 ldr r3, [r5, 0x48]                                |     r3 = *((r5 + 0x48));
    0x00059c58 mov fp, r0                                        |     
    0x00059c5a cmp r3, r0                                        |     
    0x00059c5c ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00059c5e it lt                                             |     
                                                                 |     if (r3 >= r0) {
    0x00059c60 strlt fp, [r5, 0x48]                              |         *((r5 + 0x48)) = fp;
                                                                 |     }
    0x00059c64 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00059c66 bne.w 0x59ad0                                     |         goto label_17;
                                                                 |     }
    0x00059c6a ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x00059c6c movs r1, 0x7e                                     |     r1 = 0x7e;
    0x00059c6e ldr r2, [sp, 0x58]                                |     r2 = var_58h;
    0x00059c70 ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x00059c72 str r3, [sp]                                      |     *(sp) = r3;
    0x00059c74 mov r3, fp                                        |     r3 = fp;
    0x00059c76 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00059c7a movs r3, 1                                        |     r3 = 1;
    0x00059c7c str r3, [sp, 0x38]                                |     var_38h = r3;
    0x00059c7e b 0x598c4                                         |     goto label_18;
                                                                 | label_40:
    0x00059c80 ldrb.w r3, [r4, 0x2c]                             |     r3 = *((r4 + 0x2c));
    0x00059c84 lsls r3, r3, 0x1b                                 |     r3 <<= 0x1b;
                                                                 |     if (r3 >= r3) {
    0x00059c86 bmi 0x59cd8                                       |         
    0x00059c88 ldr r3, [sp, 0x3c]                                |         r3 = var_3ch;
    0x00059c8a movs r2, 0x36                                     |         r2 = 0x36;
    0x00059c8c mov r1, r4                                        |         r1 = r4;
    0x00059c8e mov r0, r5                                        |         r0 = r5;
    0x00059c90 str r3, [sp]                                      |         *(sp) = r3;
    0x00059c92 add r3, sp, 0x68                                  |         r3 += var_68h;
    0x00059c94 str r3, [sp, 8]                                   |         var_8h = r3;
    0x00059c96 add r3, sp, 0x64                                  |         r3 += var_64h;
    0x00059c98 str r3, [sp, 4]                                   |         var_4h = r3;
    0x00059c9a ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x00059c9c bl 0x2230c                                        |         fcn_0002230c (r0, r1, r2, r3, r4, r5, r6);
    0x00059ca0 b 0x598d8                                         |         goto label_19;
                                                                 | label_42:
    0x00059ca2 ldr r3, [sp, 0x38]                                |         r3 = var_38h;
    0x00059ca4 movs r1, 0x42                                     |         r1 = 0x42;
    0x00059ca6 ldr r0, [sp, 0x24]                                |         r0 = var_24h;
    0x00059ca8 mov.w sl, 0                                       |         sl = 0;
    0x00059cac strd fp, r3, [sp]                                 |         __asm ("strd fp, r3, [sp]");
    0x00059cb0 ldr r3, [sp, 0x34]                                |         r3 = var_34h;
    0x00059cb2 bl 0x19a3c                                        |         fcn_00019a3c (r0, r1, r2, r3, r4, r5);
    0x00059cb6 b 0x598f2                                         |         goto label_10;
                                                                 | label_50:
    0x00059cb8 ldr r2, [sp, 0x58]                                |         r2 = var_58h;
    0x00059cba mov r3, sb                                        |         r3 = sb;
    0x00059cbc ldr r0, [sp, 0x24]                                |         r0 = var_24h;
    0x00059cbe movs r1, 0x7f                                     |         r1 = 0x7f;
    0x00059cc0 str.w fp, [sp]                                    |         __asm ("str.w fp, [sp]");
    0x00059cc4 bl 0x18bf8                                        |         r0 = fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00059cc8 mov sl, r0                                        |         sl = r0;
    0x00059cca b 0x598f2                                         |         goto label_10;
                                                                 | label_51:
    0x00059ccc ldr r0, [sp, 0x34]                                |         r0 = var_34h;
    0x00059cce mov r4, r3                                        |         r4 = r3;
    0x00059cd0 bl 0x18dcc                                        |         fcn_00018dcc (r0);
    0x00059cd4 ldr r2, [sp, 0x70]                                |         r2 = var_70h;
    0x00059cd6 b 0x59678                                         |         goto label_2;
                                                                 |     }
    0x00059cd8 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00059cda str r3, [sp, 0x64]                                |     var_64h = r3;
    0x00059cdc movs r3, 1                                        |     r3 = 1;
    0x00059cde str r3, [sp, 0x68]                                |     var_68h = r3;
    0x00059ce0 b 0x598d8                                         |     goto label_19;
                                                                 | label_52:
    0x00059ce2 ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x00059ce4 mov r1, r2                                        |     r1 = r2;
    0x00059ce6 bl 0x102bc                                        |     fcn_000102bc (r0, r1);
    0x00059cea b 0x59b26                                         |     goto label_20;
                                                                 | label_26:
    0x00059cec sub.w r3, ip, 0xf40000                            |     r3 = ip - 0xf40000;
    0x00059cf0 movw sb, 0xbdc0                                   |     
    0x00059cf4 sub.w r3, r3, 0x2400                              |     r3 -= 0x2400;
    0x00059cf8 movt sb, 0xfff0                                   |     sb = 0xfff0bdc0;
    0x00059cfc b 0x596ca                                         |     goto label_6;
                                                                 | label_49:
    0x00059cfe ldr r3, [r4]                                      |     r3 = *(r4);
    0x00059d00 mov r1, sb                                        |     r1 = sb;
    0x00059d02 mov r0, r5                                        |     r0 = r5;
    0x00059d04 str r3, [sp]                                      |     *(sp) = r3;
    0x00059d06 movs r3, 1                                        |     r3 = 1;
    0x00059d08 ldr r2, [r4, 0x20]                                |     r2 = *((r4 + 0x20));
    0x00059d0a bl 0x19dd4                                        |     fcn_00019dd4 (r0, r1, r2, r3, r4);
    0x00059d0e ldrb.w r3, [r4, 0x2c]                             |     r3 = *((r4 + 0x2c));
    0x00059d12 lsls r1, r3, 0x1a                                 |     r1 = r3 << 0x1a;
                                                                 |     if (r1 >= r3) {
    0x00059d14 bpl 0x59d5a                                       |         goto label_55;
                                                                 |     }
                                                                 | label_22:
    0x00059d16 ldr r3, [r4, 8]                                   |     r3 = *((r4 + 8));
    0x00059d18 str r3, [sp, 0x3c]                                |     var_3ch = r3;
    0x00059d1a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00059d1c beq.w 0x599a4                                     |         goto label_14;
                                                                 |     }
    0x00059d20 ldr.w sl, [sp, 0x24]                              |     sl = var_24h;
    0x00059d24 mov fp, r5                                        |     
    0x00059d26 movs r4, 0                                        |     r4 = 0;
    0x00059d28 mov r5, r3                                        |     r5 = r3;
                                                                 |     do {
    0x00059d2a ldr r2, [r5, 0x2c]                                |         r2 = *((r5 + 0x2c));
    0x00059d2c mov r3, sb                                        |         r3 = sb;
    0x00059d2e movs r1, 0x74                                     |         r1 = 0x74;
    0x00059d30 mov r0, sl                                        |         r0 = sl;
    0x00059d32 str r4, [sp]                                      |         *(sp) = r4;
    0x00059d34 bl 0x18bf8                                        |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00059d38 ldr r5, [r5, 0x14]                                |         r5 = *((r5 + 0x14));
    0x00059d3a cmp r5, 0                                         |         
    0x00059d3c bne 0x59d2a                                       |         
                                                                 |     } while (r5 != 0);
    0x00059d3e str r5, [sp, 0x3c]                                |     var_3ch = r5;
    0x00059d40 mov r5, fp                                        |     r5 = fp;
    0x00059d42 b 0x599a4                                         |     goto label_14;
                                                                 | label_54:
    0x00059d44 ldr r2, [sp, 0x64]                                |     r2 = var_64h;
    0x00059d46 mov r3, sb                                        |     r3 = sb;
    0x00059d48 ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x00059d4a movs r1, 0x3b                                     |     r1 = 0x3b;
    0x00059d4c str.w sb, [sp]                                    |     __asm ("str.w sb, [sp]");
    0x00059d50 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x00059d54 b 0x59bde                                         |     goto label_21;
                                                                 | label_23:
    0x00059d56 blx 0x6498                                        |     fcn_00006498 ();
                                                                 | label_55:
    0x00059d5a mvn r3, 1                                         |     r3 = ~1;
    0x00059d5e ldr r0, [sp, 0x24]                                |     r0 = var_24h;
    0x00059d60 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00059d62 movs r1, 0x74                                     |     r1 = 0x74;
    0x00059d64 ldr r3, [r4]                                      |     r3 = *(r4);
    0x00059d66 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00059d68 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x00059d6a str r3, [sp]                                      |     *(sp) = r3;
    0x00059d6c mov r3, sb                                        |     r3 = sb;
    0x00059d6e ldr r2, [r4, 0x20]                                |     r2 = *((r4 + 0x20));
    0x00059d70 bl 0x1977c                                        |     fcn_0001977c (r0, r1, r2, r3, r4, r5);
    0x00059d74 b 0x59d16                                         |     goto label_22;
                                                                 | label_35:
    0x00059d76 movs r3, 0                                        |     r3 = 0;
    0x00059d78 ldrh r3, [r3, 0x32]                               |     r3 = *((r3 + 0x32));
    0x00059d7a udf 0xff                                          |     __asm ("udf 0xff");
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x59d8c */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00059d8c ()                                      | void fcn_00059d8c (int16_t arg1, int16_t arg2, int16_t arg3, uint32_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;
    0x00059d8c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00059d90 mov sb, r2                                        |     sb = r2;
    0x00059d92 ldr r5, [r0]                                      |     r5 = *(r0);
    0x00059d94 sub sp, 0x24                                      |     
    0x00059d96 mov r8, r1                                        |     r8 = r1;
    0x00059d98 ldrb.w r2, [r5, 0x40]                             |     r2 = *((r5 + 0x40));
    0x00059d9c cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00059d9e bne.w 0x59fdc                                     |         goto label_1;
                                                                 |     }
    0x00059da2 mov r6, r0                                        |     r6 = r0;
    0x00059da4 add.w r2, r1, 8                                   |     r2 = r1 + 8;
    0x00059da8 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00059daa bne.w 0x59fea                                     |         goto label_25;
                                                                 |     }
    0x00059dae mov r1, sb                                        |     r1 = sb;
    0x00059db0 bl 0x55ff8                                        |     r0 = fcn_00055ff8 (r0, r1, r2);
    0x00059db4 mov r7, r0                                        |     r7 = r0;
    0x00059db6 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00059db8 beq.w 0x59fdc                                     |         goto label_1;
                                                                 |     }
                                                                 | label_0:
    0x00059dbc ldr r1, [r7, 0x44]                                |     r1 = *((r7 + 0x44));
    0x00059dbe ldrb.w lr, [r7, 0x2c]                             |     
    0x00059dc2 and r2, lr, 0x10                                  |     r2 = lr & 0x10;
    0x00059dc6 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00059dc8 beq.w 0x5a182                                     |         goto label_26;
                                                                 |     }
    0x00059dcc ldr r0, [r5, 0x14]                                |     r0 = *((r5 + 0x14));
    0x00059dce cmp r0, 0                                         |     
                                                                 |     if (r0 <= 0) {
    0x00059dd0 ble.w 0x5a07e                                     |         goto label_27;
                                                                 |     }
    0x00059dd4 ldr.w ip, [r5, 0x10]                              |     ip = *((r5 + 0x10));
    0x00059dd8 movs r4, 0                                        |     r4 = 0;
    0x00059dda mov lr, r2                                        |     lr = r2;
    0x00059ddc mov r3, ip                                        |     r3 = ip;
    0x00059dde b 0x59de8                                         |     
                                                                 |     while (r1 != r2) {
    0x00059de0 adds r4, 1                                        |         r4++;
    0x00059de2 adds r3, 0x10                                     |         r3 += 0x10;
    0x00059de4 cmp r4, r0                                        |         
                                                                 |         if (r4 == r0) {
    0x00059de6 beq 0x59dee                                       |             goto label_28;
                                                                 |         }
    0x00059de8 ldr r2, [r3, 0xc]                                 |         r2 = *((r3 + 0xc));
    0x00059dea cmp r1, r2                                        |         
    0x00059dec bne 0x59de0                                       |         
                                                                 |     }
                                                                 | label_28:
    0x00059dee mov r2, lr                                        |     r2 = lr;
    0x00059df0 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00059df2 bne.w 0x5a03c                                     |         goto label_29;
                                                                 |     }
                                                                 | label_3:
    0x00059df6 cmp r4, 1                                         |     
    0x00059df8 ittt ne                                           |     
                                                                 |     if (r4 == 1) {
    0x00059dfa lslne r3, r4, 4                                   |         r3 = r4 << 4;
                                                                 |     }
                                                                 |     if (r4 == 1) {
    0x00059dfc addne ip, r3                                      |         
                                                                 |     }
                                                                 |     if (r4 == 1) {
    0x00059dfe strne r3, [sp, 0x10]                              |         var_10h = r3;
                                                                 |     }
                                                                 |     if (r4 == 1) {
    0x00059e00 beq.w 0x5a04e                                     |         goto label_30;
                                                                 |     }
                                                                 | label_6:
    0x00059e04 ldr.w fp, [pc, 0x51c]                             |     
    0x00059e08 add fp, pc                                        |     fp = 0xb4130;
                                                                 | label_4:
    0x00059e0a ldr.w sl, [ip]                                    |     sl = *(ip);
    0x00059e0e movs r3, 0                                        |     r3 = 0;
    0x00059e10 mov r2, fp                                        |     r2 = fp;
    0x00059e12 movs r1, 9                                        |     r1 = 9;
    0x00059e14 mov r0, r6                                        |     r0 = r6;
    0x00059e16 str.w sl, [sp]                                    |     __asm ("str.w sl, [sp]");
    0x00059e1a bl 0x1cab0                                        |     r0 = fcn_0001cab0 (r0);
    0x00059e1e cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00059e20 bne.w 0x59fdc                                     |         goto label_1;
                                                                 |     }
    0x00059e24 cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x00059e28 beq.w 0x5a018                                     |         goto label_31;
                                                                 |     }
    0x00059e2c cmp r4, 1                                         |     
    0x00059e2e mov r3, r0                                        |     r3 = r0;
    0x00059e30 ite eq                                            |     
                                                                 |     if (r4 != 1) {
    0x00059e32 moveq r1, 0xf                                     |         r1 = 0xf;
                                                                 |     }
                                                                 |     if (r4 == 1) {
    0x00059e34 movne r1, 0x11                                    |         r1 = 0x11;
                                                                 |     }
                                                                 | label_2:
    0x00059e36 ldr r2, [r7]                                      |     r2 = *(r7);
    0x00059e38 mov r0, r6                                        |     r0 = r6;
    0x00059e3a str.w sl, [sp]                                    |     __asm ("str.w sl, [sp]");
    0x00059e3e bl 0x1cab0                                        |     r0 = fcn_0001cab0 (r0);
    0x00059e42 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00059e44 bne.w 0x59fdc                                     |         goto label_1;
                                                                 |     }
    0x00059e48 ldr r2, [r7]                                      |     r2 = *(r7);
    0x00059e4a mov r3, r0                                        |     r3 = r0;
    0x00059e4c str.w sl, [sp]                                    |     __asm ("str.w sl, [sp]");
    0x00059e50 movs r1, 9                                        |     r1 = 9;
    0x00059e52 mov r0, r6                                        |     r0 = r6;
    0x00059e54 bl 0x1cab0                                        |     r0 = fcn_0001cab0 (r0);
    0x00059e58 mov sl, r0                                        |     sl = r0;
    0x00059e5a cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00059e5c bne.w 0x59fdc                                     |         goto label_1;
                                                                 |     }
    0x00059e60 ldr.w r1, [pc, 0x4c4]                             |     
    0x00059e64 movs r2, 7                                        |     r2 = 7;
    0x00059e66 ldr r0, [r7]                                      |     r0 = *(r7);
    0x00059e68 add r1, pc                                        |     r1 = 0xb4194;
    0x00059e6a blx 0x5db4                                        |     r0 = fcn_00005db4 ();
    0x00059e6e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00059e70 beq.w 0x5a098                                     |         goto label_32;
                                                                 |     }
                                                                 | label_8:
    0x00059e74 ldr r3, [r7, 0xc]                                 |     r3 = *((r7 + 0xc));
    0x00059e76 cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x00059e7a beq.w 0x5a06a                                     |         goto label_33;
                                                                 |     }
    0x00059e7e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00059e80 beq.w 0x5a1aa                                     |         goto label_34;
                                                                 |     }
                                                                 | label_5:
    0x00059e84 ldr r3, [r6, 8]                                   |     r3 = *((r6 + 8));
    0x00059e86 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00059e88 beq.w 0x5a08c                                     |         goto label_35;
                                                                 |     }
                                                                 | label_7:
    0x00059e8c mov r2, r4                                        |     r2 = r4;
    0x00059e8e movs r1, 1                                        |     r1 = 1;
    0x00059e90 mov r0, r6                                        |     r0 = r6;
    0x00059e92 bl 0x43838                                        |     fcn_00043838 (r0, r1, r2);
    0x00059e96 ldr.w r2, [pc, 0x494]                             |     
    0x00059e9a mov r0, r6                                        |     r0 = r6;
    0x00059e9c ldr r3, [r7]                                      |     r3 = *(r7);
    0x00059e9e mov r1, r4                                        |     r1 = r4;
    0x00059ea0 add r2, pc                                        |     r2 = 0xb41d2;
    0x00059ea2 bl 0x4c050                                        |     fcn_0004c050 (r0, r1, r2, r3);
    0x00059ea6 ldr r3, [r6]                                      |     r3 = *(r6);
    0x00059ea8 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00059eaa ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x00059eac lsls r0, r3, 0xc                                  |     r0 = r3 << 0xc;
                                                                 |     if (r0 < r3) {
    0x00059eae bpl 0x59ec0                                       |         
    0x00059eb0 ldrb.w r3, [r7, 0x2c]                             |         r3 = *((r7 + 0x2c));
    0x00059eb4 lsls r1, r3, 0x1b                                 |         r1 = r3 << 0x1b;
                                                                 |         if (r1 < r3) {
    0x00059eb6 bmi 0x59ec0                                       |             goto label_18;
                                                                 |         }
    0x00059eb8 ldr r3, [r7, 0xc]                                 |         r3 = *((r7 + 0xc));
    0x00059eba cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00059ebc beq.w 0x5a1b8                                     |             goto label_36;
                                                                 |         }
                                                                 |     }
                                                                 | label_18:
    0x00059ec0 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00059ec2 ldr r2, [r6, 8]                                   |     r2 = *((r6 + 8));
    0x00059ec4 ldr r1, [sp, 0x10]                                |     r1 = var_10h;
    0x00059ec6 ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x00059ec8 str r2, [sp, 0x18]                                |     var_18h = r2;
    0x00059eca add r3, r1                                        |     r3 += r1;
    0x00059ecc str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00059ece cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x00059ed0 beq.w 0x5a178                                     |         goto label_37;
                                                                 |     }
                                                                 | label_17:
    0x00059ed4 ldr.w sl, [r6, 0x198]                             |     sl = *((r6 + 0x198));
    0x00059ed8 mov r1, r4                                        |     r1 = r4;
    0x00059eda mov r0, r6                                        |     r0 = r6;
    0x00059edc bl 0x39214                                        |     fcn_00039214 (r0, r1);
    0x00059ee0 cmp.w sl, 0                                       |     
    0x00059ee4 it eq                                             |     
                                                                 |     if (sl != 0) {
    0x00059ee6 moveq sl, r6                                      |         sl = r6;
                                                                 |     }
    0x00059ee8 ldrb.w r1, [sl, 0x14]                             |     r1 = *((sl + 0x14));
    0x00059eec ldr.w r2, [sl, 0x148]                             |     r2 = *((sl + 0x148));
    0x00059ef0 orr r1, r1, 1                                     |     r1 |= 1;
    0x00059ef4 strb.w r1, [sl, 0x14]                             |     *((sl + 0x14)) = r1;
    0x00059ef8 movs r1, 1                                        |     r1 = 1;
    0x00059efa lsls r1, r4                                       |     r1 <<= r4;
    0x00059efc orrs r2, r1                                       |     r2 |= r1;
    0x00059efe str.w r2, [sl, 0x148]                             |     __asm ("str.w r2, aav.0x000000ff");
    0x00059f02 ldrb.w r3, [r7, 0x2c]                             |     r3 = *((r7 + 0x2c));
    0x00059f06 lsls r1, r3, 0x1b                                 |     r1 = r3 << 0x1b;
                                                                 |     if (r1 < r3) {
    0x00059f08 bmi.w 0x5a0c6                                     |         goto label_38;
                                                                 |     }
                                                                 | label_11:
    0x00059f0c ldrb.w r1, [r6, 0x1b6]                            |     r1 = *((r6 + 0x1b6));
    0x00059f10 mov r2, r7                                        |     r2 = r7;
    0x00059f12 ldr r0, [r6]                                      |     r0 = *(r6);
    0x00059f14 bl 0x1258c                                        |     r0 = fcn_0001258c (r0, r1, r2);
                                                                 |     if (r0 == 0) {
    0x00059f18 cbz r0, 0x59f2e                                   |         goto label_39;
                                                                 |     }
    0x00059f1a mov sl, r4                                        |     sl = r4;
    0x00059f1c mov r4, r0                                        |     r4 = r0;
                                                                 |     do {
    0x00059f1e mov r1, r4                                        |         r1 = r4;
    0x00059f20 mov r0, r6                                        |         r0 = r6;
    0x00059f22 bl 0x4388c                                        |         fcn_0004388c (r0, r1);
    0x00059f26 ldr r4, [r4, 0x20]                                |         r4 = *((r4 + 0x20));
    0x00059f28 cmp r4, 0                                         |         
    0x00059f2a bne 0x59f1e                                       |         
                                                                 |     } while (r4 != 0);
    0x00059f2c mov r4, sl                                        |     r4 = sl;
                                                                 | label_39:
    0x00059f2e ldrb.w r3, [r7, 0x2c]                             |     r3 = *((r7 + 0x2c));
    0x00059f32 lsls r2, r3, 0x1c                                 |     r2 = r3 << 0x1c;
                                                                 |     if (r2 < r3) {
    0x00059f34 bmi.w 0x5a0d6                                     |         goto label_40;
                                                                 |     }
                                                                 | label_12:
    0x00059f38 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00059f3a mov r0, r6                                        |     r0 = r6;
    0x00059f3c ldr r1, [r7]                                      |     r1 = *(r7);
    0x00059f3e ldr r2, [r3]                                      |     r2 = *(r3);
    0x00059f40 mov r3, fp                                        |     r3 = fp;
    0x00059f42 str r1, [sp]                                      |     *(sp) = r1;
    0x00059f44 ldr r1, [pc, 0x3e8]                               |     
    0x00059f46 add r1, pc                                        |     r1 = 0xb427a;
    0x00059f48 bl 0x4bf9c                                        |     fcn_0004bf9c (r0);
    0x00059f4c cmp.w sb, 0                                       |     
                                                                 |     if (sb != 0) {
    0x00059f50 bne.w 0x5a0ba                                     |         goto label_41;
                                                                 |     }
    0x00059f54 ldrb.w r3, [r7, 0x2c]                             |     r3 = *((r7 + 0x2c));
    0x00059f58 lsls r3, r3, 0x1b                                 |     r3 <<= 0x1b;
                                                                 |     if (r3 >= r3) {
    0x00059f5a bpl.w 0x5a100                                     |         goto label_42;
                                                                 |     }
                                                                 | label_9:
    0x00059f5e movs r3, 0                                        |     r3 = 0;
    0x00059f60 ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x00059f62 str r3, [sp, 8]                                   |     var_8h = r3;
    0x00059f64 movs r1, 0x95                                     |     r1 = 0x95;
    0x00059f66 ldr r2, [r7]                                      |     r2 = *(r7);
    0x00059f68 strd r3, r2, [sp]                                 |     __asm ("strd r3, r2, [sp]");
    0x00059f6c mov r2, r4                                        |     r2 = r4;
    0x00059f6e bl 0x1977c                                        |     fcn_0001977c (r0, r1, r2, r3, r4, r5);
                                                                 | label_10:
    0x00059f72 mov.w sb, 0                                       |     sb = 0;
    0x00059f76 mov r2, r4                                        |     r2 = r4;
    0x00059f78 str.w sb, [sp, 8]                                 |     __asm ("str.w sb, [var_8h]");
    0x00059f7c movs r1, 0x7a                                     |     r1 = 0x7a;
    0x00059f7e ldr r3, [r7]                                      |     r3 = *(r7);
    0x00059f80 ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x00059f82 strd sb, r3, [sp]                                 |     __asm ("strd sb, r3, [sp]");
    0x00059f86 mov r3, sb                                        |     r3 = sb;
    0x00059f88 bl 0x1977c                                        |     fcn_0001977c (r0, r1, r2, r3, r4, r5);
    0x00059f8c mov r1, r4                                        |     r1 = r4;
    0x00059f8e mov r0, r6                                        |     r0 = r6;
    0x00059f90 bl 0x18cb0                                        |     fcn_00018cb0 (r0, r1);
    0x00059f94 ldr r7, [sp, 0x14]                                |     r7 = var_14h;
    0x00059f96 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x00059f98 ldr r3, [r7, 0x10]                                |     r3 = *((r7 + 0x10));
    0x00059f9a add r3, r2                                        |     r3 += r2;
    0x00059f9c ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x00059f9e ldrh.w r2, [r3, 0x4e]                             |     r2 = *((r3 + 0x4e));
    0x00059fa2 lsls r1, r2, 0x1e                                 |     r1 = r2 << 0x1e;
                                                                 |     if (r1 >= r2) {
    0x00059fa4 bpl 0x59fdc                                       |         goto label_1;
                                                                 |     }
    0x00059fa6 ldr r4, [r3, 0x10]                                |     r4 = *((r3 + 0x10));
                                                                 |     if (r4 == 0) {
    0x00059fa8 cbz r4, 0x59fd4                                   |         goto label_43;
                                                                 |     }
                                                                 |     do {
    0x00059faa ldr r6, [r4, 8]                                   |         r6 = *((r4 + 8));
    0x00059fac ldr r3, [r6, 0xc]                                 |         r3 = *((r6 + 0xc));
                                                                 |         if (r3 != 0) {
    0x00059fae cbz r3, 0x59fc0                                   |             
    0x00059fb0 mov r1, r6                                        |             r1 = r6;
    0x00059fb2 mov r0, r7                                        |             r0 = r7;
    0x00059fb4 bl 0x12f78                                        |             fcn_00012f78 (r0, r1);
    0x00059fb8 str.w sb, [r6, 4]                                 |             __asm ("str.w sb, [r6, 4]");
    0x00059fbc strh.w sb, [r6, 0x26]                             |             *((r6 + 0x26)) = sb;
                                                                 |         }
    0x00059fc0 ldr r4, [r4]                                      |         r4 = *(r4);
    0x00059fc2 cmp r4, 0                                         |         
    0x00059fc4 bne 0x59faa                                       |         
                                                                 |     } while (r4 != 0);
    0x00059fc6 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00059fc8 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x00059fca ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x00059fcc add r3, r2                                        |     r3 += r2;
    0x00059fce ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x00059fd0 ldrh.w r2, [r3, 0x4e]                             |     r2 = *((r3 + 0x4e));
                                                                 | label_43:
    0x00059fd4 bic r2, r2, 2                                     |     r2 = BIT_MASK (r2, 2);
    0x00059fd8 strh.w r2, [r3, 0x4e]                             |     *((r3 + 0x4e)) = r2;
                                                                 | label_1:
    0x00059fdc mov r1, r8                                        |     r1 = r8;
    0x00059fde mov r0, r5                                        |     r0 = r5;
    0x00059fe0 add sp, 0x24                                      |     
    0x00059fe2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}        |     
    0x00059fe6 b.w 0x12c54                                       |     void (*0x12c54)() ();
                                                                 | label_25:
    0x00059fea ldrb.w r3, [r5, 0x43]                             |     r3 = *((r5 + 0x43));
    0x00059fee mov r1, sb                                        |     r1 = sb;
    0x00059ff0 adds r3, 1                                        |     r3++;
    0x00059ff2 strb.w r3, [r5, 0x43]                             |     *((r5 + 0x43)) = r3;
    0x00059ff6 bl 0x55ff8                                        |     fcn_00055ff8 (r0, r1, r2);
    0x00059ffa ldrb.w r3, [r5, 0x43]                             |     r3 = *((r5 + 0x43));
    0x00059ffe mov r7, r0                                        |     r7 = r0;
    0x0005a000 subs r3, 1                                        |     r3--;
    0x0005a002 strb.w r3, [r5, 0x43]                             |     *((r5 + 0x43)) = r3;
    0x0005a006 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0005a008 bne.w 0x59dbc                                     |         goto label_0;
                                                                 |     }
    0x0005a00c ldr.w r1, [r8, 0xc]                               |     r1 = *((r8 + 0xc));
    0x0005a010 mov r0, r6                                        |     r0 = r6;
    0x0005a012 bl 0x39258                                        |     fcn_00039258 (r0, r1);
    0x0005a016 b 0x59fdc                                         |     goto label_1;
                                                                 | label_31:
    0x0005a018 ldrb.w r3, [r7, 0x2c]                             |     r3 = *((r7 + 0x2c));
    0x0005a01c lsls r3, r3, 0x1b                                 |     r3 <<= 0x1b;
                                                                 |     if (r3 >= r3) {
    0x0005a01e bpl 0x5a05e                                       |         goto label_44;
                                                                 |     }
    0x0005a020 ldr r3, [r7, 0x3c]                                |     r3 = *((r7 + 0x3c));
                                                                 |     if (r3 != 0) {
    0x0005a022 cbnz r3, 0x5a02e                                  |         goto label_45;
                                                                 |     }
    0x0005a024 b 0x5a31e                                         |     goto label_46;
                                                                 |     do {
    0x0005a026 ldr r3, [r3, 0x18]                                |         r3 = *((r3 + 0x18));
    0x0005a028 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0005a02a beq.w 0x5a31e                                     |             goto label_46;
                                                                 |         }
                                                                 | label_45:
    0x0005a02e ldr r2, [r3]                                      |         r2 = *(r3);
    0x0005a030 cmp r5, r2                                        |         
    0x0005a032 bne 0x5a026                                       |         
                                                                 |     } while (r5 != r2);
    0x0005a034 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0005a036 movs r1, 0x1e                                     |     r1 = 0x1e;
    0x0005a038 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0005a03a b 0x59e36                                         |     goto label_2;
                                                                 | label_29:
    0x0005a03c mov r1, r7                                        |     r1 = r7;
    0x0005a03e mov r0, r6                                        |     r0 = r6;
    0x0005a040 bl 0x24200                                        |     r0 = fcn_00024200 (r0, r1);
    0x0005a044 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0005a046 bne 0x59fdc                                       |         goto label_1;
                                                                 |     }
    0x0005a048 ldr.w ip, [r5, 0x10]                              |     ip = *((r5 + 0x10));
    0x0005a04c b 0x59df6                                         |     goto label_3;
                                                                 | label_30:
    0x0005a04e ldr.w fp, [pc, 0x2e4]                             |     fp = *(0x0005a334);
    0x0005a052 movs r3, 0x10                                     |     r3 = 0x10;
    0x0005a054 add.w ip, ip, 0x10                                |     
    0x0005a058 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x0005a05a add fp, pc                                        |     
    0x0005a05c b 0x59e0a                                         |     goto label_4;
                                                                 | label_44:
    0x0005a05e cmp r4, 1                                         |     
    0x0005a060 mov r3, sb                                        |     r3 = sb;
    0x0005a062 ite eq                                            |     
                                                                 |     if (r4 != 1) {
    0x0005a064 moveq r1, 0xd                                     |         r1 = 0xd;
                                                                 |     }
                                                                 |     if (r4 == 1) {
    0x0005a066 movne r1, 0xb                                     |         r1 = 0xb;
                                                                 |     }
    0x0005a068 b 0x59e36                                         |     goto label_2;
                                                                 | label_33:
    0x0005a06a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005a06c beq.w 0x59e84                                     |         goto label_5;
                                                                 |     }
    0x0005a070 ldr r1, [pc, 0x2c4]                               |     
    0x0005a072 mov r0, r6                                        |     r0 = r6;
    0x0005a074 ldr r2, [r7]                                      |     r2 = *(r7);
    0x0005a076 add r1, pc                                        |     r1 = 0xb43b2;
    0x0005a078 bl 0x1ca34                                        |     fcn_0001ca34 (r0);
    0x0005a07c b 0x59fdc                                         |     goto label_1;
                                                                 | label_27:
    0x0005a07e cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0005a080 bne 0x5a0e8                                       |         goto label_47;
                                                                 |     }
    0x0005a082 ldr.w ip, [r5, 0x10]                              |     ip = *((r5 + 0x10));
    0x0005a086 mov r4, r2                                        |     r4 = r2;
    0x0005a088 str r2, [sp, 0x10]                                |     var_10h = r2;
    0x0005a08a b 0x59e04                                         |     goto label_6;
                                                                 | label_35:
    0x0005a08c mov r0, r6                                        |     r0 = r6;
    0x0005a08e bl 0x192c8                                        |     r0 = fcn_000192c8 (r0);
    0x0005a092 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005a094 beq 0x59fdc                                       |         goto label_1;
                                                                 |     }
    0x0005a096 b 0x59e8c                                         |     goto label_7;
                                                                 | label_32:
    0x0005a098 ldr r1, [pc, 0x2a0]                               |     
    0x0005a09a movs r2, 0xb                                      |     r2 = 0xb;
    0x0005a09c ldr r0, [r7]                                      |     r0 = *(r7);
    0x0005a09e add r1, pc                                        |     r1 = 0xb43de;
    0x0005a0a0 blx 0x5db4                                        |     r0 = fcn_00005db4 ();
    0x0005a0a4 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005a0a6 beq.w 0x59e74                                     |         goto label_8;
                                                                 |     }
    0x0005a0aa ldr r1, [pc, 0x294]                               |     
    0x0005a0ac mov r0, r6                                        |     r0 = r6;
    0x0005a0ae ldr r2, [r7]                                      |     r2 = *(r7);
    0x0005a0b0 add r1, pc                                        |     r1 = 0xb43f6;
    0x0005a0b2 bl 0x1ca34                                        |     fcn_0001ca34 (r0);
    0x0005a0b6 b 0x59fdc                                         |     goto label_1;
                                                                 | label_13:
    0x0005a0b8 mov r4, fp                                        |     r4 = fp;
                                                                 | label_41:
    0x0005a0ba ldrb.w r3, [r7, 0x2c]                             |     r3 = *((r7 + 0x2c));
    0x0005a0be lsls r0, r3, 0x1b                                 |     r0 = r3 << 0x1b;
                                                                 |     if (r0 < r3) {
    0x0005a0c0 bmi.w 0x59f5e                                     |         goto label_9;
                                                                 |     }
    0x0005a0c4 b 0x59f72                                         |     goto label_10;
                                                                 | label_38:
    0x0005a0c6 movs r3, 0                                        |     r3 = 0;
    0x0005a0c8 ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x0005a0ca mov r2, r3                                        |     r2 = r3;
    0x0005a0cc movs r1, 0x8e                                     |     r1 = 0x8e;
    0x0005a0ce str r3, [sp]                                      |     *(sp) = r3;
    0x0005a0d0 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005a0d4 b 0x59f0c                                         |     goto label_11;
                                                                 | label_40:
    0x0005a0d6 ldr r2, [sp, 0x1c]                                |     r2 = var_1ch;
    0x0005a0d8 mov r0, r6                                        |     r0 = r6;
    0x0005a0da ldr r1, [pc, 0x268]                               |     
    0x0005a0dc ldr r3, [r7]                                      |     r3 = *(r7);
    0x0005a0de ldr r2, [r2]                                      |     r2 = *(r2);
    0x0005a0e0 add r1, pc                                        |     r1 = 0xb442a;
    0x0005a0e2 bl 0x4bf9c                                        |     fcn_0004bf9c (r0);
    0x0005a0e6 b 0x59f38                                         |     goto label_12;
                                                                 | label_47:
    0x0005a0e8 mov r1, r7                                        |     r1 = r7;
    0x0005a0ea mov r0, r6                                        |     r0 = r6;
    0x0005a0ec bl 0x24200                                        |     r0 = fcn_00024200 (r0, r1);
    0x0005a0f0 mov r4, r0                                        |     r4 = r0;
    0x0005a0f2 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0005a0f4 bne.w 0x59fdc                                     |         goto label_1;
                                                                 |     }
    0x0005a0f8 ldr.w ip, [r5, 0x10]                              |     ip = *((r5 + 0x10));
    0x0005a0fc str r0, [sp, 0x10]                                |     var_10h = r0;
    0x0005a0fe b 0x59e04                                         |     goto label_6;
                                                                 | label_42:
    0x0005a100 ldr.w sl, [r7, 0x20]                              |     sl = *((r7 + 0x20));
    0x0005a104 mov fp, r4                                        |     
                                                                 | label_14:
    0x0005a106 clz r0, sb                                        |     r0 &= sb;
    0x0005a10a ldr r3, [r7, 8]                                   |     r3 = *((r7 + 8));
    0x0005a10c lsrs r0, r0, 5                                    |     r0 >>= 5;
    0x0005a10e cmp sl, sb                                        |     
    0x0005a110 ite ge                                            |     
                                                                 |     if (sl < sb) {
    0x0005a112 movge r4, r0                                      |         r4 = r0;
                                                                 |     }
                                                                 |     if (sl >= sb) {
    0x0005a114 orrlt r4, r0, 1                                   |         r4 = r0 | 1;
                                                                 |     }
                                                                 |     if (r4 != 0) {
    0x0005a118 cbnz r4, 0x5a170                                  |         goto label_48;
                                                                 |     }
    0x0005a11a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005a11c beq 0x5a0b8                                       |         goto label_13;
                                                                 |     }
                                                                 |     do {
                                                                 | label_15:
    0x0005a11e ldr r2, [r3, 0x2c]                                |         r2 = *((r3 + 0x2c));
    0x0005a120 cmp sb, r2                                        |         
    0x0005a122 ite le                                            |         
                                                                 |         if (sb > r2) {
    0x0005a124 movle r1, r0                                      |             r1 = r0;
                                                                 |         }
                                                                 |         if (sb <= r2) {
    0x0005a126 orrgt r1, r0, 1                                   |             r1 = r0 | 1;
                                                                 |         }
                                                                 |         if (r1 != 0) {
    0x0005a12a cbz r1, 0x5a132                                   |             
    0x0005a12c cmp r4, r2                                        |             
    0x0005a12e it lt                                             |             
                                                                 |             if (r4 < r2) {
    0x0005a130 movlt r4, r2                                      |                 r4 = r2;
                                                                 |                 goto label_49;
                                                                 |             }
                                                                 |         }
                                                                 | label_49:
    0x0005a132 ldr r3, [r3, 0x14]                                |         r3 = *((r3 + 0x14));
    0x0005a134 cmp r3, 0                                         |         
    0x0005a136 bne 0x5a11e                                       |         
                                                                 |     } while (r3 != 0);
                                                                 | label_16:
    0x0005a138 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0005a13a beq 0x5a0b8                                       |         goto label_13;
                                                                 |     }
    0x0005a13c ldr r0, [r7, 0x44]                                |     r0 = *((r7 + 0x44));
    0x0005a13e ldr r3, [r6]                                      |     r3 = *(r6);
    0x0005a140 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005a142 beq.w 0x5a310                                     |         goto label_50;
                                                                 |     }
    0x0005a146 ldr.w ip, [r3, 0x14]                              |     ip = *((r3 + 0x14));
    0x0005a14a cmp.w ip, 0                                       |     
                                                                 |     if (ip <= 0) {
    0x0005a14e ble 0x5a220                                       |         goto label_51;
                                                                 |     }
    0x0005a150 ldr r1, [r3, 0x10]                                |     r1 = *((r3 + 0x10));
    0x0005a152 movs r2, 0                                        |     r2 = 0;
    0x0005a154 b 0x5a15e                                         |     
                                                                 |     while (r0 != r3) {
    0x0005a156 adds r2, 1                                        |         r2++;
    0x0005a158 adds r1, 0x10                                     |         r1 += 0x10;
    0x0005a15a cmp ip, r2                                        |         
                                                                 |         if (ip == r2) {
    0x0005a15c beq 0x5a164                                       |             goto label_19;
                                                                 |         }
    0x0005a15e ldr r3, [r1, 0xc]                                 |         r3 = *((r1 + 0xc));
    0x0005a160 cmp r0, r3                                        |         
    0x0005a162 bne 0x5a156                                       |         
                                                                 |     }
                                                                 | label_19:
    0x0005a164 mov r1, r4                                        |     r1 = r4;
    0x0005a166 mov r0, r6                                        |     r0 = r6;
    0x0005a168 mov sb, r4                                        |     sb = r4;
    0x0005a16a bl 0x4c0e4                                        |     fcn_0004c0e4 (r0, r1, r2);
    0x0005a16e b 0x5a106                                         |     goto label_14;
                                                                 | label_48:
    0x0005a170 mov r4, sl                                        |     r4 = sl;
    0x0005a172 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005a174 bne 0x5a11e                                       |         goto label_15;
                                                                 |     }
    0x0005a176 b 0x5a138                                         |     goto label_16;
                                                                 | label_37:
    0x0005a178 mov r0, r6                                        |     r0 = r6;
    0x0005a17a bl 0x192c8                                        |     fcn_000192c8 (r0);
    0x0005a17e str r0, [sp, 0x18]                                |     var_18h = r0;
    0x0005a180 b 0x59ed4                                         |     goto label_17;
                                                                 | label_26:
    0x0005a182 cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x0005a184 bne 0x5a224                                       |         goto label_52;
                                                                 |     }
    0x0005a186 ldr r3, [r5, 0x10]                                |     r3 = *((r5 + 0x10));
    0x0005a188 movw r4, 0xbdc0                                   |     
    0x0005a18c ldr.w fp, [pc, 0x1b8]                             |     
    0x0005a190 movt r4, 0xfff0                                   |     r4 = 0xfff0bdc0;
    0x0005a194 sub.w ip, r3, 0xf40000                            |     
    0x0005a198 mov.w r3, 0xdc00                                  |     
    0x0005a19c movt r3, 0xff0b                                   |     r3 = 0x-f42400;
    0x0005a1a0 sub.w ip, ip, 0x2400                              |     
    0x0005a1a4 add fp, pc                                        |     fp = 0xb44f0;
    0x0005a1a6 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x0005a1a8 b 0x59e0a                                         |     goto label_4;
                                                                 | label_34:
    0x0005a1aa ldr r1, [pc, 0x1a0]                               |     
    0x0005a1ac mov r0, r6                                        |     r0 = r6;
    0x0005a1ae ldr r2, [r7]                                      |     r2 = *(r7);
    0x0005a1b0 add r1, pc                                        |     r1 = 0xb4502;
    0x0005a1b2 bl 0x1ca34                                        |     fcn_0001ca34 (r0);
    0x0005a1b6 b 0x59fdc                                         |     goto label_1;
                                                                 | label_36:
    0x0005a1b8 ldr r3, [r6, 8]                                   |     r3 = *((r6 + 8));
    0x0005a1ba str r3, [sp, 0x18]                                |     var_18h = r3;
    0x0005a1bc cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005a1be beq.w 0x5a306                                     |         goto label_53;
                                                                 |     }
                                                                 | label_23:
    0x0005a1c2 ldr r1, [r7]                                      |     r1 = *(r7);
    0x0005a1c4 ldr r0, [r7, 0x44]                                |     r0 = *((r7 + 0x44));
                                                                 |     if (r1 == 0) {
    0x0005a1c6 cbz r1, 0x5a1e0                                   |         goto label_54;
                                                                 |     }
    0x0005a1c8 ldrb r3, [r1]                                     |     r3 = *(r1);
    0x0005a1ca cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005a1cc beq.w 0x5a31a                                     |         goto label_55;
                                                                 |     }
    0x0005a1d0 mov r3, r1                                        |     r3 = r1;
                                                                 |     do {
    0x0005a1d2 ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x0005a1d6 cmp r2, 0                                         |         
    0x0005a1d8 bne 0x5a1d2                                       |         
                                                                 |     } while (r2 != 0);
                                                                 | label_24:
    0x0005a1da subs r3, r3, r1                                   |     r3 -= r1;
    0x0005a1dc bic sl, r3, 0xc0000000                            |     sl = BIT_MASK (r3, 0xc0000000);
                                                                 | label_54:
    0x0005a1e0 mov r2, sl                                        |     r2 = sl;
    0x0005a1e2 adds r0, 0x38                                     |     r0 += 0x38;
    0x0005a1e4 bl 0x13f5c                                        |     r0 = fcn_00013f5c (r0, r1, r2);
                                                                 |     if (r0 == 0) {
    0x0005a1e8 cbz r0, 0x5a250                                   |         goto label_56;
                                                                 |     }
    0x0005a1ea ldr.w sl, [sp, 0x14]                              |     sl = var_14h;
    0x0005a1ee movs r3, 1                                        |     r3 = 1;
    0x0005a1f0 strb.w r3, [r6, 0x1b6]                            |     *((r6 + 0x1b6)) = r3;
    0x0005a1f4 movs r2, 0                                        |     r2 = 0;
    0x0005a1f6 mov r1, r8                                        |     r1 = r8;
    0x0005a1f8 mov r0, sl                                        |     r0 = sl;
    0x0005a1fa bl 0xe85c                                         |     fcn_0000e85c (r0, r1, r2, r3);
    0x0005a1fe movs r2, 0                                        |     r2 = 0;
    0x0005a200 mov r1, r0                                        |     r1 = r0;
    0x0005a202 mov r0, r6                                        |     r0 = r6;
    0x0005a204 bl 0x595d8                                        |     fcn_000595d8 (r0, r1, r2, r3, r4);
    0x0005a208 movs r3, 0                                        |     r3 = 0;
    0x0005a20a strb.w r3, [r6, 0x1b6]                            |     *((r6 + 0x1b6)) = r3;
    0x0005a20e ldr.w r3, [sl, 0x18]                              |     r3 = *((sl + 0x18));
    0x0005a212 ands r3, r3, 0x1000000                            |     r3 &= 0x1000000;
    0x0005a216 str r3, [sp, 0x1c]                                |     var_1ch = r3;
                                                                 |     if (r3 == r3) {
    0x0005a218 beq 0x5a2d6                                       |         goto label_57;
                                                                 |     }
                                                                 | label_20:
    0x0005a21a ldr r3, [r6]                                      |     r3 = *(r6);
    0x0005a21c str r3, [sp, 0x14]                                |     var_14h = r3;
    0x0005a21e b 0x59ec0                                         |     goto label_18;
                                                                 | label_51:
    0x0005a220 movs r2, 0                                        |     r2 = 0;
    0x0005a222 b 0x5a164                                         |     goto label_19;
                                                                 | label_52:
    0x0005a224 mov r1, r7                                        |     r1 = r7;
    0x0005a226 mov r0, r6                                        |     r0 = r6;
    0x0005a228 bl 0x24200                                        |     r0 = fcn_00024200 (r0, r1);
    0x0005a22c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0005a22e bne.w 0x59fdc                                     |         goto label_1;
                                                                 |     }
    0x0005a232 ldr r3, [r5, 0x10]                                |     r3 = *((r5 + 0x10));
    0x0005a234 movw r4, 0xbdc0                                   |     
    0x0005a238 movt r4, 0xfff0                                   |     r4 = 0xfff0bdc0;
    0x0005a23c sub.w ip, r3, 0xf40000                            |     
    0x0005a240 mov.w r3, 0xdc00                                  |     
    0x0005a244 movt r3, 0xff0b                                   |     r3 = 0x-f42400;
    0x0005a248 sub.w ip, ip, 0x2400                              |     
    0x0005a24c str r3, [sp, 0x10]                                |     var_10h = r3;
    0x0005a24e b 0x59e04                                         |     goto label_6;
                                                                 | label_56:
    0x0005a250 ldr r3, [r7, 0x10]                                |     r3 = *((r7 + 0x10));
    0x0005a252 ldr r1, [sp, 0x14]                                |     r1 = var_14h;
                                                                 |     if (r3 != 0) {
    0x0005a254 cbnz r3, 0x5a264                                  |         goto label_58;
                                                                 |     }
    0x0005a256 b 0x5a21a                                         |     goto label_20;
                                                                 | label_21:
    0x0005a258 ldr r2, [r1, 0x18]                                |     r2 = *((r1 + 0x18));
    0x0005a25a lsls r2, r2, 7                                    |     r2 <<= 7;
                                                                 |     if (r2 < r2) {
    0x0005a25c bmi 0x5a26a                                       |         goto label_59;
                                                                 |     }
    0x0005a25e ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0005a260 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005a262 beq 0x5a21a                                       |         goto label_20;
                                                                 |     }
                                                                 | label_58:
    0x0005a264 ldrb r2, [r3, 0x18]                               |     r2 = *((r3 + 0x18));
    0x0005a266 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0005a268 beq 0x5a258                                       |         goto label_21;
                                                                 |     }
                                                                 | label_59:
    0x0005a26a ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0005a26c mov.w sl, 0                                       |     sl = 0;
    0x0005a270 ldr r0, [r3, 0x18]                                |     r0 = *((r3 + 0x18));
    0x0005a272 bl 0x19ed0                                        |     fcn_00019ed0 (r0);
    0x0005a276 movs r2, 1                                        |     r2 = 1;
    0x0005a278 mov r3, r0                                        |     r3 = r0;
    0x0005a27a movs r1, 0x84                                     |     r1 = 0x84;
    0x0005a27c str r0, [sp, 0x1c]                                |     var_1ch = r0;
    0x0005a27e str.w sl, [sp]                                    |     __asm ("str.w sl, [sp]");
    0x0005a282 ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x0005a284 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005a288 movs r3, 1                                        |     r3 = 1;
    0x0005a28a mov r2, sl                                        |     r2 = sl;
    0x0005a28c strb.w r3, [r6, 0x1b6]                            |     *((r6 + 0x1b6)) = r3;
    0x0005a290 mov r1, r8                                        |     r1 = r8;
    0x0005a292 ldr r0, [sp, 0x14]                                |     r0 = var_14h;
    0x0005a294 bl 0xe85c                                         |     fcn_0000e85c (r0, r1, r2, r3);
    0x0005a298 mov r2, sl                                        |     r2 = sl;
    0x0005a29a mov r1, r0                                        |     r1 = r0;
    0x0005a29c mov r0, r6                                        |     r0 = r6;
    0x0005a29e bl 0x595d8                                        |     fcn_000595d8 (r0, r1, r2, r3, r4);
    0x0005a2a2 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005a2a4 strb.w sl, [r6, 0x1b6]                            |     *((r6 + 0x1b6)) = sl;
    0x0005a2a8 ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x0005a2aa lsls r3, r3, 7                                    |     r3 <<= 7;
                                                                 |     if (r3 >= r3) {
    0x0005a2ac bpl 0x5a2d6                                       |         goto label_57;
                                                                 |     }
                                                                 | label_22:
    0x0005a2ae ldr r3, [r6]                                      |     r3 = *(r6);
    0x0005a2b0 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x0005a2b2 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0005a2b4 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005a2b6 beq.w 0x59ec0                                     |         goto label_18;
                                                                 |     }
    0x0005a2ba ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x0005a2bc mvns r1, r3                                       |     r1 = ~r3;
    0x0005a2be ldr r2, [r0, 0x18]                                |     r2 = *((r0 + 0x18));
                                                                 |     if (r1 >= r3) {
    0x0005a2c0 bmi 0x5a2cc                                       |         
    0x0005a2c2 ldr r3, [r2, 0x70]                                |         r3 = *((r2 + 0x70));
                                                                 |         if (r3 == 0) {
    0x0005a2c4 cbz r3, 0x5a2cc                                   |             goto label_60;
                                                                 |         }
    0x0005a2c6 ldr r0, [r0, 0x20]                                |         r0 = *((r0 + 0x20));
    0x0005a2c8 str.w r0, [r3, r1, lsl 2]                         |         __asm ("str.w r0, [r3, r1, lsl 2]");
                                                                 |     }
                                                                 | label_60:
    0x0005a2cc ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0005a2ce ldr r3, [r3, 0x20]                                |     r3 = *((r3 + 0x20));
    0x0005a2d0 subs r3, 1                                        |     r3--;
    0x0005a2d2 str r3, [r2, 0x58]                                |     *((r2 + 0x58)) = r3;
    0x0005a2d4 b 0x59ec0                                         |     goto label_18;
                                                                 | label_57:
    0x0005a2d6 ldr r0, [sp, 0x18]                                |     r0 = var_18h;
    0x0005a2d8 mov.w sl, 0                                       |     sl = 0;
    0x0005a2dc mov r2, sl                                        |     r2 = sl;
    0x0005a2de movs r1, 0x84                                     |     r1 = 0x84;
    0x0005a2e0 ldr r3, [r0, 0x20]                                |     r3 = *((r0 + 0x20));
    0x0005a2e2 str.w sl, [sp]                                    |     __asm ("str.w sl, [sp]");
    0x0005a2e6 adds r3, 2                                        |     r3 += 2;
    0x0005a2e8 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005a2ec mvn r2, 1                                         |     r2 = ~1;
    0x0005a2f0 movs r0, 4                                        |     r0 = 4;
    0x0005a2f2 strd r2, r0, [sp]                                 |     __asm ("strd r2, r0, [sp]");
    0x0005a2f6 mov r3, sl                                        |     r3 = sl;
    0x0005a2f8 movs r2, 2                                        |     r2 = 2;
    0x0005a2fa movw r1, 0x313                                    |     r1 = 0x313;
    0x0005a2fe mov r0, r6                                        |     r0 = r6;
    0x0005a300 bl 0x19494                                        |     fcn_00019494 (r0, r1, r2, r3, r4, r5);
    0x0005a304 b 0x5a2ae                                         |     goto label_22;
                                                                 | label_53:
    0x0005a306 mov r0, r6                                        |     r0 = r6;
    0x0005a308 bl 0x192c8                                        |     fcn_000192c8 (r0);
    0x0005a30c str r0, [sp, 0x18]                                |     var_18h = r0;
    0x0005a30e b 0x5a1c2                                         |     goto label_23;
                                                                 | label_50:
    0x0005a310 movw r2, 0xbdc0                                   |     
    0x0005a314 movt r2, 0xfff0                                   |     r2 = 0xfff0bdc0;
    0x0005a318 b 0x5a164                                         |     goto label_19;
                                                                 | label_55:
    0x0005a31a mov r3, r1                                        |     r3 = r1;
    0x0005a31c b 0x5a1da                                         |     goto label_24;
                                                                 | label_46:
    0x0005a31e movs r3, 0                                        |     r3 = 0;
    0x0005a320 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0005a322 udf 0xff                                          |     __asm ("udf 0xff");
                                                                 | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x5a350 */
                                                                     | #include <stdint.h>
                                                                     |  
                                                                     | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                     |  
    ; (fcn) fcn.0005a350 ()                                          | void fcn_0005a350 (int16_t arg_18h, int16_t arg_20h, int16_t arg_98h, int16_t arg_9ch, int16_t arg_a0h, int16_t arg_a4h, int16_t arg_a8h, 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;
                                                                     |     int32_t var_ch;
                                                                     |     int32_t var_ch_2;
                                                                     |     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;
                                                                     |     int32_t var_60h_2;
                                                                     |     int16_t var_68h;
                                                                     |     int16_t var_6ch;
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
                                                                     |     r2 = arg3;
                                                                     |     r3 = arg4;
    0x0005a350 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0005a354 sub sp, 0x74                                          |     
    0x0005a356 str r3, [sp, 0x54]                                    |     var_54h = r3;
    0x0005a358 mov sb, r0                                            |     sb = r0;
    0x0005a35a mov sl, r1                                            |     sl = r1;
    0x0005a35c ldrb.w r3, [sp, 0xa4]                                 |     r3 = *(arg_a4h);
    0x0005a360 ldr.w fp, [r0, 8]                                     |     fp = *((r0 + 8));
    0x0005a364 str r2, [sp, 0x1c]                                    |     var_1ch = r2;
    0x0005a366 str r3, [sp, 0x40]                                    |     var_40h = r3;
    0x0005a368 ldrb.w r3, [sp, 0xa8]                                 |     r3 = *(arg_a8h);
    0x0005a36c str r3, [sp, 0x28]                                    |     var_28h = r3;
    0x0005a36e ldr r3, [r0]                                          |     r3 = *(r0);
    0x0005a370 str r3, [sp, 0x44]                                    |     var_44h = r3;
    0x0005a372 ldr r3, [sp, 0xa0]                                    |     r3 = *(arg_a0h);
    0x0005a374 subs r3, 0                                            |     
    0x0005a376 it ne                                                 |     
                                                                     |     if (r3 == 0) {
    0x0005a378 movne r3, 1                                           |         r3 = 1;
                                                                     |     }
    0x0005a37a str r3, [sp, 0x30]                                    |     var_30h = r3;
    0x0005a37c cmp.w fp, 0                                           |     
                                                                     |     if (fp == 0) {
    0x0005a380 beq.w 0x5ac7e                                         |         goto label_35;
                                                                     |     }
                                                                     | label_28:
    0x0005a384 ldrb.w r3, [sl, 0x2c]                                 |     r3 = *((sl + 0x2c));
    0x0005a388 ldrsh.w r7, [sl, 0x26]                                |     r7 = *((sl + 0x26));
    0x0005a38c ands r3, r3, 0x20                                     |     r3 &= 0x20;
                                                                     |     if (r3 == r3) {
    0x0005a390 beq 0x5a47c                                           |         goto label_36;
                                                                     |     }
    0x0005a392 ldr.w r3, [sl, 8]                                     |     r3 = *((sl + 8));
    0x0005a396 str r3, [sp, 0x24]                                    |     var_24h = r3;
    0x0005a398 ldr r2, [sp, 0x24]                                    |     r2 = var_24h;
                                                                     |     if (r3 != 0) {
    0x0005a39a cbnz r3, 0x5a3a8                                      |         goto label_37;
                                                                     |     }
    0x0005a39c b.w 0x5ad1a                                           |     goto label_38;
                                                                     |     do {
    0x0005a3a0 ldr r2, [r2, 0x14]                                    |         r2 = *((r2 + 0x14));
    0x0005a3a2 cmp r2, 0                                             |         
                                                                     |         if (r2 == 0) {
    0x0005a3a4 beq.w 0x5ad1a                                         |             goto label_38;
                                                                     |         }
                                                                     | label_37:
    0x0005a3a8 ldrb.w r3, [r2, 0x37]                                 |         r3 = *((r2 + 0x37));
    0x0005a3ac and r3, r3, 3                                         |         r3 &= 3;
    0x0005a3b0 cmp r3, 2                                             |         
    0x0005a3b2 bne 0x5a3a0                                           |         
                                                                     |     } while (r3 != 2);
    0x0005a3b4 ldrh r3, [r2, 0x32]                                   |     r3 = *((r2 + 0x32));
    0x0005a3b6 cmp r7, 0                                             |     
    0x0005a3b8 str r2, [sp, 0x24]                                    |     var_24h = r2;
    0x0005a3ba str r3, [sp, 0x3c]                                    |     var_3ch = r3;
    0x0005a3bc mov.w r3, 0                                           |     r3 = 0;
    0x0005a3c0 str r3, [sp, 0x20]                                    |     var_20h = r3;
                                                                     |     if (r7 > 0) {
    0x0005a3c2 bgt 0x5a48a                                           |         goto label_39;
                                                                     |     }
                                                                     | label_1:
    0x0005a3c4 ldr.w r8, [sl, 0x18]                                  |     r8 = *((sl + 0x18));
    0x0005a3c8 cmp.w r8, 0                                           |     
                                                                     |     if (r8 == 0) {
    0x0005a3cc beq.w 0x5a592                                         |         goto label_40;
                                                                     |     }
    0x0005a3d0 ldr r3, [sp, 0x44]                                    |     r3 = var_44h;
    0x0005a3d2 ldr r5, [r3, 0x18]                                    |     r5 = *((r3 + 0x18));
    0x0005a3d4 ands r5, r5, 0x2000                                   |     r5 &= 0x2000;
                                                                     |     if (r5 != r5) {
    0x0005a3d8 bne.w 0x5a592                                         |         goto label_40;
                                                                     |     }
    0x0005a3dc ldr r1, [sp, 0x28]                                    |     r1 = var_28h;
    0x0005a3de ldr.w r3, [r8]                                        |     r3 = *(r8);
    0x0005a3e2 ldr r2, [sp, 0x9c]                                    |     r2 = *(arg_9ch);
    0x0005a3e4 cmp r1, 0xa                                           |     
    0x0005a3e6 ite ne                                                |     
                                                                     |     if (r1 == 0xa) {
    0x0005a3e8 movne r7, r1                                          |         r7 = r1;
                                                                     |     }
                                                                     |     if (r1 != 0xa) {
    0x0005a3ea moveq r7, 2                                           |         r7 = 2;
                                                                     |     }
    0x0005a3ec cmp r3, 0                                             |     
    0x0005a3ee add.w r2, r2, 1                                       |     r2++;
    0x0005a3f2 str.w r2, [sb, 0x5c]                                  |     __asm ("str.w r2, [sb, 0x5c]");
                                                                     |     if (r3 <= 0) {
    0x0005a3f6 ble.w 0x5a592                                         |         goto label_40;
                                                                     |     }
    0x0005a3fa ldr.w r0, [fp, 0x18]                                  |     r0 = *(arg_18h);
    0x0005a3fe b 0x5a444                                             |     
                                                                     |     while (r3 != 0) {
                                                                     | label_0:
    0x0005a400 cmp r7, 5                                             |         
    0x0005a402 mov.w r2, 0                                           |         r2 = 0;
    0x0005a406 it eq                                                 |         
                                                                     |         if (r7 != 5) {
    0x0005a408 moveq r7, 2                                           |             r7 = 2;
                                                                     |         }
    0x0005a40a movs r6, 3                                            |         r6 = 3;
    0x0005a40c strd r2, r6, [sp]                                     |         __asm ("strd r2, r6, [sp]");
    0x0005a410 movw r1, 0x113                                        |         r1 = 0x113;
    0x0005a414 mov r2, r7                                            |         r2 = r7;
    0x0005a416 mov r0, sb                                            |         r0 = sb;
    0x0005a418 bl 0x19494                                            |         fcn_00019494 (r0, r1, r2, r3, r4, r5);
                                                                     | label_16:
    0x0005a41c mvns r4, r4                                           |         r4 = ~r4;
    0x0005a41e ldr.w r0, [fp, 0x18]                                  |         r0 = *(arg_18h);
                                                                     |         if (r4 >= r4) {
    0x0005a422 bmi 0x5a430                                           |             
    0x0005a424 ldr r3, [r0, 0x70]                                    |             r3 = *((r0 + 0x70));
                                                                     |             if (r3 == 0) {
    0x0005a426 cbz r3, 0x5a430                                       |                 goto label_41;
                                                                     |             }
    0x0005a428 ldr.w r2, [fp, 0x20]                                  |             r2 = *(arg_20h);
    0x0005a42c str.w r2, [r3, r4, lsl 2]                             |             __asm ("str.w r2, [r3, r4, lsl 2]");
                                                                     |         }
                                                                     | label_41:
    0x0005a430 ldr.w r3, [fp, 0x20]                                  |         r3 = *(arg_20h);
    0x0005a434 adds r5, 1                                            |         r5++;
    0x0005a436 subs r3, 1                                            |         r3--;
    0x0005a438 str r3, [r0, 0x58]                                    |         *((r0 + 0x58)) = r3;
    0x0005a43a ldr.w r3, [r8]                                        |         r3 = *(r8);
    0x0005a43e cmp r3, r5                                            |         
                                                                     |         if (r3 <= r5) {
    0x0005a440 ble.w 0x5a592                                         |             goto label_40;
                                                                     |         }
    0x0005a444 bl 0x19ed0                                            |         fcn_00019ed0 (r0);
    0x0005a448 ldr.w r3, [r8, 4]                                     |         r3 = *((r8 + 4));
    0x0005a44c add.w r6, r5, r5, lsl 2                               |         r6 = r5 + (r5 << 2);
    0x0005a450 mov r2, r0                                            |         r2 = r0;
    0x0005a452 mov r4, r0                                            |         r4 = r0;
    0x0005a454 mov r0, sb                                            |         r0 = sb;
    0x0005a456 ldr.w r1, [r3, r6, lsl 2]                             |         offset_0 = r6 << 2;
                                                                     |         r1 = *((r3 + offset_0));
    0x0005a45a movs r3, 8                                            |         r3 = 8;
    0x0005a45c bl 0x3d21c                                            |         fcn_0003d21c (r0, r1, r2, r3, r4, r5);
    0x0005a460 cmp r7, 4                                             |         
    0x0005a462 lsl.w r6, r6, 2                                       |         r6 <<= 2;
                                                                     |         if (r7 == 4) {
    0x0005a466 beq.w 0x5a9ca                                         |             goto label_42;
                                                                     |         }
    0x0005a46a ldr.w r3, [r8, 4]                                     |         r3 = *((r8 + 4));
    0x0005a46e add r3, r6                                            |         r3 += r6;
    0x0005a470 ldr r3, [r3, 4]                                       |         r3 = *((r3 + 4));
    0x0005a472 cmp r3, 0                                             |         
    0x0005a474 bne 0x5a400                                           |         
                                                                     |     }
    0x0005a476 ldr.w r3, [sl]                                        |     r3 = *(sl);
    0x0005a47a b 0x5a400                                             |     goto label_0;
                                                                     | label_36:
    0x0005a47c cmp r7, 0                                             |     
    0x0005a47e str r3, [sp, 0x24]                                    |     var_24h = r3;
    0x0005a480 mov.w r3, 1                                           |     r3 = 1;
    0x0005a484 str r3, [sp, 0x20]                                    |     var_20h = r3;
    0x0005a486 str r3, [sp, 0x3c]                                    |     var_3ch = r3;
                                                                     |     if (r7 <= 0) {
    0x0005a488 ble 0x5a3c4                                           |         goto label_1;
                                                                     |     }
                                                                     | label_39:
    0x0005a48a ldr.w r3, [pc, 0x894]                                 |     r3 = *(0x0005ad20);
    0x0005a48e movs r4, 1                                            |     r4 = 1;
    0x0005a490 mov r8, r7                                            |     r8 = r7;
    0x0005a492 add r3, pc                                            |     r3 += pc;
    0x0005a494 str r3, [sp, 0x18]                                    |     var_18h = r3;
                                                                     | label_2:
    0x0005a496 ldrsh.w r2, [sl, 0x24]                                |     r2 = *((sl + 0x24));
    0x0005a49a subs r3, r4, 1                                        |     r3 = r4 - 1;
    0x0005a49c cmp r2, r3                                            |     
                                                                     |     if (r2 == r3) {
    0x0005a49e beq 0x5a52c                                           |         goto label_3;
                                                                     |     }
    0x0005a4a0 add.w r5, r4, r4, lsl 1                               |     r5 = r4 + (r4 << 1);
    0x0005a4a4 ldr.w r3, [sl, 4]                                     |     r3 = *((sl + 4));
    0x0005a4a8 lsls r5, r5, 3                                        |     r5 <<= 3;
    0x0005a4aa subs r5, 0x18                                         |     r5 -= 0x18;
    0x0005a4ac adds r2, r3, r5                                       |     r2 = r3 + r5;
    0x0005a4ae ldrb r6, [r2, 0x14]                                   |     r6 = *((r2 + 0x14));
    0x0005a4b0 cmp r6, 0                                             |     
                                                                     |     if (r6 == 0) {
    0x0005a4b2 beq 0x5a52c                                           |         goto label_3;
                                                                     |     }
    0x0005a4b4 ldr r1, [sp, 0x28]                                    |     r1 = var_28h;
    0x0005a4b6 cmp r1, 0xa                                           |     
    0x0005a4b8 it ne                                                 |     
                                                                     |     if (r1 == 0xa) {
    0x0005a4ba movne r6, r1                                          |         r6 = r1;
                                                                     |     }
    0x0005a4bc beq 0x5a4d6                                           |     
                                                                     |     while (r6 != 0xa) {
    0x0005a4be ldr r1, [sp, 0x9c]                                    |         r1 = *(arg_9ch);
    0x0005a4c0 cmp r6, 5                                             |         
    0x0005a4c2 add.w r7, r1, r4                                      |         r7 = r1 + r4;
                                                                     |         if (r6 == 5) {
    0x0005a4c6 beq 0x5a54c                                           |             goto label_43;
                                                                     |         }
    0x0005a4c8 subs r2, r6, 1                                        |         r2 = r6 - 1;
    0x0005a4ca cmp r2, 3                                             |         
                                                                     |         if (r2 > 3) {
    0x0005a4cc bhi 0x5a552                                           |             goto label_44;
                                                                     |         }
                                                                     |         /* switch table (4 cases) at 0x5a4d2 */
    0x0005a4ce tbb [pc, r2]                                          |         __asm ("tbb aav.0x000000ff");
    0x0005a4d6 cmp r6, 0xa                                           |         
    0x0005a4d8 bne 0x5a4be                                           |         
                                                                     |     }
    0x0005a4da ldr r2, [sp, 0x9c]                                    |     r2 = *(arg_9ch);
    0x0005a4dc adds r7, r2, r4                                       |     r7 = r2 + r4;
                                                                     | label_4:
    0x0005a4de ldr.w r2, [sb, 0x198]                                 |     r2 = *((sb + 0x198));
    0x0005a4e2 movs r6, 2                                            |     r6 = 2;
    0x0005a4e4 movs r1, 1                                            |     r1 = 1;
    0x0005a4e6 cmp r2, 0                                             |     
    0x0005a4e8 it eq                                                 |     
                                                                     |     if (r2 != 0) {
    0x0005a4ea moveq r2, sb                                          |         r2 = sb;
                                                                     |     }
    0x0005a4ec strb r1, [r2, 0x15]                                   |     *((r2 + 0x15)) = r1;
    0x0005a4ee ldr r3, [r3, r5]                                      |     r3 = *((r3 + r5));
    0x0005a4f0 ldr.w r2, [sl]                                        |     r2 = *(sl);
    0x0005a4f4 ldr r1, [sp, 0x18]                                    |     r1 = var_18h;
    0x0005a4f6 ldr r0, [sp, 0x44]                                    |     r0 = var_44h;
    0x0005a4f8 bl 0x1babc                                            |     fcn_0001babc (r0);
    0x0005a4fc mov.w r2, -1                                          |     r2 = -1;
    0x0005a500 mov r3, r6                                            |     r3 = r6;
    0x0005a502 strd r7, r0, [sp]                                     |     __asm ("strd r7, r0, [sp]");
    0x0005a506 movs r1, 0x17                                         |     r1 = 0x17;
    0x0005a508 str r2, [sp, 8]                                       |     var_8h = r2;
    0x0005a50a mov r0, fp                                            |     r0 = fp;
    0x0005a50c movw r2, 0x513                                        |     r2 = 0x513;
    0x0005a510 bl 0x1977c                                            |     fcn_0001977c (r0, r1, r2, r3, r4, r5);
    0x0005a514 ldr.w r3, [fp, 4]                                     |     r3 = *(arg_9ch);
                                                                     |     if (r3 != 0) {
    0x0005a518 cbz r3, 0x5a52c                                       |         
    0x0005a51a ldr.w r2, [fp, 0x20]                                  |         r2 = *(arg_20h);
    0x0005a51e add.w r2, r2, r2, lsl 2                               |         r2 += (r2 << 2);
    0x0005a522 add.w r3, r3, r2, lsl 2                               |         r3 += (r2 << 2);
    0x0005a526 movs r2, 1                                            |         r2 = 1;
    0x0005a528 strb r2, [r3, -0x11]                                  |         *((r3 - 0x11)) = r2;
                                                                     |     }
                                                                     | label_3:
    0x0005a52c cmp r8, r4                                            |     
    0x0005a52e add.w r3, r4, 1                                       |     r3 = r4 + 1;
                                                                     |     if (r8 == r4) {
    0x0005a532 beq.w 0x5a3c4                                         |         goto label_1;
                                                                     |     }
    0x0005a536 mov r4, r3                                            |     r4 = r3;
    0x0005a538 b 0x5a496                                             |     goto label_2;
    0x0005a53a movs r3, 0                                            |     r3 = 0;
    0x0005a53c mov r2, r7                                            |     r2 = r7;
    0x0005a53e str r3, [sp]                                          |     *(sp) = r3;
    0x0005a540 movs r1, 0x4c                                         |     r1 = 0x4c;
    0x0005a542 ldr r3, [sp, 0xac]                                    |     r3 = *(arg_ach);
    0x0005a544 mov r0, fp                                            |     r0 = fp;
    0x0005a546 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005a54a b 0x5a52c                                             |     goto label_3;
                                                                     | label_43:
    0x0005a54c ldr r2, [r2, 4]                                       |     r2 = *((r2 + 4));
    0x0005a54e cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0005a550 beq 0x5a4de                                           |         goto label_4;
                                                                     |     }
                                                                     | label_44:
    0x0005a552 movs r3, 0                                            |     r3 = 0;
    0x0005a554 mov r2, r7                                            |     r2 = r7;
    0x0005a556 movs r1, 0x4d                                         |     r1 = 0x4d;
    0x0005a558 str r3, [sp]                                          |     *(sp) = r3;
    0x0005a55a mov r0, fp                                            |     r0 = fp;
    0x0005a55c bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005a560 ldr.w r3, [sl, 4]                                     |     r3 = *((sl + 4));
    0x0005a564 mov r2, r7                                            |     r2 = r7;
    0x0005a566 mov r6, r0                                            |     r6 = r0;
    0x0005a568 mov r0, sb                                            |     r0 = sb;
    0x0005a56a add r3, r5                                            |     r3 += r5;
    0x0005a56c ldr r1, [r3, 4]                                       |     r1 = *((r3 + 4));
    0x0005a56e bl 0x3c4a8                                            |     fcn_0003c4a8 (r0, r1, r2);
    0x0005a572 ldr.w r3, [fp, 0x20]                                  |     r3 = *(arg_20h);
    0x0005a576 cmp r6, r3                                            |     
    0x0005a578 itttt lo                                              |     
                                                                     |     if (r6 >= r3) {
    0x0005a57a ldrlo r2, [fp, 4]                                     |         r2 = *(arg_9ch);
                                                                     |     }
                                                                     |     if (r6 >= r3) {
    0x0005a57e addlo r6, r6, r6, lsl 2                               |         r6 += (r6 << 2);
                                                                     |     }
                                                                     |     if (r6 < r3) {
    0x0005a582 add.w r2, r2, r6, lsl 2                               |         r2 += (r6 << 2);
                                                                     |     }
                                                                     |     if (r6 < r3) {
    0x0005a586 str r3, [r2, 8]                                       |         *((r2 + 8)) = r3;
                                                                     |     }
    0x0005a588 subs r3, 1                                            |     r3--;
    0x0005a58a ldr.w r2, [fp, 0x18]                                  |     r2 = *(arg_18h);
    0x0005a58e str r3, [r2, 0x58]                                    |     *((r2 + 0x58)) = r3;
    0x0005a590 b 0x5a52c                                             |     goto label_3;
                                                                     | label_40:
    0x0005a592 ldr r3, [sp, 0x20]                                    |     r3 = var_20h;
    0x0005a594 ldr r2, [sp, 0x40]                                    |     r2 = var_40h;
    0x0005a596 cmp r2, 0                                             |     
    0x0005a598 ite eq                                                |     
                                                                     |     if (r2 != 0) {
    0x0005a59a moveq r3, 0                                           |         r3 = 0;
                                                                     |     }
                                                                     |     if (r2 == 0) {
    0x0005a59c andne r3, r3, 1                                       |         r3 &= 1;
                                                                     |     }
    0x0005a5a0 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0005a5a2 bne.w 0x5aa36                                         |         goto label_45;
                                                                     |     }
    0x0005a5a6 ldr.w r5, [sl, 8]                                     |     r5 = *((sl + 8));
    0x0005a5aa cmp r5, 0                                             |     
                                                                     |     if (r5 == 0) {
    0x0005a5ac beq.w 0x5acaa                                         |         goto label_46;
                                                                     |     }
    0x0005a5b0 str r3, [sp, 0x5c]                                    |     var_5ch = r3;
    0x0005a5b2 strd r3, r3, [sp, 0x4c]                               |     __asm ("strd r3, r3, [var_4ch]");
                                                                     | label_19:
    0x0005a5b6 ldr r3, [sp, 0x1c]                                    |     r3 = var_1ch;
    0x0005a5b8 mov.w r4, -1                                          |     r4 = -1;
    0x0005a5bc movs r2, 0                                            |     r2 = 0;
    0x0005a5be str.w sl, [sp, 0x2c]                                  |     __asm ("str.w sl, [var_2ch]");
    0x0005a5c2 subs r3, 4                                            |     r3 -= 4;
    0x0005a5c4 str r3, [sp, 0x18]                                    |     var_18h = r3;
    0x0005a5c6 ldrsh.w r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x0005a5ca str r3, [sp, 0x58]                                    |     var_58h = r3;
    0x0005a5cc ldr r3, [sp, 0x98]                                    |     r3 = *(arg_98h);
    0x0005a5ce str r3, [sp, 0x1c]                                    |     var_1ch = r3;
    0x0005a5d0 b 0x5a5e0                                             |     
                                                                     |     while (r3 == 0) {
                                                                     | label_7:
    0x0005a5d2 ldr r3, [sp, 0x1c]                                    |         r3 = var_1ch;
    0x0005a5d4 ldr r5, [r5, 0x14]                                    |         r5 = *((r5 + 0x14));
    0x0005a5d6 adds r3, 1                                            |         r3++;
    0x0005a5d8 str r3, [sp, 0x1c]                                    |         var_1ch = r3;
    0x0005a5da cmp r5, 0                                             |         
                                                                     |         if (r5 == 0) {
    0x0005a5dc beq.w 0x5a83a                                         |             goto label_47;
                                                                     |         }
    0x0005a5e0 ldr r1, [sp, 0x18]                                    |         r1 = var_18h;
    0x0005a5e2 ldr r3, [r1, 4]!                                      |         r3 = *((r1 += 4));
    0x0005a5e6 str r1, [sp, 0x18]                                    |         var_18h = r1;
    0x0005a5e8 cmp r3, 0                                             |         
    0x0005a5ea beq 0x5a5d2                                           |         
                                                                     |     }
    0x0005a5ec cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0005a5ee beq.w 0x5a82c                                         |         goto label_48;
                                                                     |     }
                                                                     | label_9:
    0x0005a5f2 ldr.w r0, [fp, 0x18]                                  |     r0 = *(arg_18h);
    0x0005a5f6 bl 0x19ed0                                            |     fcn_00019ed0 (r0);
    0x0005a5fa ldr r3, [r5, 0x24]                                    |     r3 = *((r5 + 0x24));
    0x0005a5fc mov r7, r0                                            |     r7 = r0;
    0x0005a5fe str r0, [sp, 0x20]                                    |     var_20h = r0;
                                                                     |     if (r3 != 0) {
    0x0005a600 cbz r3, 0x5a62c                                       |         
    0x0005a602 ldr r3, [sp, 0x18]                                    |         r3 = var_18h;
    0x0005a604 movs r6, 0                                            |         r6 = 0;
    0x0005a606 mov r2, r6                                            |         r2 = r6;
    0x0005a608 movs r1, 0x1c                                         |         r1 = 0x1c;
    0x0005a60a str r6, [sp]                                          |         *(sp) = r6;
    0x0005a60c mov r0, fp                                            |         r0 = fp;
    0x0005a60e ldr r3, [r3]                                          |         r3 = *(r3);
    0x0005a610 bl 0x18bf8                                            |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005a614 ldr r3, [sp, 0x9c]                                    |         r3 = *(arg_9ch);
    0x0005a616 mov r2, r7                                            |         r2 = r7;
    0x0005a618 ldr r1, [r5, 0x24]                                    |         r1 = *((r5 + 0x24));
    0x0005a61a mov r0, sb                                            |         r0 = sb;
    0x0005a61c adds r3, 1                                            |         r3++;
    0x0005a61e str.w r3, [sb, 0x5c]                                  |         __asm ("str.w r3, [sb, 0x5c]");
    0x0005a622 movs r3, 8                                            |         r3 = 8;
    0x0005a624 bl 0x3cee8                                            |         fcn_0003cee8 (r0, r1, r2, r3, r4, r5);
    0x0005a628 str.w r6, [sb, 0x5c]                                  |         __asm ("str.w r6, [sb, 0x5c]");
                                                                     |     }
    0x0005a62c ldrd r2, r6, [sb, 0x38]                               |     __asm ("ldrd r2, r6, [sb, 0x38]");
    0x0005a630 ldrh r3, [r5, 0x34]                                   |     r3 = *((r5 + 0x34));
    0x0005a632 cmp r3, r2                                            |     
    0x0005a634 iteee gt                                              |     
                                                                     |     if (r3 <= r2) {
    0x0005a636 ldrgt r2, [sb, 0x48]                                  |         r2 = *((sb + 0x48));
                                                                     |     }
                                                                     |     if (r3 > r2) {
    0x0005a63a suble r2, r2, r3                                      |         r2 -= r3;
                                                                     |     }
                                                                     |     if (r3 > r2) {
    0x0005a63c strle r2, [sb, 0x38]                                  |         *((sb + 0x38)) = r2;
                                                                     |     }
                                                                     |     if (r3 <= r2) {
    0x0005a640 adds r2, r3, r6                                       |         r2 = r3 + r6;
                                                                     |     }
    0x0005a642 iteee le                                              |     
                                                                     |     if (r2 > r3) {
    0x0005a644 strle r2, [sb, 0x3c]                                  |         *((sb + 0x3c)) = r2;
                                                                     |     }
                                                                     |     if (r2 <= r3) {
    0x0005a648 addgt r6, r2, 1                                       |         r6 = r2 + 1;
                                                                     |     }
                                                                     |     if (r2 <= r3) {
    0x0005a64a addgt r2, r2, r3                                      |         r2 += r3;
                                                                     |     }
                                                                     |     if (r2 > r3) {
    0x0005a64c str.w r2, [sb, 0x48]                                  |         __asm ("str.w r2, [sb, 0x48]");
                                                                     |     }
                                                                     |     if (r3 == 0) {
    0x0005a650 cbz r3, 0x5a6b2                                       |         goto label_49;
                                                                     |     }
    0x0005a652 movs r7, 0                                            |     r7 = 0;
    0x0005a654 str.w sb, [sp, 0x38]                                  |     __asm ("str.w sb, [var_38h]");
    0x0005a658 ldr.w sl, [sp, 0x9c]                                  |     sl = *(arg_9ch);
    0x0005a65c mov r8, r7                                            |     r8 = r7;
    0x0005a65e ldr.w sb, [sp, 0x2c]                                  |     sb = var_2ch;
    0x0005a662 mov r1, r3                                            |     r1 = r3;
    0x0005a664 str r6, [sp, 0x34]                                    |     var_34h = r6;
    0x0005a666 b 0x5a68e                                             |     
                                                                     |     while (r2 >= 0) {
    0x0005a668 ldrsh.w r0, [sb, 0x24]                                |         r0 = *((sb + 0x24));
    0x0005a66c cmp r0, r2                                            |         
    0x0005a66e itt ne                                                |         
                                                                     |         if (r0 == r2) {
    0x0005a670 addne r2, sl                                          |             r2 += sl;
                                                                     |         }
                                                                     |         if (r0 == r2) {
    0x0005a672 addne r2, 1                                           |             r2++;
                                                                     |         }
                                                                     |         if (r0 == r2) {
    0x0005a674 beq 0x5a698                                           |             goto label_50;
                                                                     |         }
                                                                     | label_6:
    0x0005a676 movs r1, 0x22                                         |         r1 = 0x22;
    0x0005a678 mov r3, r6                                            |         r3 = r6;
    0x0005a67a mov r0, fp                                            |         r0 = fp;
    0x0005a67c str.w r8, [sp]                                        |         __asm ("str.w r8, [sp]");
    0x0005a680 bl 0x18bf8                                            |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005a684 ldrh r1, [r5, 0x34]                                   |         r1 = *((r5 + 0x34));
                                                                     | label_5:
    0x0005a686 adds r7, 1                                            |         r7++;
    0x0005a688 adds r6, 1                                            |         r6++;
    0x0005a68a cmp r1, r7                                            |         
                                                                     |         if (r1 <= r7) {
    0x0005a68c ble 0x5a6ac                                           |             goto label_51;
                                                                     |         }
    0x0005a68e ldr r2, [r5, 4]                                       |         r2 = *((r5 + 4));
    0x0005a690 ldrsh.w r2, [r2, r7, lsl 1]                           |         offset_1 = r7 << 1;
                                                                     |         r2 = *((r2 + offset_1));
    0x0005a694 cmp r2, 0                                             |         
    0x0005a696 bge 0x5a668                                           |         
                                                                     |     }
                                                                     | label_50:
    0x0005a698 cmp r4, r6                                            |     
                                                                     |     if (r4 == r6) {
    0x0005a69a beq 0x5a686                                           |         goto label_5;
                                                                     |     }
    0x0005a69c ldr r2, [r5, 0x24]                                    |     r2 = *((r5 + 0x24));
    0x0005a69e cmp r2, 0                                             |     
    0x0005a6a0 mov r2, sl                                            |     r2 = sl;
    0x0005a6a2 ite eq                                                |     
                                                                     |     if (r2 != 0) {
    0x0005a6a4 moveq r4, r6                                          |         r4 = r6;
                                                                     |     }
                                                                     |     if (r2 == 0) {
    0x0005a6a6 movne r4, -1                                          |         r4 = -1;
                                                                     |     }
    0x0005a6aa b 0x5a676                                             |     goto label_6;
                                                                     | label_51:
    0x0005a6ac ldrd r6, sb, [sp, 0x34]                               |     __asm ("ldrd r6, sb, [var_34h]");
    0x0005a6b0 mov r3, r1                                            |     r3 = r1;
                                                                     | label_49:
    0x0005a6b2 ldr r2, [sp, 0x18]                                    |     r2 = var_18h;
    0x0005a6b4 movs r1, 0x30                                         |     r1 = 0x30;
    0x0005a6b6 mov r0, fp                                            |     r0 = fp;
    0x0005a6b8 ldr r2, [r2]                                          |     r2 = *(r2);
    0x0005a6ba str r2, [sp]                                          |     *(sp) = r2;
    0x0005a6bc mov r2, r6                                            |     r2 = r6;
    0x0005a6be bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005a6c2 ldrh r2, [r5, 0x34]                                   |     r2 = *((r5 + 0x34));
    0x0005a6c4 mov r1, r6                                            |     r1 = r6;
    0x0005a6c6 mov r0, sb                                            |     r0 = sb;
    0x0005a6c8 bl 0xaea0                                             |     fcn_0000aea0 (r0, r1, r2);
    0x0005a6cc ldr r3, [sp, 0x24]                                    |     r3 = var_24h;
    0x0005a6ce ldr r7, [sp, 0x40]                                    |     r7 = var_40h;
    0x0005a6d0 subs r2, r3, r5                                       |     r2 = r3 - r5;
    0x0005a6d2 ldr r3, [sp, 0x30]                                    |     r3 = var_30h;
    0x0005a6d4 clz r2, r2                                            |     r2 &= r2;
    0x0005a6d8 lsrs r2, r2, 5                                        |     r2 >>= 5;
    0x0005a6da cmp r7, 0                                             |     
    0x0005a6dc ite ne                                                |     
                                                                     |     if (r7 == 0) {
    0x0005a6de movne r3, 0                                           |         r3 = 0;
                                                                     |     }
                                                                     |     if (r7 != 0) {
    0x0005a6e0 andeq r3, r3, 1                                       |         r3 &= 1;
                                                                     |     }
    0x0005a6e4 ldr r7, [sp, 0x20]                                    |     r7 = var_20h;
    0x0005a6e6 tst r2, r3                                            |     
    0x0005a6e8 str r2, [sp, 0x48]                                    |     var_48h = r2;
    0x0005a6ea mvn.w r7, r7                                          |     r7 = ~r7;
    0x0005a6ee str r7, [sp, 0x34]                                    |     var_34h = r7;
                                                                     |     if ((r2 & r3) != 0) {
    0x0005a6f0 bne.w 0x5aa20                                         |         goto label_52;
                                                                     |     }
    0x0005a6f4 ldrb.w r7, [r5, 0x36]                                 |     r7 = *((r5 + 0x36));
    0x0005a6f8 cmp r7, 0                                             |     
                                                                     |     if (r7 == 0) {
    0x0005a6fa beq.w 0x5a880                                         |         goto label_53;
                                                                     |     }
    0x0005a6fe ldr r3, [sp, 0x28]                                    |     r3 = var_28h;
    0x0005a700 cmp r3, 0xa                                           |     
                                                                     |     if (r3 == 0xa) {
    0x0005a702 beq.w 0x5a860                                         |         goto label_54;
                                                                     |     }
    0x0005a706 ldr r2, [sp, 0x30]                                    |     r2 = var_30h;
    0x0005a708 mov r7, r3                                            |     r7 = r3;
    0x0005a70a cmp r3, 5                                             |     
    0x0005a70c it eq                                                 |     
                                                                     |     if (r3 != 5) {
    0x0005a70e orreq r2, r2, 1                                       |         r2 |= 1;
                                                                     |     }
    0x0005a712 str r2, [sp, 0x38]                                    |     var_38h = r2;
                                                                     | label_11:
    0x0005a714 ldrh.w r8, [r5, 0x32]                                 |     r8 = *((r5 + 0x32));
    0x0005a718 movs r1, 0x41                                         |     r1 = 0x41;
    0x0005a71a ldrd r2, r3, [sp, 0x1c]                               |     __asm ("ldrd r2, r3, [var_1ch]");
    0x0005a71e mov r0, fp                                            |     r0 = fp;
    0x0005a720 str r6, [sp]                                          |     *(sp) = r6;
    0x0005a722 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005a726 mvn r3, 0xd                                           |     r3 = ~0xd;
    0x0005a72a mov r1, r0                                            |     r1 = r0;
    0x0005a72c mov r2, r8                                            |     r2 = r8;
    0x0005a72e mov r0, fp                                            |     r0 = fp;
    0x0005a730 bl 0x1021c                                            |     fcn_0001021c (r0, r1, r2, r3);
    0x0005a734 ldr r3, [sp, 0x24]                                    |     r3 = var_24h;
    0x0005a736 cmp r3, r5                                            |     
    0x0005a738 it eq                                                 |     
                                                                     |     if (r3 != r5) {
    0x0005a73a moveq sl, r6                                          |         sl = r6;
                                                                     |     }
                                                                     |     if (r3 != r5) {
    0x0005a73c beq 0x5a758                                           |         
    0x0005a73e ldrd r3, sl, [sb, 0x38]                               |         __asm ("ldrd r3, sl, [sb, 0x38]");
    0x0005a742 ldr r2, [sp, 0x3c]                                    |         r2 = var_3ch;
    0x0005a744 cmp r2, r3                                            |         
                                                                     |         if (r2 > r3) {
    0x0005a746 bgt.w 0x5a84e                                         |             goto label_55;
                                                                     |         }
    0x0005a74a subs r3, r3, r2                                       |         r3 -= r2;
    0x0005a74c str.w r3, [sb, 0x38]                                  |         __asm ("str.w r3, [sb, 0x38]");
    0x0005a750 add.w r3, r2, sl                                      |         r3 = r2 + sl;
    0x0005a754 str.w r3, [sb, 0x3c]                                  |         __asm ("str.w r3, [sb, 0x3c]");
                                                                     |     }
                                                                     | label_10:
    0x0005a758 ldr r3, [sp, 0x38]                                    |     r3 = var_38h;
                                                                     |     if (r3 != 0) {
    0x0005a75a cbz r3, 0x5a77a                                       |         
    0x0005a75c ldr r3, [sp, 0x2c]                                    |         r3 = var_2ch;
    0x0005a75e ldrb.w r3, [r3, 0x2c]                                 |         r3 = *((r3 + 0x2c));
    0x0005a762 ands r3, r3, 0x20                                     |         r3 &= 0x20;
                                                                     |         if (r3 == r3) {
    0x0005a766 beq.w 0x5a9dc                                         |             goto label_56;
                                                                     |         }
    0x0005a76a ldr r3, [sp, 0x24]                                    |         r3 = var_24h;
    0x0005a76c cmp r3, r5                                            |         
                                                                     |         if (r3 != r5) {
    0x0005a76e bne.w 0x5a8b6                                         |             goto label_57;
                                                                     |         }
                                                                     | label_12:
    0x0005a772 ldr r3, [sp, 0xa0]                                    |         r3 = *(arg_a0h);
    0x0005a774 cmp r3, 0                                             |         
                                                                     |         if (r3 != 0) {
    0x0005a776 bne.w 0x5a916                                         |             goto label_58;
                                                                     |         }
                                                                     |     }
                                                                     | label_14:
    0x0005a77a cmp r7, 3                                             |     
                                                                     |     if (r7 > 3) {
    0x0005a77c bgt 0x5a814                                           |         goto label_59;
                                                                     |     }
    0x0005a77e cmp r7, 0                                             |     
                                                                     |     if (r7 != 0) {
    0x0005a780 bne 0x5a874                                           |         goto label_60;
                                                                     |     }
                                                                     |     do {
    0x0005a782 ldr.w r3, [sb, 0x198]                                 |         r3 = *((sb + 0x198));
    0x0005a786 movs r2, 1                                            |         r2 = 1;
    0x0005a788 cmp r3, 0                                             |         
    0x0005a78a it eq                                                 |         
                                                                     |         if (r3 != 0) {
    0x0005a78c moveq r3, sb                                          |             r3 = sb;
                                                                     |         }
    0x0005a78e strb r2, [r3, 0x14]                                   |         *((r3 + 0x14)) = r2;
    0x0005a790 ldr r3, [sp, 0x44]                                    |         r3 = var_44h;
    0x0005a792 ldr r3, [r3, 0x18]                                    |         r3 = *((r3 + 0x18));
    0x0005a794 ands r2, r3, 0x40000                                  |         r2 = r3 & 0x40000;
                                                                     |         if (r2 != r3) {
    0x0005a798 bne.w 0x5abd8                                         |             goto label_61;
                                                                     |         }
                                                                     | label_22:
    0x0005a79c ldr r3, [sp, 0x48]                                    |         r3 = var_48h;
    0x0005a79e movs r1, 5                                            |         r1 = 5;
    0x0005a7a0 mov r0, sb                                            |         r0 = sb;
    0x0005a7a2 str r3, [sp, 0x14]                                    |         var_14h = r3;
    0x0005a7a4 ldr r3, [sp, 0x58]                                    |         r3 = var_58h;
    0x0005a7a6 strd sl, r3, [sp, 4]                                  |         __asm ("strd sl, r3, [var_8h]");
    0x0005a7aa ldr r3, [sp, 0x98]                                    |         r3 = *(arg_98h);
    0x0005a7ac str r3, [sp]                                          |         *(sp) = r3;
    0x0005a7ae movs r3, 0                                            |         r3 = 0;
    0x0005a7b0 strd r3, r1, [sp, 0xc]                                |         __asm ("strd r3, r1, [var_ch]");
    0x0005a7b4 movs r3, 1                                            |         r3 = 1;
    0x0005a7b6 str r3, [sp, 0x4c]                                    |         var_4ch = r3;
    0x0005a7b8 ldr r1, [sp, 0x2c]                                    |         r1 = var_2ch;
    0x0005a7ba ldr r3, [sp, 0x54]                                    |         r3 = var_54h;
    0x0005a7bc bl 0x59374                                            |         fcn_00059374 (r0, r1, r2, r3, r4, r5, r6);
                                                                     | label_8:
    0x0005a7c0 ldr r0, [sp, 0x34]                                    |         r0 = var_34h;
    0x0005a7c2 ldr.w r2, [fp, 0x18]                                  |         r2 = *(arg_18h);
    0x0005a7c6 cmp r0, 0                                             |         
                                                                     |         if (r0 >= 0) {
    0x0005a7c8 blt 0x5a7d6                                           |             
    0x0005a7ca ldr r3, [r2, 0x70]                                    |             r3 = *((r2 + 0x70));
                                                                     |             if (r3 == 0) {
    0x0005a7cc cbz r3, 0x5a7d6                                       |                 goto label_62;
                                                                     |             }
    0x0005a7ce ldr.w r1, [fp, 0x20]                                  |             r1 = *(arg_20h);
    0x0005a7d2 str.w r1, [r3, r0, lsl 2]                             |             __asm ("str.w r1, [r3, r0, lsl 2]");
                                                                     |         }
                                                                     | label_62:
    0x0005a7d6 ldr.w r3, [fp, 0x20]                                  |         r3 = *(arg_20h);
    0x0005a7da mov r1, r6                                            |         r1 = r6;
    0x0005a7dc ldrh r7, [r5, 0x34]                                   |         r7 = *((r5 + 0x34));
    0x0005a7de mov r0, sb                                            |         r0 = sb;
    0x0005a7e0 subs r3, 1                                            |         r3--;
    0x0005a7e2 str r3, [r2, 0x58]                                    |         *((r2 + 0x58)) = r3;
    0x0005a7e4 mov r2, r7                                            |         r2 = r7;
    0x0005a7e6 bl 0xaea0                                             |         fcn_0000aea0 (r0, r1, r2);
    0x0005a7ea ldr.w r3, [sb, 0x38]                                  |         r3 = *((sb + 0x38));
    0x0005a7ee cmp r7, r3                                            |         
    0x0005a7f0 it gt                                                 |         
                                                                     |         if (r7 > r3) {
    0x0005a7f2 strdgt r7, r6, [sb, 0x38]                             |             __asm ("strdgt r7, r6, [sb, 0x38]");
                                                                     |         }
    0x0005a7f6 cmp sl, r6                                            |         
                                                                     |         if (sl == r6) {
    0x0005a7f8 beq 0x5a828                                           |             goto label_63;
                                                                     |         }
    0x0005a7fa ldr r6, [sp, 0x3c]                                    |         r6 = var_3ch;
    0x0005a7fc mov r1, sl                                            |         r1 = sl;
    0x0005a7fe mov r2, r6                                            |         r2 = r6;
    0x0005a800 bl 0xaea0                                             |         fcn_0000aea0 (r0, r1, r2);
    0x0005a804 ldr.w r3, [sb, 0x38]                                  |         r3 = *((sb + 0x38));
    0x0005a808 cmp r6, r3                                            |         
                                                                     |         if (r6 <= r3) {
    0x0005a80a ble 0x5a828                                           |             goto label_63;
                                                                     |         }
    0x0005a80c movs r2, 1                                            |         r2 = 1;
    0x0005a80e strd r6, sl, [sb, 0x38]                               |         __asm ("strd r6, sl, [sb, 0x38]");
    0x0005a812 b 0x5a5d2                                             |         goto label_7;
                                                                     | label_59:
    0x0005a814 cmp r7, 4                                             |         
    0x0005a816 bne 0x5a782                                           |         
                                                                     |     } while (r7 != 4);
    0x0005a818 movs r2, 0                                            |     r2 = 0;
    0x0005a81a ldr r3, [sp, 0xac]                                    |     r3 = *(arg_ach);
    0x0005a81c movs r1, 0x10                                         |     r1 = 0x10;
    0x0005a81e mov r0, fp                                            |     r0 = fp;
    0x0005a820 str r2, [sp]                                          |     *(sp) = r2;
    0x0005a822 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005a826 b 0x5a7c0                                             |     goto label_8;
                                                                     | label_63:
    0x0005a828 movs r2, 1                                            |     r2 = 1;
    0x0005a82a b 0x5a5d2                                             |     goto label_7;
                                                                     | label_48:
    0x0005a82c ldr r3, [sp, 0x9c]                                    |     r3 = *(arg_9ch);
    0x0005a82e mov r0, fp                                            |     r0 = fp;
    0x0005a830 ldr r1, [sp, 0x2c]                                    |     r1 = var_2ch;
    0x0005a832 adds r2, r3, 1                                        |     r2 = r3 + 1;
    0x0005a834 bl 0x197e4                                            |     fcn_000197e4 (r0, r1, r2);
    0x0005a838 b 0x5a5f2                                             |     goto label_9;
                                                                     | label_47:
    0x0005a83a ldr r3, [sp, 0x50]                                    |     r3 = var_50h;
    0x0005a83c cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0005a83e bne.w 0x5ab94                                         |         goto label_64;
                                                                     |     }
                                                                     | label_20:
    0x0005a842 ldr r3, [sp, 0xb0]                                    |     r3 = *(arg_18h);
    0x0005a844 ldr r2, [sp, 0x4c]                                    |     r2 = var_4ch;
    0x0005a846 str r2, [r3]                                          |     *(r3) = r2;
    0x0005a848 add sp, 0x74                                          |     
    0x0005a84a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |     
                                                                     | label_55:
    0x0005a84e ldr.w r3, [sb, 0x48]                                  |     r3 = *((sb + 0x48));
    0x0005a852 ldr r2, [sp, 0x3c]                                    |     r2 = var_3ch;
    0x0005a854 add.w sl, r3, 1                                       |     sl = r3 + 1;
    0x0005a858 add r2, r3                                            |     r2 += r3;
    0x0005a85a str.w r2, [sb, 0x48]                                  |     __asm ("str.w r2, [sb, 0x48]");
    0x0005a85e b 0x5a758                                             |     goto label_10;
                                                                     | label_54:
    0x0005a860 cmp r7, 0xa                                           |     
    0x0005a862 ldr r3, [sp, 0x30]                                    |     r3 = var_30h;
                                                                     |     if (r7 == 0xa) {
    0x0005a864 beq.w 0x5abd2                                         |         goto label_65;
                                                                     |     }
    0x0005a868 cmp r7, 5                                             |     
    0x0005a86a it eq                                                 |     
                                                                     |     if (r7 != 5) {
    0x0005a86c orreq r3, r3, 1                                       |         r3 |= 1;
                                                                     |     }
    0x0005a870 str r3, [sp, 0x38]                                    |     var_38h = r3;
    0x0005a872 b 0x5a714                                             |     goto label_11;
                                                                     | label_60:
    0x0005a874 mov r1, r7                                            |     r1 = r7;
    0x0005a876 mov r2, r5                                            |     r2 = r5;
    0x0005a878 mov r0, sb                                            |     r0 = sb;
    0x0005a87a bl 0x1a7b4                                            |     fcn_0001a7b4 (r0, r1, r2);
    0x0005a87e b 0x5a7c0                                             |     goto label_8;
                                                                     | label_53:
    0x0005a880 ldrh r7, [r5, 0x34]                                   |     r7 = *((r5 + 0x34));
    0x0005a882 mov r2, r7                                            |     r2 = r7;
    0x0005a884 bl 0xaea0                                             |     fcn_0000aea0 (r0, r1, r2);
    0x0005a888 ldr.w r3, [sb, 0x38]                                  |     r3 = *((sb + 0x38));
    0x0005a88c ldr r0, [sp, 0x34]                                    |     r0 = var_34h;
    0x0005a88e ldr.w r2, [fp, 0x18]                                  |     r2 = *(arg_18h);
    0x0005a892 cmp r7, r3                                            |     
    0x0005a894 it gt                                                 |     
                                                                     |     if (r7 > r3) {
    0x0005a896 strdgt r7, r6, [sb, 0x38]                             |         __asm ("strdgt r7, r6, [sb, 0x38]");
                                                                     |     }
    0x0005a89a cmp r0, 0                                             |     
                                                                     |     if (r0 >= 0) {
    0x0005a89c blt 0x5a8aa                                           |         
    0x0005a89e ldr r3, [r2, 0x70]                                    |         r3 = *((r2 + 0x70));
                                                                     |         if (r3 == 0) {
    0x0005a8a0 cbz r3, 0x5a8aa                                       |             goto label_17;
                                                                     |         }
                                                                     | label_18:
    0x0005a8a2 ldr.w r1, [fp, 0x20]                                  |         r1 = *(arg_20h);
    0x0005a8a6 str.w r1, [r3, r0, lsl 2]                             |         __asm ("str.w r1, [r3, r0, lsl 2]");
                                                                     |     }
                                                                     | label_17:
    0x0005a8aa ldr.w r3, [fp, 0x20]                                  |     r3 = *(arg_20h);
    0x0005a8ae subs r3, 1                                            |     r3--;
    0x0005a8b0 str r3, [r2, 0x58]                                    |     *((r2 + 0x58)) = r3;
    0x0005a8b2 movs r2, 1                                            |     r2 = 1;
    0x0005a8b4 b 0x5a5d2                                             |     goto label_7;
                                                                     | label_57:
    0x0005a8b6 ldr r2, [sp, 0x24]                                    |     r2 = var_24h;
    0x0005a8b8 ldrh r3, [r2, 0x32]                                   |     r3 = *((r2 + 0x32));
    0x0005a8ba cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0005a8bc beq.w 0x5a772                                         |         goto label_12;
                                                                     |     }
    0x0005a8c0 str r7, [sp, 0x38]                                    |     var_38h = r7;
    0x0005a8c2 mov.w r8, 0                                           |     r8 = 0;
    0x0005a8c6 ldr r7, [sp, 0x1c]                                    |     r7 = var_1ch;
    0x0005a8c8 str r4, [sp, 0x60]                                    |     var_60h = r4;
    0x0005a8ca mov r4, r2                                            |     r4 = r2;
                                                                     | label_13:
    0x0005a8cc ldrh r0, [r5, 0x34]                                   |     r0 = *((r5 + 0x34));
    0x0005a8ce ldr r3, [r4, 4]                                       |     r3 = *((r4 + 4));
    0x0005a8d0 ldrsh.w ip, [r3, r8, lsl 1]                           |     offset_2 = r8 << 1;
                                                                     |     ip = *((r3 + offset_2));
    0x0005a8d4 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0005a8d6 beq 0x5a9c4                                           |         goto label_66;
                                                                     |     }
    0x0005a8d8 ldr r2, [r5, 4]                                       |     r2 = *((r5 + 4));
    0x0005a8da movs r3, 0                                            |     r3 = 0;
    0x0005a8dc subs r2, 2                                            |     r2 -= 2;
    0x0005a8de b 0x5a8e6                                             |     
                                                                     |     while (r1 != ip) {
    0x0005a8e0 adds r3, 1                                            |         r3++;
    0x0005a8e2 cmp r3, r0                                            |         
                                                                     |         if (r3 == r0) {
    0x0005a8e4 beq 0x5a9c4                                           |             goto label_66;
                                                                     |         }
    0x0005a8e6 ldrsh r1, [r2, 2]!                                    |         r1 = *((r2 += 2));
    0x0005a8ea cmp r1, ip                                            |         
    0x0005a8ec bne 0x5a8e0                                           |         
                                                                     |     }
    0x0005a8ee sxth r3, r3                                           |     __asm ("sxth r3, r3");
                                                                     | label_15:
    0x0005a8f0 add.w r2, sl, r8                                      |     r2 = sl + r8;
    0x0005a8f4 str r2, [sp]                                          |     *(sp) = r2;
    0x0005a8f6 movs r1, 0x2e                                         |     r1 = 0x2e;
    0x0005a8f8 mov r2, r7                                            |     r2 = r7;
    0x0005a8fa mov r0, fp                                            |     r0 = fp;
    0x0005a8fc bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005a900 ldrh r3, [r4, 0x32]                                   |     r3 = *((r4 + 0x32));
    0x0005a902 add.w r8, r8, 1                                       |     r8++;
    0x0005a906 cmp r3, r8                                            |     
                                                                     |     if (r3 > r8) {
    0x0005a908 bgt 0x5a8cc                                           |         goto label_13;
                                                                     |     }
    0x0005a90a ldr r3, [sp, 0xa0]                                    |     r3 = *(arg_a0h);
    0x0005a90c ldr r7, [sp, 0x38]                                    |     r7 = var_38h;
    0x0005a90e ldr r4, [sp, 0x60]                                    |     r4 = var_60h;
    0x0005a910 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0005a912 beq.w 0x5a77a                                         |         goto label_14;
                                                                     |     }
                                                                     | label_58:
    0x0005a916 ldrb.w r3, [r5, 0x37]                                 |     r3 = *((r5 + 0x37));
    0x0005a91a ldr r1, [sp, 0x24]                                    |     r1 = var_24h;
    0x0005a91c and r3, r3, 3                                         |     r3 &= 3;
    0x0005a920 cmp r3, 2                                             |     
    0x0005a922 ite eq                                                |     
                                                                     |     if (r3 != 2) {
    0x0005a924 moveq r3, r6                                          |         r3 = r6;
                                                                     |     }
                                                                     |     if (r3 == 2) {
    0x0005a926 movne r3, sl                                          |         r3 = sl;
                                                                     |     }
    0x0005a928 ldrh r2, [r1, 0x32]                                   |     r2 = *((r1 + 0x32));
    0x0005a92a str r3, [sp, 0x38]                                    |     var_38h = r3;
    0x0005a92c ldr.w r3, [fp, 0x20]                                  |     r3 = *(arg_20h);
    0x0005a930 add r3, r2                                            |     r3 += r2;
    0x0005a932 cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0005a934 beq.w 0x5a77a                                         |         goto label_14;
                                                                     |     }
    0x0005a938 ldr r2, [sp, 0xa0]                                    |     r2 = *(arg_a0h);
    0x0005a93a movs r0, 0x4e                                         |     r0 = 0x4e;
    0x0005a93c strd r5, r7, [sp, 0x60]                               |     __asm ("strd r5, r7, [var_60h]");
    0x0005a940 mov.w r8, 0                                           |     r8 = 0;
    0x0005a944 str r4, [sp, 0x68]                                    |     var_68h = r4;
    0x0005a946 mov r5, r0                                            |     r5 = r0;
    0x0005a948 adds r2, 1                                            |     r2++;
    0x0005a94a str.w sl, [sp, 0x6c]                                  |     __asm ("str.w sl, [var_6ch]");
    0x0005a94e mov r7, r2                                            |     r7 = r2;
    0x0005a950 ldr.w sl, [sp, 0x20]                                  |     sl = var_20h;
    0x0005a954 mov r4, r1                                            |     r4 = r1;
    0x0005a956 str r6, [sp, 0x20]                                    |     var_20h = r6;
    0x0005a958 mov r6, r3                                            |     r6 = r3;
                                                                     |     do {
    0x0005a95a ldr r2, [r4, 0x20]                                    |         r2 = *((r4 + 0x20));
    0x0005a95c mov r0, sb                                            |         r0 = sb;
    0x0005a95e ldr.w r1, [r2, r8, lsl 2]                             |         offset_3 = r8 << 2;
                                                                     |         r1 = *((r2 + offset_3));
    0x0005a962 bl 0x21fac                                            |         fcn_00021fac (r0, r1);
    0x0005a966 ldr r2, [r4, 4]                                       |         r2 = *((r4 + 4));
    0x0005a968 mvn r3, 3                                             |         r3 = ~3;
    0x0005a96c ldrh r1, [r4, 0x32]                                   |         r1 = *((r4 + 0x32));
    0x0005a96e ldrsh.w r2, [r2, r8, lsl 1]                           |         offset_4 = r8 << 1;
                                                                     |         r2 = *((r2 + offset_4));
    0x0005a972 str r3, [sp, 8]                                       |         var_8h = r3;
    0x0005a974 subs r1, 1                                            |         r1--;
    0x0005a976 ldr r3, [sp, 0x38]                                    |         r3 = var_38h;
    0x0005a978 cmp r1, r8                                            |         
    0x0005a97a itt eq                                                |         
                                                                     |         if (r1 != r8) {
    0x0005a97c moveq r6, sl                                          |             r6 = sl;
                                                                     |         }
                                                                     |         if (r1 != r8) {
    0x0005a97e moveq r5, 0x4f                                        |             r5 = 0x4f;
                                                                     |         }
    0x0005a980 add r2, r7                                            |         r2 += r7;
    0x0005a982 str r0, [sp, 4]                                       |         var_4h = r0;
    0x0005a984 add.w r1, r3, r8                                      |         r1 = r3 + r8;
    0x0005a988 mov r0, fp                                            |         r0 = fp;
    0x0005a98a str r1, [sp]                                          |         *(sp) = r1;
    0x0005a98c mov r3, r6                                            |         r3 = r6;
    0x0005a98e mov r1, r5                                            |         r1 = r5;
    0x0005a990 bl 0x1977c                                            |         fcn_0001977c (r0, r1, r2, r3, r4, r5);
    0x0005a994 ldr.w r2, [fp, 4]                                     |         r2 = *(arg_9ch);
                                                                     |         if (r2 != 0) {
    0x0005a998 cbz r2, 0x5a9ae                                       |             
    0x0005a99a ldr.w r1, [fp, 0x20]                                  |             r1 = *(arg_20h);
    0x0005a99e mvn r3, 0x77                                          |             r3 = ~0x77;
    0x0005a9a2 add.w r1, r1, r1, lsl 2                               |             r1 += (r1 << 2);
    0x0005a9a6 add.w r2, r2, r1, lsl 2                               |             r2 += (r1 << 2);
    0x0005a9aa strb r3, [r2, -0x11]                                  |             *((r2 - 0x11)) = r3;
                                                                     |         }
    0x0005a9ae ldrh r2, [r4, 0x32]                                   |         r2 = *((r4 + 0x32));
    0x0005a9b0 add.w r8, r8, 1                                       |         r8++;
    0x0005a9b4 cmp r2, r8                                            |         
    0x0005a9b6 bgt 0x5a95a                                           |         
                                                                     |     } while (r2 > r8);
    0x0005a9b8 ldrd r5, r7, [sp, 0x60]                               |     __asm ("ldrd r5, r7, [var_60h]");
    0x0005a9bc ldrd r4, sl, [sp, 0x68]                               |     __asm ("ldrd r4, sl, [var_68h]");
    0x0005a9c0 ldr r6, [sp, 0x20]                                    |     r6 = var_20h;
    0x0005a9c2 b 0x5a77a                                             |     goto label_14;
                                                                     | label_66:
    0x0005a9c4 mov.w r3, -1                                          |     r3 = -1;
    0x0005a9c8 b 0x5a8f0                                             |     goto label_15;
                                                                     | label_42:
    0x0005a9ca movs r3, 0                                            |     r3 = 0;
    0x0005a9cc movs r2, 0                                            |     r2 = 0;
    0x0005a9ce str r3, [sp]                                          |     *(sp) = r3;
    0x0005a9d0 movs r1, 0x10                                         |     r1 = 0x10;
    0x0005a9d2 ldr r3, [sp, 0xac]                                    |     r3 = *(arg_ach);
    0x0005a9d4 mov r0, fp                                            |     r0 = fp;
    0x0005a9d6 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005a9da b 0x5a41c                                             |     goto label_16;
                                                                     | label_56:
    0x0005a9dc str r3, [sp]                                          |     *(sp) = r3;
    0x0005a9de movs r1, 0x6e                                         |     r1 = 0x6e;
    0x0005a9e0 mov r3, sl                                            |     r3 = sl;
    0x0005a9e2 ldr r2, [sp, 0x1c]                                    |     r2 = var_1ch;
    0x0005a9e4 mov r0, fp                                            |     r0 = fp;
    0x0005a9e6 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005a9ea ldr r3, [sp, 0xa0]                                    |     r3 = *(arg_a0h);
    0x0005a9ec cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0005a9ee beq.w 0x5a77a                                         |         goto label_14;
                                                                     |     }
    0x0005a9f2 ldr r2, [sp, 0xa0]                                    |     r2 = *(arg_a0h);
    0x0005a9f4 movs r1, 0x4f                                         |     r1 = 0x4f;
    0x0005a9f6 ldr r3, [sp, 0x20]                                    |     r3 = var_20h;
    0x0005a9f8 mov r0, fp                                            |     r0 = fp;
    0x0005a9fa str r2, [sp]                                          |     *(sp) = r2;
    0x0005a9fc mov r2, sl                                            |     r2 = sl;
    0x0005a9fe bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005aa02 ldr.w r3, [fp, 4]                                     |     r3 = *(arg_9ch);
    0x0005aa06 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0005aa08 beq.w 0x5a77a                                         |         goto label_14;
                                                                     |     }
    0x0005aa0c ldr.w r2, [fp, 0x20]                                  |     r2 = *(arg_20h);
    0x0005aa10 add.w r2, r2, r2, lsl 2                               |     r2 += (r2 << 2);
    0x0005aa14 add.w r3, r3, r2, lsl 2                               |     r3 += (r2 << 2);
    0x0005aa18 movs r2, 0x88                                         |     r2 = 0x88;
    0x0005aa1a strb r2, [r3, -0x11]                                  |     *((r3 - 0x11)) = r2;
    0x0005aa1e b 0x5a77a                                             |     goto label_14;
                                                                     | label_52:
    0x0005aa20 cmp r7, 0                                             |     
    0x0005aa22 ldr.w r2, [fp, 0x18]                                  |     r2 = *(arg_18h);
    0x0005aa26 mov r0, r7                                            |     r0 = r7;
                                                                     |     if (r7 < 0) {
    0x0005aa28 blt.w 0x5a8aa                                         |         goto label_17;
                                                                     |     }
    0x0005aa2c ldr r3, [r2, 0x70]                                    |     r3 = *((r2 + 0x70));
    0x0005aa2e cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0005aa30 bne.w 0x5a8a2                                         |         goto label_18;
                                                                     |     }
    0x0005aa34 b 0x5a8aa                                             |     goto label_17;
                                                                     | label_45:
    0x0005aa36 ldr.w r0, [fp, 0x18]                                  |     r0 = *(arg_18h);
    0x0005aa3a bl 0x19ed0                                            |     fcn_00019ed0 (r0);
    0x0005aa3e ldr r3, [sp, 0x28]                                    |     r3 = var_28h;
    0x0005aa40 mov r6, r0                                            |     r6 = r0;
    0x0005aa42 ldrb.w r4, [sl, 0x2d]                                 |     r4 = *((sl + 0x2d));
    0x0005aa46 cmp r3, 0xa                                           |     
    0x0005aa48 it ne                                                 |     
                                                                     |     if (r3 == 0xa) {
    0x0005aa4a movne r4, r3                                          |         r4 = r3;
                                                                     |     }
                                                                     |     if (r3 == 0xa) {
    0x0005aa4c beq.w 0x5ac88                                         |         goto label_67;
                                                                     |     }
                                                                     | label_29:
    0x0005aa50 ldr r3, [sp, 0x28]                                    |     r3 = var_28h;
    0x0005aa52 sub.w r5, r4, 5                                       |     r5 = r4 - 5;
    0x0005aa56 clz r5, r5                                            |     r5 &= r5;
    0x0005aa5a lsrs r5, r5, 5                                        |     r5 >>= 5;
    0x0005aa5c cmp r3, 5                                             |     
    0x0005aa5e ldr r3, [sp, 0xa0]                                    |     r3 = *(arg_a0h);
    0x0005aa60 it eq                                                 |     
                                                                     |     if (r3 != 5) {
    0x0005aa62 moveq r5, 0                                           |         r5 = 0;
                                                                     |     }
    0x0005aa64 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0005aa66 bne.w 0x5ac04                                         |         goto label_68;
                                                                     |     }
                                                                     | label_23:
    0x0005aa6a cmp r5, 0                                             |     
                                                                     |     if (r5 == 0) {
    0x0005aa6c beq 0x5ab08                                           |         goto label_25;
                                                                     |     }
                                                                     | label_24:
    0x0005aa6e ldr.w r3, [sl, 8]                                     |     r3 = *((sl + 8));
                                                                     |     if (r3 != 0) {
    0x0005aa72 cbnz r3, 0x5aa7e                                      |         goto label_69;
                                                                     |     }
    0x0005aa74 b 0x5aca6                                             |     goto label_70;
                                                                     |     do {
    0x0005aa76 ldr r3, [r3, 0x14]                                    |         r3 = *((r3 + 0x14));
    0x0005aa78 cmp r3, 0                                             |         
                                                                     |         if (r3 == 0) {
    0x0005aa7a beq.w 0x5aca6                                         |             goto label_70;
                                                                     |         }
                                                                     | label_69:
    0x0005aa7e ldrb.w r2, [r3, 0x36]                                 |         r2 = *((r3 + 0x36));
    0x0005aa82 subs r2, 3                                            |         r2 -= 3;
    0x0005aa84 cmp r2, 1                                             |         
    0x0005aa86 bhi 0x5aa76                                           |         
                                                                     |     } while (r2 > 1);
    0x0005aa88 movs r3, 0                                            |     r3 = 0;
    0x0005aa8a movs r1, 0x10                                         |     r1 = 0x10;
    0x0005aa8c mov r2, r3                                            |     r2 = r3;
    0x0005aa8e mov r0, fp                                            |     r0 = fp;
    0x0005aa90 str r3, [sp]                                          |     *(sp) = r3;
    0x0005aa92 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005aa96 str r0, [sp, 0x50]                                    |     var_50h = r0;
                                                                     | label_30:
    0x0005aa98 ldr r3, [sp, 0x9c]                                    |     r3 = *(arg_9ch);
    0x0005aa9a movs r1, 0x44                                         |     r1 = 0x44;
    0x0005aa9c ldr r2, [sp, 0x54]                                    |     r2 = var_54h;
    0x0005aa9e mov r0, fp                                            |     r0 = fp;
    0x0005aaa0 str r3, [sp]                                          |     *(sp) = r3;
    0x0005aaa2 mov r3, r6                                            |     r3 = r6;
    0x0005aaa4 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
                                                                     | label_34:
    0x0005aaa8 ldr r3, [sp, 0x44]                                    |     r3 = var_44h;
    0x0005aaaa ldr r3, [r3, 0x18]                                    |     r3 = *((r3 + 0x18));
    0x0005aaac lsls r5, r3, 0xd                                      |     r5 = r3 << 0xd;
                                                                     |     if (r5 >= r3) {
    0x0005aaae bpl.w 0x5ac46                                         |         goto label_71;
                                                                     |     }
    0x0005aab2 movs r3, 0                                            |     r3 = 0;
    0x0005aab4 movs r2, 0x6d                                         |     r2 = 0x6d;
    0x0005aab6 mov r1, sl                                            |     r1 = sl;
    0x0005aab8 mov r0, sb                                            |     r0 = sb;
    0x0005aaba str r3, [sp]                                          |     *(sp) = r3;
    0x0005aabc bl 0x126c4                                            |     r0 = fcn_000126c4 (r0, r1, r2, r3, r4);
    0x0005aac0 mov r2, r0                                            |     r2 = r0;
    0x0005aac2 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0005aac4 beq.w 0x5ac46                                         |         goto label_71;
                                                                     |     }
                                                                     | label_27:
    0x0005aac8 ldr.w r3, [sb, 0x198]                                 |     r3 = *((sb + 0x198));
    0x0005aacc movs r1, 1                                            |     r1 = 1;
    0x0005aace movs r0, 5                                            |     r0 = 5;
    0x0005aad0 cmp r3, 0                                             |     
    0x0005aad2 it eq                                                 |     
                                                                     |     if (r3 != 0) {
    0x0005aad4 moveq r3, sb                                          |         r3 = sb;
                                                                     |     }
    0x0005aad6 strb r1, [r3, 0x14]                                   |     *((r3 + 0x14)) = r1;
    0x0005aad8 ldr r3, [sp, 0x9c]                                    |     r3 = *(arg_9ch);
    0x0005aada str r1, [sp, 0x14]                                    |     var_14h = r1;
    0x0005aadc str r1, [sp, 8]                                       |     var_8h = r1;
    0x0005aade mov r1, sl                                            |     r1 = sl;
    0x0005aae0 str r3, [sp, 4]                                       |     var_4h = r3;
    0x0005aae2 ldr r3, [sp, 0x98]                                    |     r3 = *(arg_98h);
    0x0005aae4 str r3, [sp]                                          |     *(sp) = r3;
    0x0005aae6 movs r3, 0                                            |     r3 = 0;
    0x0005aae8 strd r3, r0, [sp, 0xc]                                |     __asm ("strd r3, r0, [var_ch]");
    0x0005aaec mov r0, sb                                            |     r0 = sb;
    0x0005aaee ldr r3, [sp, 0x54]                                    |     r3 = var_54h;
    0x0005aaf0 bl 0x59374                                            |     fcn_00059374 (r0, r1, r2, r3, r4, r5, r6);
                                                                     | label_31:
    0x0005aaf4 mvns r0, r6                                           |     r0 = ~r6;
    0x0005aaf6 mov.w r1, 1                                           |     r1 = 1;
    0x0005aafa ldr.w r2, [fp, 0x18]                                  |     r2 = *(arg_18h);
    0x0005aafe ldr.w r3, [fp, 0x20]                                  |     r3 = *(arg_20h);
    0x0005ab02 str r1, [sp, 0x4c]                                    |     var_4ch = r1;
                                                                     |     if (r0 < r6) {
    0x0005ab04 bpl 0x5ab44                                           |         
    0x0005ab06 b 0x5ab50                                             |         goto label_72;
                                                                     | label_25:
    0x0005ab08 ldr r3, [sp, 0x9c]                                    |         r3 = *(arg_9ch);
    0x0005ab0a movs r1, 0x44                                         |         r1 = 0x44;
    0x0005ab0c ldr r2, [sp, 0x54]                                    |         r2 = var_54h;
    0x0005ab0e mov r0, fp                                            |         r0 = fp;
    0x0005ab10 str r3, [sp]                                          |         *(sp) = r3;
    0x0005ab12 mov r3, r6                                            |         r3 = r6;
    0x0005ab14 bl 0x18bf8                                            |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005ab18 cmp r4, 4                                             |         
                                                                     |         if (r4 == 4) {
    0x0005ab1a beq.w 0x5ac36                                         |             goto label_73;
                                                                     |         }
                                                                     |         if (r4 > 4) {
    0x0005ab1e bgt 0x5abc8                                           |             goto label_74;
                                                                     |         }
                                                                     | label_33:
    0x0005ab20 subs r3, r4, 1                                        |         r3 = r4 - 1;
    0x0005ab22 cmp r3, 3                                             |         
    0x0005ab24 it hs                                                 |         
                                                                     |         if (r3 < 3) {
    0x0005ab26 movhs r4, 2                                           |             r4 = 2;
                                                                     |         }
                                                                     | label_21:
    0x0005ab28 mov r1, r4                                            |         r1 = r4;
    0x0005ab2a mov r2, sl                                            |         r2 = sl;
    0x0005ab2c mov r0, sb                                            |         r0 = sb;
    0x0005ab2e bl 0x1c1ec                                            |         fcn_0001c1ec (r0, r1, r2);
                                                                     | label_26:
    0x0005ab32 mvns r0, r6                                           |         r0 = ~r6;
    0x0005ab34 ldr.w r2, [fp, 0x18]                                  |         r2 = *(arg_18h);
    0x0005ab38 ldr.w r3, [fp, 0x20]                                  |         r3 = *(arg_20h);
                                                                     |         if (r0 < r6) {
    0x0005ab3c bmi 0x5abea                                           |             goto label_75;
                                                                     |         }
    0x0005ab3e movs r1, 0                                            |         r1 = 0;
    0x0005ab40 strd r1, r1, [sp, 0x4c]                               |         __asm ("strd r1, r1, [var_4ch]");
                                                                     |     }
    0x0005ab44 ldr r1, [r2, 0x70]                                    |     r1 = *((r2 + 0x70));
                                                                     |     if (r1 != 0) {
    0x0005ab46 cbz r1, 0x5ab50                                       |         
    0x0005ab48 str.w r3, [r1, r0, lsl 2]                             |         __asm ("str.w r3, [r1, r0, lsl 2]");
    0x0005ab4c ldr.w r3, [fp, 0x20]                                  |         r3 = *(arg_20h);
                                                                     |     }
                                                                     | label_72:
    0x0005ab50 subs r3, 1                                            |     r3--;
    0x0005ab52 str r3, [r2, 0x58]                                    |     *((r2 + 0x58)) = r3;
    0x0005ab54 ldr r3, [sp, 0x50]                                    |     r3 = var_50h;
    0x0005ab56 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0005ab58 beq 0x5abf2                                           |         goto label_76;
                                                                     |     }
    0x0005ab5a movs r3, 0                                            |     r3 = 0;
    0x0005ab5c movs r1, 0x10                                         |     r1 = 0x10;
    0x0005ab5e mov r2, r3                                            |     r2 = r3;
    0x0005ab60 str r3, [sp]                                          |     *(sp) = r3;
    0x0005ab62 mov r0, fp                                            |     r0 = fp;
    0x0005ab64 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005ab68 ldr.w r3, [fp, 0x20]                                  |     r3 = *(arg_20h);
    0x0005ab6c ldr r1, [sp, 0x50]                                    |     r1 = var_50h;
    0x0005ab6e ldr.w r5, [sl, 8]                                     |     r5 = *((sl + 8));
    0x0005ab72 str r0, [sp, 0x5c]                                    |     var_5ch = r0;
    0x0005ab74 cmp r1, r3                                            |     
    0x0005ab76 itttt lo                                              |     
                                                                     |     if (r1 >= r3) {
    0x0005ab78 ldrlo r2, [fp, 4]                                     |         r2 = *(arg_9ch);
                                                                     |     }
                                                                     |     if (r1 >= r3) {
    0x0005ab7c addlo r1, r1, r1, lsl 2                               |         r1 += (r1 << 2);
                                                                     |     }
                                                                     |     if (r1 < r3) {
    0x0005ab80 add.w r2, r2, r1, lsl 2                               |         r2 += (r1 << 2);
                                                                     |     }
                                                                     |     if (r1 < r3) {
    0x0005ab84 str r3, [r2, 8]                                       |         *((r2 + 8)) = r3;
                                                                     |     }
    0x0005ab86 subs r3, 1                                            |     r3--;
    0x0005ab88 ldr.w r2, [fp, 0x18]                                  |     r2 = *(arg_18h);
    0x0005ab8c str r3, [r2, 0x58]                                    |     *((r2 + 0x58)) = r3;
    0x0005ab8e cmp r5, 0                                             |     
                                                                     |     if (r5 != 0) {
    0x0005ab90 bne.w 0x5a5b6                                         |         goto label_19;
                                                                     |     }
                                                                     | label_64:
    0x0005ab94 ldr r3, [sp, 0x50]                                    |     r3 = var_50h;
    0x0005ab96 movs r2, 0                                            |     r2 = 0;
    0x0005ab98 movs r1, 0x10                                         |     r1 = 0x10;
    0x0005ab9a str r2, [sp]                                          |     *(sp) = r2;
    0x0005ab9c mov r0, fp                                            |     r0 = fp;
    0x0005ab9e adds r3, 1                                            |     r3++;
    0x0005aba0 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005aba4 ldr.w r2, [fp, 0x20]                                  |     r2 = *(arg_20h);
    0x0005aba8 ldr r3, [sp, 0x5c]                                    |     r3 = var_5ch;
    0x0005abaa cmp r3, r2                                            |     
    0x0005abac ittt lo                                               |     
                                                                     |     if (r3 >= r2) {
    0x0005abae ldrlo r1, [fp, 4]                                     |         r1 = *(arg_9ch);
                                                                     |     }
                                                                     |     if (r3 >= r2) {
    0x0005abb2 addlo r3, r3, r3, lsl 2                               |         r3 += (r3 << 2);
                                                                     |     }
                                                                     |     if (r3 < r2) {
    0x0005abb6 add.w r1, r1, r3, lsl 2                               |         r1 += (r3 << 2);
                                                                     |     }
    0x0005abba ldr.w r3, [fp, 0x18]                                  |     r3 = *(arg_18h);
    0x0005abbe it lo                                                 |     
                                                                     |     if (r3 >= r2) {
    0x0005abc0 strlo r2, [r1, 8]                                     |         *((r1 + 8)) = r2;
                                                                     |     }
    0x0005abc2 subs r2, 1                                            |     r2--;
    0x0005abc4 str r2, [r3, 0x58]                                    |     *((r3 + 0x58)) = r2;
    0x0005abc6 b 0x5a842                                             |     goto label_20;
                                                                     | label_74:
    0x0005abc8 cmp r4, 5                                             |     
                                                                     |     if (r4 == 5) {
    0x0005abca beq.w 0x5ad16                                         |         goto label_77;
                                                                     |     }
    0x0005abce movs r4, 2                                            |     r4 = 2;
    0x0005abd0 b 0x5ab28                                             |     goto label_21;
                                                                     | label_65:
    0x0005abd2 movs r7, 2                                            |     r7 = 2;
    0x0005abd4 str r3, [sp, 0x38]                                    |     var_38h = r3;
    0x0005abd6 b 0x5a714                                             |     goto label_11;
                                                                     | label_61:
    0x0005abd8 movs r3, 0                                            |     r3 = 0;
    0x0005abda movs r2, 0x6d                                         |     r2 = 0x6d;
    0x0005abdc ldr r1, [sp, 0x2c]                                    |     r1 = var_2ch;
    0x0005abde mov r0, sb                                            |     r0 = sb;
    0x0005abe0 str r3, [sp]                                          |     *(sp) = r3;
    0x0005abe2 bl 0x126c4                                            |     r0 = fcn_000126c4 (r0, r1, r2, r3, r4);
    0x0005abe6 mov r2, r0                                            |     r2 = r0;
    0x0005abe8 b 0x5a79c                                             |     goto label_22;
                                                                     | label_75:
    0x0005abea subs r3, 1                                            |     r3--;
    0x0005abec str r3, [r2, 0x58]                                    |     *((r2 + 0x58)) = r3;
    0x0005abee movs r3, 0                                            |     r3 = 0;
    0x0005abf0 str r3, [sp, 0x4c]                                    |     var_4ch = r3;
                                                                     | label_76:
    0x0005abf2 ldr.w r5, [sl, 8]                                     |     r5 = *((sl + 8));
    0x0005abf6 cmp r5, 0                                             |     
                                                                     |     if (r5 == 0) {
    0x0005abf8 beq.w 0x5a842                                         |         goto label_20;
                                                                     |     }
    0x0005abfc movs r3, 0                                            |     r3 = 0;
    0x0005abfe str r3, [sp, 0x5c]                                    |     var_5ch = r3;
    0x0005ac00 str r3, [sp, 0x50]                                    |     var_50h = r3;
    0x0005ac02 b 0x5a5b6                                             |     goto label_19;
                                                                     | label_68:
    0x0005ac04 str r3, [sp]                                          |     *(sp) = r3;
    0x0005ac06 movs r1, 0x4f                                         |     r1 = 0x4f;
    0x0005ac08 mov r3, r6                                            |     r3 = r6;
    0x0005ac0a ldr r2, [sp, 0x9c]                                    |     r2 = *(arg_9ch);
    0x0005ac0c mov r0, fp                                            |     r0 = fp;
    0x0005ac0e bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005ac12 ldr.w r3, [fp, 4]                                     |     r3 = *(arg_9ch);
    0x0005ac16 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0005ac18 beq.w 0x5aa6a                                         |         goto label_23;
                                                                     |     }
                                                                     | label_32:
    0x0005ac1c ldr.w r2, [fp, 0x20]                                  |     r2 = *(arg_20h);
    0x0005ac20 add.w r2, r2, r2, lsl 2                               |     r2 += (r2 << 2);
    0x0005ac24 add.w r3, r3, r2, lsl 2                               |     r3 += (r2 << 2);
    0x0005ac28 movs r2, 0x88                                         |     r2 = 0x88;
    0x0005ac2a strb r2, [r3, -0x11]                                  |     *((r3 - 0x11)) = r2;
    0x0005ac2e cmp r5, 0                                             |     
                                                                     |     if (r5 != 0) {
    0x0005ac30 bne.w 0x5aa6e                                         |         goto label_24;
                                                                     |     }
    0x0005ac34 b 0x5ab08                                             |     goto label_25;
                                                                     | label_73:
    0x0005ac36 ldr r3, [sp, 0xac]                                    |     r3 = *(arg_ach);
    0x0005ac38 mov r2, r5                                            |     r2 = r5;
    0x0005ac3a movs r1, 0x10                                         |     r1 = 0x10;
    0x0005ac3c mov r0, fp                                            |     r0 = fp;
    0x0005ac3e str r5, [sp]                                          |     *(sp) = r5;
    0x0005ac40 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005ac44 b 0x5ab32                                             |     goto label_26;
                                                                     | label_71:
    0x0005ac46 ldr.w r3, [sb]                                        |     r3 = *(sb);
    0x0005ac4a ldr r3, [r3, 0x18]                                    |     r3 = *((r3 + 0x18));
    0x0005ac4c lsls r4, r3, 0xc                                      |     r4 = r3 << 0xc;
                                                                     |     if (r4 >= r3) {
    0x0005ac4e bpl 0x5acb8                                           |         goto label_78;
                                                                     |     }
    0x0005ac50 ldr.w r1, [sl]                                        |     r1 = *(sl);
    0x0005ac54 ldr.w r0, [sl, 0x44]                                  |     r0 = *((sl + 0x44));
    0x0005ac58 mov r2, r1                                            |     r2 = r1;
                                                                     |     if (r1 == 0) {
    0x0005ac5a cbz r1, 0x5ac70                                       |         goto label_79;
                                                                     |     }
    0x0005ac5c ldrb r2, [r1]                                         |     r2 = *(r1);
                                                                     |     if (r2 == 0) {
    0x0005ac5e cbz r2, 0x5ac70                                       |         goto label_79;
                                                                     |     }
    0x0005ac60 mov r3, r1                                            |     r3 = r1;
                                                                     |     do {
    0x0005ac62 ldrb r2, [r3, 1]!                                     |         r2 = *((r3 += 1));
    0x0005ac66 cmp r2, 0                                             |         
    0x0005ac68 bne 0x5ac62                                           |         
                                                                     |     } while (r2 != 0);
    0x0005ac6a subs r3, r3, r1                                       |     r3 -= r1;
    0x0005ac6c bic r2, r3, 0xc0000000                                |     r2 = BIT_MASK (r3, 0xc0000000);
                                                                     | label_79:
    0x0005ac70 adds r0, 0x38                                         |     r0 += 0x38;
    0x0005ac72 bl 0x13f5c                                            |     r0 = fcn_00013f5c (r0, r1, r2);
    0x0005ac76 mov r2, r0                                            |     r2 = r0;
                                                                     |     if (r0 == 0) {
    0x0005ac78 cbz r0, 0x5acae                                       |         goto label_80;
                                                                     |     }
    0x0005ac7a movs r2, 0                                            |     r2 = 0;
    0x0005ac7c b 0x5aac8                                             |     goto label_27;
                                                                     | label_35:
    0x0005ac7e bl 0x192c8                                            |     r0 = fcn_000192c8 (r0);
    0x0005ac82 mov fp, r0                                            |     
    0x0005ac84 b.w 0x5a384                                           |     goto label_28;
                                                                     | label_67:
    0x0005ac88 cmp r4, 0xa                                           |     
                                                                     |     if (r4 != 0xa) {
    0x0005ac8a bne.w 0x5aa50                                         |         goto label_29;
                                                                     |     }
    0x0005ac8e ldr r3, [sp, 0xa0]                                    |     r3 = *(arg_a0h);
                                                                     |     if (r3 != 0) {
    0x0005ac90 cbnz r3, 0x5ace6                                      |         goto label_81;
                                                                     |     }
    0x0005ac92 ldr r3, [sp, 0x9c]                                    |     r3 = *(arg_9ch);
    0x0005ac94 movs r1, 0x44                                         |     r1 = 0x44;
    0x0005ac96 ldr r2, [sp, 0x54]                                    |     r2 = var_54h;
    0x0005ac98 mov r0, fp                                            |     r0 = fp;
    0x0005ac9a movs r4, 2                                            |     r4 = 2;
    0x0005ac9c str r3, [sp]                                          |     *(sp) = r3;
    0x0005ac9e mov r3, r6                                            |     r3 = r6;
    0x0005aca0 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005aca4 b 0x5ab28                                             |     goto label_21;
                                                                     | label_70:
    0x0005aca6 str r3, [sp, 0x50]                                    |     var_50h = r3;
    0x0005aca8 b 0x5aa98                                             |     goto label_30;
                                                                     | label_46:
    0x0005acaa str r5, [sp, 0x4c]                                    |     var_4ch = r5;
    0x0005acac b 0x5a842                                             |     goto label_20;
                                                                     | label_80:
    0x0005acae ldr.w r3, [sl, 0x10]                                  |     r3 = *((sl + 0x10));
    0x0005acb2 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0005acb4 bne.w 0x5aac8                                         |         goto label_27;
                                                                     |     }
                                                                     | label_78:
    0x0005acb8 ldr.w r1, [sl, 8]                                     |     r1 = *((sl + 8));
    0x0005acbc cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x0005acbe beq.w 0x5aaf4                                         |         goto label_31;
                                                                     |     }
    0x0005acc2 ldr.w r3, [sb, 0x198]                                 |     r3 = *((sb + 0x198));
    0x0005acc6 movs r2, 1                                            |     r2 = 1;
    0x0005acc8 mov r0, sb                                            |     r0 = sb;
    0x0005acca cmp r3, 0                                             |     
    0x0005accc it eq                                                 |     
                                                                     |     if (r3 != 0) {
    0x0005acce moveq r3, sb                                          |         r3 = sb;
                                                                     |     }
    0x0005acd0 strb r2, [r3, 0x14]                                   |     *((r3 + 0x14)) = r2;
    0x0005acd2 ldr r3, [sp, 0x98]                                    |     r3 = *(arg_98h);
    0x0005acd4 str r3, [sp]                                          |     *(sp) = r3;
    0x0005acd6 movs r3, 0                                            |     r3 = 0;
    0x0005acd8 str r3, [sp, 4]                                       |     var_4h = r3;
    0x0005acda ldr r3, [sp, 0x54]                                    |     r3 = var_54h;
    0x0005acdc ldrb.w r2, [sl, 0x2c]                                 |     r2 = *((sl + 0x2c));
    0x0005ace0 bl 0x3da14                                            |     fcn_0003da14 (r0, r1, r2, r3);
    0x0005ace4 b 0x5aaf4                                             |     goto label_31;
                                                                     | label_81:
    0x0005ace6 ldr r3, [sp, 0xa0]                                    |     r3 = *(arg_a0h);
    0x0005ace8 movs r1, 0x4f                                         |     r1 = 0x4f;
    0x0005acea ldr r2, [sp, 0x9c]                                    |     r2 = *(arg_9ch);
    0x0005acec movs r4, 2                                            |     r4 = 2;
    0x0005acee movs r5, 0                                            |     r5 = 0;
    0x0005acf0 str r3, [sp]                                          |     *(sp) = r3;
    0x0005acf2 mov r3, r0                                            |     r3 = r0;
    0x0005acf4 mov r0, fp                                            |     r0 = fp;
    0x0005acf6 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005acfa ldr.w r3, [fp, 4]                                     |     r3 = *(arg_9ch);
    0x0005acfe cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0005ad00 bne 0x5ac1c                                           |         goto label_32;
                                                                     |     }
    0x0005ad02 ldr r3, [sp, 0x9c]                                    |     r3 = *(arg_9ch);
    0x0005ad04 movs r1, 0x44                                         |     r1 = 0x44;
    0x0005ad06 ldr r2, [sp, 0x54]                                    |     r2 = var_54h;
    0x0005ad08 mov r0, fp                                            |     r0 = fp;
    0x0005ad0a movs r4, 2                                            |     r4 = 2;
    0x0005ad0c str r3, [sp]                                          |     *(sp) = r3;
    0x0005ad0e mov r3, r6                                            |     r3 = r6;
    0x0005ad10 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005ad14 b 0x5ab20                                             |     goto label_33;
                                                                     | label_77:
    0x0005ad16 str r5, [sp, 0x50]                                    |     var_50h = r5;
    0x0005ad18 b 0x5aaa8                                             |     goto label_34;
                                                                     | label_38:
    0x0005ad1a movs r3, 0                                            |     r3 = 0;
    0x0005ad1c ldrh r3, [r3, 0x32]                                   |     r3 = *((r3 + 0x32));
    0x0005ad1e udf 0xff                                              |     __asm ("udf 0xff");
                                                                     | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x5ad24 */
                                                                     | #include <stdint.h>
                                                                     |  
                                                                     | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                     |  
    ; (fcn) fcn.0005ad24 ()                                          | void fcn_0005ad24 (int16_t arg_8h, int16_t arg_11h, int16_t arg_12h, int16_t arg_44h, int16_t arg_48h, int16_t arg_198h, int16_t arg_19ch, int16_t arg_1ech, int16_t arg_120h, 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_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;
                                                                     |     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_ach;
                                                                     |     int16_t var_b0h;
                                                                     |     int16_t var_b4h;
                                                                     |     int16_t var_b8h;
                                                                     |     int16_t var_bch;
                                                                     |     int32_t var_c0h;
                                                                     |     int32_t var_c0h_2;
                                                                     |     int16_t var_cch;
                                                                     |     int16_t var_d0h;
                                                                     |     int32_t var_d4h;
                                                                     |     int32_t var_d4h_2;
                                                                     |     int32_t var_dch;
                                                                     |     int32_t var_dch_2;
                                                                     |     int32_t var_e4h;
                                                                     |     int32_t var_e4h_2;
                                                                     |     int16_t var_ech;
                                                                     |     int16_t var_f0h;
                                                                     |     int16_t var_f4h;
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
                                                                     |     r2 = arg3;
                                                                     |     r3 = arg4;
    0x0005ad24 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0005ad28 mov r6, r2                                            |     r6 = r2;
    0x0005ad2a sub sp, 0xfc                                          |     
    0x0005ad2c ldr.w r2, [pc, 0xac0]                                 |     r2 = *(0x0005b7f0);
    0x0005ad30 str r3, [sp, 0x2c]                                    |     var_2ch = r3;
    0x0005ad32 ldr.w r3, [pc, 0xac0]                                 |     
    0x0005ad36 add r2, pc                                            |     r2 += pc;
    0x0005ad38 ldr r7, [r0, 0x40]                                    |     r7 = *(arg_120hx40);
    0x0005ad3a ldr.w sl, [r0]                                        |     sl = *(r0);
    0x0005ad3e ldr r3, [r2, r3]                                      |     r3 = *((r2 + r3));
    0x0005ad40 ldr r3, [r3]                                          |     r3 = *(0x5b7f6);
    0x0005ad42 str r3, [sp, 0xf4]                                    |     var_f4h = r3;
    0x0005ad44 mov.w r3, 0                                           |     r3 = 0;
    0x0005ad48 movs r3, 0                                            |     r3 = 0;
    0x0005ad4a strd r3, r3, [sp, 0xb0]                               |     __asm ("strd r3, r3, [var_b4h]");
    0x0005ad4e str r1, [sp, 0x28]                                    |     var_28h = r1;
    0x0005ad50 cmp r7, 0                                             |     
                                                                     |     if (r7 != 0) {
    0x0005ad52 bne 0x5ae06                                           |         goto label_44;
                                                                     |     }
    0x0005ad54 ldrb.w r3, [sl, 0x40]                                 |     r3 = *((sl + 0x40));
    0x0005ad58 str r3, [sp, 0x30]                                    |     var_30h = r3;
                                                                     |     if (r3 != 0) {
    0x0005ad5a cbz r3, 0x5ad9e                                       |         
    0x0005ad5c str r7, [sp, 0x24]                                    |         var_24h = r7;
                                                                     | label_0:
    0x0005ad5e ldr r1, [sp, 0x24]                                    |         r1 = var_24h;
    0x0005ad60 mov r0, sl                                            |         r0 = sl;
    0x0005ad62 bl 0xe12c                                             |         fcn_0000e12c (r0, r1);
    0x0005ad66 ldr r1, [sp, 0x28]                                    |         r1 = var_28h;
    0x0005ad68 mov r0, sl                                            |         r0 = sl;
    0x0005ad6a bl 0x12c54                                            |         fcn_00012c54 (r0, r1);
    0x0005ad6e mov r1, r6                                            |         r1 = r6;
    0x0005ad70 mov r0, sl                                            |         r0 = sl;
    0x0005ad72 bl 0x12ec8                                            |         fcn_00012ec8 (r0);
    0x0005ad76 ldr r1, [sp, 0x2c]                                    |         r1 = var_2ch;
    0x0005ad78 mov r0, sl                                            |         r0 = sl;
    0x0005ad7a bl 0x12e68                                            |         fcn_00012e68 (r0);
    0x0005ad7e ldr.w r2, [pc, 0xa78]                                 |         r2 = *(0x0005b7f8);
    0x0005ad82 ldr.w r3, [pc, 0xa70]                                 |         r3 = *(0x5b7f6);
    0x0005ad86 add r2, pc                                            |         r2 += pc;
    0x0005ad88 ldr r3, [r2, r3]                                      |         r3 = *((r2 + r3));
    0x0005ad8a ldr r2, [r3]                                          |         r2 = *(0x5b7f6);
    0x0005ad8c ldr r3, [sp, 0xf4]                                    |         r3 = var_f4h;
    0x0005ad8e eors r2, r3                                           |         r2 ^= r3;
    0x0005ad90 mov.w r3, 0                                           |         r3 = 0;
                                                                     |         if (r2 != r3) {
    0x0005ad94 bne.w 0x5bc94                                         |             goto label_45;
                                                                     |         }
    0x0005ad98 add sp, 0xfc                                          |         
    0x0005ad9a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |         
                                                                     |     }
    0x0005ad9e mov fp, r0                                            |     
    0x0005ada0 bl 0x575d4                                            |     r0 = fcn_000575d4 (r0, r1);
    0x0005ada4 mov r5, r0                                            |     r5 = r0;
    0x0005ada6 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0005ada8 beq 0x5ae7e                                           |         goto label_46;
                                                                     |     }
    0x0005adaa ldr r1, [r0, 0x44]                                    |     r1 = *((r0 + 0x44));
    0x0005adac ldr.w r3, [fp]                                        |     r3 = *(fp);
    0x0005adb0 cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x0005adb2 beq.w 0x5b9dc                                         |         goto label_47;
                                                                     |     }
    0x0005adb6 ldr r0, [r3, 0x14]                                    |     r0 = *((r3 + 0x14));
    0x0005adb8 cmp r0, 0                                             |     
                                                                     |     if (r0 <= 0) {
    0x0005adba ble 0x5adce                                           |         goto label_23;
                                                                     |     }
    0x0005adbc ldr r3, [r3, 0x10]                                    |     r3 = *((r3 + 0x10));
    0x0005adbe b 0x5adc8                                             |     
                                                                     |     while (r1 != r2) {
    0x0005adc0 adds r7, 1                                            |         r7++;
    0x0005adc2 adds r3, 0x10                                         |         r3 += 0x10;
    0x0005adc4 cmp r7, r0                                            |         
                                                                     |         if (r7 == r0) {
    0x0005adc6 beq 0x5adce                                           |             goto label_23;
                                                                     |         }
    0x0005adc8 ldr r2, [r3, 0xc]                                     |         r2 = *((r3 + 0xc));
    0x0005adca cmp r1, r2                                            |         
    0x0005adcc bne 0x5adc0                                           |         
                                                                     |     }
                                                                     | label_23:
    0x0005adce add r3, sp, 0xac                                      |     r3 += var_ach;
    0x0005add0 movs r2, 0x6e                                         |     r2 = 0x6e;
    0x0005add2 mov r1, r5                                            |     r1 = r5;
    0x0005add4 str r3, [sp]                                          |     *(sp) = r3;
    0x0005add6 mov r0, fp                                            |     r0 = fp;
    0x0005add8 mov r3, r6                                            |     r3 = r6;
    0x0005adda bl 0x126c4                                            |     fcn_000126c4 (r0, r1, r2, r3, r4);
    0x0005adde ldr r3, [r5, 0xc]                                     |     r3 = *((r5 + 0xc));
    0x0005ade0 mov r1, r5                                            |     r1 = r5;
    0x0005ade2 str r0, [sp, 0x54]                                    |     var_54h = r0;
    0x0005ade4 mov r0, fp                                            |     r0 = fp;
    0x0005ade6 str r3, [sp, 0x50]                                    |     var_50h = r3;
    0x0005ade8 bl 0x24200                                            |     r0 = fcn_00024200 (r0, r1);
    0x0005adec mov r4, r0                                            |     r4 = r0;
                                                                     |     if (r0 == 0) {
    0x0005adee cbz r0, 0x5ae0a                                       |         goto label_48;
                                                                     |     }
    0x0005adf0 ldr r2, [sp, 0xb4]                                    |     r2 = var_b4h;
    0x0005adf2 movs r3, 0                                            |     r3 = 0;
    0x0005adf4 str r3, [sp, 0x24]                                    |     var_24h = r3;
                                                                     | label_2:
    0x0005adf6 cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0005adf8 beq 0x5ad5e                                           |         goto label_0;
                                                                     |     }
    0x0005adfa ldr r3, [sp, 0xb0]                                    |     r3 = var_b0h;
    0x0005adfc str.w r3, [r2, 0x1ec]                                 |     __asm ("str.w r3, aav.0x000000ff");
    0x0005ae00 movs r3, 0                                            |     r3 = 0;
    0x0005ae02 str r3, [sp, 0xb4]                                    |     var_b4h = r3;
    0x0005ae04 b 0x5ad5e                                             |     goto label_0;
                                                                     | label_44:
    0x0005ae06 str r3, [sp, 0x24]                                    |     var_24h = r3;
    0x0005ae08 b 0x5ad5e                                             |     goto label_0;
                                                                     | label_48:
    0x0005ae0a ldr r2, [sp, 0xac]                                    |     r2 = var_ach;
    0x0005ae0c mov r1, r5                                            |     r1 = r5;
    0x0005ae0e mov r0, fp                                            |     r0 = fp;
    0x0005ae10 bl 0x1e018                                            |     fcn_0001e018 (r0, r1);
    0x0005ae14 str r0, [sp, 0x64]                                    |     var_64h = r0;
    0x0005ae16 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0005ae18 bne.w 0x5b32c                                         |         goto label_49;
                                                                     |     }
    0x0005ae1c ldr.w r2, [fp, 0x44]                                  |     r2 = *(arg_44h);
    0x0005ae20 ldr r3, [r5, 8]                                       |     r3 = *((r5 + 8));
    0x0005ae22 adds r1, r2, 1                                        |     r1 = r2 + 1;
    0x0005ae24 str r2, [sp, 0x60]                                    |     var_60h = r2;
    0x0005ae26 str.w r1, [fp, 0x44]                                  |     __asm ("str.w r1, [arg_44h]");
    0x0005ae2a str r1, [sp, 0x5c]                                    |     var_5ch = r1;
    0x0005ae2c ldr r1, [sp, 0x28]                                    |     r1 = var_28h;
    0x0005ae2e str r2, [r1, 0x30]                                    |     *((r1 + 0x30)) = r2;
    0x0005ae30 ldrb.w r2, [r5, 0x2c]                                 |     r2 = *((r5 + 0x2c));
    0x0005ae34 lsls r2, r2, 0x1a                                     |     r2 <<= 0x1a;
                                                                     |     if (r2 < r2) {
    0x0005ae36 bmi 0x5ae84                                           |         goto label_50;
                                                                     |     }
    0x0005ae38 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0005ae3a beq.w 0x5b338                                         |         goto label_51;
                                                                     |     }
    0x0005ae3e ldr r2, [sp, 0x64]                                    |     r2 = var_64h;
    0x0005ae40 mov r0, r2                                            |     r0 = r2;
    0x0005ae42 str r2, [sp, 0x34]                                    |     var_34h = r2;
                                                                     | label_3:
    0x0005ae44 ldrd r1, r4, [sp, 0x5c]                               |     __asm ("ldrd r1, r4, [var_5ch]");
    0x0005ae48 ldr.w sb, [sp, 0x28]                                  |     sb = var_28h;
    0x0005ae4c mov ip, r4                                            |     
    0x0005ae4e mov lr, r4                                            |     lr = r4;
    0x0005ae50 b 0x5ae60                                             |     
                                                                     |     while (r4 == 0) {
                                                                     | label_1:
    0x0005ae52 ldr r3, [r3, 0x14]                                    |         r3 = *((r3 + 0x14));
    0x0005ae54 adds r1, 1                                            |         r1++;
    0x0005ae56 sub.w r2, r1, ip                                      |         r2 = r1 - ip;
    0x0005ae5a subs r4, r2, 1                                        |         r4 = r2 - 1;
    0x0005ae5c mov r8, r4                                            |         r8 = r4;
                                                                     |         if (r3 == 0) {
    0x0005ae5e cbz r3, 0x5aea4                                       |             goto label_52;
                                                                     |         }
    0x0005ae60 ldrb.w r2, [r3, 0x37]                                 |         r2 = *((r3 + 0x37));
    0x0005ae64 and r2, r2, 3                                         |         r2 &= 3;
    0x0005ae68 cmp r2, 2                                             |         
    0x0005ae6a ite ne                                                |         
                                                                     |         if (r2 == 2) {
    0x0005ae6c movne r4, 0                                           |             r4 = 0;
                                                                     |         }
                                                                     |         if (r2 != 2) {
    0x0005ae6e andeq r4, r0, 1                                       |             r4 = r0 & 1;
                                                                     |         }
    0x0005ae72 cmp r4, 0                                             |         
    0x0005ae74 beq 0x5ae52                                           |         
                                                                     |     }
    0x0005ae76 mov lr, r1                                            |     lr = r1;
    0x0005ae78 str.w r1, [sb, 0x30]                                  |     __asm ("str.w r1, [sb, 0x30]");
    0x0005ae7c b 0x5ae52                                             |     goto label_1;
                                                                     | label_46:
    0x0005ae7e ldr r2, [sp, 0xb4]                                    |     r2 = var_b4h;
    0x0005ae80 str r0, [sp, 0x24]                                    |     var_24h = r0;
    0x0005ae82 b 0x5adf6                                             |     goto label_2;
                                                                     | label_50:
    0x0005ae84 mov r1, r3                                            |     r1 = r3;
                                                                     |     if (r3 != 0) {
    0x0005ae86 cbnz r3, 0x5ae92                                      |         goto label_53;
                                                                     |     }
    0x0005ae88 b 0x5b338                                             |     goto label_51;
                                                                     |     do {
    0x0005ae8a ldr r1, [r1, 0x14]                                    |         r1 = *((r1 + 0x14));
    0x0005ae8c cmp r1, 0                                             |         
                                                                     |         if (r1 == 0) {
    0x0005ae8e beq.w 0x5b332                                         |             goto label_54;
                                                                     |         }
                                                                     | label_53:
    0x0005ae92 ldrb.w r2, [r1, 0x37]                                 |         r2 = *((r1 + 0x37));
    0x0005ae96 and r2, r2, 3                                         |         r2 &= 3;
    0x0005ae9a cmp r2, 2                                             |         
    0x0005ae9c bne 0x5ae8a                                           |         
                                                                     |     } while (r2 != 2);
    0x0005ae9e movs r0, 1                                            |     r0 = 1;
    0x0005aea0 str r1, [sp, 0x34]                                    |     var_34h = r1;
    0x0005aea2 b 0x5ae44                                             |     goto label_3;
                                                                     | label_52:
    0x0005aea4 adds r2, 1                                            |     r2++;
    0x0005aea6 str.w lr, [sp, 0x58]                                  |     __asm ("str.w lr, [var_58h]");
    0x0005aeaa str.w r1, [fp, 0x44]                                  |     __asm ("str.w r1, [arg_44h]");
                                                                     | label_10:
    0x0005aeae ldrsh.w r1, [r5, 0x26]                                |     r1 = *((r5 + 0x26));
    0x0005aeb2 mov r0, sl                                            |     r0 = sl;
    0x0005aeb4 add r1, r8                                            |     r1 += r8;
    0x0005aeb6 add.w r1, r2, r1, lsl 2                               |     r1 = r2 + (r1 << 2);
    0x0005aeba bl 0xd3a0                                             |     fcn_0000d3a0 (r0, r1);
    0x0005aebe str r0, [sp, 0x24]                                    |     var_24h = r0;
    0x0005aec0 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0005aec2 beq.w 0x5b328                                         |         goto label_16;
                                                                     |     }
    0x0005aec6 ldr r1, [sp, 0x24]                                    |     r1 = var_24h;
    0x0005aec8 add.w r2, r8, 1                                       |     r2 = r8 + 1;
    0x0005aecc ldrsh.w r3, [r5, 0x26]                                |     r3 = *((r5 + 0x26));
    0x0005aed0 str r2, [sp, 0x70]                                    |     var_70h = r2;
    0x0005aed2 add.w r3, r1, r3, lsl 2                               |     r3 = r1 + (r3 << 2);
    0x0005aed6 movs r1, 1                                            |     r1 = 1;
    0x0005aed8 str r3, [sp, 0x68]                                    |     var_68h = r3;
    0x0005aeda add.w r3, r3, r4, lsl 2                               |     r3 += (r4 << 2);
    0x0005aede mov r8, r3                                            |     r8 = r3;
    0x0005aee0 mov r0, r3                                            |     r0 = r3;
    0x0005aee2 str r3, [sp, 0x6c]                                    |     var_6ch = r3;
    0x0005aee4 add r4, r8                                            |     r4 += r8;
    0x0005aee6 blx 0x5fcc                                            |     fcn_00005fcc ();
    0x0005aeea movs r3, 0                                            |     r3 = 0;
    0x0005aeec strb r3, [r4, 1]                                      |     *((r4 + 1)) = r3;
    0x0005aeee ldrsh.w r2, [r5, 0x26]                                |     r2 = *((r5 + 0x26));
    0x0005aef2 cmp r2, r3                                            |     
                                                                     |     if (r2 > r3) {
    0x0005aef4 ble 0x5af00                                           |         
    0x0005aef6 ldr r0, [sp, 0x24]                                    |         r0 = var_24h;
    0x0005aef8 lsls r2, r2, 2                                        |         r2 <<= 2;
    0x0005aefa movs r1, 0xff                                         |         r1 = 0xff;
    0x0005aefc blx 0x5fcc                                            |         fcn_00005fcc ();
                                                                     |     }
    0x0005af00 ldr r3, [sp, 0x28]                                    |     r3 = var_28h;
    0x0005af02 ldr r2, [r6]                                          |     r2 = *(r6);
    0x0005af04 str.w fp, [sp, 0xcc]                                  |     __asm ("str.w fp, [var_cch]");
    0x0005af08 str r3, [sp, 0xd0]                                    |     var_d0h = r3;
    0x0005af0a movs r3, 0                                            |     r3 = 0;
    0x0005af0c cmp r2, r3                                            |     
    0x0005af0e strd r3, r3, [sp, 0xd4]                               |     __asm ("strd r3, r3, [var_d4h]");
    0x0005af12 strd r3, r3, [sp, 0xdc]                               |     __asm ("strd r3, r3, [var_dch]");
    0x0005af16 strd r3, r3, [sp, 0xe4]                               |     __asm ("strd r3, r3, [var_e4h]");
    0x0005af1a itt le                                                |     
                                                                     |     if (r2 <= r3) {
    0x0005af1c strdle r3, r3, [sp, 0x7c]                             |         __asm ("strdle r3, r3, [sp, 0x7c]");
                                                                     |     }
                                                                     |     if (r2 <= r3) {
    0x0005af20 strd r3, r3, [sp, 0x44]                               |         __asm ("strd r3, r3, [var_44h]");
                                                                     |     }
                                                                     |     if (r2 <= r3) {
    0x0005af24 ble 0x5b016                                           |         goto label_55;
                                                                     |     }
    0x0005af26 ldr.w r1, [pc, 0x8d4]                                 |     
    0x0005af2a add r2, sp, 0xcc                                      |     r2 += var_cch;
    0x0005af2c str r7, [sp, 0x74]                                    |     var_74h = r7;
    0x0005af2e str r3, [sp, 0x44]                                    |     var_44h = r3;
    0x0005af30 add r1, pc                                            |     r1 = 0xb6732;
    0x0005af32 str r3, [sp, 0x48]                                    |     var_48h = r3;
    0x0005af34 str r1, [sp, 0x4c]                                    |     var_4ch = r1;
    0x0005af36 lsls r1, r7, 4                                        |     r1 = r7 << 4;
    0x0005af38 mov r7, r3                                            |     r7 = r3;
    0x0005af3a str r2, [sp, 0x40]                                    |     var_40h = r2;
    0x0005af3c str r1, [sp, 0x3c]                                    |     var_3ch = r1;
    0x0005af3e str.w fp, [sp, 0x38]                                  |     __asm ("str.w fp, [var_38h]");
                                                                     | label_4:
    0x0005af42 ldr r3, [r6, 4]                                       |     r3 = *((r6 + 4));
    0x0005af44 add.w sb, r7, r7, lsl 2                               |     sb = r7 + (r7 << 2);
    0x0005af48 lsl.w r8, sb, 2                                       |     r8 = sb << 2;
    0x0005af4c ldr.w r1, [r3, sb, lsl 2]                             |     offset_0 = sb << 2;
                                                                     |     r1 = *((r3 + offset_0));
    0x0005af50 add r3, r8                                            |     r3 += r8;
    0x0005af52 mov r2, r3                                            |     r2 = r3;
                                                                     |     if (r1 != 0) {
    0x0005af54 cbz r1, 0x5af68                                       |         
    0x0005af56 ldr r0, [sp, 0x40]                                    |         r0 = var_40h;
    0x0005af58 bl 0x1f318                                            |         r0 = fcn_0001f318 (r0, r1);
    0x0005af5c cmp r0, 0                                             |         
                                                                     |         if (r0 != 0) {
    0x0005af5e bne.w 0x5b328                                         |             goto label_16;
                                                                     |         }
    0x0005af62 ldr r3, [r6, 4]                                       |         r3 = *((r6 + 4));
    0x0005af64 add r3, r8                                            |         r3 += r8;
    0x0005af66 mov r2, r3                                            |         r2 = r3;
                                                                     |     }
    0x0005af68 ldrsh.w r1, [r5, 0x26]                                |     r1 = *((r5 + 0x26));
    0x0005af6c cmp r1, 0                                             |     
    0x0005af6e itt gt                                                |     
                                                                     |     if (r1 <= 0) {
    0x0005af70 movgt r4, 0                                           |         r4 = 0;
                                                                     |     }
                                                                     |     if (r1 <= 0) {
    0x0005af72 movgt fp, r4                                          |         
                                                                     |     }
                                                                     |     if (r1 > 0) {
    0x0005af74 bgt 0x5af8c                                           |         goto label_56;
                                                                     |     }
    0x0005af76 b 0x5b2e6                                             |     goto label_42;
                                                                     |     do {
    0x0005af78 ldrsh.w r2, [r5, 0x26]                                |         r2 = *((r5 + 0x26));
    0x0005af7c adds r4, 1                                            |         r4++;
    0x0005af7e ldr r3, [r6, 4]                                       |         r3 = *((r6 + 4));
    0x0005af80 add.w fp, fp, 0x18                                    |         
    0x0005af84 cmp r2, r4                                            |         
                                                                     |         if (r2 <= r4) {
    0x0005af86 ble.w 0x5b2e2                                         |             goto label_57;
                                                                     |         }
    0x0005af8a add r3, r8                                            |         r3 += r8;
                                                                     | label_56:
    0x0005af8c ldr r1, [r3, 4]                                       |         r1 = *((r3 + 4));
    0x0005af8e ldr r3, [r5, 4]                                       |         r3 = *((r5 + 4));
    0x0005af90 ldr.w r0, [r3, fp]                                    |         r0 = *((r3 + fp));
    0x0005af94 blx 0x6164                                            |         r0 = fcn_00006164 ();
    0x0005af98 cmp r0, 0                                             |         
    0x0005af9a bne 0x5af78                                           |         
                                                                     |     } while (r0 != 0);
    0x0005af9c ldrsh.w r3, [r5, 0x24]                                |     r3 = *((r5 + 0x24));
    0x0005afa0 cmp r3, r4                                            |     
                                                                     |     if (r3 == r4) {
    0x0005afa2 beq.w 0x5b30c                                         |         goto label_58;
                                                                     |     }
    0x0005afa6 ldr r3, [sp, 0x34]                                    |     r3 = var_34h;
                                                                     |     if (r3 != 0) {
    0x0005afa8 cbz r3, 0x5afbc                                       |         
    0x0005afaa ldr r3, [r5, 4]                                       |         r3 = *((r5 + 4));
    0x0005afac ldr r2, [sp, 0x30]                                    |         r2 = var_30h;
    0x0005afae add r3, fp                                            |         r3 += fp;
    0x0005afb0 ldrb r3, [r3, 0x17]                                   |         r3 = *((r3 + 0x17));
    0x0005afb2 ands r3, r3, 1                                        |         r3 &= 1;
    0x0005afb6 it ne                                                 |         
                                                                     |         if (r3 == r3) {
    0x0005afb8 movne r2, r3                                          |             r2 = r3;
                                                                     |         }
    0x0005afba str r2, [sp, 0x30]                                    |         var_30h = r2;
                                                                     |     }
                                                                     | label_8:
    0x0005afbc ldr r3, [sp, 0x24]                                    |     r3 = var_24h;
    0x0005afbe str.w r7, [r3, r4, lsl 2]                             |     __asm ("str.w r7, [r3, r4, lsl 2]");
    0x0005afc2 ldrsh.w r3, [r5, 0x26]                                |     r3 = *((r5 + 0x26));
    0x0005afc6 cmp r3, r4                                            |     
                                                                     |     if (r3 <= r4) {
    0x0005afc8 ble.w 0x5be5c                                         |         goto label_59;
                                                                     |     }
    0x0005afcc ldr r3, [r5, 4]                                       |     r3 = *((r5 + 4));
    0x0005afce ldr r2, [r5]                                          |     r2 = *(r5);
    0x0005afd0 ldr.w r3, [r3, fp]                                    |     r3 = *((r3 + fp));
                                                                     | label_7:
    0x0005afd4 ldr.w r1, [sl, 0x10]                                  |     r1 = *((sl + 0x10));
    0x0005afd8 ldr r0, [sp, 0x3c]                                    |     r0 = var_3ch;
    0x0005afda ldr r1, [r1, r0]                                      |     r1 = *((r1 + r0));
    0x0005afdc ldr r0, [sp, 0x38]                                    |     r0 = var_38h;
    0x0005afde str r1, [sp]                                          |     *(sp) = r1;
    0x0005afe0 movs r1, 0x17                                         |     r1 = 0x17;
    0x0005afe2 bl 0x1cab0                                            |     r0 = fcn_0001cab0 (r0);
    0x0005afe6 cmp r0, 1                                             |     
                                                                     |     if (r0 == 1) {
    0x0005afe8 beq.w 0x5b328                                         |         goto label_16;
                                                                     |     }
    0x0005afec cmp r0, 2                                             |     
    0x0005afee add.w r7, r7, 1                                       |     r7++;
    0x0005aff2 ittt eq                                               |     
                                                                     |     if (r0 != 2) {
    0x0005aff4 ldreq r2, [sp, 0x24]                                  |         r2 = var_24h;
                                                                     |     }
                                                                     |     if (r0 != 2) {
    0x0005aff6 moveq r3, -1                                          |         r3 = -1;
                                                                     |     }
                                                                     |     if (r0 == 2) {
    0x0005affa str.w r3, [r2, r4, lsl 2]                             |         __asm ("str.w r3, [r2, r4, lsl 2]");
                                                                     |     }
    0x0005affe ldr r3, [r6]                                          |     r3 = *(r6);
    0x0005b000 cmp r3, r7                                            |     
                                                                     |     if (r3 > r7) {
    0x0005b002 bgt 0x5af42                                           |         goto label_4;
                                                                     |     }
    0x0005b004 ldr r3, [sp, 0x44]                                    |     r3 = var_44h;
    0x0005b006 ldr r2, [sp, 0x30]                                    |     r2 = var_30h;
    0x0005b008 ldr r7, [sp, 0x74]                                    |     r7 = var_74h;
    0x0005b00a ldr.w fp, [sp, 0x38]                                  |     fp = var_38h;
    0x0005b00e add r3, r2                                            |     r3 += r2;
    0x0005b010 uxtb r3, r3                                           |     r3 = (int8_t) r3;
    0x0005b012 strd r3, r3, [sp, 0x7c]                               |     __asm ("strd r3, r3, [var_7ch]");
                                                                     | label_55:
    0x0005b016 ldr r3, [sp, 0x28]                                    |     r3 = var_28h;
    0x0005b018 mov r1, r5                                            |     r1 = r5;
    0x0005b01a vmov.i32 d16, 0                                       |     __asm ("vmov.i32 d16, 0");
    0x0005b01e ldr r2, [sp, 0x24]                                    |     r2 = var_24h;
    0x0005b020 ldr.w r0, [fp]                                        |     r0 = *(fp);
    0x0005b024 vstr d16, [r3, 0x40]                                  |     __asm ("vstr d16, [r3, 0x40]");
    0x0005b028 ldr r3, [sp, 0x80]                                    |     r3 = var_80h;
    0x0005b02a bl 0x14130                                            |     fcn_00014130 (r0, r1, r2, r3);
    0x0005b02e ldr r2, [r5, 8]                                       |     r2 = *((r5 + 8));
    0x0005b030 str r0, [sp, 0x38]                                    |     var_38h = r0;
    0x0005b032 cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0005b034 beq 0x5b0a2                                           |         goto label_60;
                                                                     |     }
    0x0005b036 ldr r3, [sp, 0x7c]                                    |     r3 = var_7ch;
    0x0005b038 movs r1, 0                                            |     r1 = 0;
    0x0005b03a ldr r0, [sp, 0x38]                                    |     r0 = var_38h;
    0x0005b03c mov sb, r1                                            |     sb = r1;
    0x0005b03e str r6, [sp, 0x40]                                    |     var_40h = r6;
    0x0005b040 ldr r6, [sp, 0x34]                                    |     r6 = var_34h;
    0x0005b042 cmp r0, r1                                            |     
    0x0005b044 it eq                                                 |     
                                                                     |     if (r0 == r1) {
    0x0005b046 cmpeq r3, r1                                          |         __asm ("cmpeq r3, r1");
                                                                     |     }
    0x0005b048 ldr r3, [sp, 0x68]                                    |     r3 = var_68h;
    0x0005b04a ite ne                                                |     
                                                                     |     if (r0 == r1) {
    0x0005b04c movne lr, 1                                           |         lr = 1;
                                                                     |     }
                                                                     |     if (r0 == r1) {
    0x0005b050 mov.w lr, 0                                           |         lr = 0;
                                                                     |     }
    0x0005b054 mov r4, lr                                            |     r4 = lr;
    0x0005b056 str r5, [sp, 0x3c]                                    |     var_3ch = r5;
    0x0005b058 subs r0, r3, 4                                        |     r0 = r3 - 4;
    0x0005b05a ldr r3, [sp, 0x6c]                                    |     r3 = var_6ch;
    0x0005b05c add.w r8, r3, 1                                       |     r8 = r3 + 1;
                                                                     |     do {
                                                                     |         if (r4 == 0) {
    0x0005b060 cbnz r4, 0x5b080                                      |             
    0x0005b062 sub.w ip, r6, r2                                      |             
    0x0005b066 ldr r3, [r2, 0x24]                                    |             r3 = *((r2 + 0x24));
    0x0005b068 clz ip, ip                                            |             
    0x0005b06c lsr.w ip, ip, 5                                       |             
    0x0005b070 cmp r3, 0                                             |             
    0x0005b072 it ne                                                 |             
                                                                     |             if (r3 == 0) {
    0x0005b074 orrne ip, ip, 1                                       |                 
                                                                     |             }
    0x0005b078 cmp.w ip, 0                                           |             
                                                                     |             if (ip == 0) {
    0x0005b07c beq.w 0x5b346                                         |                 goto label_61;
                                                                     |             }
                                                                     |         }
                                                                     | label_12:
    0x0005b080 ldr.w r3, [fp, 0x48]                                  |         r3 = *(arg_48h);
    0x0005b084 adds r3, 1                                            |         r3++;
    0x0005b086 str.w r3, [fp, 0x48]                                  |         __asm ("str.w r3, [arg_48h]");
                                                                     |         if (r3 == 0) {
    0x0005b08a cbnz r3, 0x5b092                                      |             
                                                                     | label_11:
    0x0005b08c movs r3, 0                                            |             r3 = 0;
    0x0005b08e strb.w sb, [r8, r1]                                   |             *((r8 + r1)) = sb;
                                                                     |         }
    0x0005b092 ldr r2, [r2, 0x14]                                    |         r2 = *((r2 + 0x14));
    0x0005b094 adds r1, 1                                            |         r1++;
    0x0005b096 str r3, [r0, 4]!                                      |         *((r0 += 4)) = r3;
    0x0005b09a cmp r2, 0                                             |         
    0x0005b09c bne 0x5b060                                           |         
                                                                     |     } while (r2 != 0);
    0x0005b09e ldrd r5, r6, [sp, 0x3c]                               |     __asm ("ldrd r5, r6, [var_3ch]");
                                                                     | label_60:
    0x0005b0a2 ldr.w sb, [fp, 8]                                     |     sb = *(arg_8h);
    0x0005b0a6 cmp.w sb, 0                                           |     
                                                                     |     if (sb == 0) {
    0x0005b0aa beq.w 0x5b31a                                         |         goto label_62;
                                                                     |     }
                                                                     | label_9:
    0x0005b0ae ldrb.w r3, [fp, 0x12]                                 |     r3 = *(arg_12h);
                                                                     |     if (r3 == 0) {
    0x0005b0b2 cbnz r3, 0x5b0c0                                      |         
    0x0005b0b4 ldrb.w r3, [sb, 0x58]                                 |         r3 = *((sb + 0x58));
    0x0005b0b8 orr r3, r3, 0x10                                      |         r3 |= 0x10;
    0x0005b0bc strb.w r3, [sb, 0x58]                                 |         *((sb + 0x58)) = r3;
                                                                     |     }
    0x0005b0c0 mov r2, r7                                            |     r2 = r7;
    0x0005b0c2 movs r1, 1                                            |     r1 = 1;
    0x0005b0c4 mov r0, fp                                            |     r0 = fp;
    0x0005b0c6 bl 0x43838                                            |     fcn_00043838 (r0, r1, r2);
    0x0005b0ca ldrb.w r3, [r5, 0x2c]                                 |     r3 = *((r5 + 0x2c));
    0x0005b0ce lsls r4, r3, 0x1b                                     |     r4 = r3 << 0x1b;
                                                                     |     if (r4 < r3) {
    0x0005b0d0 bmi.w 0x5b6be                                         |         goto label_63;
                                                                     |     }
    0x0005b0d4 ldr r2, [sp, 0x38]                                    |     r2 = var_38h;
    0x0005b0d6 ldr r3, [sp, 0x54]                                    |     r3 = var_54h;
    0x0005b0d8 ldr.w r1, [fp, 0x48]                                  |     r1 = *(arg_48h);
    0x0005b0dc orrs r3, r2                                           |     r3 |= r2;
    0x0005b0de ldr r3, [sp, 0x30]                                    |     r3 = var_30h;
    0x0005b0e0 add.w r4, r1, 2                                       |     r4 = r1 + 2;
    0x0005b0e4 add.w r7, r1, 1                                       |     r7 = r1 + 1;
    0x0005b0e8 ite ne                                                |     
                                                                     |     if (r3 == r2) {
    0x0005b0ea movne r2, 1                                           |         r2 = 1;
                                                                     |     }
                                                                     |     if (r3 != r2) {
    0x0005b0ec moveq r2, 0                                           |         r2 = 0;
                                                                     |     }
    0x0005b0ee and r0, r3, 1                                         |     r0 = r3 & 1;
    0x0005b0f2 str r4, [sp, 0x30]                                    |     var_30h = r4;
    0x0005b0f4 str r0, [sp, 0x9c]                                    |     var_9ch = r0;
    0x0005b0f6 it ne                                                 |     
                                                                     |     if (r3 == r2) {
    0x0005b0f8 orrne r0, r0, 1                                       |         r0 |= 1;
                                                                     |     }
    0x0005b0fc ldrsh.w r3, [r5, 0x26]                                |     r3 = *((r5 + 0x26));
    0x0005b100 str r0, [sp, 0x88]                                    |     var_88h = r0;
    0x0005b102 str.w r4, [fp, 0x48]                                  |     __asm ("str.w r4, [arg_48h]");
    0x0005b106 str r7, [sp, 0x4c]                                    |     var_4ch = r7;
    0x0005b108 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0005b10a beq.w 0x5b664                                         |         goto label_64;
                                                                     |     }
    0x0005b10e adds r1, 3                                            |     r1 += 3;
    0x0005b110 str r1, [sp, 0x98]                                    |     var_98h = r1;
    0x0005b112 adds r1, r4, r3                                       |     r1 = r4 + r3;
    0x0005b114 str r1, [sp, 0x84]                                    |     var_84h = r1;
    0x0005b116 str.w r1, [fp, 0x48]                                  |     __asm ("str.w r1, [arg_48h]");
    0x0005b11a ldr r1, [sp, 0x7c]                                    |     r1 = var_7ch;
    0x0005b11c subs r1, 0                                            |     
    0x0005b11e it ne                                                 |     
                                                                     |     if (r1 == 0) {
    0x0005b120 movne r1, 1                                           |         r1 = 1;
                                                                     |     }
    0x0005b122 orrs r2, r1                                           |     r2 |= r1;
    0x0005b124 str r1, [sp, 0x88]                                    |     var_88h = r1;
                                                                     |     if (r2 == r1) {
    0x0005b126 beq.w 0x5bafc                                         |         goto label_65;
                                                                     |     }
                                                                     | label_28:
    0x0005b12a ldr r2, [sp, 0x84]                                    |     r2 = var_84h;
    0x0005b12c adds r2, 1                                            |     r2++;
    0x0005b12e str r2, [sp, 0x84]                                    |     var_84h = r2;
    0x0005b130 str r2, [sp, 0x74]                                    |     var_74h = r2;
                                                                     | label_18:
    0x0005b132 ldr r2, [sp, 0x84]                                    |     r2 = var_84h;
    0x0005b134 add r3, r2                                            |     r3 += r2;
    0x0005b136 str.w r3, [fp, 0x48]                                  |     __asm ("str.w r3, [arg_48h]");
    0x0005b13a ldr r3, [sp, 0x50]                                    |     r3 = var_50h;
                                                                     |     if (r3 != 0) {
    0x0005b13c cbz r3, 0x5b15a                                       |         
    0x0005b13e ldr r2, [r5]                                          |         r2 = *(r5);
    0x0005b140 mov r1, r5                                            |         r1 = r5;
    0x0005b142 ldr.w r3, [fp, 0x1ec]                                 |         r3 = *(arg_1ech);
    0x0005b146 mov r0, fp                                            |         r0 = fp;
    0x0005b148 str.w fp, [sp, 0xb4]                                  |         __asm ("str.w fp, [var_b4h]");
    0x0005b14c str.w r2, [fp, 0x1ec]                                 |         __asm ("str.w r2, [arg_1ech]");
    0x0005b150 str r3, [sp, 0xb0]                                    |         var_b0h = r3;
    0x0005b152 ldr r2, [sp, 0x2c]                                    |         r2 = var_2ch;
    0x0005b154 ldr r3, [sp, 0x58]                                    |         r3 = var_58h;
    0x0005b156 bl 0x43670                                            |         fcn_00043670 (r0, r1, r2, r3);
                                                                     |     }
    0x0005b15a ldr r3, [sp, 0x2c]                                    |     r3 = var_2ch;
                                                                     |     if (r3 != 0) {
    0x0005b15c cbz r3, 0x5b16c                                       |         
    0x0005b15e mov r1, r3                                            |         r1 = r3;
    0x0005b160 add r0, sp, 0xcc                                      |         r0 += var_cch;
    0x0005b162 bl 0x1f318                                            |         r0 = fcn_0001f318 (r0, r1);
    0x0005b166 cmp r0, 0                                             |         
                                                                     |         if (r0 != 0) {
    0x0005b168 bne.w 0x5b328                                         |             goto label_16;
                                                                     |         }
                                                                     |     }
    0x0005b16c ldrb.w r3, [r5, 0x2c]                                 |     r3 = *((r5 + 0x2c));
    0x0005b170 ands r7, r3, 0x20                                     |     r7 = r3 & 0x20;
                                                                     |     if (r7 != r3) {
    0x0005b174 bne.w 0x5b59c                                         |         goto label_66;
                                                                     |     }
    0x0005b178 ldr r3, [sp, 0x30]                                    |     r3 = var_30h;
    0x0005b17a mov r2, r7                                            |     r2 = r7;
    0x0005b17c movs r1, 0x1c                                         |     r1 = 0x1c;
    0x0005b17e mov r0, sb                                            |     r0 = sb;
    0x0005b180 str r3, [sp]                                          |     *(sp) = r3;
    0x0005b182 ldr r3, [sp, 0x4c]                                    |     r3 = var_4ch;
    0x0005b184 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005b188 ldr r3, [sp, 0x5c]                                    |     r3 = var_5ch;
    0x0005b18a mov r0, fp                                            |     r0 = fp;
    0x0005b18c ldrd r1, r2, [sp, 0x28]                               |     __asm ("ldrd r1, r2, [var_2ch]");
    0x0005b190 str r7, [sp]                                          |     *(sp) = r7;
    0x0005b192 str r3, [sp, 8]                                       |     var_8h = r3;
    0x0005b194 movs r3, 4                                            |     r3 = 4;
    0x0005b196 str r3, [sp, 4]                                       |     var_4h = r3;
    0x0005b198 mov r3, r7                                            |     r3 = r7;
    0x0005b19a bl 0x3ec04                                            |     r0 = fcn_0003ec04 (r0, r1, r2, r3, r4, r5, r6);
    0x0005b19e mov r4, r0                                            |     r4 = r0;
    0x0005b1a0 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0005b1a2 beq.w 0x5b328                                         |         goto label_16;
                                                                     |     }
    0x0005b1a6 ldrb.w r3, [r4, 0x26]                                 |     r3 = *((r4 + 0x26));
    0x0005b1aa ldr r0, [r0, 0x3c]                                    |     r0 = *((r0 + 0x3c));
    0x0005b1ac ldr r1, [r4, 0x40]                                    |     r1 = *((r4 + 0x40));
    0x0005b1ae str r3, [sp, 0x40]                                    |     var_40h = r3;
    0x0005b1b0 add r3, sp, 0xec                                      |     r3 += var_ech;
    0x0005b1b2 str r7, [sp]                                          |     *(sp) = r7;
    0x0005b1b4 ldr r2, [sp, 0x58]                                    |     r2 = var_58h;
    0x0005b1b6 stm r3!, {r0, r1}                                     |     *(r3!) = r0;
                                                                     |     *((r3! + 4)) = r1;
    0x0005b1b8 movs r1, 0x65                                         |     r1 = 0x65;
    0x0005b1ba ldr r3, [sp, 0x30]                                    |     r3 = var_30h;
    0x0005b1bc mov r0, sb                                            |     r0 = sb;
    0x0005b1be bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005b1c2 ldr r3, [sp, 0x40]                                    |     r3 = var_40h;
    0x0005b1c4 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0005b1c6 beq.w 0x5bcb6                                         |         goto label_67;
                                                                     |     }
                                                                     | label_37:
    0x0005b1ca mov r0, r4                                            |     r0 = r4;
    0x0005b1cc bl 0x18dcc                                            |     fcn_00018dcc (r0);
    0x0005b1d0 movs r3, 0                                            |     r3 = 0;
    0x0005b1d2 str r3, [sp, 0x78]                                    |     var_78h = r3;
    0x0005b1d4 str r3, [sp, 0x3c]                                    |     var_3ch = r3;
    0x0005b1d6 str r3, [sp, 0x8c]                                    |     var_8ch = r3;
                                                                     | label_17:
    0x0005b1d8 ldr.w r3, [sl, 0x18]                                  |     r3 = *((sl + 0x18));
    0x0005b1dc ands r3, r3, 0x80                                     |     r3 &= 0x80;
    0x0005b1e0 str r3, [sp, 0x94]                                    |     var_94h = r3;
                                                                     |     if (r3 != r3) {
    0x0005b1e2 beq 0x5b1f2                                           |         
    0x0005b1e4 ldr.w r2, [fp, 0x19c]                                 |         r2 = *(arg_19ch);
    0x0005b1e8 cmp r2, 0                                             |         
                                                                     |         if (r2 == 0) {
    0x0005b1ea beq.w 0x5bb48                                         |             goto label_68;
                                                                     |         }
    0x0005b1ee movs r3, 0                                            |         r3 = 0;
    0x0005b1f0 str r3, [sp, 0x94]                                    |         var_94h = r3;
                                                                     |     }
                                                                     | label_30:
    0x0005b1f2 ldr.w r0, [sb, 0x18]                                  |     r0 = *((sb + 0x18));
    0x0005b1f6 bl 0x19ed0                                            |     fcn_00019ed0 (r0);
    0x0005b1fa ldr r3, [sp, 0x50]                                    |     r3 = var_50h;
    0x0005b1fc str r0, [sp, 0x90]                                    |     var_90h = r0;
    0x0005b1fe cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0005b200 beq.w 0x5ba82                                         |         goto label_69;
                                                                     |     }
                                                                     | label_27:
    0x0005b204 ldr r3, [sp, 0x40]                                    |     r3 = var_40h;
    0x0005b206 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0005b208 beq.w 0x5b676                                         |         goto label_70;
                                                                     |     }
    0x0005b20c ldr r2, [sp, 0x60]                                    |     r2 = var_60h;
    0x0005b20e ldr r3, [sp, 0x58]                                    |     r3 = var_58h;
    0x0005b210 subs r3, r3, r2                                       |     r3 -= r2;
    0x0005b212 ldr r2, [sp, 0x6c]                                    |     r2 = var_6ch;
    0x0005b214 ldrb r3, [r2, r3]                                     |     r3 = *((r2 + r3));
    0x0005b216 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0005b218 bne.w 0x5bc98                                         |         goto label_71;
                                                                     |     }
                                                                     | label_36:
    0x0005b21c ldrd r1, r0, [sp, 0x30]                               |     __asm ("ldrd r1, r0, [var_30h]");
    0x0005b220 movs r3, 0                                            |     r3 = 0;
    0x0005b222 ldr r4, [sp, 0x90]                                    |     r4 = var_90h;
    0x0005b224 ldr r2, [sp, 0x78]                                    |     r2 = var_78h;
    0x0005b226 str r3, [sp]                                          |     *(sp) = r3;
    0x0005b228 str r3, [sp, 0x70]                                    |     var_70h = r3;
    0x0005b22a mov r3, r4                                            |     r3 = r4;
    0x0005b22c cmp r0, 0                                             |     
    0x0005b22e it eq                                                 |     
                                                                     |     if (r0 != 0) {
    0x0005b230 moveq r2, r1                                          |         r2 = r1;
                                                                     |     }
    0x0005b232 movs r1, 0x4c                                         |     r1 = 0x4c;
    0x0005b234 mov r0, sb                                            |     r0 = sb;
    0x0005b236 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005b23a str r4, [sp, 0x4c]                                    |     var_4ch = r4;
                                                                     | label_19:
    0x0005b23c ldr r3, [sp, 0x44]                                    |     r3 = var_44h;
    0x0005b23e cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0005b240 bne.w 0x5b9c0                                         |         goto label_72;
                                                                     |     }
                                                                     | label_22:
    0x0005b244 ldr r4, [sp, 0x9c]                                    |     r4 = var_9ch;
    0x0005b246 ldr r3, [sp, 0x38]                                    |     r3 = var_38h;
    0x0005b248 cmp r3, 0                                             |     
    0x0005b24a it ne                                                 |     
                                                                     |     if (r3 == 0) {
    0x0005b24c orrne r4, r4, 1                                       |         r4 |= 1;
                                                                     |     }
    0x0005b250 cmp r4, 0                                             |     
                                                                     |     if (r4 != 0) {
    0x0005b252 bne.w 0x5b6fa                                         |         goto label_73;
                                                                     |     }
    0x0005b256 ldr r3, [sp, 0x54]                                    |     r3 = var_54h;
    0x0005b258 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0005b25a beq.w 0x5b3c6                                         |         goto label_74;
                                                                     |     }
                                                                     | label_20:
    0x0005b25e ldr r3, [sp, 0x120]                                   |     r3 = *(arg_120h);
    0x0005b260 mov r2, r6                                            |     r2 = r6;
    0x0005b262 ldr r1, [sp, 0x54]                                    |     r1 = var_54h;
    0x0005b264 mov r0, fp                                            |     r0 = fp;
    0x0005b266 strd r5, r3, [sp, 4]                                  |     __asm ("strd r5, r3, [var_4h]");
    0x0005b26a movs r3, 3                                            |     r3 = 3;
    0x0005b26c str r3, [sp]                                          |     *(sp) = r3;
    0x0005b26e movs r3, 0                                            |     r3 = 0;
    0x0005b270 bl 0x59230                                            |     r0 = fcn_00059230 (r0, r1, r2, r3);
    0x0005b274 orr.w r3, r4, r0                                      |     r3 = r4 | r0;
    0x0005b278 mov r2, r3                                            |     r2 = r3;
    0x0005b27a ldrsh.w r3, [r5, 0x26]                                |     r3 = *((r5 + 0x26));
    0x0005b27e cmp r3, 0                                             |     
                                                                     |     if (r3 <= 0) {
    0x0005b280 ble.w 0x5b3a2                                         |         goto label_75;
                                                                     |     }
    0x0005b284 movs r4, 0                                            |     r4 = 0;
    0x0005b286 ldr r7, [sp, 0x98]                                    |     r7 = var_98h;
    0x0005b288 str.w sl, [sp, 0x48]                                  |     __asm ("str.w sl, [var_48h]");
    0x0005b28c mov r8, r4                                            |     r8 = r4;
    0x0005b28e str r6, [sp, 0x98]                                    |     var_98h = r6;
    0x0005b290 mov sl, r2                                            |     sl = r2;
    0x0005b292 ldr r6, [sp, 0x58]                                    |     r6 = var_58h;
    0x0005b294 b 0x5b2b4                                             |     
                                                                     |     while (sl == -1) {
                                                                     | label_5:
    0x0005b296 mov r3, r4                                            |         r3 = r4;
    0x0005b298 mov r2, r6                                            |         r2 = r6;
    0x0005b29a mov r1, r5                                            |         r1 = r5;
    0x0005b29c mov r0, sb                                            |         r0 = sb;
    0x0005b29e str r7, [sp]                                          |         *(sp) = r7;
    0x0005b2a0 bl 0x26140                                            |         fcn_00026140 (r0, r1, r2, r3, r4);
                                                                     | label_6:
    0x0005b2a4 ldrsh.w r3, [r5, 0x26]                                |         r3 = *((r5 + 0x26));
    0x0005b2a8 adds r4, 1                                            |         r4++;
    0x0005b2aa adds r7, 1                                            |         r7++;
    0x0005b2ac add.w r8, r8, 0x18                                    |         r8 += 0x18;
    0x0005b2b0 cmp r3, r4                                            |         
                                                                     |         if (r3 <= r4) {
    0x0005b2b2 ble 0x5b39c                                           |             goto label_76;
                                                                     |         }
    0x0005b2b4 cmp.w sl, -1                                          |         
    0x0005b2b8 beq 0x5b296                                           |         
                                                                     |     }
    0x0005b2ba cmp r4, 0x1f                                          |     
                                                                     |     if (r4 > 0x1f) {
    0x0005b2bc bgt 0x5b2c8                                           |         goto label_77;
                                                                     |     }
    0x0005b2be movs r3, 1                                            |     r3 = 1;
    0x0005b2c0 lsls r3, r4                                           |     r3 <<= r4;
    0x0005b2c2 tst.w r3, sl                                          |     
                                                                     |     if ((r3 & sl) != 0) {
    0x0005b2c6 bne 0x5b296                                           |         goto label_5;
                                                                     |     }
                                                                     | label_77:
    0x0005b2c8 ldr r3, [r5, 4]                                       |     r3 = *((r5 + 4));
    0x0005b2ca add r3, r8                                            |     r3 += r8;
    0x0005b2cc ldrb r3, [r3, 0x17]                                   |     r3 = *((r3 + 0x17));
    0x0005b2ce ands r2, r3, 1                                        |     r2 = r3 & 1;
                                                                     |     if (r2 != r3) {
    0x0005b2d2 bne 0x5b296                                           |         goto label_5;
                                                                     |     }
    0x0005b2d4 mov r3, r7                                            |     r3 = r7;
    0x0005b2d6 movs r1, 0x1c                                         |     r1 = 0x1c;
    0x0005b2d8 mov r0, sb                                            |     r0 = sb;
    0x0005b2da str r2, [sp]                                          |     *(sp) = r2;
    0x0005b2dc bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005b2e0 b 0x5b2a4                                             |     goto label_6;
                                                                     | label_57:
    0x0005b2e2 add.w r2, r3, r8                                      |     r2 = r3 + r8;
                                                                     | label_42:
    0x0005b2e6 ldr r3, [sp, 0x34]                                    |     r3 = var_34h;
    0x0005b2e8 ldr r0, [r2, 4]                                       |     r0 = *((r2 + 4));
    0x0005b2ea cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0005b2ec bne 0x5b396                                           |         goto label_78;
                                                                     |     }
    0x0005b2ee bl 0x12464                                            |     r0 = fcn_00012464 (r0);
    0x0005b2f2 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0005b2f4 beq 0x5b374                                           |         goto label_79;
                                                                     |     }
    0x0005b2f6 ldr r3, [r6, 4]                                       |     r3 = *((r6 + 4));
    0x0005b2f8 mov.w r4, -1                                          |     r4 = -1;
    0x0005b2fc ldr r2, [r5]                                          |     r2 = *(r5);
    0x0005b2fe ldr.w r3, [r3, sb, lsl 2]                             |     offset_1 = sb << 2;
                                                                     |     r3 = *((r3 + offset_1));
    0x0005b300 adds r0, 0x29                                         |     r0 += 0x29;
    0x0005b302 str r3, [sp, 0x48]                                    |     var_48h = r3;
    0x0005b304 movs r3, 1                                            |     r3 = 1;
    0x0005b306 str r3, [sp, 0x44]                                    |     var_44h = r3;
    0x0005b308 ldr r3, [sp, 0x4c]                                    |     r3 = var_4ch;
    0x0005b30a b 0x5afd4                                             |     goto label_7;
                                                                     | label_58:
    0x0005b30c ldr r3, [r6, 4]                                       |     r3 = *((r6 + 4));
    0x0005b30e ldr.w r3, [r3, sb, lsl 2]                             |     offset_2 = sb << 2;
                                                                     |     r3 = *((r3 + offset_2));
    0x0005b312 str r3, [sp, 0x48]                                    |     var_48h = r3;
    0x0005b314 movs r3, 1                                            |     r3 = 1;
    0x0005b316 str r3, [sp, 0x44]                                    |     var_44h = r3;
    0x0005b318 b 0x5afbc                                             |     goto label_8;
                                                                     | label_62:
    0x0005b31a mov r0, fp                                            |     r0 = fp;
    0x0005b31c bl 0x192c8                                            |     r0 = fcn_000192c8 (r0);
    0x0005b320 mov sb, r0                                            |     sb = r0;
    0x0005b322 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0005b324 bne.w 0x5b0ae                                         |         goto label_9;
                                                                     |     }
                                                                     | label_16:
    0x0005b328 ldr r2, [sp, 0xb4]                                    |     r2 = var_b4h;
    0x0005b32a b 0x5adf6                                             |     goto label_2;
                                                                     | label_49:
    0x0005b32c ldr r2, [sp, 0xb4]                                    |     r2 = var_b4h;
    0x0005b32e str r4, [sp, 0x24]                                    |     var_24h = r4;
    0x0005b330 b 0x5adf6                                             |     goto label_2;
                                                                     | label_54:
    0x0005b332 mov r0, r1                                            |     r0 = r1;
    0x0005b334 str r1, [sp, 0x34]                                    |     var_34h = r1;
    0x0005b336 b 0x5ae44                                             |     goto label_3;
                                                                     | label_51:
    0x0005b338 ldr r4, [sp, 0x64]                                    |     r4 = var_64h;
    0x0005b33a ldr r2, [sp, 0x60]                                    |     r2 = var_60h;
    0x0005b33c mov r8, r4                                            |     r8 = r4;
    0x0005b33e str r4, [sp, 0x34]                                    |     var_34h = r4;
    0x0005b340 str r2, [sp, 0x58]                                    |     var_58h = r2;
    0x0005b342 movs r2, 2                                            |     r2 = 2;
    0x0005b344 b 0x5aeae                                             |     goto label_10;
                                                                     | label_61:
    0x0005b346 ldrh.w lr, [r2, 0x32]                                 |     
    0x0005b34a cmp.w lr, 0                                           |     
                                                                     |     if (lr == 0) {
    0x0005b34e beq.w 0x5b08c                                         |         goto label_11;
                                                                     |     }
    0x0005b352 ldr r3, [r2, 4]                                       |     r3 = *((r2 + 4));
    0x0005b354 mov ip, r2                                            |     
    0x0005b356 ldr r5, [sp, 0x24]                                    |     r5 = var_24h;
    0x0005b358 add.w lr, r3, lr, lsl 1                               |     lr = r3 + (lr << 1);
    0x0005b35c b 0x5b364                                             |     
                                                                     |     while (r2 < 0) {
    0x0005b35e cmp lr, r3                                            |         
                                                                     |         if (lr == r3) {
    0x0005b360 beq.w 0x5b598                                         |             goto label_80;
                                                                     |         }
    0x0005b364 ldrsh r2, [r3], 2                                     |         r2 = *(r3);
                                                                     |         r3 += 2;
    0x0005b368 ldr.w r2, [r5, r2, lsl 2]                             |         offset_3 = r2 << 2;
                                                                     |         r2 = *((r5 + offset_3));
    0x0005b36c cmp r2, 0                                             |         
    0x0005b36e blt 0x5b35e                                           |         
                                                                     |     }
    0x0005b370 mov r2, ip                                            |     r2 = ip;
    0x0005b372 b 0x5b080                                             |     goto label_12;
                                                                     | label_79:
    0x0005b374 ldr r3, [r6, 4]                                       |     r3 = *((r6 + 4));
    0x0005b376 ldr.w fp, [sp, 0x38]                                  |     fp = var_38h;
    0x0005b37a add.w r2, r3, r8                                      |     r2 = r3 + r8;
                                                                     |     do {
    0x0005b37e ldr.w r1, [pc, 0x480]                                 |         r1 = *(0x0005b800);
    0x0005b382 mov r0, fp                                            |         r0 = fp;
    0x0005b384 ldr r2, [r2, 4]                                       |         r2 = *((r2 + 4));
    0x0005b386 add r1, pc                                            |         r1 += pc;
    0x0005b388 bl 0x1ca34                                            |         fcn_0001ca34 (r0);
    0x0005b38c movs r3, 1                                            |         r3 = 1;
    0x0005b38e ldr r2, [sp, 0xb4]                                    |         r2 = var_b4h;
    0x0005b390 strb.w r3, [fp, 0x11]                                 |         *(arg_11h) = r3;
    0x0005b394 b 0x5adf6                                             |         goto label_2;
                                                                     | label_78:
    0x0005b396 ldr.w fp, [sp, 0x38]                                  |         fp = var_38h;
    0x0005b39a b 0x5b37e                                             |         
                                                                     |     } while (1);
                                                                     | label_76:
    0x0005b39c ldr.w sl, [sp, 0x48]                                  |     sl = var_48h;
    0x0005b3a0 ldr r6, [sp, 0x98]                                    |     r6 = var_98h;
                                                                     | label_75:
    0x0005b3a2 ldr r3, [sp, 0x44]                                    |     r3 = var_44h;
    0x0005b3a4 ldr r2, [sp, 0x34]                                    |     r2 = var_34h;
    0x0005b3a6 eor r3, r3, 1                                         |     r3 ^= 1;
    0x0005b3aa cmp r2, 0                                             |     
    0x0005b3ac ite ne                                                |     
                                                                     |     if (r2 == 0) {
    0x0005b3ae movne r3, 0                                           |         r3 = 0;
                                                                     |     }
                                                                     |     if (r2 != 0) {
    0x0005b3b0 andeq r3, r3, 1                                       |         r3 &= 1;
                                                                     |     }
                                                                     |     if (r3 != 0) {
    0x0005b3b4 cbz r3, 0x5b3c6                                       |         
    0x0005b3b6 movs r3, 0                                            |         r3 = 0;
    0x0005b3b8 ldr r2, [sp, 0x30]                                    |         r2 = var_30h;
    0x0005b3ba str r3, [sp]                                          |         *(sp) = r3;
    0x0005b3bc movs r1, 0x21                                         |         r1 = 0x21;
    0x0005b3be ldr r3, [sp, 0x74]                                    |         r3 = var_74h;
    0x0005b3c0 mov r0, sb                                            |         r0 = sb;
    0x0005b3c2 bl 0x18bf8                                            |         fcn_00018bf8 (r0, r1, r2, r3, r4);
                                                                     |     }
                                                                     | label_74:
    0x0005b3c6 ldr r3, [sp, 0x120]                                   |     r3 = *(arg_120h);
    0x0005b3c8 mov r2, r6                                            |     r2 = r6;
    0x0005b3ca ldr r1, [sp, 0x54]                                    |     r1 = var_54h;
    0x0005b3cc mov r0, fp                                            |     r0 = fp;
    0x0005b3ce ldr r7, [sp, 0x84]                                    |     r7 = var_84h;
    0x0005b3d0 strd r5, r3, [sp, 4]                                  |     __asm ("strd r5, r3, [var_4h]");
    0x0005b3d4 movs r3, 1                                            |     r3 = 1;
    0x0005b3d6 str r3, [sp]                                          |     *(sp) = r3;
    0x0005b3d8 bl 0x59230                                            |     fcn_00059230 (r0, r1, r2, r3);
    0x0005b3dc ldrsh.w r3, [r5, 0x26]                                |     r3 = *((r5 + 0x26));
    0x0005b3e0 adds r7, 1                                            |     r7++;
    0x0005b3e2 mov r8, r0                                            |     r8 = r0;
    0x0005b3e4 cmp r3, 0                                             |     
                                                                     |     if (r3 <= 0) {
    0x0005b3e6 ble 0x5b46c                                           |         goto label_81;
                                                                     |     }
    0x0005b3e8 str.w sl, [sp, 0x44]                                  |     __asm ("str.w sl, [var_44h]");
    0x0005b3ec movs r4, 0                                            |     r4 = 0;
    0x0005b3ee ldr.w sl, [sp, 0x24]                                  |     sl = var_24h;
    0x0005b3f2 b 0x5b41e                                             |     
                                                                     |     while (r1 < 0) {
    0x0005b3f4 ldr r1, [sp, 0xac]                                    |         r1 = var_ach;
    0x0005b3f6 mvns r1, r1                                           |         r1 = ~r1;
    0x0005b3f8 and r1, r1, 1                                         |         r1 &= 1;
    0x0005b3fc cmp r4, 0x1f                                          |         
    0x0005b3fe it gt                                                 |         
                                                                     |         if (r4 <= 0x1f) {
    0x0005b400 orrgt r1, r1, 1                                       |             r1 |= 1;
                                                                     |         }
                                                                     |         if (r1 == 0) {
    0x0005b404 cbz r1, 0x5b452                                       |             goto label_82;
                                                                     |         }
                                                                     | label_14:
    0x0005b406 str r3, [sp]                                          |         *(sp) = r3;
    0x0005b408 mov r1, r5                                            |         r1 = r5;
    0x0005b40a ldr r2, [sp, 0x58]                                    |         r2 = var_58h;
    0x0005b40c mov r3, r4                                            |         r3 = r4;
    0x0005b40e mov r0, sb                                            |         r0 = sb;
    0x0005b410 bl 0x26140                                            |         fcn_00026140 (r0, r1, r2, r3, r4);
                                                                     | label_13:
    0x0005b414 ldrsh.w r3, [r5, 0x26]                                |         r3 = *((r5 + 0x26));
    0x0005b418 adds r4, 1                                            |         r4++;
    0x0005b41a cmp r3, r4                                            |         
                                                                     |         if (r3 <= r4) {
    0x0005b41c ble 0x5b468                                           |             goto label_83;
                                                                     |         }
    0x0005b41e ldrsh.w r2, [r5, 0x24]                                |         r2 = *((r5 + 0x24));
    0x0005b422 adds r3, r7, r4                                       |         r3 = r7 + r4;
    0x0005b424 cmp r2, r4                                            |         
                                                                     |         if (r2 == r4) {
    0x0005b426 beq 0x5b444                                           |             goto label_84;
                                                                     |         }
    0x0005b428 ldr.w r1, [sl, r4, lsl 2]                             |         offset_4 = r4 << 2;
                                                                     |         r1 = *((sl + offset_4));
    0x0005b42c cmp r1, 0                                             |         
    0x0005b42e blt 0x5b3f4                                           |         
                                                                     |     }
    0x0005b430 mov r2, r3                                            |     r2 = r3;
    0x0005b432 ldr r3, [r6, 4]                                       |     r3 = *((r6 + 4));
    0x0005b434 add.w r1, r1, r1, lsl 2                               |     r1 += (r1 << 2);
    0x0005b438 mov r0, fp                                            |     r0 = fp;
    0x0005b43a ldr.w r1, [r3, r1, lsl 2]                             |     offset_5 = r1 << 2;
                                                                     |     r1 = *((r3 + offset_5));
    0x0005b43e bl 0x3c4a8                                            |     fcn_0003c4a8 (r0, r1, r2);
    0x0005b442 b 0x5b414                                             |     goto label_13;
                                                                     | label_84:
    0x0005b444 movs r2, 0                                            |     r2 = 0;
    0x0005b446 movs r1, 0x1c                                         |     r1 = 0x1c;
    0x0005b448 mov r0, sb                                            |     r0 = sb;
    0x0005b44a str r2, [sp]                                          |     *(sp) = r2;
    0x0005b44c bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005b450 b 0x5b414                                             |     goto label_13;
                                                                     | label_82:
    0x0005b452 lsr.w r2, r8, r4                                      |     r2 = r8 >> r4;
    0x0005b456 ands r2, r2, 1                                        |     r2 &= 1;
                                                                     |     if (r2 != r2) {
    0x0005b45a bne 0x5b406                                           |         goto label_14;
                                                                     |     }
    0x0005b45c movs r1, 0x1c                                         |     r1 = 0x1c;
    0x0005b45e mov r0, sb                                            |     r0 = sb;
    0x0005b460 str r2, [sp]                                          |     *(sp) = r2;
    0x0005b462 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005b466 b 0x5b414                                             |     goto label_13;
                                                                     | label_83:
    0x0005b468 ldr.w sl, [sp, 0x44]                                  |     sl = var_44h;
                                                                     | label_81:
    0x0005b46c ldr r3, [sp, 0xac]                                    |     r3 = var_ach;
    0x0005b46e lsls r0, r3, 0x1f                                     |     r0 = r3 << 0x1f;
                                                                     |     if (r0 < r3) {
    0x0005b470 bmi.w 0x5b9f8                                         |         goto label_85;
                                                                     |     }
                                                                     | label_25:
    0x0005b474 ldr r3, [sp, 0x50]                                    |     r3 = var_50h;
    0x0005b476 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0005b478 beq.w 0x5bbaa                                         |         goto label_86;
                                                                     |     }
                                                                     | label_33:
    0x0005b47c ldr.w r3, [sl, 0x18]                                  |     r3 = *((sl + 0x18));
    0x0005b480 lsls r2, r3, 0x18                                     |     r2 = r3 << 0x18;
                                                                     |     if (r2 < r3) {
    0x0005b482 bpl 0x5b48e                                           |         
    0x0005b484 ldr.w r3, [fp, 0x19c]                                 |         r3 = *(arg_19ch);
    0x0005b488 cmp r3, 0                                             |         
                                                                     |         if (r3 == 0) {
    0x0005b48a beq.w 0x5bb8a                                         |             goto label_87;
                                                                     |         }
                                                                     |     }
                                                                     | label_31:
    0x0005b48e ldr r3, [sp, 0x30]                                    |     r3 = var_30h;
    0x0005b490 movs r2, 0x6e                                         |     r2 = 0x6e;
    0x0005b492 ldr r4, [sp, 0x4c]                                    |     r4 = var_4ch;
    0x0005b494 mov r0, fp                                            |     r0 = fp;
    0x0005b496 ldr r1, [sp, 0x54]                                    |     r1 = var_54h;
    0x0005b498 str r3, [sp, 8]                                       |     var_8h = r3;
    0x0005b49a ldr r3, [sp, 0x120]                                   |     r3 = *(arg_120h);
    0x0005b49c str r4, [sp, 0x10]                                    |     var_10h = r4;
    0x0005b49e str r5, [sp, 4]                                       |     var_4h = r5;
    0x0005b4a0 str r3, [sp, 0xc]                                     |     var_ch = r3;
    0x0005b4a2 movs r3, 2                                            |     r3 = 2;
    0x0005b4a4 str r3, [sp]                                          |     *(sp) = r3;
    0x0005b4a6 mov r3, r6                                            |     r3 = r6;
    0x0005b4a8 bl 0x59318                                            |     fcn_00059318 (r0, r1, r2, r3, r4, r5, r6);
    0x0005b4ac ldr r3, [sp, 0x40]                                    |     r3 = var_40h;
                                                                     |     if (r3 == 0) {
    0x0005b4ae cbnz r3, 0x5b4e4                                      |         
    0x0005b4b0 ldr r3, [sp, 0x34]                                    |         r3 = var_34h;
    0x0005b4b2 cmp r3, 0                                             |         
                                                                     |         if (r3 == 0) {
    0x0005b4b4 beq.w 0x5bb9a                                         |             goto label_88;
                                                                     |         }
    0x0005b4b8 mvns r2, r4                                           |         r2 = ~r4;
    0x0005b4ba ldr.w r0, [sb, 0x18]                                  |         r0 = *((sb + 0x18));
                                                                     |         if (r2 >= r4) {
    0x0005b4be bmi 0x5b4cc                                           |             
    0x0005b4c0 ldr r3, [r0, 0x70]                                    |             r3 = *((r0 + 0x70));
                                                                     |             if (r3 == 0) {
    0x0005b4c2 cbz r3, 0x5b4cc                                       |                 goto label_89;
                                                                     |             }
    0x0005b4c4 ldr.w r1, [sb, 0x20]                                  |             r1 = *((sb + 0x20));
    0x0005b4c8 str.w r1, [r3, r2, lsl 2]                             |             __asm ("str.w r1, [r3, r2, lsl 2]");
                                                                     |         }
                                                                     | label_89:
    0x0005b4cc ldr.w r1, [sb, 0x20]                                  |         r1 = *((sb + 0x20));
    0x0005b4d0 ldr r3, [sp, 0x70]                                    |         r3 = var_70h;
    0x0005b4d2 ldr r2, [sp, 0x8c]                                    |         r2 = var_8ch;
    0x0005b4d4 subs r1, 1                                            |         r1--;
    0x0005b4d6 str r1, [r0, 0x58]                                    |         *((r0 + 0x58)) = r1;
    0x0005b4d8 movs r1, 0                                            |         r1 = 0;
    0x0005b4da str r1, [sp]                                          |         *(sp) = r1;
    0x0005b4dc mov r0, sb                                            |         r0 = sb;
    0x0005b4de movs r1, 9                                            |         r1 = 9;
    0x0005b4e0 bl 0x18bf8                                            |         fcn_00018bf8 (r0, r1, r2, r3, r4);
                                                                     |     }
                                                                     | label_32:
    0x0005b4e4 ldr r3, [sp, 0x90]                                    |     r3 = var_90h;
    0x0005b4e6 ldr.w r2, [sb, 0x18]                                  |     r2 = *((sb + 0x18));
    0x0005b4ea mvns r1, r3                                           |     r1 = ~r3;
                                                                     |     if (r1 >= r3) {
    0x0005b4ec bmi 0x5b4fa                                           |         
    0x0005b4ee ldr r3, [r2, 0x70]                                    |         r3 = *((r2 + 0x70));
                                                                     |         if (r3 == 0) {
    0x0005b4f0 cbz r3, 0x5b4fa                                       |             goto label_90;
                                                                     |         }
    0x0005b4f2 ldr.w r0, [sb, 0x20]                                  |         r0 = *((sb + 0x20));
    0x0005b4f6 str.w r0, [r3, r1, lsl 2]                             |         __asm ("str.w r0, [r3, r1, lsl 2]");
                                                                     |     }
                                                                     | label_90:
    0x0005b4fa ldr.w r3, [sb, 0x20]                                  |     r3 = *((sb + 0x20));
    0x0005b4fe ldr r4, [r5, 8]                                       |     r4 = *((r5 + 8));
    0x0005b500 subs r3, 1                                            |     r3--;
    0x0005b502 str r3, [r2, 0x58]                                    |     *((r2 + 0x58)) = r3;
                                                                     |     if (r4 == 0) {
    0x0005b504 cbz r4, 0x5b532                                       |         goto label_91;
                                                                     |     }
    0x0005b506 ldr.w r8, [sp, 0x6c]                                  |     r8 = var_6ch;
    0x0005b50a movs r7, 0                                            |     r7 = 0;
    0x0005b50c mov r5, r8                                            |     r5 = r8;
    0x0005b50e b 0x5b514                                             |     
                                                                     |     while (r3 == 0) {
                                                                     | label_15:
    0x0005b510 ldr r4, [r4, 0x14]                                    |         r4 = *((r4 + 0x14));
                                                                     |         if (r4 == 0) {
    0x0005b512 cbz r4, 0x5b532                                       |             goto label_91;
                                                                     |         }
    0x0005b514 ldrb r3, [r5, 1]!                                     |         r3 = *((r5 += 1));
    0x0005b518 cmp r3, 0                                             |         
    0x0005b51a beq 0x5b510                                           |         
                                                                     |     }
    0x0005b51c ldr r3, [sp, 0x60]                                    |     r3 = var_60h;
    0x0005b51e movs r1, 0x3b                                         |     r1 = 0x3b;
    0x0005b520 mov r0, sb                                            |     r0 = sb;
    0x0005b522 str r7, [sp]                                          |     *(sp) = r7;
    0x0005b524 adds r2, r3, r5                                       |     r2 = r3 + r5;
    0x0005b526 movs r3, 0                                            |     r3 = 0;
    0x0005b528 sub.w r2, r2, r8                                      |     r2 -= r8;
    0x0005b52c bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005b530 b 0x5b510                                             |     goto label_15;
                                                                     | label_91:
    0x0005b532 ldrd r2, r3, [sp, 0x58]                               |     __asm ("ldrd r2, r3, [var_58h]");
    0x0005b536 cmp r3, r2                                            |     
                                                                     |     if (r3 > r2) {
    0x0005b538 bgt.w 0x5b9e8                                         |         goto label_92;
                                                                     |     }
                                                                     | label_24:
    0x0005b53c ldrb.w r3, [fp, 0x12]                                 |     r3 = *(arg_12h);
                                                                     |     if (r3 != 0) {
    0x0005b540 cbnz r3, 0x5b552                                      |         goto label_93;
                                                                     |     }
    0x0005b542 ldr.w r3, [fp, 0x19c]                                 |     r3 = *(arg_19ch);
    0x0005b546 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0005b548 bne.w 0x5b328                                         |         goto label_16;
                                                                     |     }
    0x0005b54c mov r0, fp                                            |     r0 = fp;
    0x0005b54e bl 0x221f4                                            |     fcn_000221f4 (r0, r1, r2);
                                                                     | label_93:
    0x0005b552 ldr.w r3, [sl, 0x18]                                  |     r3 = *((sl + 0x18));
    0x0005b556 lsls r3, r3, 0x18                                     |     r3 <<= 0x18;
                                                                     |     if (r3 >= r3) {
    0x0005b558 bpl.w 0x5b328                                         |         goto label_16;
                                                                     |     }
    0x0005b55c ldr.w r3, [fp, 0x19c]                                 |     r3 = *(arg_19ch);
    0x0005b560 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0005b562 bne.w 0x5b328                                         |         goto label_16;
                                                                     |     }
    0x0005b566 ldrb.w r4, [fp, 0x12]                                 |     r4 = *(arg_12h);
    0x0005b56a cmp r4, 0                                             |     
                                                                     |     if (r4 != 0) {
    0x0005b56c bne.w 0x5b328                                         |         goto label_16;
                                                                     |     }
    0x0005b570 ldr r2, [sp, 0x94]                                    |     r2 = var_94h;
    0x0005b572 movs r3, 1                                            |     r3 = 1;
    0x0005b574 movs r1, 0x23                                         |     r1 = 0x23;
    0x0005b576 mov r0, sb                                            |     r0 = sb;
    0x0005b578 str r4, [sp]                                          |     *(sp) = r4;
    0x0005b57a bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005b57e mov r0, sb                                            |     r0 = sb;
    0x0005b580 movs r1, 1                                            |     r1 = 1;
    0x0005b582 bl 0x100e4                                            |     fcn_000100e4 (r0, r1);
    0x0005b586 ldr r3, [pc, 0x27c]                                   |     
    0x0005b588 mov r0, sb                                            |     r0 = sb;
    0x0005b58a mov r2, r4                                            |     r2 = r4;
    0x0005b58c mov r1, r4                                            |     r1 = r4;
    0x0005b58e str r4, [sp]                                          |     *(sp) = r4;
    0x0005b590 add r3, pc                                            |     r3 = 0xb6d9a;
    0x0005b592 bl 0x17ea4                                            |     fcn_00017ea4 (r0, r1, r2, r3);
    0x0005b596 b 0x5b328                                             |     goto label_16;
                                                                     | label_80:
    0x0005b598 mov r2, ip                                            |     r2 = ip;
    0x0005b59a b 0x5b08c                                             |     goto label_11;
                                                                     | label_66:
    0x0005b59c ldr r3, [sp, 0x34]                                    |     r3 = var_34h;
    0x0005b59e movs r4, 0                                            |     r4 = 0;
    0x0005b5a0 ldrd r0, r7, [fp, 0x44]                               |     __asm ("ldrd r0, r7, [arg_44h]");
    0x0005b5a4 mov r2, r4                                            |     r2 = r4;
    0x0005b5a6 ldrsh.w r3, [r3, 0x32]                                |     r3 = *((r3 + 0x32));
    0x0005b5aa str r0, [sp, 0x8c]                                    |     var_8ch = r0;
    0x0005b5ac str r4, [sp]                                          |     *(sp) = r4;
    0x0005b5ae adds r1, r7, r3                                       |     r1 = r7 + r3;
    0x0005b5b0 str r3, [sp, 0x3c]                                    |     var_3ch = r3;
    0x0005b5b2 adds r1, 1                                            |     r1++;
    0x0005b5b4 adds r3, r0, 1                                        |     r3 = r0 + 1;
    0x0005b5b6 adds r7, 1                                            |     r7++;
    0x0005b5b8 str r1, [sp, 0x94]                                    |     var_94h = r1;
    0x0005b5ba str.w r1, [fp, 0x48]                                  |     __asm ("str.w r1, [arg_48h]");
    0x0005b5be mov r0, sb                                            |     r0 = sb;
    0x0005b5c0 movs r1, 0x1c                                         |     r1 = 0x1c;
    0x0005b5c2 str.w r3, [fp, 0x44]                                  |     __asm ("str.w r3, [arg_44h]");
    0x0005b5c6 mov r3, r7                                            |     r3 = r7;
    0x0005b5c8 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005b5cc ldr r3, [sp, 0x3c]                                    |     r3 = var_3ch;
    0x0005b5ce movs r1, 0x38                                         |     r1 = 0x38;
    0x0005b5d0 ldr r2, [sp, 0x8c]                                    |     r2 = var_8ch;
    0x0005b5d2 mov r0, sb                                            |     r0 = sb;
    0x0005b5d4 str r4, [sp]                                          |     *(sp) = r4;
    0x0005b5d6 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005b5da ldr r1, [sp, 0x34]                                    |     r1 = var_34h;
    0x0005b5dc str r0, [sp, 0x90]                                    |     var_90h = r0;
    0x0005b5de mov r0, fp                                            |     r0 = fp;
    0x0005b5e0 bl 0x220e4                                            |     fcn_000220e4 (r0, r1);
    0x0005b5e4 ldr r3, [sp, 0x5c]                                    |     r3 = var_5ch;
    0x0005b5e6 mov r0, fp                                            |     r0 = fp;
    0x0005b5e8 ldrd r1, r2, [sp, 0x28]                               |     __asm ("ldrd r1, r2, [var_2ch]");
    0x0005b5ec str r4, [sp]                                          |     *(sp) = r4;
    0x0005b5ee str r3, [sp, 8]                                       |     var_8h = r3;
    0x0005b5f0 movs r3, 4                                            |     r3 = 4;
    0x0005b5f2 str r3, [sp, 4]                                       |     var_4h = r3;
    0x0005b5f4 mov r3, r4                                            |     r3 = r4;
    0x0005b5f6 bl 0x3ec04                                            |     fcn_0003ec04 (r0, r1, r2, r3, r4, r5, r6);
    0x0005b5fa str r7, [sp, 0x78]                                    |     var_78h = r7;
    0x0005b5fc mov r8, r0                                            |     r8 = r0;
    0x0005b5fe cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0005b600 beq.w 0x5b328                                         |         goto label_16;
                                                                     |     }
    0x0005b604 ldr r0, [r0, 0x3c]                                    |     r0 = *((r0 + 0x3c));
    0x0005b606 add r3, sp, 0xec                                      |     r3 += var_ech;
    0x0005b608 ldr.w r1, [r8, 0x40]                                  |     r1 = *((r8 + 0x40));
    0x0005b60c stm r3!, {r0, r1}                                     |     *(r3!) = r0;
                                                                     |     *((r3! + 4)) = r1;
    0x0005b60e ldrb.w r3, [r8, 0x26]                                 |     r3 = *((r8 + 0x26));
    0x0005b612 str r3, [sp, 0x40]                                    |     var_40h = r3;
    0x0005b614 ldr r3, [sp, 0x3c]                                    |     r3 = var_3ch;
    0x0005b616 cmp r3, 0                                             |     
                                                                     |     if (r3 <= 0) {
    0x0005b618 ble 0x5b648                                           |         goto label_94;
                                                                     |     }
    0x0005b61a str.w r8, [sp, 0xa0]                                  |     __asm ("str.w r8, [var_a0h]");
    0x0005b61e mov r8, r5                                            |     r8 = r5;
    0x0005b620 str r6, [sp, 0xa4]                                    |     var_a4h = r6;
    0x0005b622 ldr r5, [sp, 0x58]                                    |     r5 = var_58h;
    0x0005b624 ldr r6, [sp, 0x34]                                    |     r6 = var_34h;
                                                                     |     do {
    0x0005b626 ldr r3, [r6, 4]                                       |         r3 = *((r6 + 4));
    0x0005b628 adds r2, r7, r4                                       |         r2 = r7 + r4;
    0x0005b62a mov r1, r8                                            |         r1 = r8;
    0x0005b62c mov r0, sb                                            |         r0 = sb;
    0x0005b62e ldrsh.w r3, [r3, r4, lsl 1]                           |         offset_6 = r4 << 1;
                                                                     |         r3 = *((r3 + offset_6));
    0x0005b632 adds r4, 1                                            |         r4++;
    0x0005b634 str r2, [sp]                                          |         *(sp) = r2;
    0x0005b636 mov r2, r5                                            |         r2 = r5;
    0x0005b638 bl 0x26140                                            |         fcn_00026140 (r0, r1, r2, r3, r4);
    0x0005b63c ldr r3, [sp, 0x3c]                                    |         r3 = var_3ch;
    0x0005b63e cmp r3, r4                                            |         
    0x0005b640 bne 0x5b626                                           |         
                                                                     |     } while (r3 != r4);
    0x0005b642 mov r5, r8                                            |     r5 = r8;
    0x0005b644 ldrd r8, r6, [sp, 0xa0]                               |     __asm ("ldrd r8, r6, [var_a0h]");
                                                                     | label_94:
    0x0005b648 ldr r3, [sp, 0x40]                                    |     r3 = var_40h;
    0x0005b64a cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0005b64c beq.w 0x5bb16                                         |         goto label_95;
                                                                     |     }
    0x0005b650 ldr.w r3, [sb, 0x20]                                  |     r3 = *((sb + 0x20));
    0x0005b654 ldr r2, [sp, 0x90]                                    |     r2 = var_90h;
    0x0005b656 cmp r2, r3                                            |     
                                                                     |     if (r2 < r3) {
    0x0005b658 blt.w 0x5bb0c                                         |         goto label_96;
                                                                     |     }
                                                                     | label_29:
    0x0005b65c mov r0, r8                                            |     r0 = r8;
    0x0005b65e bl 0x18dcc                                            |     fcn_00018dcc (r0);
    0x0005b662 b 0x5b1d8                                             |     goto label_17;
                                                                     | label_64:
    0x0005b664 ldr r2, [sp, 0x7c]                                    |     r2 = var_7ch;
    0x0005b666 cmp r2, 0                                             |     
                                                                     |     if (r2 != 0) {
    0x0005b668 bne.w 0x5baec                                         |         goto label_97;
                                                                     |     }
    0x0005b66c ldr r1, [sp, 0x30]                                    |     r1 = var_30h;
    0x0005b66e str r2, [sp, 0x98]                                    |     var_98h = r2;
    0x0005b670 str r1, [sp, 0x84]                                    |     var_84h = r1;
    0x0005b672 str r1, [sp, 0x74]                                    |     var_74h = r1;
    0x0005b674 b 0x5b132                                             |     goto label_18;
                                                                     | label_70:
    0x0005b676 ldr r3, [sp, 0x34]                                    |     r3 = var_34h;
    0x0005b678 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0005b67a beq.w 0x5bb62                                         |         goto label_98;
                                                                     |     }
    0x0005b67e ldr.w r0, [sb, 0x18]                                  |     r0 = *((sb + 0x18));
    0x0005b682 bl 0x19ed0                                            |     fcn_00019ed0 (r0);
    0x0005b686 ldr r4, [sp, 0x40]                                    |     r4 = var_40h;
    0x0005b688 movs r1, 0x6a                                         |     r1 = 0x6a;
    0x0005b68a ldrd r8, r3, [sp, 0x8c]                               |     __asm ("ldrd r8, r3, [var_90h]");
    0x0005b68e str r0, [sp, 0x4c]                                    |     var_4ch = r0;
    0x0005b690 mov r0, sb                                            |     r0 = sb;
    0x0005b692 str r4, [sp]                                          |     *(sp) = r4;
    0x0005b694 mov r2, r8                                            |     r2 = r8;
    0x0005b696 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005b69a ldr r7, [sp, 0x78]                                    |     r7 = var_78h;
    0x0005b69c mov r2, r8                                            |     r2 = r8;
    0x0005b69e movs r1, 0x63                                         |     r1 = 0x63;
    0x0005b6a0 mov r0, sb                                            |     r0 = sb;
    0x0005b6a2 str r4, [sp]                                          |     *(sp) = r4;
    0x0005b6a4 mov r3, r7                                            |     r3 = r7;
    0x0005b6a6 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005b6aa ldr r3, [sp, 0x4c]                                    |     r3 = var_4ch;
    0x0005b6ac movs r1, 0x42                                         |     r1 = 0x42;
    0x0005b6ae str r0, [sp, 0x70]                                    |     var_70h = r0;
    0x0005b6b0 mov r0, sb                                            |     r0 = sb;
    0x0005b6b2 ldr r2, [sp, 0x58]                                    |     r2 = var_58h;
    0x0005b6b4 str r4, [sp, 4]                                       |     var_4h = r4;
    0x0005b6b6 str r7, [sp]                                          |     *(sp) = r7;
    0x0005b6b8 bl 0x19a3c                                            |     fcn_00019a3c (r0, r1, r2, r3, r4, r5);
    0x0005b6bc b 0x5b23c                                             |     goto label_19;
                                                                     | label_63:
    0x0005b6be ldr.w r3, [fp]                                        |     r3 = *(fp);
    0x0005b6c2 ldr.w sb, [r5, 0x3c]                                  |     sb = *((r5 + 0x3c));
    0x0005b6c6 ldr.w r4, [fp, 8]                                     |     r4 = *(arg_8h);
    0x0005b6ca str r3, [sp, 0x30]                                    |     var_30h = r3;
    0x0005b6cc ldr r1, [sp, 0x30]                                    |     r1 = var_30h;
    0x0005b6ce mov r3, sb                                            |     r3 = sb;
    0x0005b6d0 cmp.w sb, 0                                           |     
                                                                     |     if (sb != 0) {
    0x0005b6d4 bne 0x5b6dc                                           |         goto label_99;
                                                                     |     }
    0x0005b6d6 b 0x5b6e4                                             |     goto label_100;
                                                                     |     do {
    0x0005b6d8 ldr r3, [r3, 0x18]                                    |         r3 = *((r3 + 0x18));
                                                                     |         if (r3 == 0) {
    0x0005b6da cbz r3, 0x5b6e2                                       |             goto label_101;
                                                                     |         }
                                                                     | label_99:
    0x0005b6dc ldr r2, [r3]                                          |         r2 = *(r3);
    0x0005b6de cmp r1, r2                                            |         
    0x0005b6e0 bne 0x5b6d8                                           |         
                                                                     |     } while (r1 != r2);
                                                                     | label_101:
    0x0005b6e2 mov sb, r3                                            |     sb = r3;
                                                                     | label_100:
    0x0005b6e4 ldr r3, [pc, 0x120]                                   |     
    0x0005b6e6 mov.w r8, 0x72                                        |     r8 = 0x72;
    0x0005b6ea mov r2, r8                                            |     r2 = r8;
    0x0005b6ec add r3, pc                                            |     r3 = 0xb6ef8;
    0x0005b6ee str r3, [sp, 0xb8]                                    |     var_b8h = r3;
    0x0005b6f0 adds r3, 1                                            |     r3++;
                                                                     |     do {
                                                                     |         if (r2 == 0) {
    0x0005b6f2 cbz r2, 0x5b720                                       |             goto label_102;
                                                                     |         }
    0x0005b6f4 ldrb r2, [r3, 1]!                                     |         r2 = *((r3 += 1));
    0x0005b6f8 b 0x5b6f2                                             |         
                                                                     |     } while (1);
                                                                     | label_73:
    0x0005b6fa ldr r3, [sp, 0x38]                                    |     r3 = var_38h;
    0x0005b6fc cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0005b6fe beq.w 0x5bb06                                         |         goto label_103;
                                                                     |     }
    0x0005b702 ldr.w r3, [fp]                                        |     r3 = *(fp);
    0x0005b706 ldr r3, [r3, 0x18]                                    |     r3 = *((r3 + 0x18));
    0x0005b708 ands r3, r3, 0x80000                                  |     r3 &= 0x80000;
    0x0005b70c it eq                                                 |     
                                                                     |     if (r3 == r3) {
    0x0005b70e moveq r4, r3                                          |         r4 = r3;
                                                                     |         goto label_104;
                                                                     |     }
                                                                     |     if (r3 == r3) {
                                                                     | label_104:
    0x0005b710 beq.w 0x5b25e                                         |         goto label_20;
                                                                     |     }
    0x0005b714 mov r1, r5                                            |     r1 = r5;
    0x0005b716 mov r0, fp                                            |     r0 = fp;
    0x0005b718 bl 0x1e9b0                                            |     r0 = fcn_0001e9b0 (r0, r1, r2, r3, r4, r5);
    0x0005b71c mov r4, r0                                            |     r4 = r0;
    0x0005b71e b 0x5b25e                                             |     goto label_20;
                                                                     | label_102:
    0x0005b720 mov r8, r2                                            |     r8 = r2;
    0x0005b722 ldr r2, [pc, 0xe8]                                    |     
    0x0005b724 movs r1, 0x1b                                         |     r1 = 0x1b;
    0x0005b726 ldr r0, [sp, 0x30]                                    |     r0 = var_30h;
    0x0005b728 add r2, pc                                            |     r2 = 0xb6f3a;
    0x0005b72a subs r3, r3, r2                                       |     r3 -= r2;
    0x0005b72c bic r3, r3, 0xc0000000                                |     r3 = BIT_MASK (r3, 0xc0000000);
    0x0005b730 str r3, [sp, 0xbc]                                    |     var_bch = r3;
    0x0005b732 add r3, sp, 0xb8                                      |     r3 += var_b8h;
    0x0005b734 mov r2, r3                                            |     r2 = r3;
    0x0005b736 str r3, [sp, 0x38]                                    |     var_38h = r3;
    0x0005b738 mov r3, r8                                            |     r3 = r8;
    0x0005b73a bl 0xd7ac                                             |     fcn_0000d7ac (r0, r1, r2, r3);
    0x0005b73e mov r1, r8                                            |     r1 = r8;
    0x0005b740 mov r2, r0                                            |     r2 = r0;
    0x0005b742 ldr.w r0, [fp]                                        |     r0 = *(fp);
    0x0005b746 bl 0x19ba4                                            |     fcn_00019ba4 (r0, r1, r2);
    0x0005b74a ldr r1, [sp, 0x48]                                    |     r1 = var_48h;
    0x0005b74c mov r7, r0                                            |     r7 = r0;
                                                                     |     if (r1 != 0) {
    0x0005b74e cbz r1, 0x5b768                                       |         
    0x0005b750 mov r3, r8                                            |         r3 = r8;
    0x0005b752 mov r2, r8                                            |         r2 = r8;
    0x0005b754 ldr r0, [sp, 0x30]                                    |         r0 = var_30h;
    0x0005b756 bl 0xe5fc                                             |         fcn_0000e5fc (r0, r1, r2, r3, r4, r5);
    0x0005b75a mov r1, r7                                            |         r1 = r7;
    0x0005b75c mov r2, r0                                            |         r2 = r0;
    0x0005b75e ldr.w r0, [fp]                                        |         r0 = *(fp);
    0x0005b762 bl 0x19ba4                                            |         r0 = fcn_00019ba4 (r0, r1, r2);
    0x0005b766 mov r7, r0                                            |         r7 = r0;
                                                                     |     }
    0x0005b768 ldrsh.w r3, [r5, 0x26]                                |     r3 = *((r5 + 0x26));
    0x0005b76c cmp r3, 0                                             |     
                                                                     |     if (r3 <= 0) {
    0x0005b76e ble 0x5b814                                           |         goto label_105;
                                                                     |     }
    0x0005b770 ldr r3, [sp, 0x24]                                    |     r3 = var_24h;
    0x0005b772 str.w sl, [sp, 0x34]                                  |     __asm ("str.w sl, [var_34h]");
    0x0005b776 ldr.w sl, [sp, 0x64]                                  |     sl = var_64h;
    0x0005b77a sub.w r8, r3, 4                                       |     r8 = r3 - 4;
    0x0005b77e b 0x5b7ae                                             |     
                                                                     |     while (r3 >= 0) {
    0x0005b780 ldr r2, [r6, 4]                                       |         r2 = *((r6 + 4));
    0x0005b782 add.w r3, r3, r3, lsl 2                               |         r3 += (r3 << 2);
    0x0005b786 ldr r0, [sp, 0x30]                                    |         r0 = var_30h;
    0x0005b788 ldr.w r1, [r2, r3, lsl 2]                             |         offset_7 = r3 << 2;
                                                                     |         r1 = *((r2 + offset_7));
    0x0005b78c movs r3, 0                                            |         r3 = 0;
    0x0005b78e mov r2, r3                                            |         r2 = r3;
    0x0005b790 bl 0xe5fc                                             |         r0 = fcn_0000e5fc (r0, r1, r2, r3, r4, r5);
    0x0005b794 mov r2, r0                                            |         r2 = r0;
                                                                     | label_21:
    0x0005b796 mov r1, r7                                            |         r1 = r7;
    0x0005b798 ldr.w r0, [fp]                                        |         r0 = *(fp);
    0x0005b79c bl 0x19ba4                                            |         fcn_00019ba4 (r0, r1, r2);
    0x0005b7a0 ldrsh.w r3, [r5, 0x26]                                |         r3 = *((r5 + 0x26));
    0x0005b7a4 add.w sl, sl, 1                                       |         sl++;
    0x0005b7a8 mov r7, r0                                            |         r7 = r0;
    0x0005b7aa cmp sl, r3                                            |         
                                                                     |         if (sl >= r3) {
    0x0005b7ac bge 0x5b810                                           |             goto label_106;
                                                                     |         }
    0x0005b7ae ldr r3, [r8, 4]!                                      |         r3 = *((r8 += 4));
    0x0005b7b2 cmp r3, 0                                             |         
    0x0005b7b4 bge 0x5b780                                           |         
                                                                     |     }
    0x0005b7b6 ldr r3, [r5, 4]                                       |     r3 = *((r5 + 4));
    0x0005b7b8 add.w r2, sl, sl, lsl 1                               |     r2 = sl + (sl << 1);
    0x0005b7bc ldr.w r2, [r3, r2, lsl 3]                             |     offset_8 = r2 << 3;
                                                                     |     r2 = *((r3 + offset_8));
    0x0005b7c0 str r2, [sp, 0xb8]                                    |     var_b8h = r2;
                                                                     |     if (r2 == 0) {
    0x0005b7c2 cbz r2, 0x5b7dc                                       |         goto label_107;
                                                                     |     }
    0x0005b7c4 ldrb r3, [r2]                                         |     r3 = *(r2);
    0x0005b7c6 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0005b7c8 beq.w 0x5bc90                                         |         goto label_108;
                                                                     |     }
    0x0005b7cc mov r3, r2                                            |     r3 = r2;
                                                                     |     do {
    0x0005b7ce ldrb r1, [r3, 1]!                                     |         r1 = *((r3 += 1));
    0x0005b7d2 cmp r1, 0                                             |         
    0x0005b7d4 bne 0x5b7ce                                           |         
                                                                     |     } while (r1 != 0);
                                                                     | label_35:
    0x0005b7d6 subs r3, r3, r2                                       |     r3 -= r2;
    0x0005b7d8 bic r2, r3, 0xc0000000                                |     r2 = BIT_MASK (r3, 0xc0000000);
                                                                     | label_107:
    0x0005b7dc str r2, [sp, 0xbc]                                    |     var_bch = r2;
    0x0005b7de movs r3, 0                                            |     r3 = 0;
    0x0005b7e0 ldr r2, [sp, 0x38]                                    |     r2 = var_38h;
    0x0005b7e2 movs r1, 0x1b                                         |     r1 = 0x1b;
    0x0005b7e4 ldr r0, [sp, 0x30]                                    |     r0 = var_30h;
    0x0005b7e6 bl 0xd7ac                                             |     r0 = fcn_0000d7ac (r0, r1, r2, r3);
    0x0005b7ea mov r2, r0                                            |     r2 = r0;
    0x0005b7ec b 0x5b796                                             |     goto label_21;
                                                                     | label_106:
    0x0005b810 ldr.w sl, [sp, 0x34]                                  |     sl = var_34h;
                                                                     | label_105:
    0x0005b814 ldr r0, [sp, 0x48]                                    |     r0 = var_48h;
    0x0005b816 mov r1, r7                                            |     r1 = r7;
    0x0005b818 movs r7, 0                                            |     r7 = 0;
    0x0005b81a ldrd r2, r3, [sp, 0x28]                               |     __asm ("ldrd r2, r3, [var_2ch]");
    0x0005b81e strd r7, r7, [sp, 0x10]                               |     __asm ("strd r7, r7, [var_10h]");
    0x0005b822 subs r0, 0                                            |     
    0x0005b824 strd r7, r7, [sp, 8]                                  |     __asm ("strd r7, r7, [var_ch]");
    0x0005b828 it ne                                                 |     
                                                                     |     if (r0 == 0) {
    0x0005b82a movne r0, 1                                           |         r0 = 1;
                                                                     |     }
    0x0005b82c strd r7, r7, [sp]                                     |     __asm ("strd r7, r7, [sp]");
    0x0005b830 str r0, [sp, 0x28]                                    |     var_28h = r0;
    0x0005b832 mov r0, fp                                            |     r0 = fp;
    0x0005b834 bl 0x19c18                                            |     fcn_00019c18 (r0, r1, r2, r3, r4, r5, r6);
    0x0005b838 ldr.w r8, [fp, 0x44]                                  |     r8 = *(arg_44h);
    0x0005b83c movs r1, 0x38                                         |     r1 = 0x38;
    0x0005b83e ldrsh.w r3, [r5, 0x26]                                |     r3 = *((r5 + 0x26));
    0x0005b842 str r0, [sp, 0x34]                                    |     var_34h = r0;
    0x0005b844 ldr r0, [sp, 0x28]                                    |     r0 = var_28h;
    0x0005b846 add.w r2, r8, 1                                       |     r2 = r8 + 1;
    0x0005b84a adds r3, 1                                            |     r3++;
    0x0005b84c str r7, [sp]                                          |     *(sp) = r7;
    0x0005b84e str.w r2, [fp, 0x44]                                  |     __asm ("str.w r2, [arg_44h]");
    0x0005b852 mov r2, r8                                            |     r2 = r8;
    0x0005b854 add r3, r0                                            |     r3 += r0;
    0x0005b856 mov r0, r4                                            |     r0 = r4;
    0x0005b858 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005b85c ldr r3, [r4, 4]                                       |     r3 = *((r4 + 4));
                                                                     |     if (r3 != 0) {
    0x0005b85e cbz r3, 0x5b870                                       |         
    0x0005b860 ldr r2, [r4, 0x20]                                    |         r2 = *((r4 + 0x20));
    0x0005b862 add.w r2, r2, r2, lsl 2                               |         r2 += (r2 << 2);
    0x0005b866 add.w r3, r3, r2, lsl 2                               |         r3 += (r2 << 2);
    0x0005b86a movs r2, 8                                            |         r2 = 8;
    0x0005b86c strb r2, [r3, -0x11]                                  |         *((r3 - 0x11)) = r2;
                                                                     |     }
    0x0005b870 movs r7, 0                                            |     r7 = 0;
    0x0005b872 movs r3, 0xe                                          |     r3 = 0xe;
    0x0005b874 ldr r2, [sp, 0x38]                                    |     r2 = var_38h;
    0x0005b876 mov r0, fp                                            |     r0 = fp;
    0x0005b878 ldr r1, [sp, 0x34]                                    |     r1 = var_34h;
    0x0005b87a strh.w r3, [sp, 0xb8]                                 |     var_b8h = r3;
    0x0005b87c adds r0, 0xb8                                         |     r0 += 0xb8;
    0x0005b87e str.w r8, [sp, 0xbc]                                  |     __asm ("str.w r8, [var_bch]");
    0x0005b882 strd r7, r7, [sp, 0xc0]                               |     __asm ("strd r7, r7, [var_c0h]");
    0x0005b886 bl 0x392a8                                            |     fcn_000392a8 (r0, r1, r2, r3, r4, r5);
    0x0005b88a ldr.w r2, [fp, 0x48]                                  |     r2 = *(arg_48h);
    0x0005b88e mov r0, r4                                            |     r0 = r4;
    0x0005b890 ldrsh.w r3, [r5, 0x26]                                |     r3 = *((r5 + 0x26));
    0x0005b894 str r7, [sp]                                          |     *(sp) = r7;
    0x0005b896 adds r1, r2, 1                                        |     r1 = r2 + 1;
    0x0005b898 str r2, [sp, 0x2c]                                    |     var_2ch = r2;
    0x0005b89a adds r3, 1                                            |     r3++;
    0x0005b89c mov r2, r8                                            |     r2 = r8;
    0x0005b89e add r3, r1                                            |     r3 += r1;
    0x0005b8a0 str r1, [sp, 0x38]                                    |     var_38h = r1;
    0x0005b8a2 str.w r3, [fp, 0x48]                                  |     __asm ("str.w r3, [arg_48h]");
    0x0005b8a6 movs r1, 0x6a                                         |     r1 = 0x6a;
    0x0005b8a8 mov r3, r7                                            |     r3 = r7;
    0x0005b8aa bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005b8ae ldr r1, [sp, 0x38]                                    |     r1 = var_38h;
    0x0005b8b0 mov r3, r7                                            |     r3 = r7;
    0x0005b8b2 mov r2, r8                                            |     r2 = r8;
    0x0005b8b4 str r0, [sp, 0x3c]                                    |     var_3ch = r0;
    0x0005b8b6 mov r0, r4                                            |     r0 = r4;
    0x0005b8b8 str r1, [sp]                                          |     *(sp) = r1;
    0x0005b8ba movs r1, 0x2e                                         |     r1 = 0x2e;
    0x0005b8bc bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005b8c0 ldr r2, [sp, 0x2c]                                    |     r2 = var_2ch;
    0x0005b8c2 movs r1, 0x2e                                         |     r1 = 0x2e;
    0x0005b8c4 mov r0, r4                                            |     r0 = r4;
    0x0005b8c6 adds r3, r2, 2                                        |     r3 = r2 + 2;
    0x0005b8c8 mov r2, r8                                            |     r2 = r8;
    0x0005b8ca str r3, [sp]                                          |     *(sp) = r3;
    0x0005b8cc ldr r3, [sp, 0x28]                                    |     r3 = var_28h;
    0x0005b8ce bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005b8d2 ldrsh.w r3, [r5, 0x26]                                |     r3 = *((r5 + 0x26));
    0x0005b8d6 cmp r3, r7                                            |     
                                                                     |     if (r3 <= r7) {
    0x0005b8d8 ble 0x5b910                                           |         goto label_109;
                                                                     |     }
    0x0005b8da ldr r3, [sp, 0x28]                                    |     r3 = var_28h;
    0x0005b8dc adds r3, 1                                            |     r3++;
    0x0005b8de str r3, [sp, 0x28]                                    |     var_28h = r3;
    0x0005b8e0 ldr r3, [sp, 0x2c]                                    |     r3 = var_2ch;
    0x0005b8e2 adds r3, 3                                            |     r3 += 3;
    0x0005b8e4 str r3, [sp, 0x2c]                                    |     var_2ch = r3;
    0x0005b8e6 mov r3, r6                                            |     r3 = r6;
    0x0005b8e8 mov r6, r8                                            |     r6 = r8;
    0x0005b8ea mov r8, r3                                            |     r8 = r3;
                                                                     |     do {
    0x0005b8ec ldr r3, [sp, 0x2c]                                    |         r3 = var_2ch;
    0x0005b8ee mov r2, r6                                            |         r2 = r6;
    0x0005b8f0 movs r1, 0x2e                                         |         r1 = 0x2e;
    0x0005b8f2 mov r0, r4                                            |         r0 = r4;
    0x0005b8f4 add r3, r7                                            |         r3 += r7;
    0x0005b8f6 str r3, [sp]                                          |         *(sp) = r3;
    0x0005b8f8 ldr r3, [sp, 0x28]                                    |         r3 = var_28h;
    0x0005b8fa add r3, r7                                            |         r3 += r7;
    0x0005b8fc adds r7, 1                                            |         r7++;
    0x0005b8fe bl 0x18bf8                                            |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005b902 ldrsh.w r3, [r5, 0x26]                                |         r3 = *((r5 + 0x26));
    0x0005b906 cmp r7, r3                                            |         
    0x0005b908 blt 0x5b8ec                                           |         
                                                                     |     } while (r7 < r3);
    0x0005b90a mov r3, r8                                            |     r3 = r8;
    0x0005b90c mov r8, r6                                            |     r8 = r6;
    0x0005b90e mov r6, r3                                            |     r6 = r3;
                                                                     | label_109:
    0x0005b910 mov r1, r5                                            |     r1 = r5;
    0x0005b912 mov r0, fp                                            |     r0 = fp;
    0x0005b914 bl 0x35634                                            |     fcn_00035634 (r0, r1);
    0x0005b918 ldr r2, [sp, 0x38]                                    |     r2 = var_38h;
    0x0005b91a movs r1, 0xf                                          |     r1 = 0xf;
    0x0005b91c ldrsh.w r3, [r5, 0x26]                                |     r3 = *((r5 + 0x26));
    0x0005b920 mov r0, r4                                            |     r0 = r4;
    0x0005b922 str.w sb, [sp, 4]                                     |     __asm ("str.w sb, [var_4h]");
    0x0005b926 str r2, [sp]                                          |     *(sp) = r2;
    0x0005b928 mvn r2, 9                                             |     r2 = ~9;
    0x0005b92c adds r3, 2                                            |     r3 += 2;
    0x0005b92e str r2, [sp, 8]                                       |     var_8h = r2;
    0x0005b930 movs r2, 0                                            |     r2 = 0;
    0x0005b932 bl 0x1977c                                            |     fcn_0001977c (r0, r1, r2, r3, r4, r5);
    0x0005b936 ldr r3, [sp, 0x120]                                   |     r3 = *(arg_120h);
    0x0005b938 cmp r3, 0xa                                           |     
    0x0005b93a it eq                                                 |     
                                                                     |     if (r3 != 0xa) {
    0x0005b93c moveq r3, 2                                           |         r3 = 2;
                                                                     |     }
    0x0005b93e str r3, [sp, 0x120]                                   |     *(arg_120h) = r3;
    0x0005b940 ldr r3, [r4, 4]                                       |     r3 = *((r4 + 4));
                                                                     |     if (r3 != 0) {
    0x0005b942 cbz r3, 0x5b954                                       |         
    0x0005b944 ldr r2, [r4, 0x20]                                    |         r2 = *((r4 + 0x20));
    0x0005b946 add.w r2, r2, r2, lsl 2                               |         r2 += (r2 << 2);
    0x0005b94a add.w r3, r3, r2, lsl 2                               |         r3 += (r2 << 2);
    0x0005b94e ldr r2, [sp, 0x120]                                   |         r2 = *(arg_120h);
    0x0005b950 strb r2, [r3, -0x11]                                  |         *((r3 - 0x11)) = r2;
                                                                     |     }
    0x0005b954 ldr.w r3, [fp, 0x198]                                 |     r3 = *(arg_198h);
    0x0005b958 movs r2, 1                                            |     r2 = 1;
    0x0005b95a ldr r5, [sp, 0x3c]                                    |     r5 = var_3ch;
    0x0005b95c movs r1, 9                                            |     r1 = 9;
    0x0005b95e mov r0, r4                                            |     r0 = r4;
    0x0005b960 cmp r3, 0                                             |     
    0x0005b962 it eq                                                 |     
                                                                     |     if (r3 != 0) {
    0x0005b964 moveq r3, fp                                          |         r3 = fp;
                                                                     |     }
    0x0005b966 strb r2, [r3, 0x15]                                   |     *((r3 + 0x15)) = r2;
    0x0005b968 movs r3, 0                                            |     r3 = 0;
    0x0005b96a str r3, [sp]                                          |     *(sp) = r3;
    0x0005b96c adds r3, r5, r2                                       |     r3 = r5 + r2;
    0x0005b96e mov r2, r8                                            |     r2 = r8;
    0x0005b970 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005b974 ldr r2, [r4, 0x20]                                    |     r2 = *((r4 + 0x20));
    0x0005b976 mov r0, r4                                            |     r0 = r4;
    0x0005b978 cmp r5, r2                                            |     
    0x0005b97a ittt lo                                               |     
                                                                     |     if (r5 >= r2) {
    0x0005b97c ldrlo r1, [r4, 4]                                     |         r1 = *((r4 + 4));
                                                                     |     }
                                                                     |     if (r5 >= r2) {
    0x0005b97e addlo r3, r5, r5, lsl 2                               |         r3 = r5 + (r5 << 2);
                                                                     |     }
                                                                     |     if (r5 < r2) {
    0x0005b982 add.w r1, r1, r3, lsl 2                               |         r1 += (r3 << 2);
                                                                     |     }
    0x0005b986 add.w r3, r2, -1                                      |     r3 = r2 + -1;
    0x0005b98a it lo                                                 |     
                                                                     |     if (r5 >= r2) {
    0x0005b98c strlo r2, [r1, 8]                                     |         *((r1 + 8)) = r2;
                                                                     |     }
    0x0005b98e mov r2, r8                                            |     r2 = r8;
    0x0005b990 ldr r1, [r4, 0x18]                                    |     r1 = *((r4 + 0x18));
    0x0005b992 str r3, [r1, 0x58]                                    |     *((r1 + 0x58)) = r3;
    0x0005b994 movs r3, 0                                            |     r3 = 0;
    0x0005b996 movs r1, 0x3b                                         |     r1 = 0x3b;
    0x0005b998 str r3, [sp]                                          |     *(sp) = r3;
    0x0005b99a bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005b99e ldr r5, [sp, 0x34]                                    |     r5 = var_34h;
                                                                     |     if (r5 != 0) {
    0x0005b9a0 cbz r5, 0x5b9b4                                       |         
    0x0005b9a2 ldr r4, [sp, 0x30]                                    |         r4 = var_30h;
    0x0005b9a4 mov r1, r5                                            |         r1 = r5;
    0x0005b9a6 mov r0, r4                                            |         r0 = r4;
    0x0005b9a8 bl 0x12d90                                            |         fcn_00012d90 (r0, r1);
    0x0005b9ac mov r1, r5                                            |         r1 = r5;
    0x0005b9ae mov r0, r4                                            |         r0 = r4;
    0x0005b9b0 bl 0xe12c                                             |         fcn_0000e12c (r0, r1);
                                                                     |     }
    0x0005b9b4 movs r3, 0                                            |     r3 = 0;
    0x0005b9b6 ldr r2, [sp, 0xb4]                                    |     r2 = var_b4h;
    0x0005b9b8 str r3, [sp, 0x2c]                                    |     var_2ch = r3;
    0x0005b9ba str r3, [sp, 0x28]                                    |     var_28h = r3;
    0x0005b9bc b.w 0x5adf6                                           |     goto label_2;
                                                                     | label_72:
    0x0005b9c0 ldr r4, [sp, 0x74]                                    |     r4 = var_74h;
    0x0005b9c2 mov r0, fp                                            |     r0 = fp;
    0x0005b9c4 ldr r1, [sp, 0x48]                                    |     r1 = var_48h;
    0x0005b9c6 mov r2, r4                                            |     r2 = r4;
    0x0005b9c8 bl 0x3c4a8                                            |     fcn_0003c4a8 (r0, r1, r2);
    0x0005b9cc movs r3, 0                                            |     r3 = 0;
    0x0005b9ce mov r2, r4                                            |     r2 = r4;
    0x0005b9d0 movs r1, 0x26                                         |     r1 = 0x26;
    0x0005b9d2 mov r0, sb                                            |     r0 = sb;
    0x0005b9d4 str r3, [sp]                                          |     *(sp) = r3;
    0x0005b9d6 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005b9da b 0x5b244                                             |     goto label_22;
                                                                     | label_47:
    0x0005b9dc movw r7, 0xbdc0                                       |     
    0x0005b9e0 movt r7, 0xfff0                                       |     r7 = 0xfff0bdc0;
    0x0005b9e4 b.w 0x5adce                                           |     goto label_23;
                                                                     | label_92:
    0x0005b9e8 movs r3, 0                                            |     r3 = 0;
    0x0005b9ea ldr r2, [sp, 0x58]                                    |     r2 = var_58h;
    0x0005b9ec movs r1, 0x3b                                         |     r1 = 0x3b;
    0x0005b9ee mov r0, sb                                            |     r0 = sb;
    0x0005b9f0 str r3, [sp]                                          |     *(sp) = r3;
    0x0005b9f2 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005b9f6 b 0x5b53c                                             |     goto label_24;
                                                                     | label_85:
    0x0005b9f8 mov r2, r7                                            |     r2 = r7;
    0x0005b9fa mov r1, r5                                            |     r1 = r5;
    0x0005b9fc mov r0, sb                                            |     r0 = sb;
    0x0005b9fe bl 0x197e4                                            |     fcn_000197e4 (r0, r1, r2);
    0x0005ba02 ldr r3, [sp, 0x120]                                   |     r3 = *(arg_120h);
    0x0005ba04 movs r2, 0x6e                                         |     r2 = 0x6e;
    0x0005ba06 ldr r4, [sp, 0x4c]                                    |     r4 = var_4ch;
    0x0005ba08 mov r0, fp                                            |     r0 = fp;
    0x0005ba0a ldr r1, [sp, 0x54]                                    |     r1 = var_54h;
    0x0005ba0c str r3, [sp, 0xc]                                     |     var_ch = r3;
    0x0005ba0e ldr r3, [sp, 0x30]                                    |     r3 = var_30h;
    0x0005ba10 str r4, [sp, 0x10]                                    |     var_10h = r4;
    0x0005ba12 strd r5, r3, [sp, 4]                                  |     __asm ("strd r5, r3, [var_4h]");
    0x0005ba16 movs r3, 1                                            |     r3 = 1;
    0x0005ba18 str r3, [sp]                                          |     *(sp) = r3;
    0x0005ba1a mov r3, r6                                            |     r3 = r6;
    0x0005ba1c bl 0x59318                                            |     fcn_00059318 (r0, r1, r2, r3, r4, r5, r6);
    0x0005ba20 ldr r3, [sp, 0x34]                                    |     r3 = var_34h;
    0x0005ba22 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0005ba24 beq.w 0x5bc7e                                         |         goto label_110;
                                                                     |     }
    0x0005ba28 ldr r3, [sp, 0x3c]                                    |     r3 = var_3ch;
    0x0005ba2a movs r1, 0x42                                         |     r1 = 0x42;
    0x0005ba2c ldr r2, [sp, 0x58]                                    |     r2 = var_58h;
    0x0005ba2e mov r0, sb                                            |     r0 = sb;
    0x0005ba30 str r3, [sp, 4]                                       |     var_4h = r3;
    0x0005ba32 ldr r3, [sp, 0x78]                                    |     r3 = var_78h;
    0x0005ba34 str r3, [sp]                                          |     *(sp) = r3;
    0x0005ba36 mov r3, r4                                            |     r3 = r4;
    0x0005ba38 bl 0x19a3c                                            |     fcn_00019a3c (r0, r1, r2, r3, r4, r5);
                                                                     | label_34:
    0x0005ba3c ldrsh.w r3, [r5, 0x26]                                |     r3 = *((r5 + 0x26));
    0x0005ba40 cmp r3, 0                                             |     
                                                                     |     if (r3 <= 0) {
    0x0005ba42 ble.w 0x5b474                                         |         goto label_25;
                                                                     |     }
    0x0005ba46 ldr r2, [sp, 0x24]                                    |     r2 = var_24h;
    0x0005ba48 mov.w r8, 0                                           |     r8 = 0;
    0x0005ba4c subs r4, r2, 4                                        |     r4 = r2 - 4;
    0x0005ba4e b 0x5ba5a                                             |     goto label_111;
                                                                     | label_26:
    0x0005ba50 add.w r8, r8, 1                                       |     r8++;
    0x0005ba54 cmp r3, r8                                            |     
                                                                     |     if (r3 <= r8) {
    0x0005ba56 ble.w 0x5b474                                         |         goto label_25;
                                                                     |     }
                                                                     | label_111:
    0x0005ba5a ldr r2, [r4, 4]!                                      |     r2 = *((r4 += 4));
    0x0005ba5e cmp r2, 0                                             |     
                                                                     |     if (r2 >= 0) {
    0x0005ba60 bge 0x5ba50                                           |         goto label_26;
                                                                     |     }
    0x0005ba62 ldrsh.w r2, [r5, 0x24]                                |     r2 = *((r5 + 0x24));
    0x0005ba66 cmp r2, r8                                            |     
                                                                     |     if (r2 == r8) {
    0x0005ba68 beq 0x5ba50                                           |         goto label_26;
                                                                     |     }
    0x0005ba6a add.w r3, r7, r8                                      |     r3 = r7 + r8;
    0x0005ba6e ldr r2, [sp, 0x58]                                    |     r2 = var_58h;
    0x0005ba70 str r3, [sp]                                          |     *(sp) = r3;
    0x0005ba72 mov r1, r5                                            |     r1 = r5;
    0x0005ba74 mov r3, r8                                            |     r3 = r8;
    0x0005ba76 mov r0, sb                                            |     r0 = sb;
    0x0005ba78 bl 0x26140                                            |     fcn_00026140 (r0, r1, r2, r3, r4);
    0x0005ba7c ldrsh.w r3, [r5, 0x26]                                |     r3 = *((r5 + 0x26));
    0x0005ba80 b 0x5ba50                                             |     goto label_26;
                                                                     | label_69:
    0x0005ba82 ldr r3, [sp, 0x120]                                   |     r3 = *(arg_120h);
    0x0005ba84 cmp r3, 5                                             |     
                                                                     |     if (r3 == 5) {
    0x0005ba86 beq 0x5ba9a                                           |         goto label_112;
                                                                     |     }
    0x0005ba88 ldr r3, [r5, 8]                                       |     r3 = *((r5 + 8));
                                                                     |     if (r3 != 0) {
    0x0005ba8a cbnz r3, 0x5ba92                                      |         goto label_113;
                                                                     |     }
    0x0005ba8c b 0x5baa4                                             |     goto label_114;
                                                                     |     do {
    0x0005ba8e ldr r3, [r3, 0x14]                                    |         r3 = *((r3 + 0x14));
                                                                     |         if (r3 == 0) {
    0x0005ba90 cbz r3, 0x5baa4                                       |             goto label_114;
                                                                     |         }
                                                                     | label_113:
    0x0005ba92 ldrb.w r2, [r3, 0x36]                                 |         r2 = *((r3 + 0x36));
    0x0005ba96 cmp r2, 5                                             |         
    0x0005ba98 bne 0x5ba8e                                           |         
                                                                     |     } while (r2 != 5);
                                                                     | label_112:
    0x0005ba9a ldr r2, [sp, 0x70]                                    |     r2 = var_70h;
    0x0005ba9c movs r1, 1                                            |     r1 = 1;
    0x0005ba9e ldr r0, [sp, 0x6c]                                    |     r0 = var_6ch;
    0x0005baa0 blx 0x5fcc                                            |     fcn_00005fcc ();
                                                                     | label_114:
    0x0005baa4 ldr r3, [sp, 0x40]                                    |     r3 = var_40h;
                                                                     |     if (r3 != 0) {
    0x0005baa6 cbz r3, 0x5bac8                                       |         
    0x0005baa8 ldr r3, [sp, 0xec]                                    |         r3 = var_ech;
    0x0005baaa cmp r3, 0                                             |         
                                                                     |         if (r3 >= 0) {
    0x0005baac blt 0x5bab8                                           |             
    0x0005baae ldr r2, [sp, 0x60]                                    |             r2 = var_60h;
    0x0005bab0 ldr r1, [sp, 0x6c]                                    |             r1 = var_6ch;
    0x0005bab2 subs r3, r3, r2                                       |             r3 -= r2;
    0x0005bab4 movs r2, 0                                            |             r2 = 0;
    0x0005bab6 strb r2, [r1, r3]                                     |             *((r1 + r3)) = r2;
                                                                     |         }
    0x0005bab8 ldr r3, [sp, 0xf0]                                    |         r3 = var_f0h;
    0x0005baba cmp r3, 0                                             |         
                                                                     |         if (r3 < 0) {
    0x0005babc blt 0x5bac8                                           |             goto label_115;
                                                                     |         }
    0x0005babe ldr r2, [sp, 0x60]                                    |         r2 = var_60h;
    0x0005bac0 ldr r1, [sp, 0x6c]                                    |         r1 = var_6ch;
    0x0005bac2 subs r3, r3, r2                                       |         r3 -= r2;
    0x0005bac4 movs r2, 0                                            |         r2 = 0;
    0x0005bac6 strb r2, [r1, r3]                                     |         *((r1 + r3)) = r2;
                                                                     |     }
                                                                     | label_115:
    0x0005bac8 ldrb.w r3, [r5, 0x2c]                                 |     r3 = *((r5 + 0x2c));
    0x0005bacc ands r3, r3, 0x10                                     |     r3 &= 0x10;
                                                                     |     if (r3 != r3) {
    0x0005bad0 bne.w 0x5bcb0                                         |         goto label_116;
                                                                     |     }
    0x0005bad4 strd r3, r3, [sp, 4]                                  |     __asm ("strd r3, r3, [var_4h]");
    0x0005bad8 movs r2, 0x36                                         |     r2 = 0x36;
    0x0005bada ldr r3, [sp, 0x6c]                                    |     r3 = var_6ch;
    0x0005badc mov r1, r5                                            |     r1 = r5;
    0x0005bade mov r0, fp                                            |     r0 = fp;
    0x0005bae0 str r3, [sp]                                          |     *(sp) = r3;
    0x0005bae2 ldr r3, [sp, 0x60]                                    |     r3 = var_60h;
    0x0005bae4 bl 0x2230c                                            |     fcn_0002230c (r0, r1, r2, r3, r4, r5, r6);
    0x0005bae8 b.w 0x5b204                                           |     goto label_27;
                                                                     | label_97:
    0x0005baec ldr r2, [sp, 0x88]                                    |     r2 = var_88h;
    0x0005baee str r2, [sp, 0x98]                                    |     var_98h = r2;
    0x0005baf0 ldr r2, [sp, 0x30]                                    |     r2 = var_30h;
    0x0005baf2 str r2, [sp, 0x84]                                    |     var_84h = r2;
    0x0005baf4 movs r2, 1                                            |     r2 = 1;
    0x0005baf6 str r2, [sp, 0x88]                                    |     var_88h = r2;
    0x0005baf8 b.w 0x5b12a                                           |     goto label_28;
                                                                     | label_65:
    0x0005bafc str r2, [sp, 0x88]                                    |     var_88h = r2;
    0x0005bafe ldr r2, [sp, 0x30]                                    |     r2 = var_30h;
    0x0005bb00 str r2, [sp, 0x74]                                    |     var_74h = r2;
    0x0005bb02 b.w 0x5b132                                           |     goto label_18;
                                                                     | label_103:
    0x0005bb06 ldr r4, [sp, 0x38]                                    |     r4 = var_38h;
    0x0005bb08 b.w 0x5b25e                                           |     goto label_20;
                                                                     | label_96:
    0x0005bb0c mov r1, r2                                            |     r1 = r2;
    0x0005bb0e mov r0, sb                                            |     r0 = sb;
    0x0005bb10 bl 0x102bc                                            |     fcn_000102bc (r0, r1);
    0x0005bb14 b 0x5b65c                                             |     goto label_29;
                                                                     | label_95:
    0x0005bb16 ldr r1, [sp, 0x34]                                    |     r1 = var_34h;
    0x0005bb18 mov r0, sb                                            |     r0 = sb;
    0x0005bb1a bl 0xdafc                                             |     fcn_0000dafc (r0, r1);
    0x0005bb1e ldr r4, [sp, 0x94]                                    |     r4 = var_94h;
    0x0005bb20 mov r2, r7                                            |     r2 = r7;
    0x0005bb22 ldr r3, [sp, 0x3c]                                    |     r3 = var_3ch;
    0x0005bb24 movs r1, 0x30                                         |     r1 = 0x30;
    0x0005bb26 str r0, [sp, 4]                                       |     var_4h = r0;
    0x0005bb28 mov r0, sb                                            |     r0 = sb;
    0x0005bb2a str r4, [sp]                                          |     *(sp) = r4;
    0x0005bb2c str r3, [sp, 8]                                       |     var_8h = r3;
    0x0005bb2e bl 0x1977c                                            |     fcn_0001977c (r0, r1, r2, r3, r4, r5);
    0x0005bb32 ldr r2, [sp, 0x40]                                    |     r2 = var_40h;
    0x0005bb34 mov r3, r4                                            |     r3 = r4;
    0x0005bb36 movs r1, 0x6c                                         |     r1 = 0x6c;
    0x0005bb38 mov r0, sb                                            |     r0 = sb;
    0x0005bb3a str r4, [sp, 0x78]                                    |     var_78h = r4;
    0x0005bb3c str r2, [sp]                                          |     *(sp) = r2;
    0x0005bb3e str r2, [sp, 0x3c]                                    |     var_3ch = r2;
    0x0005bb40 ldr r2, [sp, 0x8c]                                    |     r2 = var_8ch;
    0x0005bb42 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005bb46 b 0x5b65c                                             |     goto label_29;
                                                                     | label_68:
    0x0005bb48 str r2, [sp]                                          |     *(sp) = r2;
    0x0005bb4a movs r1, 0x19                                         |     r1 = 0x19;
    0x0005bb4c ldr.w r3, [fp, 0x48]                                  |     r3 = *(arg_48h);
    0x0005bb50 mov r0, sb                                            |     r0 = sb;
    0x0005bb52 adds r3, 1                                            |     r3++;
    0x0005bb54 str.w r3, [fp, 0x48]                                  |     __asm ("str.w r3, [arg_48h]");
    0x0005bb58 str r3, [sp, 0x94]                                    |     var_94h = r3;
    0x0005bb5a bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005bb5e b.w 0x5b1f2                                           |     goto label_30;
                                                                     | label_98:
    0x0005bb62 ldr r4, [sp, 0x30]                                    |     r4 = var_30h;
    0x0005bb64 movs r1, 0x7f                                         |     r1 = 0x7f;
    0x0005bb66 ldr r2, [sp, 0x4c]                                    |     r2 = var_4ch;
    0x0005bb68 mov r0, sb                                            |     r0 = sb;
    0x0005bb6a ldr r3, [sp, 0x90]                                    |     r3 = var_90h;
    0x0005bb6c str r4, [sp]                                          |     *(sp) = r4;
    0x0005bb6e bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005bb72 ldr r2, [sp, 0x34]                                    |     r2 = var_34h;
    0x0005bb74 mov r3, r0                                            |     r3 = r0;
    0x0005bb76 str r0, [sp, 0x4c]                                    |     var_4ch = r0;
    0x0005bb78 movs r1, 0x44                                         |     r1 = 0x44;
    0x0005bb7a mov r0, sb                                            |     r0 = sb;
    0x0005bb7c str r4, [sp]                                          |     *(sp) = r4;
    0x0005bb7e str r2, [sp, 0x70]                                    |     var_70h = r2;
    0x0005bb80 ldr r2, [sp, 0x58]                                    |     r2 = var_58h;
    0x0005bb82 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005bb86 b.w 0x5b23c                                           |     goto label_19;
                                                                     | label_87:
    0x0005bb8a str r3, [sp]                                          |     *(sp) = r3;
    0x0005bb8c movs r1, 0x25                                         |     r1 = 0x25;
    0x0005bb8e ldr r2, [sp, 0x94]                                    |     r2 = var_94h;
    0x0005bb90 movs r3, 1                                            |     r3 = 1;
    0x0005bb92 mov r0, sb                                            |     r0 = sb;
    0x0005bb94 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005bb98 b 0x5b48e                                             |     goto label_31;
                                                                     | label_88:
    0x0005bb9a ldr r2, [sp, 0x34]                                    |     r2 = var_34h;
    0x0005bb9c movs r1, 0x10                                         |     r1 = 0x10;
    0x0005bb9e ldr r3, [sp, 0x4c]                                    |     r3 = var_4ch;
    0x0005bba0 mov r0, sb                                            |     r0 = sb;
    0x0005bba2 str r2, [sp]                                          |     *(sp) = r2;
    0x0005bba4 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005bba8 b 0x5b4e4                                             |     goto label_32;
                                                                     | label_86:
    0x0005bbaa ldr r3, [sp, 0x4c]                                    |     r3 = var_4ch;
    0x0005bbac mov r1, r5                                            |     r1 = r5;
    0x0005bbae ldr r2, [sp, 0x30]                                    |     r2 = var_30h;
    0x0005bbb0 mov r0, fp                                            |     r0 = fp;
    0x0005bbb2 str r3, [sp, 0x14]                                    |     var_14h = r3;
    0x0005bbb4 ldr r3, [sp, 0x7c]                                    |     r3 = var_7ch;
    0x0005bbb6 str r2, [sp, 8]                                       |     var_8h = r2;
    0x0005bbb8 ldr r2, [sp, 0x74]                                    |     r2 = var_74h;
    0x0005bbba subs r7, r3, 0                                        |     r7 = r3 - 0;
    0x0005bbbc str r3, [sp, 0xc]                                     |     var_ch = r3;
    0x0005bbbe ldr r3, [sp, 0x120]                                   |     r3 = *(arg_120h);
    0x0005bbc0 it ne                                                 |     
                                                                     |     if (r7 == r3) {
    0x0005bbc2 movne r7, 1                                           |         r7 = 1;
                                                                     |     }
    0x0005bbc4 str r2, [sp, 4]                                       |     var_4h = r2;
    0x0005bbc6 ldr r2, [sp, 0x5c]                                    |     r2 = var_5ch;
    0x0005bbc8 uxtb r3, r3                                           |     r3 = (int8_t) r3;
    0x0005bbca str r2, [sp]                                          |     *(sp) = r2;
    0x0005bbcc ldr r2, [sp, 0x50]                                    |     r2 = var_50h;
    0x0005bbce str r3, [sp, 0x10]                                    |     var_10h = r3;
    0x0005bbd0 add r3, sp, 0xb8                                      |     r3 += var_b8h;
    0x0005bbd2 str r3, [sp, 0x18]                                    |     var_18h = r3;
    0x0005bbd4 str r2, [sp, 0xb8]                                    |     var_b8h = r2;
    0x0005bbd6 ldr r3, [sp, 0x58]                                    |     r3 = var_58h;
    0x0005bbd8 ldr r2, [sp, 0x68]                                    |     r2 = var_68h;
    0x0005bbda bl 0x5a350                                            |     fcn_0005a350 (r0, r1, r2, r3, r4, r5, r6);
    0x0005bbde ldr r3, [sp, 0x38]                                    |     r3 = var_38h;
    0x0005bbe0 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0005bbe2 bne 0x5bcc8                                           |         goto label_117;
                                                                     |     }
    0x0005bbe4 ldr r3, [sp, 0xb8]                                    |     r3 = var_b8h;
                                                                     |     if (r3 == 0) {
    0x0005bbe6 cbnz r3, 0x5bbee                                      |         
    0x0005bbe8 cmp r7, 0                                             |         
                                                                     |         if (r7 == 0) {
    0x0005bbea beq.w 0x5be64                                         |             goto label_118;
                                                                     |         }
                                                                     |     }
    0x0005bbee ldr r3, [sp, 0x34]                                    |     r3 = var_34h;
    0x0005bbf0 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0005bbf2 beq.w 0x5bdd0                                         |         goto label_119;
                                                                     |     }
                                                                     |     do {
    0x0005bbf6 ldr r3, [sp, 0x3c]                                    |         r3 = var_3ch;
    0x0005bbf8 movs r1, 0x42                                         |         r1 = 0x42;
    0x0005bbfa ldr.w r8, [sp, 0x58]                                  |         r8 = var_58h;
    0x0005bbfe mov r0, sb                                            |         r0 = sb;
    0x0005bc00 str r3, [sp, 4]                                       |         var_4h = r3;
    0x0005bc02 ldr r3, [sp, 0x78]                                    |         r3 = var_78h;
    0x0005bc04 mov r2, r8                                            |         r2 = r8;
    0x0005bc06 str r3, [sp]                                          |         *(sp) = r3;
    0x0005bc08 movs r3, 0                                            |         r3 = 0;
    0x0005bc0a bl 0x19a3c                                            |         fcn_00019a3c (r0, r1, r2, r3, r4, r5);
    0x0005bc0e ldr r3, [sp, 0x68]                                    |         r3 = var_68h;
    0x0005bc10 mov r4, r0                                            |         r4 = r0;
    0x0005bc12 ldrb.w r2, [r5, 0x2c]                                 |         r2 = *((r5 + 0x2c));
    0x0005bc16 mov r0, fp                                            |         r0 = fp;
    0x0005bc18 str r3, [sp, 4]                                       |         var_4h = r3;
    0x0005bc1a ldr r3, [sp, 0x5c]                                    |         r3 = var_5ch;
    0x0005bc1c str r3, [sp]                                          |         *(sp) = r3;
    0x0005bc1e mov r3, r8                                            |         r3 = r8;
    0x0005bc20 ldr r1, [r5, 8]                                       |         r1 = *((r5 + 8));
    0x0005bc22 bl 0x3da14                                            |         fcn_0003da14 (r0, r1, r2, r3);
    0x0005bc26 movs r3, 0                                            |         r3 = 0;
    0x0005bc28 mov r2, r8                                            |         r2 = r8;
    0x0005bc2a str r3, [sp]                                          |         *(sp) = r3;
    0x0005bc2c movs r1, 0x4b                                         |         r1 = 0x4b;
    0x0005bc2e mov r0, sb                                            |         r0 = sb;
    0x0005bc30 bl 0x18bf8                                            |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005bc34 ldr r3, [sp, 0xb8]                                    |         r3 = var_b8h;
                                                                     |         if (r3 == 0) {
    0x0005bc36 cbnz r3, 0x5bc3a                                      |             
                                                                     |             if (r7 == 0) {
    0x0005bc38 cbz r7, 0x5bc56                                       |                 goto label_120;
                                                                     |             }
                                                                     |         }
                                                                     | label_38:
    0x0005bc3a ldr.w r3, [sb, 0x20]                                  |         r3 = *((sb + 0x20));
    0x0005bc3e cmp r4, r3                                            |         
    0x0005bc40 itttt lo                                              |         
                                                                     |         if (r4 >= r3) {
    0x0005bc42 ldrlo r2, [sb, 4]                                     |             r2 = *((sb + 4));
                                                                     |         }
                                                                     |         if (r4 >= r3) {
    0x0005bc46 movlo r1, 0x14                                        |             r1 = 0x14;
                                                                     |         }
                                                                     |         if (r4 < r3) {
    0x0005bc48 mlalo r2, r1, r4, r2                                  |             __asm ("mlalo r2, r1, r4, r2");
                                                                     |         }
                                                                     |         if (r4 < r3) {
    0x0005bc4c str r3, [r2, 8]                                       |             *((r2 + 8)) = r3;
                                                                     |         }
    0x0005bc4e subs r3, 1                                            |         r3--;
    0x0005bc50 ldr.w r2, [sb, 0x18]                                  |         r2 = *((sb + 0x18));
    0x0005bc54 str r3, [r2, 0x58]                                    |         *((r2 + 0x58)) = r3;
                                                                     | label_120:
    0x0005bc56 ldr r3, [sp, 0x38]                                    |         r3 = var_38h;
    0x0005bc58 cmp r3, 0                                             |         
                                                                     |         if (r3 != 0) {
    0x0005bc5a bne 0x5bd32                                           |             goto label_41;
                                                                     |         }
                                                                     | label_40:
    0x0005bc5c ldr r3, [sp, 0x68]                                    |         r3 = var_68h;
    0x0005bc5e mov r1, r5                                            |         r1 = r5;
    0x0005bc60 mov r0, fp                                            |         r0 = fp;
    0x0005bc62 str r3, [sp, 4]                                       |         var_4h = r3;
    0x0005bc64 ldr r3, [sp, 0x74]                                    |         r3 = var_74h;
    0x0005bc66 str r3, [sp]                                          |         *(sp) = r3;
    0x0005bc68 movs r3, 0                                            |         r3 = 0;
    0x0005bc6a strd r3, r3, [sp, 0xc]                                |         __asm ("strd r3, r3, [var_ch]");
    0x0005bc6e movs r3, 1                                            |         r3 = 1;
    0x0005bc70 str r3, [sp, 8]                                       |         var_8h = r3;
    0x0005bc72 ldrd r2, r3, [sp, 0x58]                               |         __asm ("ldrd r2, r3, [var_58h]");
    0x0005bc76 bl 0x19894                                            |         fcn_00019894 (r0, r1, r2, r3, r4, r5, r6);
    0x0005bc7a b.w 0x5b47c                                           |         goto label_33;
                                                                     | label_110:
    0x0005bc7e ldr r3, [sp, 0x30]                                    |         r3 = var_30h;
    0x0005bc80 movs r1, 0x44                                         |         r1 = 0x44;
    0x0005bc82 ldr r2, [sp, 0x58]                                    |         r2 = var_58h;
    0x0005bc84 mov r0, sb                                            |         r0 = sb;
    0x0005bc86 str r3, [sp]                                          |         *(sp) = r3;
    0x0005bc88 ldr r3, [sp, 0x4c]                                    |         r3 = var_4ch;
    0x0005bc8a bl 0x18bf8                                            |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005bc8e b 0x5ba3c                                             |         goto label_34;
                                                                     | label_108:
    0x0005bc90 mov r3, r2                                            |         r3 = r2;
    0x0005bc92 b 0x5b7d6                                             |         goto label_35;
                                                                     | label_45:
    0x0005bc94 blx 0x6498                                            |         fcn_00006498 ();
                                                                     | label_71:
    0x0005bc98 ldr r3, [sp, 0x3c]                                    |         r3 = var_3ch;
    0x0005bc9a movs r1, 0x42                                         |         r1 = 0x42;
    0x0005bc9c ldr r2, [sp, 0x58]                                    |         r2 = var_58h;
    0x0005bc9e mov r0, sb                                            |         r0 = sb;
    0x0005bca0 str r3, [sp, 4]                                       |         var_4h = r3;
    0x0005bca2 ldr r3, [sp, 0x78]                                    |         r3 = var_78h;
    0x0005bca4 str r3, [sp]                                          |         *(sp) = r3;
    0x0005bca6 ldr r3, [sp, 0x90]                                    |         r3 = var_90h;
    0x0005bca8 bl 0x19a3c                                            |         fcn_00019a3c (r0, r1, r2, r3, r4, r5);
    0x0005bcac b.w 0x5b21c                                           |         goto label_36;
                                                                     | label_116:
    0x0005bcb0 movs r3, 0                                            |         r3 = 0;
    0x0005bcb2 str r3, [r3]                                          |         *(r3) = r3;
    0x0005bcb4 udf 0xff                                              |         __asm ("udf 0xff");
                                                                     | label_67:
    0x0005bcb6 str r3, [sp]                                          |         *(sp) = r3;
    0x0005bcb8 movs r1, 0x7e                                         |         r1 = 0x7e;
    0x0005bcba ldr r3, [sp, 0x30]                                    |         r3 = var_30h;
    0x0005bcbc mov r0, sb                                            |         r0 = sb;
    0x0005bcbe ldr r2, [sp, 0x4c]                                    |         r2 = var_4ch;
    0x0005bcc0 bl 0x18bf8                                            |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005bcc4 b.w 0x5b1ca                                           |         goto label_37;
                                                                     | label_117:
    0x0005bcc8 ldr r3, [sp, 0x80]                                    |         r3 = var_80h;
    0x0005bcca mov r1, r5                                            |         r1 = r5;
    0x0005bccc ldr r2, [sp, 0x30]                                    |         r2 = var_30h;
    0x0005bcce mov r0, fp                                            |         r0 = fp;
    0x0005bcd0 str r3, [sp, 4]                                       |         var_4h = r3;
    0x0005bcd2 ldr r3, [sp, 0x24]                                    |         r3 = var_24h;
    0x0005bcd4 str r3, [sp]                                          |         *(sp) = r3;
    0x0005bcd6 ldr r3, [sp, 0x50]                                    |         r3 = var_50h;
    0x0005bcd8 bl 0x56c48                                            |         fcn_00056c48 (r0, r1, r2, r3, r4, r5, r6);
    0x0005bcdc ldr r3, [sp, 0xb8]                                    |         r3 = var_b8h;
                                                                     |         if (r3 == 0) {
    0x0005bcde cbnz r3, 0x5bce6                                      |             
    0x0005bce0 cmp r7, 0                                             |             
                                                                     |             if (r7 == 0) {
    0x0005bce2 beq.w 0x5be28                                         |                 goto label_121;
                                                                     |             }
                                                                     |         }
    0x0005bce6 ldr r3, [sp, 0x34]                                    |         r3 = var_34h;
    0x0005bce8 cmp r3, 0                                             |         
    0x0005bcea bne 0x5bbf6                                           |         
                                                                     |     } while (r3 != 0);
    0x0005bcec ldr.w r8, [sp, 0x58]                                  |     r8 = var_58h;
    0x0005bcf0 movs r1, 0x44                                         |     r1 = 0x44;
    0x0005bcf2 ldr r3, [sp, 0x30]                                    |     r3 = var_30h;
    0x0005bcf4 mov r0, sb                                            |     r0 = sb;
    0x0005bcf6 mov r2, r8                                            |     r2 = r8;
    0x0005bcf8 str r3, [sp]                                          |     *(sp) = r3;
    0x0005bcfa ldr r3, [sp, 0x34]                                    |     r3 = var_34h;
    0x0005bcfc bl 0x18bf8                                            |     r0 = fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005bd00 mov r4, r0                                            |     r4 = r0;
    0x0005bd02 ldr r0, [sp, 0x68]                                    |     r0 = var_68h;
    0x0005bd04 ldrb.w r2, [r5, 0x2c]                                 |     r2 = *((r5 + 0x2c));
    0x0005bd08 mov r3, r8                                            |     r3 = r8;
    0x0005bd0a str r0, [sp, 4]                                       |     var_4h = r0;
    0x0005bd0c ldr r0, [sp, 0x5c]                                    |     r0 = var_5ch;
    0x0005bd0e str r0, [sp]                                          |     *(sp) = r0;
    0x0005bd10 mov r0, fp                                            |     r0 = fp;
    0x0005bd12 ldr r1, [r5, 8]                                       |     r1 = *((r5 + 8));
    0x0005bd14 bl 0x3da14                                            |     fcn_0003da14 (r0, r1, r2, r3);
    0x0005bd18 ldr r1, [sp, 0x34]                                    |     r1 = var_34h;
    0x0005bd1a mov r2, r8                                            |     r2 = r8;
    0x0005bd1c mov r0, sb                                            |     r0 = sb;
    0x0005bd1e mov r3, r1                                            |     r3 = r1;
    0x0005bd20 str r1, [sp]                                          |     *(sp) = r1;
    0x0005bd22 movs r1, 0x4b                                         |     r1 = 0x4b;
    0x0005bd24 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005bd28 ldr r3, [sp, 0xb8]                                    |     r3 = var_b8h;
    0x0005bd2a cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0005bd2c bne 0x5bc3a                                           |         goto label_38;
                                                                     |     }
    0x0005bd2e cmp r7, 0                                             |     
                                                                     |     if (r7 != 0) {
    0x0005bd30 bne 0x5bc3a                                           |         goto label_38;
                                                                     |     }
                                                                     | label_41:
    0x0005bd32 ldr r3, [sp, 0x80]                                    |     r3 = var_80h;
    0x0005bd34 movs r2, 0                                            |     r2 = 0;
    0x0005bd36 ldr r4, [sp, 0x74]                                    |     r4 = var_74h;
    0x0005bd38 mov r1, r5                                            |     r1 = r5;
    0x0005bd3a mov r0, fp                                            |     r0 = fp;
    0x0005bd3c str r3, [sp, 4]                                       |     var_4h = r3;
    0x0005bd3e ldr r3, [sp, 0x24]                                    |     r3 = var_24h;
    0x0005bd40 str r3, [sp]                                          |     *(sp) = r3;
    0x0005bd42 mov r3, r4                                            |     r3 = r4;
    0x0005bd44 bl 0x56c48                                            |     fcn_00056c48 (r0, r1, r2, r3, r4, r5, r6);
    0x0005bd48 ldr r2, [sp, 0x68]                                    |     r2 = var_68h;
    0x0005bd4a movs r3, 0                                            |     r3 = 0;
    0x0005bd4c strd r3, r3, [sp, 0xc]                                |     __asm ("strd r3, r3, [var_ch]");
    0x0005bd50 movs r3, 1                                            |     r3 = 1;
    0x0005bd52 mov r1, r5                                            |     r1 = r5;
    0x0005bd54 str r3, [sp, 8]                                       |     var_8h = r3;
    0x0005bd56 str r2, [sp, 4]                                       |     var_4h = r2;
    0x0005bd58 mov r0, fp                                            |     r0 = fp;
    0x0005bd5a ldrd r2, r3, [sp, 0x58]                               |     __asm ("ldrd r2, r3, [var_58h]");
    0x0005bd5e str r4, [sp]                                          |     *(sp) = r4;
    0x0005bd60 bl 0x19894                                            |     fcn_00019894 (r0, r1, r2, r3, r4, r5, r6);
    0x0005bd64 ldr.w r3, [fp]                                        |     r3 = *(fp);
    0x0005bd68 ldr r3, [r3, 0x18]                                    |     r3 = *((r3 + 0x18));
    0x0005bd6a lsls r1, r3, 0xc                                      |     r1 = r3 << 0xc;
                                                                     |     if (r1 >= r3) {
    0x0005bd6c bpl.w 0x5b47c                                         |         goto label_33;
                                                                     |     }
    0x0005bd70 ldr r1, [r5]                                          |     r1 = *(r5);
    0x0005bd72 ldr r0, [r5, 0x44]                                    |     r0 = *((r5 + 0x44));
                                                                     |     if (r1 == 0) {
    0x0005bd74 cbz r1, 0x5bd8a                                       |         goto label_122;
                                                                     |     }
    0x0005bd76 mov r2, r1                                            |     r2 = r1;
                                                                     |     do {
    0x0005bd78 mov r3, r2                                            |         r3 = r2;
    0x0005bd7a adds r2, 1                                            |         r2++;
    0x0005bd7c ldrb r4, [r3]                                         |         r4 = *(r3);
    0x0005bd7e cmp r4, 0                                             |         
    0x0005bd80 bne 0x5bd78                                           |         
                                                                     |     } while (r4 != 0);
    0x0005bd82 subs r3, r3, r1                                       |     r3 -= r1;
    0x0005bd84 bic r3, r3, 0xc0000000                                |     r3 = BIT_MASK (r3, 0xc0000000);
    0x0005bd88 str r3, [sp, 0x64]                                    |     var_64h = r3;
                                                                     | label_122:
    0x0005bd8a ldr r2, [sp, 0x64]                                    |     r2 = var_64h;
    0x0005bd8c adds r0, 0x38                                         |     r0 += 0x38;
    0x0005bd8e bl 0x13f5c                                            |     fcn_00013f5c (r0, r1, r2);
    0x0005bd92 movs r7, 0                                            |     r7 = 0;
    0x0005bd94 mov r4, r0                                            |     r4 = r0;
    0x0005bd96 mov.w r8, 2                                           |     r8 = 2;
                                                                     | label_39:
    0x0005bd9a cmp r4, 0                                             |     
                                                                     |     if (r4 == 0) {
    0x0005bd9c beq.w 0x5b47c                                         |         goto label_33;
                                                                     |     }
    0x0005bda0 ldr r3, [sp, 0x80]                                    |     r3 = var_80h;
    0x0005bda2 mov r1, r4                                            |     r1 = r4;
    0x0005bda4 ldr r2, [sp, 0x24]                                    |     r2 = var_24h;
    0x0005bda6 mov r0, r5                                            |     r0 = r5;
    0x0005bda8 bl 0x124a4                                            |     r0 = fcn_000124a4 (r0, r1, r2, r3);
                                                                     |     if (r0 != 0) {
    0x0005bdac cbz r0, 0x5bdcc                                       |         
    0x0005bdae mov r1, r5                                            |         r1 = r5;
    0x0005bdb0 mov r3, r6                                            |         r3 = r6;
    0x0005bdb2 mov r2, r4                                            |         r2 = r4;
    0x0005bdb4 mov r0, fp                                            |         r0 = fp;
    0x0005bdb6 bl 0x1e4ac                                            |         r0 = fcn_0001e4ac (r0, r1, r2, r3, r4, r5, r6);
    0x0005bdba mov r1, r0                                            |         r1 = r0;
                                                                     |         if (r0 == 0) {
    0x0005bdbc cbz r0, 0x5bdcc                                       |             goto label_123;
                                                                     |         }
    0x0005bdbe ldr r3, [sp, 0x30]                                    |         r3 = var_30h;
    0x0005bdc0 mov r2, r5                                            |         r2 = r5;
    0x0005bdc2 mov r0, fp                                            |         r0 = fp;
    0x0005bdc4 strd r8, r7, [sp]                                     |         __asm ("strd r8, r7, [sp]");
    0x0005bdc8 bl 0x592a0                                            |         fcn_000592a0 (r0, r1, r2, r3, r4, r5);
                                                                     |     }
                                                                     | label_123:
    0x0005bdcc ldr r4, [r4, 0xc]                                     |     r4 = *((r4 + 0xc));
    0x0005bdce b 0x5bd9a                                             |     goto label_39;
                                                                     | label_119:
    0x0005bdd0 ldr r3, [sp, 0x30]                                    |     r3 = var_30h;
    0x0005bdd2 movs r1, 0x44                                         |     r1 = 0x44;
    0x0005bdd4 ldr.w r8, [sp, 0x58]                                  |     r8 = var_58h;
    0x0005bdd8 mov r0, sb                                            |     r0 = sb;
    0x0005bdda str r3, [sp]                                          |     *(sp) = r3;
    0x0005bddc mov r2, r8                                            |     r2 = r8;
    0x0005bdde ldr r3, [sp, 0x34]                                    |     r3 = var_34h;
    0x0005bde0 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005bde4 ldr r1, [sp, 0x68]                                    |     r1 = var_68h;
    0x0005bde6 mov r3, r8                                            |     r3 = r8;
    0x0005bde8 ldrb.w r2, [r5, 0x2c]                                 |     r2 = *((r5 + 0x2c));
    0x0005bdec mov r4, r0                                            |     r4 = r0;
    0x0005bdee mov r0, fp                                            |     r0 = fp;
    0x0005bdf0 str r1, [sp, 4]                                       |     var_4h = r1;
    0x0005bdf2 ldr r1, [sp, 0x5c]                                    |     r1 = var_5ch;
    0x0005bdf4 str r1, [sp]                                          |     *(sp) = r1;
    0x0005bdf6 ldr r1, [r5, 8]                                       |     r1 = *((r5 + 8));
    0x0005bdf8 bl 0x3da14                                            |     fcn_0003da14 (r0, r1, r2, r3);
    0x0005bdfc ldr r3, [sp, 0x88]                                    |     r3 = var_88h;
                                                                     |     if (r3 != 0) {
    0x0005bdfe cbnz r3, 0x5be0a                                      |         goto label_124;
                                                                     |     }
                                                                     | label_43:
    0x0005be00 ldr r3, [sp, 0xb8]                                    |     r3 = var_b8h;
    0x0005be02 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0005be04 bne.w 0x5bc3a                                         |         goto label_38;
                                                                     |     }
    0x0005be08 b 0x5bc5c                                             |     goto label_40;
                                                                     | label_124:
    0x0005be0a ldr r3, [sp, 0x34]                                    |     r3 = var_34h;
    0x0005be0c movs r1, 0x4b                                         |     r1 = 0x4b;
    0x0005be0e ldr r2, [sp, 0x58]                                    |     r2 = var_58h;
    0x0005be10 mov r0, sb                                            |     r0 = sb;
    0x0005be12 str r3, [sp]                                          |     *(sp) = r3;
    0x0005be14 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005be18 ldr r3, [sp, 0xb8]                                    |     r3 = var_b8h;
    0x0005be1a cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0005be1c bne.w 0x5bc3a                                         |         goto label_38;
                                                                     |     }
    0x0005be20 cmp r7, 0                                             |     
                                                                     |     if (r7 != 0) {
    0x0005be22 bne.w 0x5bc3a                                         |         goto label_38;
                                                                     |     }
    0x0005be26 b 0x5bc5c                                             |     goto label_40;
                                                                     | label_121:
    0x0005be28 ldr r3, [sp, 0x68]                                    |     r3 = var_68h;
    0x0005be2a mov r0, fp                                            |     r0 = fp;
    0x0005be2c ldrb.w r2, [r5, 0x2c]                                 |     r2 = *((r5 + 0x2c));
    0x0005be30 ldr r4, [sp, 0x58]                                    |     r4 = var_58h;
    0x0005be32 str r3, [sp, 4]                                       |     var_4h = r3;
    0x0005be34 ldr r3, [sp, 0x5c]                                    |     r3 = var_5ch;
    0x0005be36 str r3, [sp]                                          |     *(sp) = r3;
    0x0005be38 mov r3, r4                                            |     r3 = r4;
    0x0005be3a ldr r1, [r5, 8]                                       |     r1 = *((r5 + 8));
    0x0005be3c bl 0x3da14                                            |     fcn_0003da14 (r0, r1, r2, r3);
    0x0005be40 ldr r1, [sp, 0x50]                                    |     r1 = var_50h;
    0x0005be42 mov r2, r4                                            |     r2 = r4;
    0x0005be44 mov r0, sb                                            |     r0 = sb;
    0x0005be46 mov r3, r1                                            |     r3 = r1;
    0x0005be48 str r1, [sp]                                          |     *(sp) = r1;
    0x0005be4a movs r1, 0x4b                                         |     r1 = 0x4b;
    0x0005be4c bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005be50 ldr r3, [sp, 0xb8]                                    |     r3 = var_b8h;
    0x0005be52 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0005be54 beq.w 0x5bd32                                         |         goto label_41;
                                                                     |     }
    0x0005be58 ldr r4, [sp, 0x50]                                    |     r4 = var_50h;
    0x0005be5a b 0x5bc3a                                             |     goto label_38;
                                                                     | label_59:
    0x0005be5c ldr r2, [r6, 4]                                       |     r2 = *((r6 + 4));
    0x0005be5e add r2, r8                                            |     r2 += r8;
    0x0005be60 b.w 0x5b2e6                                           |     goto label_42;
                                                                     | label_118:
    0x0005be64 ldr r3, [sp, 0x68]                                    |     r3 = var_68h;
    0x0005be66 mov r0, fp                                            |     r0 = fp;
    0x0005be68 ldrb.w r2, [r5, 0x2c]                                 |     r2 = *((r5 + 0x2c));
    0x0005be6c str r3, [sp, 4]                                       |     var_4h = r3;
    0x0005be6e ldr r3, [sp, 0x5c]                                    |     r3 = var_5ch;
    0x0005be70 str r3, [sp]                                          |     *(sp) = r3;
    0x0005be72 ldr r3, [sp, 0x58]                                    |     r3 = var_58h;
    0x0005be74 ldr r1, [r5, 8]                                       |     r1 = *((r5 + 8));
    0x0005be76 bl 0x3da14                                            |     fcn_0003da14 (r0, r1, r2, r3);
    0x0005be7a ldr r3, [sp, 0x88]                                    |     r3 = var_88h;
                                                                     |     if (r3 == 0) {
    0x0005be7c cbnz r3, 0x5be82                                      |         
    0x0005be7e ldr r3, [sp, 0x34]                                    |         r3 = var_34h;
                                                                     |         if (r3 == 0) {
    0x0005be80 cbz r3, 0x5be9c                                       |             goto label_125;
                                                                     |         }
                                                                     |     }
    0x0005be82 ldr r3, [sp, 0x38]                                    |     r3 = var_38h;
    0x0005be84 movs r1, 0x4b                                         |     r1 = 0x4b;
    0x0005be86 ldr r2, [sp, 0x58]                                    |     r2 = var_58h;
    0x0005be88 mov r0, sb                                            |     r0 = sb;
    0x0005be8a str r3, [sp]                                          |     *(sp) = r3;
    0x0005be8c bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005be90 ldr r3, [sp, 0xb8]                                    |     r3 = var_b8h;
    0x0005be92 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0005be94 beq.w 0x5bc5c                                         |         goto label_40;
                                                                     |     }
    0x0005be98 ldr r4, [sp, 0x38]                                    |     r4 = var_38h;
    0x0005be9a b 0x5bc3a                                             |     goto label_38;
                                                                     | label_125:
    0x0005be9c mov r4, r3                                            |     r4 = r3;
    0x0005be9e b 0x5be00                                             |     goto label_43;
                                                                     | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x5bea0 */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) fcn.0005bea0 ()                                  | void fcn_0005bea0 (int16_t arg1, int16_t arg2, int16_t arg3) {
                                                             |     int16_t var_0h;
                                                             |     int16_t var_8h;
                                                             |     int16_t var_ch;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
                                                             |     r2 = arg3;
    0x0005bea0 push.w {r4, r5, r6, r7, r8, sb, lr}           |     
    0x0005bea4 mov r7, r2                                    |     r7 = r2;
    0x0005bea6 ldr r2, [pc, 0x14c]                           |     
    0x0005bea8 sub sp, 0x14                                  |     
    0x0005beaa mov r5, r0                                    |     r5 = r0;
    0x0005beac mov r4, r1                                    |     r4 = r1;
    0x0005beae ldr r3, [pc, 0x148]                           |     r3 = *(0x5bffa);
    0x0005beb0 add r2, pc                                    |     r2 = 0xb7eaa;
    0x0005beb2 ldr r6, [r0]                                  |     r6 = *(r0);
    0x0005beb4 ldr r3, [r2, r3]                              |     
    0x0005beb6 ldr r3, [r3]                                  |     r3 = *(0xb7eaa);
    0x0005beb8 str r3, [sp, 0xc]                             |     var_ch = r3;
    0x0005beba mov.w r3, 0                                   |     r3 = 0;
    0x0005bebe ldrb.w r3, [r6, 0x89]                         |     r3 = *((r6 + 0x89));
    0x0005bec2 cbz r3, 0x5bf10                               |     
                                                             |     while (r0 == 0) {
    0x0005bec4 cmp r4, 0                                     |         
                                                             |         if (r4 == 0) {
    0x0005bec6 beq 0x5bfb8                                   |             goto label_5;
                                                             |         }
    0x0005bec8 ldr.w sb, [r7, 4]                             |         sb = *((r7 + 4));
    0x0005becc cmp.w sb, 0                                   |         
                                                             |         if (sb != 0) {
    0x0005bed0 bne 0x5bf3e                                   |             goto label_6;
                                                             |         }
    0x0005bed2 mov r1, r4                                    |         r1 = r4;
    0x0005bed4 mov r0, r6                                    |         r0 = r6;
    0x0005bed6 bl 0xd5e4                                     |         r0 = fcn_0000d5e4 (r0, r1);
    0x0005beda mov r7, r0                                    |         r7 = r0;
    0x0005bedc mov r0, r6                                    |         r0 = r6;
    0x0005bede mov r1, r7                                    |         r1 = r7;
    0x0005bee0 bl 0x123f8                                    |         fcn_000123f8 (r0, r1);
    0x0005bee4 mov r1, r7                                    |         r1 = r7;
    0x0005bee6 mov r8, r0                                    |         r8 = r0;
    0x0005bee8 mov r0, r6                                    |         r0 = r6;
    0x0005beea bl 0xe12c                                     |         fcn_0000e12c (r0, r1);
    0x0005beee cmp.w r8, 0                                   |         
                                                             |         if (r8 < 0) {
    0x0005bef2 blt 0x5bf96                                   |             goto label_7;
                                                             |         }
    0x0005bef4 mov r1, r8                                    |         r1 = r8;
    0x0005bef6 mov r0, r5                                    |         r0 = r5;
    0x0005bef8 bl 0x4c324                                    |         fcn_0004c324 (r0, r1);
                                                             | label_0:
    0x0005befc ldr r0, [r5, 8]                               |         r0 = *((r5 + 8));
    0x0005befe cmp r0, 0                                     |         
                                                             |         if (r0 == 0) {
    0x0005bf00 beq 0x5bf8a                                   |             goto label_8;
                                                             |         }
                                                             | label_1:
    0x0005bf02 movs r3, 0                                    |         r3 = 0;
    0x0005bf04 movs r1, 0x8c                                 |         r1 = 0x8c;
    0x0005bf06 mov r2, r3                                    |         r2 = r3;
    0x0005bf08 str r3, [sp]                                  |         *(sp) = r3;
    0x0005bf0a bl 0x18bf8                                    |         fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005bf0e b 0x5bf24                                     |         goto label_2;
    0x0005bf10 adds r1, r0, 4                                |         r1 = r0 + 4;
    0x0005bf12 mov r0, r6                                    |         r0 = r6;
    0x0005bf14 bl 0x556b8                                    |         r0 = fcn_000556b8 (r0, r1, r2);
    0x0005bf18 cmp r0, 0                                     |         
    0x0005bf1a beq 0x5bec4                                   |         
                                                             |     }
    0x0005bf1c ldr r3, [r5, 0x40]                            |     r3 = *((r5 + 0x40));
    0x0005bf1e str r0, [r5, 0xc]                             |     *((r5 + 0xc)) = r0;
    0x0005bf20 adds r3, 1                                    |     r3++;
    0x0005bf22 str r3, [r5, 0x40]                            |     *((r5 + 0x40)) = r3;
                                                             | label_2:
    0x0005bf24 ldr r2, [pc, 0xd4]                            |     
    0x0005bf26 ldr r3, [pc, 0xd0]                            |     r3 = *(0x5bffa);
    0x0005bf28 add r2, pc                                    |     r2 = 0xb7f28;
    0x0005bf2a ldr r3, [r2, r3]                              |     r3 = *(0xb7f28);
    0x0005bf2c ldr r2, [r3]                                  |     r2 = *(0xb7f28);
    0x0005bf2e ldr r3, [sp, 0xc]                             |     r3 = var_ch;
    0x0005bf30 eors r2, r3                                   |     r2 ^= r3;
    0x0005bf32 mov.w r3, 0                                   |     r3 = 0;
                                                             |     if (r2 != r3) {
    0x0005bf36 bne 0x5bff0                                   |         goto label_9;
                                                             |     }
    0x0005bf38 add sp, 0x14                                  |     
    0x0005bf3a pop.w {r4, r5, r6, r7, r8, sb, pc}            |     
                                                             | label_6:
    0x0005bf3e add r3, sp, 8                                 |     r3 += var_8h;
    0x0005bf40 mov r2, r7                                    |     r2 = r7;
    0x0005bf42 mov r1, r4                                    |     r1 = r4;
    0x0005bf44 mov r0, r5                                    |     r0 = r5;
    0x0005bf46 bl 0x1cbbc                                    |     r0 = fcn_0001cbbc (r0, r1, r2, r3);
    0x0005bf4a cmp r0, 0                                     |     
                                                             |     if (r0 < 0) {
    0x0005bf4c blt 0x5befc                                   |         goto label_0;
                                                             |     }
    0x0005bf4e ldr r3, [r6, 0x10]                            |     r3 = *((r6 + 0x10));
    0x0005bf50 lsls r0, r0, 4                                |     r0 <<= 4;
    0x0005bf52 ldr r1, [sp, 8]                               |     r1 = var_8h;
    0x0005bf54 ldr.w r8, [r3, r0]                            |     r8 = *((r3 + r0));
    0x0005bf58 mov r0, r6                                    |     r0 = r6;
    0x0005bf5a bl 0xd5e4                                     |     r0 = fcn_0000d5e4 (r0, r1);
    0x0005bf5e mov r4, r0                                    |     r4 = r0;
    0x0005bf60 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x0005bf62 beq 0x5befc                                   |         goto label_0;
                                                             |     }
    0x0005bf64 mov r1, r0                                    |     r1 = r0;
    0x0005bf66 mov r2, r8                                    |     r2 = r8;
    0x0005bf68 mov r0, r6                                    |     r0 = r6;
    0x0005bf6a bl 0x13fac                                    |     r0 = fcn_00013fac (r0, r1, r2);
    0x0005bf6e mov r7, r0                                    |     r7 = r0;
                                                             |     if (r0 == 0) {
    0x0005bf70 cbz r0, 0x5bfd4                               |         goto label_10;
                                                             |     }
                                                             | label_3:
    0x0005bf72 ldr r1, [r7, 0xc]                             |     r1 = *((r7 + 0xc));
    0x0005bf74 mov r2, r7                                    |     r2 = r7;
    0x0005bf76 mov r0, r5                                    |     r0 = r5;
    0x0005bf78 bl 0x4c3b0                                    |     fcn_0004c3b0 (r0, r1, r2);
                                                             | label_4:
    0x0005bf7c mov r0, r6                                    |     r0 = r6;
    0x0005bf7e mov r1, r4                                    |     r1 = r4;
    0x0005bf80 bl 0xe12c                                     |     fcn_0000e12c (r0, r1);
    0x0005bf84 ldr r0, [r5, 8]                               |     r0 = *((r5 + 8));
    0x0005bf86 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x0005bf88 bne 0x5bf02                                   |         goto label_1;
                                                             |     }
                                                             | label_8:
    0x0005bf8a mov r0, r5                                    |     r0 = r5;
    0x0005bf8c bl 0x192c8                                    |     r0 = fcn_000192c8 (r0);
    0x0005bf90 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x0005bf92 beq 0x5bf24                                   |         goto label_2;
                                                             |     }
    0x0005bf94 b 0x5bf02                                     |     goto label_1;
                                                             | label_7:
    0x0005bf96 mov r1, r4                                    |     r1 = r4;
    0x0005bf98 mov r0, r6                                    |     r0 = r6;
    0x0005bf9a bl 0xd5e4                                     |     r0 = fcn_0000d5e4 (r0, r1);
    0x0005bf9e mov r4, r0                                    |     r4 = r0;
    0x0005bfa0 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x0005bfa2 beq 0x5befc                                   |         goto label_0;
                                                             |     }
    0x0005bfa4 mov r1, r0                                    |     r1 = r0;
    0x0005bfa6 mov r2, sb                                    |     r2 = sb;
    0x0005bfa8 mov r0, r6                                    |     r0 = r6;
    0x0005bfaa bl 0x13fac                                    |     r0 = fcn_00013fac (r0, r1, r2);
    0x0005bfae mov r7, r0                                    |     r7 = r0;
    0x0005bfb0 cmp r0, 0                                     |     
                                                             |     if (r0 != 0) {
    0x0005bfb2 bne 0x5bf72                                   |         goto label_3;
                                                             |     }
    0x0005bfb4 mov r3, r0                                    |     r3 = r0;
    0x0005bfb6 b 0x5bfd6                                     |     goto label_11;
                                                             | label_5:
    0x0005bfb8 ldr r3, [r6, 0x14]                            |     r3 = *((r6 + 0x14));
    0x0005bfba cmp r3, 0                                     |     
                                                             |     if (r3 <= 0) {
    0x0005bfbc ble 0x5befc                                   |         goto label_0;
                                                             |     }
                                                             |     do {
    0x0005bfbe cmp r4, 1                                     |         
                                                             |         if (r4 != 1) {
    0x0005bfc0 beq 0x5bfcc                                   |             
    0x0005bfc2 mov r1, r4                                    |             r1 = r4;
    0x0005bfc4 mov r0, r5                                    |             r0 = r5;
    0x0005bfc6 bl 0x4c324                                    |             fcn_0004c324 (r0, r1);
    0x0005bfca ldr r3, [r6, 0x14]                            |             r3 = *((r6 + 0x14));
                                                             |         }
    0x0005bfcc adds r4, 1                                    |         r4++;
    0x0005bfce cmp r3, r4                                    |         
    0x0005bfd0 bgt 0x5bfbe                                   |         
                                                             |     } while (r3 > r4);
    0x0005bfd2 b 0x5befc                                     |     goto label_0;
                                                             | label_10:
    0x0005bfd4 mov r3, r8                                    |     r3 = r8;
                                                             | label_11:
    0x0005bfd6 mov r1, r7                                    |     r1 = r7;
    0x0005bfd8 mov r2, r4                                    |     r2 = r4;
    0x0005bfda mov r0, r5                                    |     r0 = r5;
    0x0005bfdc bl 0x55f68                                    |     r0 = fcn_00055f68 (r0, r1, r2, r3);
    0x0005bfe0 mov r1, r0                                    |     r1 = r0;
    0x0005bfe2 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x0005bfe4 beq 0x5bf7c                                   |         goto label_4;
                                                             |     }
    0x0005bfe6 mov r2, r7                                    |     r2 = r7;
    0x0005bfe8 mov r0, r5                                    |     r0 = r5;
    0x0005bfea bl 0x4c3b0                                    |     fcn_0004c3b0 (r0, r1, r2);
    0x0005bfee b 0x5bf7c                                     |     goto label_4;
                                                             | label_9:
    0x0005bff0 blx 0x6498                                    |     fcn_00006498 ();
    0x0005bff4 pop {r3, r5, r7, pc}                          |     
                                                             | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x5c000 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.0005c000 ()                                      | void fcn_0005c000 (int16_t arg_4h, int16_t arg_11h, int16_t arg_40h, int16_t arg_48h, int16_t arg_1c3h, int16_t arg_1e4h, int16_t arg_1f8h, int16_t arg_1fch, int16_t arg_108h, int16_t arg_110h, int16_t arg_114h, int16_t arg_118h, int16_t arg_11ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h_2;
                                                                 |     int16_t var_4h;
                                                                 |     int32_t var_8h;
                                                                 |     int32_t var_8h_2;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch_2;
                                                                 |     int16_t var_20h_2;
                                                                 |     int16_t var_24h_2;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch_2;
                                                                 |     int16_t var_30h_2;
                                                                 |     int16_t var_34h_2;
                                                                 |     int16_t var_38h_2;
                                                                 |     int16_t var_3ch_2;
                                                                 |     int16_t var_40h_2;
                                                                 |     int16_t var_44h_2;
                                                                 |     int16_t var_48h_2;
                                                                 |     int16_t var_4ch_2;
                                                                 |     int16_t var_50h;
                                                                 |     int16_t var_54h;
                                                                 |     int32_t var_58h;
                                                                 |     int32_t var_58h_2;
                                                                 |     int16_t var_60h;
                                                                 |     int16_t var_64h_2;
                                                                 |     int16_t var_68h_2;
                                                                 |     int16_t var_6ch_2;
                                                                 |     int32_t var_70h;
                                                                 |     int32_t var_70h_2;
                                                                 |     int32_t var_78h;
                                                                 |     int32_t var_78h_2;
                                                                 |     int32_t var_80h;
                                                                 |     int16_t var_84h;
                                                                 |     int16_t var_88h;
                                                                 |     int16_t var_8ch;
                                                                 |     int16_t var_98h_2;
                                                                 |     int16_t var_a0h;
                                                                 |     int16_t var_b8h;
                                                                 |     int16_t var_dch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x0005c000 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x0005c004 mov r4, r2                                        |     r4 = r2;
    0x0005c006 sub sp, 0xe4                                      |     
    0x0005c008 ldr.w r2, [pc, 0x998]                             |     r2 = *(0x0005c9a4);
    0x0005c00c mov fp, r0                                        |     
    0x0005c00e str r3, [sp, 0x14]                                |     var_14h = r3;
    0x0005c010 ldr r0, [sp, 0x108]                               |     r0 = *(arg_108h);
    0x0005c012 add r2, pc                                        |     r2 += pc;
    0x0005c014 ldr.w r3, [pc, 0x990]                             |     
    0x0005c018 ldr.w r5, [fp]                                    |     r5 = *(fp);
    0x0005c01c str r0, [sp, 0x10]                                |     var_10h = r0;
    0x0005c01e ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x0005c020 ldr r2, [sp, 0x110]                               |     r2 = *(arg_110h);
    0x0005c022 ldr.w sl, [sp, 0x114]                             |     sl = *(arg_114h);
    0x0005c026 ldr r3, [r3]                                      |     r3 = *(0x5c9a8);
    0x0005c028 str r3, [sp, 0xdc]                                |     var_dch = r3;
    0x0005c02a mov.w r3, 0                                       |     r3 = 0;
    0x0005c02e movs r3, 0                                        |     r3 = 0;
    0x0005c030 strd r3, r3, [sp, 0x48]                           |     __asm ("strd r3, r3, [var_48h_2]");
    0x0005c034 ldrb.w r3, [r5, 0x40]                             |     r3 = *((r5 + 0x40));
    0x0005c038 str r2, [sp, 0x28]                                |     var_28h = r2;
    0x0005c03a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005c03c bne 0x5c10c                                       |         goto label_1;
                                                                 |     }
    0x0005c03e ldrb.w r3, [fp, 0x1c3]                            |     r3 = *(arg_1c3h);
    0x0005c042 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005c044 bne 0x5c10c                                       |         goto label_1;
                                                                 |     }
    0x0005c046 ldrb.w r7, [r5, 0x89]                             |     r7 = *((r5 + 0x89));
    0x0005c04a mov r6, r1                                        |     r6 = r1;
    0x0005c04c cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x0005c04e beq.w 0x5c570                                     |         goto label_35;
                                                                 |     }
                                                                 | label_6:
    0x0005c052 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005c054 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005c056 beq 0x5c154                                       |         goto label_36;
                                                                 |     }
    0x0005c058 mov r1, r6                                        |     r1 = r6;
    0x0005c05a add r3, sp, 0x48                                  |     r3 += var_48h_2;
    0x0005c05c mov r2, r4                                        |     r2 = r4;
    0x0005c05e mov r0, fp                                        |     r0 = fp;
    0x0005c060 bl 0x1cbbc                                        |     r0 = fcn_0001cbbc (r0, r1, r2, r3);
    0x0005c064 subs r7, r0, 0                                    |     r7 = r0 - 0;
                                                                 |     if (r7 < r0) {
    0x0005c066 blt 0x5c10c                                       |         goto label_1;
                                                                 |     }
    0x0005c068 ldrb.w r3, [r5, 0x89]                             |     r3 = *((r5 + 0x89));
    0x0005c06c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005c06e beq.w 0x5c594                                     |         goto label_37;
                                                                 |     }
                                                                 | label_7:
    0x0005c072 sub.w r4, r7, 1                                   |     r4 = r7 - 1;
    0x0005c076 lsls r3, r7, 4                                    |     r3 = r7 << 4;
    0x0005c078 clz r4, r4                                        |     r4 &= r4;
    0x0005c07c lsrs r4, r4, 5                                    |     r4 >>= 5;
    0x0005c07e str r3, [sp, 0x20]                                |     var_20h_2 = r3;
                                                                 | label_8:
    0x0005c080 ldr.w r3, [fp]                                    |     r3 = *(fp);
    0x0005c084 add r0, sp, 0x50                                  |     r0 += var_50h;
    0x0005c086 ldr r6, [sp, 0x20]                                |     r6 = var_20h_2;
    0x0005c088 ldr.w r8, [sp, 0x14]                              |     r8 = var_14h;
    0x0005c08c ldr r2, [r3, 0x10]                                |     r2 = *((r3 + 0x10));
    0x0005c08e ldr.w r3, [pc, 0x91c]                             |     r3 = *(0x0005c9ac);
    0x0005c092 mov r1, r8                                        |     r1 = r8;
    0x0005c094 str.w fp, [sp, 0x50]                              |     __asm ("str.w fp, [var_50h]");
    0x0005c098 add.w ip, r2, r6                                  |     
    0x0005c09c ldr r2, [r2, r6]                                  |     r2 = *((r2 + r6));
    0x0005c09e add r3, pc                                        |     r3 += pc;
    0x0005c0a0 strd r4, r2, [sp, 0x58]                           |     __asm ("strd r4, r2, [var_58h]");
    0x0005c0a4 ldr.w r2, [ip, 0xc]                               |     r2 = *((ip + 0xc));
    0x0005c0a8 ldr r4, [sp, 0x48]                                |     r4 = var_48h_2;
    0x0005c0aa str r3, [sp, 0x60]                                |     var_60h = r3;
    0x0005c0ac str r2, [sp, 0x54]                                |     var_54h = r2;
    0x0005c0ae str r4, [sp, 0x64]                                |     var_64h_2 = r4;
    0x0005c0b0 bl 0x1dc6c                                        |     fcn_0001dc6c (r0, r1);
    0x0005c0b4 mov r2, r8                                        |     r2 = r8;
    0x0005c0b6 movs r1, 0                                        |     r1 = 0;
    0x0005c0b8 adds r2, 8                                        |     r2 += 8;
    0x0005c0ba mov r0, fp                                        |     r0 = fp;
    0x0005c0bc bl 0x55ff8                                        |     r0 = fcn_00055ff8 (r0, r1, r2);
    0x0005c0c0 mov r4, r0                                        |     r4 = r0;
                                                                 |     if (r0 == 0) {
    0x0005c0c2 cbz r0, 0x5c10c                                   |         goto label_1;
                                                                 |     }
    0x0005c0c4 ldr r6, [r5, 0x10]                                |     r6 = *((r5 + 0x10));
    0x0005c0c6 cmp r7, 1                                         |     
    0x0005c0c8 ldr r3, [sp, 0x20]                                |     r3 = var_20h_2;
    0x0005c0ca ldr r2, [r0]                                      |     r2 = *(r0);
    0x0005c0cc add r6, r3                                        |     r6 += r3;
                                                                 |     if (r7 == 1) {
    0x0005c0ce beq.w 0x5c5c8                                     |         goto label_38;
                                                                 |     }
                                                                 | label_9:
    0x0005c0d2 ldrb.w r8, [r4, 0x2c]                             |     r8 = *((r4 + 0x2c));
    0x0005c0d6 ands r8, r8, 0x20                                 |     r8 &= 0x20;
    0x0005c0da it eq                                             |     
                                                                 |     if (r8 != r8) {
    0x0005c0dc streq r8, [sp, 0x24]                              |         var_24h_2 = r8;
                                                                 |     }
                                                                 |     if (r8 == r8) {
    0x0005c0e0 beq 0x5c194                                       |         goto label_17;
                                                                 |     }
    0x0005c0e2 ldr r3, [r4, 8]                                   |     r3 = *((r4 + 8));
    0x0005c0e4 str r3, [sp, 0x24]                                |     var_24h_2 = r3;
    0x0005c0e6 ldr r2, [sp, 0x24]                                |     r2 = var_24h_2;
                                                                 |     if (r3 != 0) {
    0x0005c0e8 cbnz r3, 0x5c0f0                                  |         goto label_39;
                                                                 |     }
    0x0005c0ea b 0x5c194                                         |     goto label_17;
                                                                 |     do {
    0x0005c0ec ldr r2, [r2, 0x14]                                |         r2 = *((r2 + 0x14));
                                                                 |         if (r2 == 0) {
    0x0005c0ee cbz r2, 0x5c0fc                                   |             goto label_40;
                                                                 |         }
                                                                 | label_39:
    0x0005c0f0 ldrb.w r3, [r2, 0x37]                             |         r3 = *((r2 + 0x37));
    0x0005c0f4 and r3, r3, 3                                     |         r3 &= 3;
    0x0005c0f8 cmp r3, 2                                         |         
    0x0005c0fa bne 0x5c0ec                                       |         
                                                                 |     } while (r3 != 2);
                                                                 | label_40:
    0x0005c0fc str r2, [sp, 0x24]                                |     var_24h_2 = r2;
    0x0005c0fe b 0x5c194                                         |     goto label_17;
                                                                 | label_0:
    0x0005c100 ldr.w r1, [pc, 0x8ac]                             |     r1 = *(0x0005c9b0);
    0x0005c104 mov r0, fp                                        |     r0 = fp;
    0x0005c106 add r1, pc                                        |     r1 += pc;
    0x0005c108 bl 0x1ca34                                        |     fcn_0001ca34 (r0);
                                                                 |     do {
                                                                 | label_1:
    0x0005c10c movs r3, 0                                        |         r3 = 0;
    0x0005c10e strd r3, r3, [sp, 0x18]                           |         __asm ("strd r3, r3, [var_18h]");
                                                                 | label_2:
    0x0005c112 mov r1, sl                                        |         r1 = sl;
    0x0005c114 mov r0, r5                                        |         r0 = r5;
    0x0005c116 bl 0x12e68                                        |         fcn_00012e68 (r0);
    0x0005c11a ldr r1, [sp, 0x10]                                |         r1 = var_10h;
    0x0005c11c mov r0, r5                                        |         r0 = r5;
    0x0005c11e bl 0x12ec8                                        |         fcn_00012ec8 (r0);
    0x0005c122 ldr r1, [sp, 0x14]                                |         r1 = var_14h;
    0x0005c124 mov r0, r5                                        |         r0 = r5;
    0x0005c126 bl 0x12c54                                        |         fcn_00012c54 (r0, r1);
    0x0005c12a ldr r1, [sp, 0x18]                                |         r1 = var_18h;
    0x0005c12c mov r0, r5                                        |         r0 = r5;
    0x0005c12e bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
    0x0005c132 ldr.w r2, [pc, 0x880]                             |         r2 = *(0x0005c9b4);
    0x0005c136 ldr.w r3, [pc, 0x870]                             |         r3 = *(0x5c9aa);
    0x0005c13a add r2, pc                                        |         r2 += pc;
    0x0005c13c ldr r3, [r2, r3]                                  |         r3 = *((r2 + r3));
    0x0005c13e ldr r2, [r3]                                      |         r2 = *(0x5c9aa);
    0x0005c140 ldr r3, [sp, 0xdc]                                |         r3 = var_dch;
    0x0005c142 eors r2, r3                                       |         r2 ^= r3;
    0x0005c144 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0005c148 bne.w 0x5c9a0                                     |             goto label_41;
                                                                 |         }
    0x0005c14c ldr r0, [sp, 0x1c]                                |         r0 = var_1ch_2;
    0x0005c14e add sp, 0xe4                                      |         
    0x0005c150 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_36:
    0x0005c154 ldr.w r4, [fp, 0x1e4]                             |         r4 = *(arg_1e4h);
    0x0005c158 cmp r4, 0                                         |         
    0x0005c15a beq 0x5c10c                                       |         
                                                                 |     } while (r4 == 0);
    0x0005c15c ldr r3, [r4, 0x44]                                |     r3 = *((r4 + 0x44));
    0x0005c15e ldr r1, [r5, 0x10]                                |     r1 = *((r5 + 0x10));
    0x0005c160 str r3, [sp, 0x24]                                |     var_24h_2 = r3;
    0x0005c162 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005c164 beq.w 0x5c95c                                     |         goto label_42;
                                                                 |     }
    0x0005c168 ldr r2, [r5, 0x14]                                |     r2 = *((r5 + 0x14));
    0x0005c16a mov r6, r1                                        |     r6 = r1;
    0x0005c16c ldr r7, [sp, 0x14]                                |     r7 = var_14h;
    0x0005c16e cmp r2, 0                                         |     
                                                                 |     if (r2 <= 0) {
    0x0005c170 ble.w 0x5c6be                                     |         goto label_43;
                                                                 |     }
    0x0005c174 ldr r0, [sp, 0x24]                                |     r0 = var_24h_2;
    0x0005c176 b 0x5c182                                         |     
                                                                 |     while (r0 != r3) {
    0x0005c178 adds r7, 1                                        |         r7++;
    0x0005c17a adds r6, 0x10                                     |         r6 += 0x10;
    0x0005c17c cmp r7, r2                                        |         
                                                                 |         if (r7 == r2) {
    0x0005c17e beq.w 0x5c68c                                     |             goto label_44;
                                                                 |         }
    0x0005c182 ldr r3, [r6, 0xc]                                 |         r3 = *((r6 + 0xc));
    0x0005c184 lsl.w ip, r7, 4                                   |         
    0x0005c188 cmp r0, r3                                        |         
    0x0005c18a bne 0x5c178                                       |         
                                                                 |     }
    0x0005c18c movs r3, 0                                        |     r3 = 0;
    0x0005c18e str.w ip, [sp, 0x20]                              |     __asm ("str.w ip, [var_20h_2]");
    0x0005c190 stm r0!, {r5}                                     |     *(r0!) = r5;
    0x0005c192 str r3, [sp, 0x24]                                |     var_24h_2 = r3;
                                                                 | label_17:
    0x0005c194 ldr.w r1, [pc, 0x820]                             |     
    0x0005c198 movs r2, 7                                        |     r2 = 7;
    0x0005c19a ldr r0, [r4]                                      |     r0 = *(r4);
    0x0005c19c add r1, pc                                        |     r1 = 0xb8b58;
    0x0005c19e blx 0x5db4                                        |     r0 = fcn_00005db4 ();
    0x0005c1a2 mov sb, r0                                        |     sb = r0;
    0x0005c1a4 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005c1a6 beq.w 0x5c63e                                     |         goto label_45;
                                                                 |     }
                                                                 | label_15:
    0x0005c1aa ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
    0x0005c1ac str r3, [sp, 0x1c]                                |     var_1ch_2 = r3;
    0x0005c1ae cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005c1b0 bne 0x5c100                                       |         goto label_0;
                                                                 |     }
    0x0005c1b2 ldrb.w r3, [r4, 0x2c]                             |     r3 = *((r4 + 0x2c));
    0x0005c1b6 lsls r1, r3, 0x1b                                 |     r1 = r3 << 0x1b;
                                                                 |     if (r1 < r3) {
    0x0005c1b8 bmi.w 0x5c6fc                                     |         goto label_46;
                                                                 |     }
    0x0005c1bc ldr r1, [sp, 0x48]                                |     r1 = var_48h_2;
    0x0005c1be cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0005c1c0 beq.w 0x5c668                                     |         goto label_47;
                                                                 |     }
    0x0005c1c4 mov r0, r5                                        |     r0 = r5;
    0x0005c1c6 bl 0xd5e4                                         |     fcn_0000d5e4 (r0, r1);
    0x0005c1ca str r0, [sp, 0x18]                                |     var_18h = r0;
    0x0005c1cc cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005c1ce beq 0x5c10c                                       |         goto label_1;
                                                                 |     }
    0x0005c1d0 mov r8, r0                                        |     r8 = r0;
    0x0005c1d2 mov r1, r0                                        |     r1 = r0;
    0x0005c1d4 mov r0, fp                                        |     r0 = fp;
    0x0005c1d6 bl 0x1cc34                                        |     r0 = fcn_0001cc34 (r0, r1);
    0x0005c1da cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0005c1dc bne 0x5c112                                       |         goto label_2;
                                                                 |     }
    0x0005c1de ldrb.w r3, [r5, 0x89]                             |     r3 = *((r5 + 0x89));
                                                                 |     if (r3 == 0) {
    0x0005c1e2 cbnz r3, 0x5c1f4                                  |         
    0x0005c1e4 ldr r2, [sp, 0x1c]                                |         r2 = var_1ch_2;
    0x0005c1e6 mov r1, r8                                        |         r1 = r8;
    0x0005c1e8 mov r0, r5                                        |         r0 = r5;
    0x0005c1ea bl 0x1401c                                        |         r0 = fcn_0001401c (r0, r1, r2);
    0x0005c1ee cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x0005c1f0 bne.w 0x5c6c4                                     |             goto label_48;
                                                                 |         }
                                                                 |     }
    0x0005c1f4 ldr r2, [r6]                                      |     r2 = *(r6);
    0x0005c1f6 mov r0, r5                                        |     r0 = r5;
    0x0005c1f8 ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x0005c1fa bl 0x13fac                                        |     r0 = fcn_00013fac (r0, r1, r2);
    0x0005c1fe cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0005c200 bne.w 0x5c6e6                                     |         goto label_49;
                                                                 |     }
                                                                 | label_16:
    0x0005c204 cmp r7, 1                                         |     
    0x0005c206 ldr.w sb, [r6]                                    |     sb = *(r6);
                                                                 |     if (r7 == 1) {
    0x0005c20a beq.w 0x5c69a                                     |         goto label_50;
                                                                 |     }
    0x0005c20e ldr.w r8, [pc, 0x7ac]                             |     
    0x0005c212 movs r3, 0                                        |     r3 = 0;
    0x0005c214 movs r1, 0x12                                     |     r1 = 0x12;
    0x0005c216 mov r0, fp                                        |     r0 = fp;
    0x0005c218 str.w sb, [sp]                                    |     __asm ("str.w sb, [sp]");
    0x0005c21c add r8, pc                                        |     r8 = 0xb8bde;
    0x0005c21e mov r2, r8                                        |     r2 = r8;
    0x0005c220 bl 0x1cab0                                        |     r0 = fcn_0001cab0 (r0);
    0x0005c224 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0005c226 bne.w 0x5c112                                     |         goto label_2;
                                                                 |     }
    0x0005c22a movs r1, 1                                        |     r1 = 1;
    0x0005c22c str.w r8, [sp, 0x40]                              |     __asm ("str.w r8, [var_40h_2]");
                                                                 | label_18:
    0x0005c230 ldr r3, [r4]                                      |     r3 = *(r4);
    0x0005c232 mov r0, fp                                        |     r0 = fp;
    0x0005c234 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x0005c236 str.w sb, [sp]                                    |     __asm ("str.w sb, [sp]");
    0x0005c23a bl 0x1cab0                                        |     fcn_0001cab0 (r0);
    0x0005c23e str r0, [sp, 0x3c]                                |     var_3ch_2 = r0;
    0x0005c240 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0005c242 bne.w 0x5c112                                     |         goto label_2;
                                                                 |     }
    0x0005c246 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0005c248 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005c24a beq.w 0x5c70c                                     |         goto label_51;
                                                                 |     }
                                                                 | label_20:
    0x0005c24e ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0005c250 ldr r3, [r2]                                      |     r3 = *(r2);
    0x0005c252 cmp r3, 0                                         |     
    0x0005c254 str r3, [sp, 0x2c]                                |     var_2ch_2 = r3;
                                                                 |     if (r3 <= 0) {
    0x0005c256 ble.w 0x5c854                                     |         goto label_52;
                                                                 |     }
    0x0005c25a ldr.w sb, [r2, 4]                                 |     sb = *((r2 + 4));
    0x0005c25e mov.w ip, 0                                       |     
    0x0005c262 add.w lr, r3, r3, lsl 2                           |     lr = r3 + (r3 << 2);
    0x0005c266 mov r0, ip                                        |     r0 = ip;
                                                                 | label_3:
    0x0005c268 ldr.w r3, [sb, r0, lsl 2]                         |     offset_0 = r0 << 2;
                                                                 |     r3 = *((sb + offset_0));
                                                                 |     if (r3 == 0) {
    0x0005c26c cbz r3, 0x5c292                                   |         goto label_53;
                                                                 |     }
    0x0005c26e ldr r1, [r3, 8]                                   |     r1 = *((r3 + 8));
    0x0005c270 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0005c272 beq.w 0x5c636                                     |         goto label_54;
                                                                 |     }
    0x0005c276 ldrb r3, [r1]                                     |     r3 = *(r1);
    0x0005c278 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005c27a beq.w 0x5c636                                     |         goto label_54;
                                                                 |     }
    0x0005c27e mov r3, r1                                        |     r3 = r1;
                                                                 |     do {
    0x0005c280 ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x0005c284 cmp r2, 0                                         |         
    0x0005c286 bne 0x5c280                                       |         
                                                                 |     } while (r2 != 0);
    0x0005c288 subs r3, r3, r1                                   |     r3 -= r1;
    0x0005c28a bic r3, r3, 0xc0000000                            |     r3 = BIT_MASK (r3, 0xc0000000);
    0x0005c28e adds r3, 1                                        |     r3++;
                                                                 | label_13:
    0x0005c290 add ip, r3                                        |     
                                                                 | label_53:
    0x0005c292 adds r0, 5                                        |     r0 += 5;
    0x0005c294 cmp lr, r0                                        |     
                                                                 |     if (lr != r0) {
    0x0005c296 bne 0x5c268                                       |         goto label_3;
                                                                 |     }
                                                                 | label_23:
    0x0005c298 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x0005c29a ldrb r3, [r2]                                     |     r3 = *(r2);
    0x0005c29c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005c29e beq.w 0x5c85a                                     |         goto label_55;
                                                                 |     }
    0x0005c2a2 mov r3, r2                                        |     r3 = r2;
                                                                 |     do {
    0x0005c2a4 ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x0005c2a8 cmp r2, 0                                         |         
    0x0005c2aa bne 0x5c2a4                                       |         
                                                                 |     } while (r2 != 0);
    0x0005c2ac ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x0005c2ae subs r3, r3, r2                                   |     r3 -= r2;
    0x0005c2b0 bic r8, r3, 0xc0000000                            |     r8 = BIT_MASK (r3, 0xc0000000);
    0x0005c2b4 add ip, r8                                        |     
                                                                 | label_24:
    0x0005c2b6 ldr r3, [sp, 0x24]                                |     r3 = var_24h_2;
    0x0005c2b8 movs r1, 1                                        |     r1 = 1;
                                                                 |     if (r3 != 0) {
    0x0005c2ba cbz r3, 0x5c2be                                   |         
    0x0005c2bc ldrh r1, [r3, 0x32]                               |         r1 = *((r3 + 0x32));
                                                                 |     }
    0x0005c2be ldr r3, [sp, 0x2c]                                |     r3 = var_2ch_2;
    0x0005c2c0 add.w r2, ip, 1                                   |     r2 = ip + 1;
    0x0005c2c4 mov r0, r5                                        |     r0 = r5;
    0x0005c2c6 add r1, r3                                        |     r1 += r3;
    0x0005c2c8 add r3, sp, 0x4c                                  |     r3 += var_4ch_2;
    0x0005c2ca sxth r1, r1                                       |     __asm ("sxth r1, r1");
    0x0005c2cc bl 0xd660                                         |     fcn_0000d660 (r0, r1, r2, r3);
    0x0005c2d0 ldrb.w r3, [r5, 0x40]                             |     r3 = *((r5 + 0x40));
    0x0005c2d4 mov sb, r0                                        |     sb = r0;
    0x0005c2d6 str r3, [sp, 0x2c]                                |     var_2ch_2 = r3;
    0x0005c2d8 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005c2da bne.w 0x5c6de                                     |         goto label_56;
                                                                 |     }
    0x0005c2de ldr r0, [sp, 0x4c]                                |     r0 = var_4ch_2;
    0x0005c2e0 add.w r2, r8, 1                                   |     r2 = r8 + 1;
    0x0005c2e4 adds r1, r0, r2                                   |     r1 = r0 + r2;
    0x0005c2e6 str.w r0, [sb]                                    |     __asm ("str.w r0, [sb]");
    0x0005c2ea str r1, [sp, 0x4c]                                |     var_4ch_2 = r1;
    0x0005c2ec ldr r1, [sp, 0x18]                                |     r1 = var_18h;
    0x0005c2ee blx 0x6214                                        |     fcn_00006214 ();
    0x0005c2f2 ldr r3, [sp, 0x10c]                               |     r3 = *(arg_4h);
    0x0005c2f4 ldr r2, [sp, 0x48]                                |     r2 = var_48h_2;
    0x0005c2f6 str.w r4, [sb, 0xc]                               |     __asm ("str.w r4, [sb, 0xc]");
    0x0005c2fa strb.w r3, [sb, 0x36]                             |     *((sb + 0x36)) = r3;
    0x0005c2fe ldr r3, [sp, 0x20]                                |     r3 = var_20h_2;
    0x0005c300 clz r2, r2                                        |     r2 &= r2;
    0x0005c304 ldr r1, [r5, 0x10]                                |     r1 = *((r5 + 0x10));
    0x0005c306 lsrs r2, r2, 5                                    |     r2 >>= 5;
    0x0005c308 add r1, r3                                        |     r1 += r3;
    0x0005c30a ldr r3, [sp, 0x10c]                               |     r3 = *(arg_4h);
    0x0005c30c ldr r1, [r1, 0xc]                                 |     r1 = *((r1 + 0xc));
    0x0005c30e subs r0, r3, 0                                    |     r0 = r3 - 0;
    0x0005c310 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0005c312 str.w r1, [sb, 0x18]                              |     __asm ("str.w r1, [sb, 0x18]");
    0x0005c316 it ne                                             |     
                                                                 |     if (r0 == r3) {
    0x0005c318 movne r0, 1                                       |         r0 = 1;
                                                                 |     }
    0x0005c31a ldrb.w r1, [sb, 0x37]                             |     r1 = *((sb + 0x37));
    0x0005c31e orr.w r2, r2, r0, lsl 3                           |     r2 |= (r0 << 3);
    0x0005c322 bic r1, r1, 0xb                                   |     r1 = BIT_MASK (r1, 0xb);
    0x0005c326 orrs r2, r1                                       |     r2 |= r1;
    0x0005c328 strb.w r2, [sb, 0x37]                             |     *((sb + 0x37)) = r2;
    0x0005c32c ldr r2, [r3]                                      |     r2 = *(r3);
    0x0005c32e strh.w r2, [sb, 0x32]                             |     *((sb + 0x32)) = r2;
    0x0005c332 cmp.w sl, 0                                       |     
                                                                 |     if (sl != 0) {
    0x0005c336 beq 0x5c37e                                       |         
    0x0005c338 ldr r3, [sp, 0x2c]                                |         r3 = var_2ch_2;
    0x0005c33a movs r2, 0x4c                                     |         r2 = 0x4c;
    0x0005c33c add r0, sp, 0x8c                                  |         r0 += var_8ch;
    0x0005c33e mov r1, r3                                        |         r1 = r3;
    0x0005c340 strd r3, r3, [sp, 0x70]                           |         __asm ("strd r3, r3, [var_70h]");
    0x0005c344 strd r3, r3, [sp, 0x78]                           |         __asm ("strd r3, r3, [var_78h]");
    0x0005c348 strd r3, r3, [sp, 0x80]                           |         __asm ("strd r3, r3, [var_84h]");
    0x0005c34c blx 0x5fcc                                        |         fcn_00005fcc ();
    0x0005c350 ldr r3, [r4]                                      |         r3 = *(r4);
    0x0005c352 add r0, sp, 0x68                                  |         r0 += var_68h_2;
    0x0005c354 mov r1, sl                                        |         r1 = sl;
    0x0005c356 str r4, [sp, 0xa0]                                |         var_a0h = r4;
    0x0005c358 str.w fp, [sp, 0x68]                              |         __asm ("str.w fp, [var_68h_2]");
    0x0005c35c str r3, [sp, 0x98]                                |         var_98h_2 = r3;
    0x0005c35e add r3, sp, 0x88                                  |         r3 += var_88h;
    0x0005c360 str r3, [sp, 0x6c]                                |         var_6ch_2 = r3;
    0x0005c362 movs r3, 1                                        |         r3 = 1;
    0x0005c364 str r3, [sp, 0x88]                                |         var_88h = r3;
    0x0005c366 mov.w r3, -1                                      |         r3 = -1;
    0x0005c36a str r3, [sp, 0xb8]                                |         var_b8h = r3;
    0x0005c36c movs r3, 0x10                                     |         r3 = 0x10;
    0x0005c36e strb.w r3, [sp, 0x84]                             |         var_84h = r3;
    0x0005c372 bl 0x1f318                                        |         fcn_0001f318 (r0, r1);
    0x0005c376 ldr r3, [sp, 0x10]                                |         r3 = var_10h;
    0x0005c378 str.w sl, [sb, 0x24]                              |         __asm ("str.w sl, [sb, 0x24]");
    0x0005c37c ldr r2, [r3]                                      |         r2 = *(r3);
                                                                 |     }
    0x0005c37e ldr r3, [r6, 0xc]                                 |     r3 = *((r6 + 0xc));
    0x0005c380 ldrb.w r3, [r3, 0x4c]                             |     r3 = *((r3 + 0x4c));
    0x0005c384 cmp r3, 3                                         |     
    0x0005c386 mov.w r3, -1                                      |     r3 = -1;
    0x0005c38a it ls                                             |     
                                                                 |     if (r3 > 3) {
    0x0005c38c movls r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x0005c38e cmp r2, 0                                         |     
    0x0005c390 str r3, [sp, 0x2c]                                |     var_2ch_2 = r3;
    0x0005c392 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0005c394 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
                                                                 |     if (r2 <= 0) {
    0x0005c396 ble.w 0x5c956                                     |         goto label_57;
                                                                 |     }
    0x0005c39a ldr.w r1, [pc, 0x624]                             |     r1 = *(0x0005c9c0);
    0x0005c39e adds r3, 0x14                                     |     r3 += 0x14;
    0x0005c3a0 ldr r2, [r4, 4]                                   |     r2 = *((r4 + 4));
    0x0005c3a2 mov r8, r3                                        |     r8 = r3;
    0x0005c3a4 str r7, [sp, 0x44]                                |     var_44h_2 = r7;
    0x0005c3a6 add r1, pc                                        |     r1 += pc;
    0x0005c3a8 str.w fp, [sp, 0x30]                              |     __asm ("str.w fp, [var_30h_2]");
    0x0005c3ac str r1, [sp, 0x38]                                |     var_38h_2 = r1;
    0x0005c3ae movs r1, 0                                        |     r1 = 0;
    0x0005c3b0 mov r7, r1                                        |     r7 = r1;
                                                                 | label_4:
    0x0005c3b2 ldrsh.w r3, [r4, 0x26]                            |     r3 = *((r4 + 0x26));
    0x0005c3b6 ldr r6, [r8, -0x10]                               |     r6 = *((r8 - 0x10));
    0x0005c3ba cmp r3, 0                                         |     
                                                                 |     if (r3 <= 0) {
    0x0005c3bc ble.w 0x5c5e4                                     |         goto label_58;
                                                                 |     }
    0x0005c3c0 add.w sl, r2, 0x18                                |     sl = r2 + 0x18;
    0x0005c3c4 mov.w fp, 0                                       |     
    0x0005c3c8 b 0x5c3dc                                         |     
                                                                 |     while (r0 != 0) {
    0x0005c3ca ldrsh.w r3, [r4, 0x26]                            |         r3 = *((r4 + 0x26));
    0x0005c3ce add.w fp, fp, 1                                   |         
    0x0005c3d2 add.w sl, sl, 0x18                                |         sl += 0x18;
    0x0005c3d6 cmp r3, fp                                        |         
                                                                 |         if (r3 <= fp) {
    0x0005c3d8 ble.w 0x5c5e4                                     |             goto label_58;
                                                                 |         }
    0x0005c3dc ldr r1, [sl, -0x18]                               |         r1 = *((sl - 0x18));
    0x0005c3e0 mov r0, r6                                        |         r0 = r6;
    0x0005c3e2 blx 0x6164                                        |         r0 = fcn_00006164 ();
    0x0005c3e6 cmp r0, 0                                         |         
    0x0005c3e8 bne 0x5c3ca                                       |         
                                                                 |     }
    0x0005c3ea ldrsh.w r2, [r4, 0x26]                            |     r2 = *((r4 + 0x26));
    0x0005c3ee cmp r2, fp                                        |     
                                                                 |     if (r2 <= fp) {
    0x0005c3f0 ble.w 0x5c5e4                                     |         goto label_58;
                                                                 |     }
    0x0005c3f4 ldr r2, [r8, -0x14]                               |     r2 = *((r8 - 0x14));
    0x0005c3f8 ldr.w r1, [sb, 4]                                 |     r1 = *((sb + 4));
    0x0005c3fc strh.w fp, [r1, r7, lsl 1]                        |     offset_1 = r7 << 1;
                                                                 |     *((r1 + offset_1)) = fp;
    0x0005c400 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0005c402 beq.w 0x5c620                                     |         goto label_59;
                                                                 |     }
    0x0005c406 ldr r1, [r2, 8]                                   |     r1 = *((r2 + 8));
    0x0005c408 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x0005c40a beq.w 0x5c63a                                     |         goto label_60;
                                                                 |     }
    0x0005c40e ldrb r2, [r1]                                     |     r2 = *(r1);
    0x0005c410 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0005c412 beq.w 0x5c63a                                     |         goto label_60;
                                                                 |     }
    0x0005c416 mov r2, r1                                        |     r2 = r1;
                                                                 |     do {
    0x0005c418 ldrb r3, [r2, 1]!                                 |         r3 = *((r2 += 1));
    0x0005c41c cmp r3, 0                                         |         
    0x0005c41e bne 0x5c418                                       |         
                                                                 |     } while (r3 != 0);
    0x0005c420 subs r6, r2, r1                                   |     r6 = r2 - r1;
    0x0005c422 bic r6, r6, 0xc0000000                            |     r6 = BIT_MASK (r6, 0xc0000000);
    0x0005c426 adds r6, 1                                        |     r6++;
                                                                 | label_14:
    0x0005c428 mov r2, r6                                        |     r2 = r6;
    0x0005c42a ldr r0, [sp, 0x4c]                                |     r0 = var_4ch_2;
    0x0005c42c blx 0x6214                                        |     fcn_00006214 ();
    0x0005c430 ldr r1, [sp, 0x4c]                                |     r1 = var_4ch_2;
    0x0005c432 add r6, r1                                        |     r6 += r1;
    0x0005c434 str r6, [sp, 0x4c]                                |     var_4ch_2 = r6;
                                                                 | label_12:
    0x0005c436 ldrb.w r2, [r5, 0x89]                             |     r2 = *((r5 + 0x89));
    0x0005c43a cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0005c43c beq.w 0x5c60a                                     |         goto label_61;
                                                                 |     }
                                                                 | label_10:
    0x0005c440 ldr.w r2, [sb, 0x20]                              |     r2 = *((sb + 0x20));
    0x0005c444 add.w r3, fp, fp, lsl 1                           |     r3 = fp + (fp << 1);
    0x0005c448 str.w r1, [r2, r7, lsl 2]                         |     __asm ("str.w r1, [r2, r7, lsl 2]");
    0x0005c44c ldr r1, [sp, 0x2c]                                |     r1 = var_2ch_2;
    0x0005c44e ldrb r2, [r8, -0x8]                               |     r2 = *((r8 - 0x8));
    0x0005c452 ands r2, r1                                       |     r2 &= r1;
    0x0005c454 ldr.w r1, [sb, 0x1c]                              |     r1 = *((sb + 0x1c));
    0x0005c458 strb r2, [r1, r7]                                 |     *((r1 + r7)) = r2;
    0x0005c45a ldr r2, [r4, 4]                                   |     r2 = *((r4 + 4));
    0x0005c45c add.w r3, r2, r3, lsl 3                           |     r3 = r2 + (r3 << 3);
    0x0005c460 ldrb r3, [r3, 0x14]                               |     r3 = *((r3 + 0x14));
                                                                 |     if (r3 == 0) {
    0x0005c462 cbnz r3, 0x5c470                                  |         
    0x0005c464 ldrb.w r1, [sb, 0x37]                             |         r1 = *((sb + 0x37));
    0x0005c468 bfi r1, r3, 3, 1                                  |         value_2 = BIT_MASK (3, 1);
                                                                 |         value_3 = r3 & value_2;
                                                                 |         value_2 = ~value_2;
                                                                 |         r1 &= value_2;
                                                                 |         r1 |= value_3;
    0x0005c46c strb.w r1, [sb, 0x37]                             |         *((sb + 0x37)) = r1;
                                                                 |     }
    0x0005c470 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0005c472 adds r7, 1                                        |     r7++;
    0x0005c474 add.w r8, r8, 0x14                                |     r8 += 0x14;
    0x0005c478 ldr r3, [r3]                                      |     r3 = *(r3);
    0x0005c47a cmp r3, r7                                        |     
                                                                 |     if (r3 > r7) {
    0x0005c47c bgt 0x5c3b2                                       |         goto label_4;
                                                                 |     }
    0x0005c47e mov ip, r7                                        |     
    0x0005c480 ldr.w fp, [sp, 0x30]                              |     fp = var_30h_2;
    0x0005c484 ldr r7, [sp, 0x44]                                |     r7 = var_44h_2;
                                                                 | label_31:
    0x0005c486 ldr r2, [sp, 0x24]                                |     r2 = var_24h_2;
    0x0005c488 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0005c48a beq.w 0x5c85e                                     |         goto label_62;
                                                                 |     }
    0x0005c48e ldrh.w lr, [r2, 0x32]                             |     
    0x0005c492 cmp.w lr, 0                                       |     
                                                                 |     if (lr == 0) {
    0x0005c496 beq 0x5c4e8                                       |         goto label_25;
                                                                 |     }
    0x0005c498 movs r6, 0                                        |     r6 = 0;
    0x0005c49a mov r1, ip                                        |     r1 = ip;
                                                                 | label_5:
    0x0005c49c ldr.w r8, [sb, 4]                                 |     r8 = *((sb + 4));
    0x0005c4a0 ldrh.w ip, [sb, 0x32]                             |     ip = *((sb + 0x32));
    0x0005c4a4 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x0005c4a6 add.w ip, r8, ip, lsl 1                           |     
    0x0005c4aa ldrsh.w sl, [r3, r6, lsl 1]                       |     offset_4 = r6 << 1;
                                                                 |     sl = *((r3 + offset_4));
    0x0005c4ae mov r3, r8                                        |     r3 = r8;
    0x0005c4b0 b 0x5c4bc                                         |     
                                                                 |     while (r3 != ip) {
    0x0005c4b2 ldrsh r0, [r3], 2                                 |         r0 = *(r3);
                                                                 |         r3 += 2;
    0x0005c4b6 cmp r0, sl                                        |         
                                                                 |         if (r0 == sl) {
    0x0005c4b8 beq.w 0x5c6d2                                     |             goto label_63;
                                                                 |         }
    0x0005c4bc cmp r3, ip                                        |         
    0x0005c4be bne 0x5c4b2                                       |         
                                                                 |     }
    0x0005c4c0 ldr r3, [r2, 0x20]                                |     r3 = *((r2 + 0x20));
    0x0005c4c2 strh.w sl, [r8, r1, lsl 1]                        |     offset_5 = r1 << 1;
                                                                 |     *((r8 + offset_5)) = sl;
    0x0005c4c6 ldr.w r0, [r3, r6, lsl 2]                         |     offset_6 = r6 << 2;
                                                                 |     r0 = *((r3 + offset_6));
    0x0005c4ca ldr.w r3, [sb, 0x20]                              |     r3 = *((sb + 0x20));
    0x0005c4ce str.w r0, [r3, r1, lsl 2]                         |     __asm ("str.w r0, [r3, r1, lsl 2]");
    0x0005c4d2 ldr r3, [r2, 0x1c]                                |     r3 = *((r2 + 0x1c));
    0x0005c4d4 ldrb r0, [r3, r6]                                 |     r0 = *((r3 + r6));
    0x0005c4d6 ldr.w r3, [sb, 0x1c]                              |     r3 = *((sb + 0x1c));
    0x0005c4da strb r0, [r3, r1]                                 |     *((r3 + r1)) = r0;
    0x0005c4dc adds r1, 1                                        |     r1++;
    0x0005c4de ldrh.w lr, [r2, 0x32]                             |     
                                                                 | label_19:
    0x0005c4e2 adds r6, 1                                        |     r6++;
    0x0005c4e4 cmp lr, r6                                        |     
                                                                 |     if (lr > r6) {
    0x0005c4e6 bgt 0x5c49c                                       |         goto label_5;
                                                                 |     }
                                                                 | label_25:
    0x0005c4e8 mov r0, sb                                        |     r0 = sb;
    0x0005c4ea bl 0x8b90                                         |     fcn_00008b90 (r0);
    0x0005c4ee ldr.w r3, [fp, 0x1e4]                             |     r3 = *(arg_1e4h);
    0x0005c4f2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005c4f4 beq.w 0x5c93a                                     |         goto label_64;
                                                                 |     }
    0x0005c4f8 cmp r3, r4                                        |     
                                                                 |     if (r3 == r4) {
    0x0005c4fa beq.w 0x5c878                                     |         goto label_65;
                                                                 |     }
                                                                 | label_26:
    0x0005c4fe ldrb.w r3, [r5, 0x89]                             |     r3 = *((r5 + 0x89));
    0x0005c502 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005c504 beq.w 0x5c74c                                     |         goto label_66;
                                                                 |     }
    0x0005c508 ldr.w r1, [sb]                                    |     r1 = *(sb);
    0x0005c50c ldr.w r0, [sb, 0x18]                              |     r0 = *((sb + 0x18));
    0x0005c510 adds r0, 0x18                                     |     r0 += 0x18;
                                                                 |     if (r1 == 0) {
    0x0005c512 cbz r1, 0x5c52a                                   |         goto label_67;
                                                                 |     }
    0x0005c514 ldrb r3, [r1]                                     |     r3 = *(r1);
                                                                 |     if (r3 == 0) {
    0x0005c516 cbz r3, 0x5c52a                                   |         goto label_67;
                                                                 |     }
    0x0005c518 mov r3, r1                                        |     r3 = r1;
                                                                 |     do {
    0x0005c51a ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x0005c51e cmp r2, 0                                         |         
    0x0005c520 bne 0x5c51a                                       |         
                                                                 |     } while (r2 != 0);
    0x0005c522 subs r3, r3, r1                                   |     r3 -= r1;
    0x0005c524 bic r3, r3, 0xc0000000                            |     r3 = BIT_MASK (r3, 0xc0000000);
    0x0005c528 str r3, [sp, 0x3c]                                |     var_3ch_2 = r3;
                                                                 | label_67:
    0x0005c52a ldr r2, [sp, 0x3c]                                |     r2 = var_3ch_2;
    0x0005c52c mov r3, sb                                        |     r3 = sb;
    0x0005c52e bl 0x128cc                                        |     r0 = fcn_000128cc (r0, r1, r2, r3, r4, r5);
    0x0005c532 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0005c534 bne.w 0x5c942                                     |         goto label_68;
                                                                 |     }
    0x0005c538 ldr r3, [r5, 0x18]                                |     r3 = *((r5 + 0x18));
    0x0005c53a orr r3, r3, 2                                     |     r3 |= 2;
    0x0005c53e str r3, [r5, 0x18]                                |     *((r5 + 0x18)) = r3;
    0x0005c540 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
                                                                 |     if (r3 != 0) {
    0x0005c542 cbz r3, 0x5c554                                   |         
    0x0005c544 ldr.w r3, [r5, 0x84]                              |         r3 = *((r5 + 0x84));
    0x0005c548 str.w r3, [sb, 0x2c]                              |         __asm ("str.w r3, [sb, 0x2c]");
                                                                 | label_22:
    0x0005c54c ldrb.w r3, [r5, 0x89]                             |         r3 = *((r5 + 0x89));
    0x0005c550 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0005c552 beq 0x5c61a                                       |             goto label_28;
                                                                 |         }
                                                                 |     }
                                                                 | label_21:
    0x0005c554 ldr r2, [sp, 0x10c]                               |     r2 = *(arg_4h);
    0x0005c556 ldr r3, [r4, 8]                                   |     r3 = *((r4 + 8));
    0x0005c558 cmp r2, 5                                         |     
                                                                 |     if (r2 == 5) {
    0x0005c55a beq.w 0x5c906                                     |         goto label_69;
                                                                 |     }
                                                                 | label_30:
    0x0005c55e str.w r3, [sb, 0x14]                              |     __asm ("str.w r3, [sb, 0x14]");
    0x0005c562 mov.w sl, 0                                       |     sl = 0;
    0x0005c566 str.w sb, [r4, 8]                                 |     __asm ("str.w sb, [r4, 8]");
    0x0005c56a str.w sb, [sp, 0x1c]                              |     __asm ("str.w sb, [var_1ch_2]");
    0x0005c56e b 0x5c112                                         |     goto label_2;
                                                                 | label_35:
    0x0005c570 add.w r1, fp, 4                                   |     r1 += arg_4h;
    0x0005c574 mov r0, r5                                        |     r0 = r5;
    0x0005c576 bl 0x556b8                                        |     r0 = fcn_000556b8 (r0, r1, r2);
    0x0005c57a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005c57c beq.w 0x5c052                                     |         goto label_6;
                                                                 |     }
    0x0005c580 ldr.w r3, [fp, 0x40]                              |     r3 = *(arg_40h);
    0x0005c584 str.w r0, [fp, 0xc]                               |     __asm ("str.w r0, [arg_114h]");
    0x0005c588 str r7, [sp, 0x18]                                |     var_18h = r7;
    0x0005c58a adds r3, 1                                        |     r3++;
    0x0005c58c str r7, [sp, 0x1c]                                |     var_1ch_2 = r7;
    0x0005c58e str.w r3, [fp, 0x40]                              |     __asm ("str.w r3, [arg_40h]");
    0x0005c592 b 0x5c112                                         |     goto label_2;
                                                                 | label_37:
    0x0005c594 ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x0005c596 mov r0, fp                                        |     r0 = fp;
    0x0005c598 bl 0x575d4                                        |     fcn_000575d4 (r0, r1);
    0x0005c59c ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
    0x0005c59e cmp r0, 0                                         |     
    0x0005c5a0 clz r3, r3                                        |     r3 &= r3;
    0x0005c5a4 lsr.w r3, r3, 5                                   |     r3 >>= 5;
    0x0005c5a8 it eq                                             |     
                                                                 |     if (r0 != 0) {
    0x0005c5aa moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x0005c5ac cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005c5ae beq.w 0x5c072                                     |         goto label_7;
                                                                 |     }
    0x0005c5b2 ldr r3, [r5, 0x10]                                |     r3 = *((r5 + 0x10));
    0x0005c5b4 ldr r2, [r0, 0x44]                                |     r2 = *((r0 + 0x44));
    0x0005c5b6 ldr r3, [r3, 0x1c]                                |     r3 = *((r3 + 0x1c));
    0x0005c5b8 cmp r2, r3                                        |     
                                                                 |     if (r2 != r3) {
    0x0005c5ba bne.w 0x5c072                                     |         goto label_7;
                                                                 |     }
    0x0005c5be movs r4, 1                                        |     r4 = 1;
    0x0005c5c0 movs r3, 0x10                                     |     r3 = 0x10;
    0x0005c5c2 mov r7, r4                                        |     r7 = r4;
    0x0005c5c4 str r3, [sp, 0x20]                                |     var_20h_2 = r3;
    0x0005c5c6 b 0x5c080                                         |     goto label_8;
                                                                 | label_38:
    0x0005c5c8 ldr r1, [r6, 0xc]                                 |     r1 = *((r6 + 0xc));
    0x0005c5ca ldr r3, [r0, 0x44]                                |     r3 = *((r0 + 0x44));
    0x0005c5cc cmp r1, r3                                        |     
                                                                 |     if (r1 == r3) {
    0x0005c5ce beq.w 0x5c0d2                                     |         goto label_9;
                                                                 |     }
    0x0005c5d2 ldr r1, [pc, 0x3f0]                               |     
    0x0005c5d4 mov r0, fp                                        |     r0 = fp;
    0x0005c5d6 add r1, pc                                        |     r1 = 0xb8fa0;
    0x0005c5d8 bl 0x1ca34                                        |     fcn_0001ca34 (r0);
    0x0005c5dc movs r3, 0                                        |     r3 = 0;
    0x0005c5de strd r3, r3, [sp, 0x18]                           |     __asm ("strd r3, r3, [var_18h]");
    0x0005c5e2 b 0x5c112                                         |     goto label_2;
                                                                 | label_58:
    0x0005c5e4 ldr.w fp, [sp, 0x30]                              |     fp = var_30h_2;
    0x0005c5e8 mov r3, r6                                        |     r3 = r6;
    0x0005c5ea ldr r1, [pc, 0x3dc]                               |     
    0x0005c5ec mov.w sl, 0                                       |     sl = 0;
    0x0005c5f0 ldr r2, [r4]                                      |     r2 = *(r4);
    0x0005c5f2 mov r0, fp                                        |     r0 = fp;
    0x0005c5f4 add r1, pc                                        |     r1 = 0xb8fc2;
    0x0005c5f6 bl 0x1ca34                                        |     fcn_0001ca34 (r0);
    0x0005c5fa movs r3, 1                                        |     r3 = 1;
    0x0005c5fc strb.w r3, [fp, 0x11]                             |     *(arg_11h) = r3;
                                                                 | label_11:
    0x0005c600 mov r1, sb                                        |     r1 = sb;
    0x0005c602 mov r0, r5                                        |     r0 = r5;
    0x0005c604 bl 0x12f1c                                        |     fcn_00012f1c (r0, r1);
    0x0005c608 b 0x5c112                                         |     goto label_2;
                                                                 | label_61:
    0x0005c60a ldr r0, [sp, 0x30]                                |     r0 = var_30h_2;
    0x0005c60c str r1, [sp, 0x34]                                |     var_34h_2 = r1;
    0x0005c60e bl 0x21fac                                        |     fcn_00021fac (r0, r1);
    0x0005c612 ldr r1, [sp, 0x34]                                |     r1 = var_34h_2;
    0x0005c614 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0005c616 bne.w 0x5c440                                     |         goto label_10;
                                                                 |     }
                                                                 | label_28:
    0x0005c61a mov.w sl, 0                                       |     sl = 0;
    0x0005c61e b 0x5c600                                         |     goto label_11;
                                                                 | label_59:
    0x0005c620 ldr r2, [r4, 4]                                   |     r2 = *((r4 + 4));
    0x0005c622 add.w r1, fp, fp, lsl 1                           |     r1 = fp + (fp << 1);
    0x0005c626 ldr r3, [sp, 0x38]                                |     r3 = var_38h_2;
    0x0005c628 add.w r2, r2, r1, lsl 3                           |     r2 += (r1 << 3);
    0x0005c62c ldr r1, [r2, 0x10]                                |     r1 = *((r2 + 0x10));
    0x0005c62e cmp r1, 0                                         |     
    0x0005c630 it eq                                             |     
                                                                 |     if (r1 != 0) {
    0x0005c632 moveq r1, r3                                      |         r1 = r3;
                                                                 |     }
    0x0005c634 b 0x5c436                                         |     goto label_12;
                                                                 | label_54:
    0x0005c636 movs r3, 1                                        |     r3 = 1;
    0x0005c638 b 0x5c290                                         |     goto label_13;
                                                                 | label_60:
    0x0005c63a movs r6, 1                                        |     r6 = 1;
    0x0005c63c b 0x5c428                                         |     goto label_14;
                                                                 | label_45:
    0x0005c63e ldr r0, [r4]                                      |     r0 = *(r4);
    0x0005c640 movs r2, 9                                        |     r2 = 9;
    0x0005c642 ldr r1, [pc, 0x388]                               |     
    0x0005c644 adds r0, 7                                        |     r0 += 7;
    0x0005c646 add r1, pc                                        |     r1 = 0xb9018;
    0x0005c648 blx 0x5db4                                        |     r0 = fcn_00005db4 ();
    0x0005c64c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005c64e beq.w 0x5c1aa                                     |         goto label_15;
                                                                 |     }
    0x0005c652 ldr r1, [pc, 0x37c]                               |     
    0x0005c654 mov r0, fp                                        |     r0 = fp;
    0x0005c656 ldr r2, [r4]                                      |     r2 = *(r4);
    0x0005c658 str.w sb, [sp, 0x18]                              |     __asm ("str.w sb, [var_18h]");
    0x0005c65c add r1, pc                                        |     r1 = 0xb9032;
    0x0005c65e bl 0x1ca34                                        |     fcn_0001ca34 (r0);
    0x0005c662 str.w sb, [sp, 0x1c]                              |     __asm ("str.w sb, [var_1ch_2]");
    0x0005c666 b 0x5c112                                         |     goto label_2;
                                                                 | label_47:
    0x0005c668 ldr r2, [r4, 8]                                   |     r2 = *((r4 + 8));
    0x0005c66a movs r3, 1                                        |     r3 = 1;
                                                                 |     if (r2 == 0) {
    0x0005c66c cbz r2, 0x5c676                                   |         goto label_70;
                                                                 |     }
                                                                 |     do {
    0x0005c66e ldr r2, [r2, 0x14]                                |         r2 = *((r2 + 0x14));
    0x0005c670 adds r3, 1                                        |         r3++;
    0x0005c672 cmp r2, 0                                         |         
    0x0005c674 bne 0x5c66e                                       |         
                                                                 |     } while (r2 != 0);
                                                                 | label_70:
    0x0005c676 ldr r1, [pc, 0x35c]                               |     
    0x0005c678 mov r0, r5                                        |     r0 = r5;
    0x0005c67a ldr r2, [r4]                                      |     r2 = *(r4);
    0x0005c67c add r1, pc                                        |     r1 = 0xb9056;
    0x0005c67e bl 0x1babc                                        |     fcn_0001babc (r0);
    0x0005c682 str r0, [sp, 0x18]                                |     var_18h = r0;
    0x0005c684 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0005c686 bne.w 0x5c204                                     |         goto label_16;
                                                                 |     }
    0x0005c68a b 0x5c10c                                         |     goto label_1;
                                                                 | label_44:
    0x0005c68c mov r3, ip                                        |     r3 = ip;
    0x0005c68e adds r3, 0x10                                     |     r3 += 0x10;
    0x0005c690 adds r6, r1, r3                                   |     r6 = r1 + r3;
    0x0005c692 str r3, [sp, 0x20]                                |     var_20h_2 = r3;
    0x0005c694 movs r3, 0                                        |     r3 = 0;
    0x0005c696 str r3, [sp, 0x24]                                |     var_24h_2 = r3;
    0x0005c698 b 0x5c194                                         |     goto label_17;
                                                                 | label_50:
    0x0005c69a ldr.w r8, [pc, 0x33c]                             |     
    0x0005c69e movs r3, 0                                        |     r3 = 0;
    0x0005c6a0 movs r1, 0x12                                     |     r1 = 0x12;
    0x0005c6a2 mov r0, fp                                        |     r0 = fp;
    0x0005c6a4 str.w sb, [sp]                                    |     __asm ("str.w sb, [sp]");
    0x0005c6a8 add r8, pc                                        |     r8 = 0xb9086;
    0x0005c6aa mov r2, r8                                        |     r2 = r8;
    0x0005c6ac bl 0x1cab0                                        |     r0 = fcn_0001cab0 (r0);
    0x0005c6b0 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0005c6b2 bne.w 0x5c112                                     |         goto label_2;
                                                                 |     }
    0x0005c6b6 movs r1, 3                                        |     r1 = 3;
    0x0005c6b8 str.w r8, [sp, 0x40]                              |     __asm ("str.w r8, [var_40h_2]");
    0x0005c6bc b 0x5c230                                         |     goto label_18;
                                                                 | label_43:
    0x0005c6be strd r7, r7, [sp, 0x20]                           |     __asm ("strd r7, r7, [var_24h_2]");
    0x0005c6c2 b 0x5c194                                         |     goto label_17;
                                                                 | label_48:
    0x0005c6c4 ldr r1, [pc, 0x314]                               |     
    0x0005c6c6 mov r0, fp                                        |     r0 = fp;
    0x0005c6c8 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x0005c6ca add r1, pc                                        |     r1 = 0xb90aa;
    0x0005c6cc bl 0x1ca34                                        |     fcn_0001ca34 (r0);
    0x0005c6d0 b 0x5c112                                         |     goto label_2;
                                                                 | label_63:
    0x0005c6d2 ldrh.w r3, [sb, 0x34]                             |     r3 = *((sb + 0x34));
    0x0005c6d6 subs r3, 1                                        |     r3--;
    0x0005c6d8 strh.w r3, [sb, 0x34]                             |     *((sb + 0x34)) = r3;
    0x0005c6dc b 0x5c4e2                                         |     goto label_19;
                                                                 | label_56:
    0x0005c6de cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0005c6e0 bne 0x5c600                                       |         goto label_11;
                                                                 |     }
    0x0005c6e2 str r0, [sp, 0x1c]                                |     var_1ch_2 = r0;
    0x0005c6e4 b 0x5c112                                         |     goto label_2;
                                                                 | label_49:
    0x0005c6e6 ldr r3, [sp, 0x11c]                               |     r3 = *(arg_11ch);
    0x0005c6e8 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005c6ea bne.w 0x5c84a                                     |         goto label_71;
                                                                 |     }
    0x0005c6ee ldr r1, [pc, 0x2f0]                               |     
    0x0005c6f0 mov r0, fp                                        |     r0 = fp;
    0x0005c6f2 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x0005c6f4 add r1, pc                                        |     r1 = 0xb90da;
    0x0005c6f6 bl 0x1ca34                                        |     fcn_0001ca34 (r0);
    0x0005c6fa b 0x5c112                                         |     goto label_2;
                                                                 | label_46:
    0x0005c6fc ldr r1, [pc, 0x2e4]                               |     
    0x0005c6fe mov r0, fp                                        |     r0 = fp;
    0x0005c700 add r1, pc                                        |     r1 = 0xb90e8;
    0x0005c702 bl 0x1ca34                                        |     fcn_0001ca34 (r0);
    0x0005c706 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch_2;
    0x0005c708 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x0005c70a b 0x5c112                                         |     goto label_2;
                                                                 | label_51:
    0x0005c70c ldr.w r0, [fp]                                    |     r0 = *(fp);
    0x0005c710 mov r2, r3                                        |     r2 = r3;
    0x0005c712 mov r1, r3                                        |     r1 = r3;
    0x0005c714 bl 0x19ba4                                        |     fcn_00019ba4 (r0, r1, r2);
    0x0005c718 str r0, [sp, 0x10]                                |     var_10h = r0;
    0x0005c71a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005c71c beq.w 0x5c94e                                     |         goto label_72;
                                                                 |     }
    0x0005c720 ldrh r3, [r4, 0x26]                               |     r3 = *((r4 + 0x26));
    0x0005c722 movs r1, 0x18                                     |     r1 = 0x18;
    0x0005c724 mvn r2, 0x17                                      |     r2 = ~0x17;
    0x0005c728 ldr.w r0, [fp]                                    |     r0 = *(fp);
    0x0005c72c smlabb r3, r3, r1, r2                             |     __asm ("smlabb r3, r3, r1, r2");
    0x0005c730 ldr r2, [r4, 4]                                   |     r2 = *((r4 + 4));
    0x0005c732 ldr r1, [r2, r3]                                  |     r1 = *((r2 + r3));
    0x0005c734 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0005c736 ldr.w sb, [r3, 4]                                 |     sb = *((r3 + 4));
    0x0005c73a bl 0xd418                                         |     fcn_0000d418 (r0, r1);
    0x0005c73e ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0005c740 ldr r2, [sp, 0x118]                               |     r2 = *(arg_118h);
    0x0005c742 str.w r0, [sb, 4]                                 |     __asm ("str.w r0, [sb, 4]");
    0x0005c746 ldr r3, [r3, 4]                                   |     r3 = *((r3 + 4));
    0x0005c748 strb r2, [r3, 0xc]                                |     *((r3 + 0xc)) = r2;
    0x0005c74a b 0x5c24e                                         |     goto label_20;
                                                                 | label_66:
    0x0005c74c ldr.w r3, [fp, 0x40]                              |     r3 = *(arg_40h);
    0x0005c750 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005c752 bne.w 0x5c8f8                                     |         goto label_73;
                                                                 |     }
    0x0005c756 ldrb.w r3, [r4, 0x2c]                             |     r3 = *((r4 + 0x2c));
    0x0005c75a ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x0005c75c eor r3, r3, 0x20                                  |     r3 ^= 0x20;
    0x0005c760 ubfx r3, r3, 5, 1                                 |     r3 = (r3 >> 5) & ((1 << 1) - 1);
    0x0005c764 cmp r2, 0                                         |     
    0x0005c766 it ne                                             |     
                                                                 |     if (r2 == 0) {
    0x0005c768 orrne r3, r3, 1                                   |         r3 |= 1;
                                                                 |     }
    0x0005c76c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005c76e beq.w 0x5c554                                     |         goto label_21;
                                                                 |     }
    0x0005c772 ldr.w r3, [fp, 0x48]                              |     r3 = *(arg_48h);
    0x0005c776 ldr.w r6, [fp, 8]                                 |     r6 = *(arg_110h);
    0x0005c77a add.w r8, r3, 1                                   |     r8 = r3 + 1;
    0x0005c77e str.w r8, [fp, 0x48]                              |     __asm ("str.w r8, [arg_48h]");
    0x0005c782 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0005c784 beq.w 0x5c990                                     |         goto label_74;
                                                                 |     }
                                                                 | label_34:
    0x0005c788 mov r2, r7                                        |     r2 = r7;
    0x0005c78a movs r1, 1                                        |     r1 = 1;
    0x0005c78c mov r0, fp                                        |     r0 = fp;
    0x0005c78e bl 0x43838                                        |     fcn_00043838 (r0, r1, r2);
    0x0005c792 movs r3, 0                                        |     r3 = 0;
    0x0005c794 mov r2, r7                                        |     r2 = r7;
    0x0005c796 str r3, [sp]                                      |     *(sp) = r3;
    0x0005c798 movs r1, 0x76                                     |     r1 = 0x76;
    0x0005c79a mov r3, r8                                        |     r3 = r8;
    0x0005c79c mov r0, r6                                        |     r0 = r6;
    0x0005c79e bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005c7a2 ldr r3, [sp, 0x28]                                |     r3 = var_28h;
                                                                 |     if (r3 != 0) {
    0x0005c7a4 cbz r3, 0x5c7de                                   |         
    0x0005c7a6 ldr r3, [sp, 0x48]                                |         r3 = var_48h_2;
    0x0005c7a8 ldr.w r2, [fp, 0x1fc]                             |         r2 = *(arg_1fch);
    0x0005c7ac ldr r1, [r3]                                      |         r1 = *(r3);
    0x0005c7ae ldr.w r3, [fp, 0x1f8]                             |         r3 = *(arg_1f8h);
    0x0005c7b2 subs r3, r3, r1                                   |         r3 -= r1;
    0x0005c7b4 add r3, r2                                        |         r3 += r2;
    0x0005c7b6 adds r2, r1, r3                                   |         r2 = r1 + r3;
    0x0005c7b8 ldrb r2, [r2, -0x1]                               |         r2 = *((r2 - 0x1));
    0x0005c7bc cmp r2, 0x3b                                      |         
    0x0005c7be ldr r2, [sp, 0x10c]                               |         r2 = *(arg_4h);
    0x0005c7c0 it eq                                             |         
                                                                 |         if (r2 != 0x3b) {
    0x0005c7c2 addeq r3, r3, -1                                  |             r3 += -1;
                                                                 |         }
    0x0005c7c6 cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x0005c7c8 beq.w 0x5c978                                     |             goto label_75;
                                                                 |         }
    0x0005c7cc ldr r2, [pc, 0x218]                               |         
    0x0005c7ce add r2, pc                                        |         r2 = 0xb91ba;
                                                                 | label_32:
    0x0005c7d0 str r1, [sp]                                      |         *(sp) = r1;
    0x0005c7d2 mov r0, r5                                        |         r0 = r5;
    0x0005c7d4 ldr r1, [pc, 0x214]                               |         
    0x0005c7d6 add r1, pc                                        |         r1 = 0xb91c6;
    0x0005c7d8 bl 0x1babc                                        |         fcn_0001babc (r0);
    0x0005c7dc str r0, [sp, 0x28]                                |         var_28h = r0;
                                                                 |     }
    0x0005c7de ldr r2, [r5, 0x10]                                |     r2 = *((r5 + 0x10));
    0x0005c7e0 mov r0, fp                                        |     r0 = fp;
    0x0005c7e2 ldr r1, [sp, 0x20]                                |     r1 = var_20h_2;
    0x0005c7e4 ldr r3, [sp, 0x40]                                |     r3 = var_40h_2;
    0x0005c7e6 ldr r2, [r2, r1]                                  |     r2 = *((r2 + r1));
    0x0005c7e8 ldr r1, [sp, 0x28]                                |     r1 = var_28h;
    0x0005c7ea strd r8, r1, [sp, 8]                              |     __asm ("strd r8, r1, [var_8h]");
    0x0005c7ee ldr r1, [r4]                                      |     r1 = *(r4);
    0x0005c7f0 str r1, [sp, 4]                                   |     var_4h = r1;
    0x0005c7f2 ldr.w r1, [sb]                                    |     r1 = *(sb);
    0x0005c7f6 str r1, [sp]                                      |     *(sp) = r1;
    0x0005c7f8 ldr r1, [pc, 0x1f4]                               |     
    0x0005c7fa add r1, pc                                        |     r1 = 0xb91ee;
    0x0005c7fc bl 0x4bf9c                                        |     fcn_0004bf9c (r0);
    0x0005c800 ldr r1, [sp, 0x28]                                |     r1 = var_28h;
    0x0005c802 mov r0, r5                                        |     r0 = r5;
    0x0005c804 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x0005c808 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005c80a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005c80c beq.w 0x5c554                                     |         goto label_21;
                                                                 |     }
    0x0005c810 mov r2, r8                                        |     r2 = r8;
    0x0005c812 mov r1, sb                                        |     r1 = sb;
    0x0005c814 mov r0, fp                                        |     r0 = fp;
    0x0005c816 bl 0x3d6a4                                        |     fcn_0003d6a4 (r0, r1, r2, r3);
    0x0005c81a mov r1, r7                                        |     r1 = r7;
    0x0005c81c mov r0, fp                                        |     r0 = fp;
    0x0005c81e bl 0x18cb0                                        |     fcn_00018cb0 (r0, r1);
    0x0005c822 ldr r1, [pc, 0x1d0]                               |     
    0x0005c824 mov r0, r5                                        |     r0 = r5;
    0x0005c826 ldr.w r2, [sb]                                    |     r2 = *(sb);
    0x0005c82a add r1, pc                                        |     r1 = 0xb9224;
    0x0005c82c bl 0x1babc                                        |     fcn_0001babc (r0);
    0x0005c830 mov r1, r7                                        |     r1 = r7;
    0x0005c832 mov r2, r0                                        |     r2 = r0;
    0x0005c834 mov r0, r6                                        |     r0 = r6;
    0x0005c836 bl 0x18d2c                                        |     fcn_00018d2c (r0, r1, r2);
    0x0005c83a movs r3, 0                                        |     r3 = 0;
    0x0005c83c mov r0, r6                                        |     r0 = r6;
    0x0005c83e mov r2, r3                                        |     r2 = r3;
    0x0005c840 movs r1, 0x8c                                     |     r1 = 0x8c;
    0x0005c842 str r3, [sp]                                      |     *(sp) = r3;
    0x0005c844 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005c848 b 0x5c54c                                         |     goto label_22;
                                                                 | label_71:
    0x0005c84a mov r1, r7                                        |     r1 = r7;
    0x0005c84c mov r0, fp                                        |     r0 = fp;
    0x0005c84e bl 0x39214                                        |     fcn_00039214 (r0, r1);
    0x0005c852 b 0x5c112                                         |     goto label_2;
                                                                 | label_52:
    0x0005c854 mov.w ip, 0                                       |     
    0x0005c858 b 0x5c298                                         |     goto label_23;
                                                                 | label_55:
    0x0005c85a mov r8, r3                                        |     r8 = r3;
    0x0005c85c b 0x5c2b6                                         |     goto label_24;
                                                                 | label_62:
    0x0005c85e ldr r3, [pc, 0x198]                               |     
    0x0005c860 movw r0, 0xffff                                   |     r0 = 0xffff;
    0x0005c864 ldr.w r1, [sb, 4]                                 |     r1 = *((sb + 4));
    0x0005c868 ldr.w r2, [sb, 0x20]                              |     r2 = *((sb + 0x20));
    0x0005c86c add r3, pc                                        |     r3 = 0xb926a;
    0x0005c86e strh.w r0, [r1, ip, lsl 1]                        |     offset_7 = ip << 1;
                                                                 |     *((r1 + offset_7)) = r0;
    0x0005c872 str.w r3, [r2, ip, lsl 2]                         |     __asm ("str.w r3, [r2, ip, lsl 2]");
    0x0005c876 b 0x5c4e8                                         |     goto label_25;
                                                                 | label_65:
    0x0005c878 ldr r6, [r4, 8]                                   |     r6 = *((r4 + 8));
                                                                 |     if (r6 != 0) {
    0x0005c87a cbnz r6, 0x5c886                                  |         goto label_76;
                                                                 |     }
    0x0005c87c b 0x5c4fe                                         |     goto label_26;
                                                                 | label_27:
    0x0005c87e ldr r6, [r6, 0x14]                                |     r6 = *((r6 + 0x14));
    0x0005c880 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0005c882 beq.w 0x5c4fe                                     |         goto label_26;
                                                                 |     }
                                                                 | label_76:
    0x0005c886 ldrh r3, [r6, 0x32]                               |     r3 = *((r6 + 0x32));
    0x0005c888 ldrh.w r2, [sb, 0x32]                             |     r2 = *((sb + 0x32));
    0x0005c88c cmp r2, r3                                        |     
                                                                 |     if (r2 != r3) {
    0x0005c88e bne 0x5c87e                                       |         goto label_27;
                                                                 |     }
                                                                 |     if (r3 == 0) {
    0x0005c890 cbz r3, 0x5c8d4                                   |         goto label_77;
                                                                 |     }
    0x0005c892 mov.w r8, 0                                       |     r8 = 0;
    0x0005c896 b 0x5c8bc                                         |     
                                                                 |     while (r1 == r2) {
    0x0005c898 ldr r2, [r6, 0x20]                                |         r2 = *((r6 + 0x20));
    0x0005c89a ldr.w r0, [r2, r8, lsl 2]                         |         offset_8 = r8 << 2;
                                                                 |         r0 = *((r2 + offset_8));
    0x0005c89e ldr.w r2, [sb, 0x20]                              |         r2 = *((sb + 0x20));
    0x0005c8a2 ldr.w r1, [r2, r8, lsl 2]                         |         offset_9 = r8 << 2;
                                                                 |         r1 = *((r2 + offset_9));
    0x0005c8a6 cmp r0, r1                                        |         
                                                                 |         if (r0 != r1) {
    0x0005c8a8 beq 0x5c8b2                                       |             
    0x0005c8aa blx 0x6164                                        |             r0 = fcn_00006164 ();
                                                                 |             if (r0 != 0) {
    0x0005c8ae cbnz r0, 0x5c902                                  |                 goto label_78;
                                                                 |             }
    0x0005c8b0 ldrh r3, [r6, 0x32]                               |             r3 = *((r6 + 0x32));
                                                                 |         }
    0x0005c8b2 add.w r8, r8, 1                                   |         r8++;
    0x0005c8b6 mov r2, r3                                        |         r2 = r3;
    0x0005c8b8 cmp r3, r8                                        |         
                                                                 |         if (r3 <= r8) {
    0x0005c8ba ble 0x5c8d0                                       |             goto label_29;
                                                                 |         }
    0x0005c8bc ldr r2, [r6, 4]                                   |         r2 = *((r6 + 4));
    0x0005c8be ldrsh.w r1, [r2, r8, lsl 1]                       |         offset_10 = r8 << 1;
                                                                 |         r1 = *((r2 + offset_10));
    0x0005c8c2 ldr.w r2, [sb, 4]                                 |         r2 = *((sb + 4));
    0x0005c8c6 ldrsh.w r2, [r2, r8, lsl 1]                       |         offset_11 = r8 << 1;
                                                                 |         r2 = *((r2 + offset_11));
    0x0005c8ca cmp r1, r2                                        |         
    0x0005c8cc beq 0x5c898                                       |         
                                                                 |     }
    0x0005c8ce mov r2, r3                                        |     r2 = r3;
                                                                 | label_29:
    0x0005c8d0 cmp r8, r2                                        |     
                                                                 |     if (r8 != r2) {
    0x0005c8d2 bne 0x5c87e                                       |         goto label_27;
                                                                 |     }
                                                                 | label_77:
    0x0005c8d4 ldrb.w r3, [r6, 0x36]                             |     r3 = *((r6 + 0x36));
    0x0005c8d8 ldrb.w r2, [sb, 0x36]                             |     r2 = *((sb + 0x36));
    0x0005c8dc cmp r3, r2                                        |     
                                                                 |     if (r3 == r2) {
    0x0005c8de beq.w 0x5c61a                                     |         goto label_28;
                                                                 |     }
    0x0005c8e2 cmp r2, 0xa                                       |     
    0x0005c8e4 it ne                                             |     
                                                                 |     if (r2 != 0xa) {
    0x0005c8e6 cmpne r3, 0xa                                     |         __asm ("cmpne r3, 0xa");
                                                                 |     }
                                                                 |     if (r2 != 0xa) {
    0x0005c8e8 bne 0x5c97e                                       |         goto label_79;
                                                                 |     }
                                                                 | label_33:
    0x0005c8ea cmp r3, 0xa                                       |     
    0x0005c8ec itt eq                                            |     
                                                                 |     if (r3 != 0xa) {
    0x0005c8ee ldrbeq r3, [sb, 0x36]                             |         r3 = *((sb + 0x36));
                                                                 |     }
                                                                 |     if (r3 == 0xa) {
    0x0005c8f2 strb.w r3, [r6, 0x36]                             |         *((r6 + 0x36)) = r3;
                                                                 |     }
    0x0005c8f6 b 0x5c61a                                         |     goto label_28;
                                                                 | label_73:
    0x0005c8f8 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005c8fa cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005c8fc beq.w 0x5c554                                     |         goto label_21;
                                                                 |     }
    0x0005c900 b 0x5c61a                                         |     goto label_28;
                                                                 | label_78:
    0x0005c902 ldrh r2, [r6, 0x32]                               |     r2 = *((r6 + 0x32));
    0x0005c904 b 0x5c8d0                                         |     goto label_29;
                                                                 | label_69:
    0x0005c906 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005c908 beq.w 0x5c55e                                     |         goto label_30;
                                                                 |     }
    0x0005c90c ldrb.w r2, [r3, 0x36]                             |     r2 = *((r3 + 0x36));
    0x0005c910 cmp r2, 5                                         |     
                                                                 |     if (r2 != 5) {
    0x0005c912 bne 0x5c91e                                       |         goto label_80;
                                                                 |     }
    0x0005c914 b 0x5c55e                                         |     goto label_30;
                                                                 |     do {
    0x0005c916 ldrb.w r2, [r3, 0x36]                             |         r2 = *((r3 + 0x36));
    0x0005c91a cmp r2, 5                                         |         
                                                                 |         if (r2 == 5) {
    0x0005c91c beq 0x5c926                                       |             goto label_81;
                                                                 |         }
                                                                 | label_80:
    0x0005c91e mov r1, r3                                        |         r1 = r3;
    0x0005c920 ldr r3, [r3, 0x14]                                |         r3 = *((r3 + 0x14));
    0x0005c922 cmp r3, 0                                         |         
    0x0005c924 bne 0x5c916                                       |         
                                                                 |     } while (r3 != 0);
                                                                 | label_81:
    0x0005c926 str.w r3, [sb, 0x14]                              |     __asm ("str.w r3, [sb, 0x14]");
    0x0005c92a mov.w sl, 0                                       |     sl = 0;
    0x0005c92e str.w sb, [r1, 0x14]                              |     __asm ("str.w sb, [r1, 0x14]");
    0x0005c932 str.w sb, [sp, 0x1c]                              |     __asm ("str.w sb, [var_1ch_2]");
    0x0005c936 b.w 0x5c112                                       |     goto label_2;
                                                                 | label_64:
    0x0005c93a mov r0, sb                                        |     r0 = sb;
    0x0005c93c bl 0x7fd8                                         |     fcn_00007fd8 (r0);
    0x0005c940 b 0x5c4fe                                         |     goto label_26;
                                                                 | label_68:
    0x0005c942 movs r3, 1                                        |     r3 = 1;
    0x0005c944 mov.w sl, 0                                       |     sl = 0;
    0x0005c948 strb.w r3, [r5, 0x40]                             |     *((r5 + 0x40)) = r3;
    0x0005c94c b 0x5c600                                         |     goto label_11;
                                                                 | label_72:
    0x0005c94e ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x0005c950 str r3, [sp, 0x1c]                                |     var_1ch_2 = r3;
    0x0005c952 b.w 0x5c112                                       |     goto label_2;
                                                                 | label_57:
    0x0005c956 movs r3, 0                                        |     r3 = 0;
    0x0005c958 mov ip, r3                                        |     
    0x0005c95a b 0x5c486                                         |     goto label_31;
                                                                 | label_42:
    0x0005c95c mov.w r3, 0xdc00                                  |     r3 = 0xdc00;
    0x0005c960 sub.w r6, r1, 0xf40000                            |     r6 = r1 - 0xf40000;
    0x0005c964 movt r3, 0xff0b                                   |     r3 = (r3 & 0xFFFF) | 0xff0b0000;
    0x0005c968 movw r7, 0xbdc0                                   |     
    0x0005c96c sub.w r6, r6, 0x2400                              |     r6 -= 0x2400;
    0x0005c970 movt r7, 0xfff0                                   |     r7 = 0xfff0bdc0;
    0x0005c974 str r3, [sp, 0x20]                                |     var_20h_2 = r3;
    0x0005c976 b 0x5c194                                         |     goto label_17;
                                                                 | label_75:
    0x0005c978 ldr r2, [pc, 0x80]                                |     
    0x0005c97a add r2, pc                                        |     r2 = 0xb937a;
    0x0005c97c b 0x5c7d0                                         |     goto label_32;
                                                                 | label_79:
    0x0005c97e ldr r1, [pc, 0x80]                                |     
    0x0005c980 mov r0, fp                                        |     r0 = fp;
    0x0005c982 movs r2, 0                                        |     r2 = 0;
    0x0005c984 add r1, pc                                        |     r1 = 0xb938a;
    0x0005c986 bl 0x1ca34                                        |     fcn_0001ca34 (r0);
    0x0005c98a ldrb.w r3, [r6, 0x36]                             |     r3 = *((r6 + 0x36));
    0x0005c98e b 0x5c8ea                                         |     goto label_33;
                                                                 | label_74:
    0x0005c990 mov r0, fp                                        |     r0 = fp;
    0x0005c992 bl 0x192c8                                        |     r0 = fcn_000192c8 (r0);
    0x0005c996 mov r6, r0                                        |     r6 = r0;
    0x0005c998 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005c99a beq.w 0x5c61a                                     |         goto label_28;
                                                                 |     }
    0x0005c99e b 0x5c788                                         |     goto label_34;
                                                                 | label_41:
    0x0005c9a0 blx 0x6498                                        |     fcn_00006498 ();
    0x0005c9a4 pop {r1, r2, r6}                                  |     
    0x0005c9a6 movs r1, r0                                       |     r1 = r0;
    0x0005c9a8 lsls r0, r1, 0xe                                  |     r0 = r1 << 0xe;
    0x0005c9aa movs r0, r0                                       |     
    0x0005c9ac ldr r6, [r7, 0x64]                                |     r6 = *((r7 + 0x64));
    0x0005c9ae movs r0, r0                                       |     
    0x0005c9b0 str r2, [r3, 0x54]                                |     *((r3 + 0x54)) = r2;
    0x0005c9b2 movs r0, r0                                       |     
                                                                 |     if (r6 == 0) {
    0x0005c9b4 cbnz r6, 0x5c9fe                                  |         
    0x0005c9b6 movs r1, r0                                       |         r1 = r0;
    0x0005c9b8 cmp r2, 0                                         |         
    0x0005c9ba movs r0, r0                                       |         
    0x0005c9bc movs r7, 0xb8                                     |         r7 = 0xb8;
    0x0005c9be movs r0, r0                                       |         
    0x0005c9c0 cmp r3, 0xae                                      |         
    0x0005c9c2 movs r0, r0                                       |         
    0x0005c9c4 str r6, [r5]                                      |         *(r5) = r6;
    0x0005c9c6 movs r0, r0                                       |         
    0x0005c9c8 str r4, [r1, 0x18]                                |         *((r1 + 0x18)) = r4;
    0x0005c9ca movs r0, r0                                       |         
    0x0005c9cc ldrsh r2, [r6, r7]                                |         r2 = *((r6 + r7));
    0x0005c9ce movs r0, r0                                       |         
    0x0005c9d0 ldrsh r0, [r5, r7]                                |         r0 = *((r5 + r7));
    0x0005c9d2 movs r0, r0                                       |         
    0x0005c9d4 str r0, [r4, 4]                                   |         *((r4 + 4)) = r0;
    0x0005c9d6 movs r0, r0                                       |         
    0x0005c9d8 movs r3, 0x18                                     |         r3 = 0x18;
    0x0005c9da movs r0, r0                                       |         
    0x0005c9dc ldrsh r6, [r2, r7]                                |         r6 = *((r2 + r7));
    0x0005c9de movs r0, r0                                       |         
    0x0005c9e0 ldrsh r0, [r2, r7]                                |         r0 = *((r2 + r7));
    0x0005c9e2 movs r0, r0                                       |         
    0x0005c9e4 ldrsh r4, [r7, r5]                                |         r4 = *((r7 + r5));
    0x0005c9e6 movs r0, r0                                       |         
    0x0005c9e8 ldrsh r6, [r5, r0]                                |         r6 = *((r5 + r0));
    0x0005c9ea movs r0, r0                                       |         
    0x0005c9ec ldrsh r2, [r1, r5]                                |         r2 = *((r1 + r5));
    0x0005c9ee movs r0, r0                                       |         
    0x0005c9f0 ldrsh r2, [r7, r4]                                |         r2 = *((r7 + r4));
    0x0005c9f2 movs r0, r0                                       |         
    0x0005c9f4 ldrsh r2, [r7, r4]                                |         r2 = *((r7 + r4));
    0x0005c9f6 movs r0, r0                                       |         
    0x0005c9f8 movs r6, 0xe8                                     |         r6 = 0xe8;
    0x0005c9fa movs r0, r0                                       |         
    0x0005c9fc ldrsh r6, [r7, r0]                                |         r6 = *((r7 + r0));
                                                                 |     }
    0x0005c9fe movs r0, r0                                       |     
    0x0005ca00 ldrb r0, [r6, r5]                                 |     r0 = *((r6 + r5));
    0x0005ca02 movs r0, r0                                       |     
                                                                 | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x5ca04 */
                                                                     | #include <stdint.h>
                                                                     |  
                                                                     | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                     |  
    ; (fcn) fcn.0005ca04 ()                                          | void fcn_0005ca04 (int16_t arg_4h, int16_t arg_18h, int16_t arg_20h, int16_t arg_24h, int16_t arg_26h, int16_t arg_2ah, int16_t arg_2ch, int16_t arg_2dh, int16_t arg_30h, int16_t arg_44h, int16_t arg_108h, int16_t arg_110h, int16_t arg_114h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                     |     int16_t var_0h;
                                                                     |     int16_t var_ch;
                                                                     |     int16_t var_10h_2;
                                                                     |     int16_t var_14h_2;
                                                                     |     int16_t var_1ch;
                                                                     |     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;
                                                                     |     int16_t var_44h;
                                                                     |     int16_t var_48h;
                                                                     |     int16_t var_4ch;
                                                                     |     int16_t var_64h;
                                                                     |     int16_t var_68h;
                                                                     |     int16_t var_6ch;
                                                                     |     int16_t var_78h;
                                                                     |     int16_t var_80h;
                                                                     |     int16_t var_98h;
                                                                     |     int16_t var_bch;
                                                                     |     int16_t var_e8h;
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
                                                                     |     r2 = arg3;
                                                                     |     r3 = arg4;
    0x0005ca04 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x0005ca08 sub sp, 0xc4                                          |     
    0x0005ca0a str r0, [sp, 0x20]                                    |     *(arg_20h) = r0;
    0x0005ca0c mov r6, r0                                            |     r6 = r0;
    0x0005ca0e mov r5, r2                                            |     r5 = r2;
    0x0005ca10 ldr.w r0, [pc, 0x91c]                                 |     
    0x0005ca14 str r2, [sp, 0x2c]                                    |     *(arg_2ch) = r2;
    0x0005ca16 ldr r4, [sp, 0xe8]                                    |     r4 = var_e8h;
    0x0005ca18 ldr.w r2, [pc, 0x918]                                 |     r2 = *(0x5d334);
    0x0005ca1c add r0, pc                                            |     r0 = 0xb9d50;
    0x0005ca1e str r4, [sp, 0x28]                                    |     var_28h_2 = r4;
    0x0005ca20 ldr r2, [r0, r2]                                      |     
    0x0005ca22 ldr r2, [r2]                                          |     r2 = *(0xb9d50);
    0x0005ca24 str r2, [sp, 0xbc]                                    |     var_bch = r2;
    0x0005ca26 mov.w r2, 0                                           |     r2 = 0;
    0x0005ca2a str r1, [sp, 0x30]                                    |     *(arg_30h) = r1;
    0x0005ca2c str r3, [sp, 0x24]                                    |     *(arg_24h) = r3;
    0x0005ca2e mov r3, r5                                            |     r3 = r5;
    0x0005ca30 ldr r1, [r6]                                          |     r1 = *(r6);
    0x0005ca32 orrs r3, r4                                           |     r3 |= r4;
    0x0005ca34 str r1, [sp, 0x1c]                                    |     var_1ch = r1;
                                                                     |     if (r3 == r4) {
    0x0005ca36 beq.w 0x5ce22                                         |         goto label_3;
                                                                     |     }
    0x0005ca3a ldrb.w r3, [r1, 0x40]                                 |     r3 = *((r1 + 0x40));
    0x0005ca3e cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0005ca40 bne.w 0x5ce22                                         |         goto label_3;
                                                                     |     }
    0x0005ca44 ldr.w fp, [r6, 0x1e4]                                 |     fp = *((r6 + 0x1e4));
    0x0005ca48 cmp.w fp, 0                                           |     
                                                                     |     if (fp == 0) {
    0x0005ca4c beq.w 0x5ce22                                         |         goto label_3;
                                                                     |     }
    0x0005ca50 ldrb.w r3, [r1, 0x89]                                 |     r3 = *((r1 + 0x89));
                                                                     |     if (r3 != 0) {
    0x0005ca54 cbz r3, 0x5ca5e                                       |         
    0x0005ca56 ldr.w r3, [r1, 0x84]                                  |         r3 = *((r1 + 0x84));
    0x0005ca5a str.w r3, [fp, 0x20]                                  |         __asm ("str.w r3, [arg_20h]");
                                                                     |     }
    0x0005ca5e ldr r3, [sp, 0x24]                                    |     r3 = *(arg_24h);
    0x0005ca60 lsls r5, r3, 0x1a                                     |     r5 = r3 << 0x1a;
                                                                     |     if (r5 < r3) {
    0x0005ca62 bmi.w 0x5ce42                                         |         goto label_29;
                                                                     |     }
                                                                     | label_2:
    0x0005ca66 ldr.w r1, [fp, 0x44]                                  |     r1 = *(arg_44h);
    0x0005ca6a cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x0005ca6c beq.w 0x5d2f4                                         |         goto label_30;
                                                                     |     }
    0x0005ca70 ldr r3, [sp, 0x1c]                                    |     r3 = var_1ch;
    0x0005ca72 ldr r0, [r3, 0x14]                                    |     r0 = *((r3 + 0x14));
    0x0005ca74 cmp r0, 0                                             |     
                                                                     |     if (r0 <= 0) {
    0x0005ca76 ble.w 0x5d2b8                                         |         goto label_31;
                                                                     |     }
    0x0005ca7a ldr r3, [r3, 0x10]                                    |     r3 = *((r3 + 0x10));
    0x0005ca7c movs r4, 0                                            |     r4 = 0;
    0x0005ca7e b 0x5ca88                                             |     
                                                                     |     while (r1 != r2) {
    0x0005ca80 adds r4, 1                                            |         r4++;
    0x0005ca82 adds r3, 0x10                                         |         r3 += 0x10;
    0x0005ca84 cmp r4, r0                                            |         
                                                                     |         if (r4 == r0) {
    0x0005ca86 beq 0x5ca8e                                           |             goto label_23;
                                                                     |         }
    0x0005ca88 ldr r2, [r3, 0xc]                                     |         r2 = *((r3 + 0xc));
    0x0005ca8a cmp r1, r2                                            |         
    0x0005ca8c bne 0x5ca80                                           |         
                                                                     |     }
                                                                     | label_23:
    0x0005ca8e ldr.w r7, [fp, 0x18]                                  |     r7 = *(arg_18h);
                                                                     |     if (r7 == 0) {
    0x0005ca92 cbz r7, 0x5caf4                                       |         goto label_32;
                                                                     |     }
    0x0005ca94 movs r5, 0                                            |     r5 = 0;
    0x0005ca96 movs r2, 0x4c                                         |     r2 = 0x4c;
    0x0005ca98 mov r1, r5                                            |     r1 = r5;
    0x0005ca9a add r0, sp, 0x6c                                      |     r0 += var_6ch;
    0x0005ca9c strd r5, r5, [sp, 0x50]                               |     __asm ("strd r5, r5, [sp, 0x50]");
    0x0005caa0 strd r5, r5, [sp, 0x58]                               |     __asm ("strd r5, r5, [sp, 0x58]");
    0x0005caa4 strd r5, r5, [sp, 0x60]                               |     __asm ("strd r5, r5, [sp, 0x60]");
    0x0005caa8 blx 0x5fcc                                            |     fcn_00005fcc ();
    0x0005caac ldr.w r3, [fp]                                        |     r3 = *(fp);
    0x0005cab0 movs r2, 4                                            |     r2 = 4;
    0x0005cab2 strb.w r2, [sp, 0x64]                                 |     var_64h = r2;
    0x0005cab6 ldr r2, [r7]                                          |     r2 = *(r7);
    0x0005cab8 str r3, [sp, 0x78]                                    |     var_78h = r3;
    0x0005caba ldr r3, [sp, 0x20]                                    |     r3 = *(arg_20h);
    0x0005cabc cmp r2, r5                                            |     
    0x0005cabe str.w fp, [sp, 0x80]                                  |     __asm ("str.w fp, [var_80h]");
    0x0005cac0 sub sp, 0                                             |     
    0x0005cac2 str r3, [sp, 0x48]                                    |     var_48h = r3;
    0x0005cac4 add r3, sp, 0x68                                      |     r3 += var_68h;
    0x0005cac6 str r3, [sp, 0x4c]                                    |     var_4ch = r3;
    0x0005cac8 mov.w r3, 1                                           |     r3 = 1;
    0x0005cacc str r3, [sp, 0x68]                                    |     var_68h = r3;
    0x0005cace mov.w r3, -1                                          |     r3 = -1;
    0x0005cad2 str r3, [sp, 0x98]                                    |     var_98h = r3;
                                                                     |     if (r2 <= r5) {
    0x0005cad4 ble 0x5caf4                                           |         goto label_32;
                                                                     |     }
    0x0005cad6 add.w r8, sp, 0x48                                    |     r8 += var_48h;
    0x0005cada mov r6, r5                                            |     r6 = r5;
                                                                     |     do {
    0x0005cadc ldr r3, [r7, 4]                                       |         r3 = *((r7 + 4));
    0x0005cade ldr r1, [r3, r5]                                      |         r1 = *((r3 + r5));
                                                                     |         if (r1 != 0) {
    0x0005cae0 cbz r1, 0x5caec                                       |             
    0x0005cae2 mov r0, r8                                            |             r0 = r8;
    0x0005cae4 bl 0x1f318                                            |             r0 = fcn_0001f318 (r0, r1);
                                                                     |             if (r0 != 0) {
    0x0005cae8 cbnz r0, 0x5caf4                                      |                 goto label_32;
                                                                     |             }
    0x0005caea ldr r2, [r7]                                          |             r2 = *(r7);
                                                                     |         }
    0x0005caec adds r6, 1                                            |         r6++;
    0x0005caee adds r5, 0x14                                         |         r5 += 0x14;
    0x0005caf0 cmp r6, r2                                            |         
    0x0005caf2 blt 0x5cadc                                           |         
                                                                     |     } while (r6 < r2);
                                                                     | label_32:
    0x0005caf4 ldrsh.w r1, [fp, 0x26]                                |     r1 = *(arg_26h);
    0x0005caf8 ldr.w r3, [fp, 4]                                     |     r3 = *(arg_4h);
    0x0005cafc cmp r1, 0                                             |     
                                                                     |     if (r1 <= 0) {
    0x0005cafe ble.w 0x5d280                                         |         goto label_33;
                                                                     |     }
    0x0005cb02 add.w r1, r1, r1, lsl 1                               |     r1 += (r1 << 1);
    0x0005cb06 movs r0, 0                                            |     r0 = 0;
    0x0005cb08 add.w r1, r3, r1, lsl 3                               |     r1 = r3 + (r1 << 3);
                                                                     |     do {
    0x0005cb0c ldrb r2, [r3, 0x16]                                   |         r2 = *((r3 + 0x16));
    0x0005cb0e adds r3, 0x18                                         |         r3 += 0x18;
    0x0005cb10 cmp r3, r1                                            |         
    0x0005cb12 add r0, r2                                            |         r0 += r2;
    0x0005cb14 bne 0x5cb0c                                           |         
                                                                     |     } while (r3 != r1);
                                                                     | label_18:
    0x0005cb16 ldrsh.w r3, [fp, 0x24]                                |     r3 = *(arg_24h);
    0x0005cb1a movs r1, 0                                            |     r1 = 0;
    0x0005cb1c cmp r3, 0                                             |     
    0x0005cb1e it lt                                                 |     
                                                                     |     if (r3 >= 0) {
    0x0005cb20 addlt r0, 1                                           |         r0++;
                                                                     |     }
    0x0005cb22 lsls r0, r0, 2                                        |     r0 <<= 2;
    0x0005cb24 bl 0x73ac                                             |     fcn_000073ac (r0, r1);
    0x0005cb28 ldr.w r5, [fp, 8]                                     |     r5 = *(arg_110h);
    0x0005cb2c strh.w r0, [fp, 0x2a]                                 |     *(arg_2ah) = r0;
                                                                     |     if (r5 == 0) {
    0x0005cb30 cbz r5, 0x5cb3e                                       |         goto label_34;
                                                                     |     }
                                                                     |     do {
    0x0005cb32 mov r0, r5                                            |         r0 = r5;
    0x0005cb34 bl 0x7fd8                                             |         fcn_00007fd8 (r0);
    0x0005cb38 ldr r5, [r5, 0x14]                                    |         r5 = *((r5 + 0x14));
    0x0005cb3a cmp r5, 0                                             |         
    0x0005cb3c bne 0x5cb32                                           |         
                                                                     |     } while (r5 != 0);
                                                                     | label_34:
    0x0005cb3e ldr r3, [sp, 0x1c]                                    |     r3 = var_1ch;
    0x0005cb40 ldrb.w r3, [r3, 0x89]                                 |     r3 = *((r3 + 0x89));
    0x0005cb44 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0005cb46 bne.w 0x5ce62                                         |         goto label_35;
                                                                     |     }
    0x0005cb4a ldr r3, [sp, 0x20]                                    |     r3 = *(arg_20h);
    0x0005cb4c ldr.w sb, [r3, 8]                                     |     sb = *((r3 + 8));
    0x0005cb50 cmp.w sb, 0                                           |     
                                                                     |     if (sb == 0) {
    0x0005cb54 beq.w 0x5d226                                         |         goto label_36;
                                                                     |     }
                                                                     | label_15:
    0x0005cb58 movs r3, 0                                            |     r3 = 0;
    0x0005cb5a movs r1, 0x3b                                         |     r1 = 0x3b;
    0x0005cb5c mov r2, r3                                            |     r2 = r3;
    0x0005cb5e str r3, [sp]                                          |     *(sp) = r3;
    0x0005cb60 mov r0, sb                                            |     r0 = sb;
    0x0005cb62 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005cb66 ldr.w r3, [fp, 0xc]                                   |     r3 = *(arg_114h);
    0x0005cb6a cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0005cb6c beq.w 0x5d270                                         |         goto label_37;
                                                                     |     }
    0x0005cb70 ldr.w r2, [pc, 0x7c4]                                 |     
    0x0005cb74 ldr.w r3, [pc, 0x7c4]                                 |     r3 = *(0x0005d33c);
    0x0005cb78 add r2, pc                                            |     r2 = 0xb9eb4;
    0x0005cb7a add r3, pc                                            |     r3 += pc;
    0x0005cb7c str r3, [sp, 0x34]                                    |     var_34h = r3;
                                                                     | label_17:
    0x0005cb7e ldr r3, [sp, 0x28]                                    |     r3 = var_28h_2;
    0x0005cb80 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0005cb82 beq.w 0x5cd6a                                         |         goto label_38;
                                                                     |     }
    0x0005cb86 ldr r3, [sp, 0x20]                                    |     r3 = *(arg_20h);
    0x0005cb88 movs r2, 1                                            |     r2 = 1;
    0x0005cb8a str r4, [sp]                                          |     *(sp) = r4;
    0x0005cb8c movs r1, 0x36                                         |     r1 = 0x36;
    0x0005cb8e mov r0, sb                                            |     r0 = sb;
    0x0005cb90 ldr.w r3, [r3, 0x184]                                 |     r3 = *((r3 + 0x184));
    0x0005cb94 bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005cb98 ldr.w r3, [sb, 4]                                     |     r3 = *((sb + 4));
                                                                     |     if (r3 != 0) {
    0x0005cb9c cbz r3, 0x5cbb0                                       |         
    0x0005cb9e ldr.w r2, [sb, 0x20]                                  |         r2 = *((sb + 0x20));
    0x0005cba2 add.w r2, r2, r2, lsl 2                               |         r2 += (r2 << 2);
    0x0005cba6 add.w r3, r3, r2, lsl 2                               |         r3 += (r2 << 2);
    0x0005cbaa movs r2, 2                                            |         r2 = 2;
    0x0005cbac strb r2, [r3, -0x11]                                  |         *((r3 - 0x11)) = r2;
                                                                     |     }
    0x0005cbb0 ldr r7, [sp, 0x20]                                    |     r7 = *(arg_20h);
    0x0005cbb2 movs r3, 2                                            |     r3 = 2;
    0x0005cbb4 add.w sl, sp, 0x48                                    |     sl += var_48h;
    0x0005cbb8 movs r5, 0                                            |     r5 = 0;
    0x0005cbba ldr r1, [sp, 0x28]                                    |     r1 = var_28h_2;
    0x0005cbbc movs r6, 1                                            |     r6 = 1;
    0x0005cbbe mov r2, sl                                            |     r2 = sl;
    0x0005cbc0 str r3, [r7, 0x44]                                    |     *((r7 + 0x44)) = r3;
    0x0005cbc2 mov r0, r7                                            |     r0 = r7;
    0x0005cbc4 movs r3, 0xe                                          |     r3 = 0xe;
    0x0005cbc6 strd r5, r5, [sp, 0x50]                               |     __asm ("strd r5, r5, [sp, 0x50]");
    0x0005cbca strh.w r3, [sp, 0x48]                                 |     var_48h = r3;
    0x0005cbce str r6, [sp, 0x4c]                                    |     var_4ch = r6;
    0x0005cbd0 bl 0x392a8                                            |     fcn_000392a8 (r0, r1, r2, r3, r4, r5);
    0x0005cbd4 mov r3, r5                                            |     r3 = r5;
    0x0005cbd6 str r5, [sp]                                          |     *(sp) = r5;
    0x0005cbd8 mov r2, r6                                            |     r2 = r6;
    0x0005cbda movs r1, 0x3b                                         |     r1 = 0x3b;
    0x0005cbdc mov r0, sb                                            |     r0 = sb;
    0x0005cbde bl 0x18bf8                                            |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005cbe2 ldr r5, [r7, 0x40]                                    |     r5 = *((r7 + 0x40));
    0x0005cbe4 cmp r5, 0                                             |     
                                                                     |     if (r5 == 0) {
    0x0005cbe6 beq.w 0x5d158                                         |         goto label_39;
                                                                     |     }
                                                                     | label_8:
    0x0005cbea ldrsh.w lr, [fp, 0x26]                                |     
    0x0005cbee ldrd r7, r5, [fp]                                     |     __asm ("ldrd r7, r5, [fp]");
    0x0005cbf2 cmp.w lr, 0                                           |     
                                                                     |     if (lr <= 0) {
    0x0005cbf6 ble.w 0x5d18e                                         |         goto label_40;
                                                                     |     }
    0x0005cbfa adds r5, 0x18                                         |     r5 += 0x18;
    0x0005cbfc mov.w ip, 0x18                                        |     
    0x0005cc00 smlabb ip, lr, ip, r5                                 |     __asm ("smlabb ip, lr, ip, r5");
    0x0005cc04 movs r6, 0                                            |     r6 = 0;
                                                                     | label_0:
    0x0005cc06 ldr r1, [r5, -0x18]                                   |     r1 = *((r5 - 0x18));
    0x0005cc0a ldrb r3, [r1]                                         |     r3 = *(r1);
    0x0005cc0c cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0005cc0e beq.w 0x5d222                                         |         goto label_41;
                                                                     |     }
    0x0005cc12 movs r0, 0                                            |     r0 = 0;
                                                                     |     do {
    0x0005cc14 cmp r3, 0x22                                          |         
    0x0005cc16 ldrb r3, [r1, 1]!                                     |         r3 = *((r1 += 1));
    0x0005cc1a ite eq                                                |         
                                                                     |         if (r3 != 0x22) {
    0x0005cc1c addeq r2, r0, 1                                       |             r2 = r0 + 1;
                                                                     |         }
                                                                     |         if (r3 == 0x22) {
    0x0005cc1e movne r2, r0                                          |             r2 = r0;
                                                                     |         }
    0x0005cc20 adds r0, r2, 1                                        |         r0 = r2 + 1;
    0x0005cc22 cmp r3, 0                                             |         
    0x0005cc24 bne 0x5cc14                                           |         
                                                                     |     } while (r3 != 0);
    0x0005cc26 adds r2, 8                                            |     r2 += 8;
                                                                     | label_14:
    0x0005cc28 adds r5, 0x18                                         |     r5 += 0x18;
    0x0005cc2a add r6, r2                                            |     r6 += r2;
    0x0005cc2c cmp r5, ip                                            |     
                                                                     |     if (r5 != ip) {
    0x0005cc2e bne 0x5cc06                                           |         goto label_0;
                                                                     |     }
    0x0005cc30 ldrb r3, [r7]                                         |     r3 = *(r7);
    0x0005cc32 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0005cc34 beq.w 0x5d2f0                                         |         goto label_42;
                                                                     |     }
                                                                     | label_9:
    0x0005cc38 movs r1, 0                                            |     r1 = 0;
                                                                     |     do {
    0x0005cc3a cmp r3, 0x22                                          |         
    0x0005cc3c ldrb r3, [r7, 1]!                                     |         r3 = *((r7 += 1));
    0x0005cc40 ite eq                                                |         
                                                                     |         if (r3 != 0x22) {
    0x0005cc42 addeq r2, r1, 1                                       |             r2 = r1 + 1;
                                                                     |         }
                                                                     |         if (r3 == 0x22) {
    0x0005cc44 movne r2, r1                                          |             r2 = r1;
                                                                     |         }
    0x0005cc46 adds r1, r2, 1                                        |         r1 = r2 + 1;
    0x0005cc48 cmp r3, 0                                             |         
    0x0005cc4a bne 0x5cc3a                                           |         
                                                                     |     } while (r3 != 0);
    0x0005cc4c adds r2, 3                                            |     r2 += 3;
                                                                     | label_26:
    0x0005cc4e add r6, r2                                            |     r6 += r2;
    0x0005cc50 cmp r6, 0x31                                          |     
                                                                     |     if (r6 <= 0x31) {
    0x0005cc52 ble.w 0x5d28e                                         |         goto label_43;
                                                                     |     }
    0x0005cc56 ldr.w r3, [pc, 0x6e8]                                 |     r3 = *(0x0005d340);
    0x0005cc5a add r3, pc                                            |     r3 += pc;
    0x0005cc5c str r3, [sp, 0x38]                                    |     var_38h = r3;
    0x0005cc5e ldr.w r3, [pc, 0x6e4]                                 |     r3 = *(0x0005d344);
    0x0005cc62 add r3, pc                                            |     r3 += pc;
    0x0005cc64 str r3, [sp, 0x28]                                    |     var_28h_2 = r3;
    0x0005cc66 ldr.w r3, [pc, 0x6e0]                                 |     r3 = *(0x0005d348);
    0x0005cc6a add r3, pc                                            |     r3 += pc;
                                                                     | label_10:
    0x0005cc6c movs r2, 6                                            |     r2 = 6;
    0x0005cc6e str r3, [sp, 0x3c]                                    |     var_3ch = r3;
    0x0005cc70 mla r6, lr, r2, r6                                    |     __asm ("mla r6, lr, r2, r6");
    0x0005cc74 add.w r3, r6, 0x23                                    |     r3 = r6 + 0x23;
    0x0005cc78 mov r0, r3                                            |     r0 = r3;
    0x0005cc7a str r3, [sp, 0x24]                                    |     *(arg_24h) = r3;
    0x0005cc7c bl 0xd300                                             |     fcn_0000d300 (r0, r1, r2, r3, r4);
    0x0005cc80 ldr r3, [sp, 0x3c]                                    |     r3 = var_3ch;
    0x0005cc82 mov r6, r0                                            |     r6 = r0;
    0x0005cc84 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0005cc86 beq.w 0x5d2d0                                         |         goto label_44;
                                                                     |     }
    0x0005cc8a ldr.w r2, [pc, 0x6c0]                                 |     
    0x0005cc8e mov r1, r0                                            |     r1 = r0;
    0x0005cc90 ldr r0, [sp, 0x24]                                    |     r0 = *(arg_24h);
    0x0005cc92 str r3, [sp, 0x3c]                                    |     var_3ch = r3;
    0x0005cc94 add r2, pc                                            |     r2 = 0xb9fe6;
    0x0005cc96 blx 0x6658                                            |     fcn_00006658 ();
    0x0005cc9a ldrb r2, [r6]                                         |     r2 = *(r6);
    0x0005cc9c ldr r3, [sp, 0x3c]                                    |     r3 = var_3ch;
                                                                     |     if (r2 == 0) {
    0x0005cc9e cbz r2, 0x5ccb0                                       |         goto label_45;
                                                                     |     }
    0x0005cca0 mov r2, r6                                            |     r2 = r6;
                                                                     |     do {
    0x0005cca2 ldrb r1, [r2, 1]!                                     |         r1 = *((r2 += 1));
    0x0005cca6 cmp r1, 0                                             |         
    0x0005cca8 bne 0x5cca2                                           |         
                                                                     |     } while (r1 != 0);
    0x0005ccaa subs r2, r2, r6                                       |     r2 -= r6;
    0x0005ccac bic r2, r2, 0xc0000000                                |     r2 = BIT_MASK (r2, 0xc0000000);
                                                                     | label_45:
    0x0005ccb0 mov r1, sl                                            |     r1 = sl;
    0x0005ccb2 strd r3, r2, [sp, 0x44]                               |     __asm ("strd r3, r2, [sp, 0x44]");
    0x0005ccb6 mov r0, r6                                            |     r0 = r6;
    0x0005ccb8 ldr.w r2, [fp]                                        |     r2 = *(fp);
    0x0005ccbc bl 0x149b4                                            |     fcn_000149b4 (r0, r1, r2);
    0x0005ccc0 ldr r2, [sp, 0x48]                                    |     r2 = var_48h;
    0x0005ccc2 movs r1, 0x28                                         |     r1 = 0x28;
    0x0005ccc4 adds r5, r2, 1                                        |     r5 = r2 + 1;
    0x0005ccc6 str r5, [sp, 0x48]                                    |     var_48h = r5;
    0x0005ccc8 strb r1, [r6, r2]                                     |     *((r6 + r2)) = r1;
    0x0005ccca ldrsh.w r2, [fp, 0x26]                                |     r2 = *(arg_26h);
    0x0005ccce ldr.w r7, [fp, 4]                                     |     r7 = *(arg_4h);
    0x0005ccd2 cmp r2, 0                                             |     
                                                                     |     if (r2 <= 0) {
    0x0005ccd4 ble.w 0x5d23a                                         |         goto label_46;
                                                                     |     }
    0x0005ccd8 ldr.w r1, [pc, 0x674]                                 |     
    0x0005ccdc adds r7, 0x18                                         |     r7 += 0x18;
    0x0005ccde ldr r3, [sp, 0x44]                                    |     r3 = *(arg_44h);
    0x0005cce0 mov.w r8, 0                                           |     r8 = 0;
    0x0005cce4 strd sb, r4, [sp, 0x3c]                               |     __asm ("strd sb, r4, [sp, 0x3c]");
    0x0005cce8 add r1, pc                                            |     r1 = 0xba03c;
    0x0005ccea mov r2, r3                                            |     r2 = r3;
    0x0005ccec mov sb, r1                                            |     sb = r1;
                                                                     | label_1:
    0x0005ccee ldr r3, [sp, 0x24]                                    |     r3 = *(arg_24h);
    0x0005ccf0 adds r4, r6, r5                                       |     r4 = r6 + r5;
    0x0005ccf2 mov r1, r4                                            |     r1 = r4;
    0x0005ccf4 subs r0, r3, r5                                       |     r0 = r3 - r5;
    0x0005ccf6 blx 0x6658                                            |     fcn_00006658 ();
    0x0005ccfa ldrb r2, [r6, r5]                                     |     r2 = *((r6 + r5));
                                                                     |     if (r2 == 0) {
    0x0005ccfc cbz r2, 0x5cd10                                       |         goto label_47;
                                                                     |     }
    0x0005ccfe mov r2, r4                                            |     r2 = r4;
                                                                     |     do {
    0x0005cd00 ldrb r3, [r2, 1]!                                     |         r3 = *((r2 += 1));
    0x0005cd04 cmp r3, 0                                             |         
    0x0005cd06 bne 0x5cd00                                           |         
                                                                     |     } while (r3 != 0);
    0x0005cd08 subs r2, r2, r4                                       |     r2 -= r4;
    0x0005cd0a bic r2, r2, 0xc0000000                                |     r2 = BIT_MASK (r2, 0xc0000000);
    0x0005cd0e add r5, r2                                            |     r5 += r2;
                                                                     | label_47:
    0x0005cd10 mov r1, sl                                            |     r1 = sl;
    0x0005cd12 ldr r2, [r7, -0x18]                                   |     r2 = *((r7 - 0x18));
    0x0005cd16 mov r0, r6                                            |     r0 = r6;
    0x0005cd18 str r5, [sp, 0x48]                                    |     var_48h = r5;
    0x0005cd1a bl 0x149b4                                            |     fcn_000149b4 (r0, r1, r2);
    0x0005cd1e ldrb r3, [r7, -0x3]                                   |     r3 = *((r7 - 0x3));
    0x0005cd22 add.w r3, sb, r3, lsl 2                               |     r3 = sb + (r3 << 2);
    0x0005cd26 ldr.w r1, [r3, 0x7c0]                                 |     r1 = *((r3 + 0x7c0));
    0x0005cd2a cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x0005cd2c beq.w 0x5d21c                                         |         goto label_48;
                                                                     |     }
    0x0005cd30 ldrb r2, [r1]                                         |     r2 = *(r1);
    0x0005cd32 cmp r2, 0                                             |     
                                                                     |     if (r2 == 0) {
    0x0005cd34 beq.w 0x5d27c                                         |         goto label_49;
                                                                     |     }
    0x0005cd38 mov r3, r1                                            |     r3 = r1;
                                                                     |     do {
    0x0005cd3a ldrb r2, [r3, 1]!                                     |         r2 = *((r3 += 1));
    0x0005cd3e cmp r2, 0                                             |         
    0x0005cd40 bne 0x5cd3a                                           |         
                                                                     |     } while (r2 != 0);
    0x0005cd42 subs r3, r3, r1                                       |     r3 -= r1;
    0x0005cd44 bic r3, r3, 0xc0000000                                |     r3 = BIT_MASK (r3, 0xc0000000);
    0x0005cd48 mov r2, r3                                            |     r2 = r3;
                                                                     | label_13:
    0x0005cd4a ldr r0, [sp, 0x48]                                    |     r0 = var_48h;
    0x0005cd4c add.w r8, r8, 1                                       |     r8++;
    0x0005cd50 adds r7, 0x18                                         |     r7 += 0x18;
    0x0005cd52 adds r5, r0, r3                                       |     r5 = r0 + r3;
    0x0005cd54 add r0, r6                                            |     r0 += r6;
    0x0005cd56 blx 0x6214                                            |     fcn_00006214 ();
    0x0005cd5a ldrsh.w r2, [fp, 0x26]                                |     r2 = *(arg_26h);
    0x0005cd5e str r5, [sp, 0x48]                                    |     var_48h = r5;
    0x0005cd60 cmp r8, r2                                            |     
                                                                     |     if (r8 >= r2) {
    0x0005cd62 bge.w 0x5d236                                         |         goto label_50;
                                                                     |     }
    0x0005cd66 ldr r2, [sp, 0x28]                                    |     r2 = var_28h_2;
    0x0005cd68 b 0x5ccee                                             |     goto label_1;
                                                                     | label_38:
    0x0005cd6a ldr r3, [sp, 0x24]                                    |     r3 = *(arg_24h);
    0x0005cd6c cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0005cd6e bne.w 0x5d2a6                                         |         goto label_51;
                                                                     |     }
    0x0005cd72 ldr r1, [sp, 0x2c]                                    |     r1 = *(arg_2ch);
                                                                     | label_21:
    0x0005cd74 ldr r3, [r1]                                          |     r3 = *(r1);
    0x0005cd76 ldr r0, [sp, 0x20]                                    |     r0 = *(arg_20h);
    0x0005cd78 ldrb r5, [r3]                                         |     r5 = *(r3);
    0x0005cd7a ldr.w r0, [r0, 0x1f0]                                 |     r0 = *((r0 + 0x1f0));
    0x0005cd7e cmp r5, 0x3b                                          |     
    0x0005cd80 it ne                                                 |     
                                                                     |     if (r5 == 0x3b) {
    0x0005cd82 ldrne r1, [r1, 4]                                     |         r1 = *((r1 + 4));
                                                                     |     }
    0x0005cd84 sub.w r3, r3, r0                                      |     r3 -= r0;
    0x0005cd88 str r0, [sp]                                          |     *(sp) = r0;
    0x0005cd8a ldr r0, [sp, 0x1c]                                    |     r0 = var_1ch;
    0x0005cd8c it ne                                                 |     
                                                                     |     if (r5 == 0x3b) {
    0x0005cd8e addne r3, r3, r1                                      |         r3 += r1;
                                                                     |     }
    0x0005cd90 ldr.w r1, [pc, 0x5c0]                                 |     
    0x0005cd94 add r1, pc                                            |     r1 = 0xba0ec;
    0x0005cd96 bl 0x1babc                                            |     fcn_0001babc (r0);
    0x0005cd98 cdp2 p6, 9, c4, c1, c6, 0                             |     __asm ("cdp2 p6, 9, c4, c1, c6, 0");
                                                                     | label_16:
    0x0005cd9c ldr r3, [sp, 0x1c]                                    |     r3 = var_1ch;
    0x0005cd9e lsls r5, r4, 4                                        |     r5 = r4 << 4;
    0x0005cda0 cmp r4, 1                                             |     
    0x0005cda2 ldr r3, [r3, 0x10]                                    |     r3 = *((r3 + 0x10));
    0x0005cda4 ldr r2, [r3, r5]                                      |     r2 = *((r3 + r5));
                                                                     |     if (r4 == 1) {
    0x0005cda6 beq.w 0x5d284                                         |         goto label_52;
                                                                     |     }
    0x0005cdaa ldr.w r3, [pc, 0x5ac]                                 |     r3 = *(0x0005d358);
    0x0005cdae add r3, pc                                            |     r3 += pc;
                                                                     | label_19:
    0x0005cdb0 ldr r0, [sp, 0x34]                                    |     r0 = var_34h;
    0x0005cdb2 ldr.w r1, [fp]                                        |     r1 = *(fp);
    0x0005cdb6 ldr r7, [sp, 0x20]                                    |     r7 = *(arg_20h);
    0x0005cdb8 str r0, [sp]                                          |     *(sp) = r0;
    0x0005cdba str r6, [sp, 0x10]                                    |     var_10h_2 = r6;
    0x0005cdbc strd r1, r1, [sp, 4]                                  |     __asm ("strd r1, r1, [sp, 4]");
    0x0005cdc0 mov r0, r7                                            |     r0 = r7;
    0x0005cdc2 ldr.w r1, [r7, 0x180]                                 |     r1 = *((r7 + 0x180));
    0x0005cdc4 asrs r0, r0, 6                                        |     r0 >>= 6;
    0x0005cdc6 str r1, [sp, 0x14]                                    |     var_14h_2 = r1;
    0x0005cdc8 ldr.w r1, [r7, 0x184]                                 |     r1 = *((r7 + 0x184));
    0x0005cdcc str r1, [sp, 0xc]                                     |     var_ch = r1;
    0x0005cdce ldr.w r1, [pc, 0x58c]                                 |     r1 = *(0x0005d35c);
    0x0005cdd2 add r1, pc                                            |     r1 += pc;
    0x0005cdd4 bl 0x4bf9c                                            |     fcn_0004bf9c (r0);
    0x0005cdd8 mov r1, r6                                            |     r1 = r6;
    0x0005cdda ldr r6, [sp, 0x1c]                                    |     r6 = var_1ch;
    0x0005cddc mov r0, r6                                            |     r0 = r6;
    0x0005cdde bl 0xe12c                                             |     fcn_0000e12c (r0, r1);
    0x0005cde2 mov r1, r4                                            |     r1 = r4;
    0x0005cde4 mov r0, r7                                            |     r0 = r7;
    0x0005cde6 bl 0x18cb0                                            |     fcn_00018cb0 (r0, r1);
    0x0005cdea ldrb.w r3, [fp, 0x2c]                                 |     r3 = *(arg_2ch);
    0x0005cdee lsls r3, r3, 0x1c                                     |     r3 <<= 0x1c;
                                                                     |     if (r3 < r3) {
    0x0005cdf0 bpl 0x5ce00                                           |         
    0x0005cdf2 ldr r3, [r6, 0x10]                                    |         r3 = *((r6 + 0x10));
    0x0005cdf4 adds r2, r3, r5                                       |         r2 = r3 + r5;
    0x0005cdf6 ldr r2, [r2, 0xc]                                     |         r2 = *((r2 + 0xc));
    0x0005cdf8 ldr r2, [r2, 0x48]                                    |         r2 = *((r2 + 0x48));
    0x0005cdfa cmp r2, 0                                             |         
                                                                     |         if (r2 == 0) {
    0x0005cdfc beq.w 0x5d2e2                                         |             goto label_53;
                                                                     |         }
                                                                     |     }
                                                                     | label_25:
    0x0005ce00 ldr r5, [sp, 0x1c]                                    |     r5 = var_1ch;
    0x0005ce02 ldr.w r1, [pc, 0x55c]                                 |     
    0x0005ce06 ldr.w r2, [fp]                                        |     r2 = *(fp);
    0x0005ce0a mov r0, r5                                            |     r0 = r5;
    0x0005ce0c add r1, pc                                            |     r1 = 0xba172;
    0x0005ce0e bl 0x1babc                                            |     fcn_0001babc (r0);
    0x0005ce12 mov r1, r4                                            |     r1 = r4;
    0x0005ce14 mov r2, r0                                            |     r2 = r0;
    0x0005ce16 mov r0, sb                                            |     r0 = sb;
    0x0005ce18 bl 0x18d2c                                            |     fcn_00018d2c (r0, r1, r2);
    0x0005ce1c ldrb.w r3, [r5, 0x89]                                 |     r3 = *((r5 + 0x89));
                                                                     |     if (r3 == 0) {
    0x0005ce20 cbnz r3, 0x5ce62                                      |         
                                                                     | label_3:
    0x0005ce22 ldr.w r2, [pc, 0x540]                                 |         r2 = *(0x0005d364);
    0x0005ce26 ldr.w r3, [pc, 0x50c]                                 |         r3 = *(0x5d336);
    0x0005ce2a add r2, pc                                            |         r2 += pc;
    0x0005ce2c ldr r3, [r2, r3]                                      |         r3 = *((r2 + r3));
    0x0005ce2e ldr r2, [r3]                                          |         r2 = *(0x5d336);
    0x0005ce30 ldr r3, [sp, 0xbc]                                    |         r3 = var_bch;
    0x0005ce32 eors r2, r3                                           |         r2 ^= r3;
    0x0005ce34 mov.w r3, 0                                           |         r3 = 0;
                                                                     |         if (r2 != r3) {
    0x0005ce38 bne.w 0x5d31a                                         |             goto label_54;
                                                                     |         }
    0x0005ce3c add sp, 0xc4                                          |         
    0x0005ce3e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |         
                                                                     | label_29:
    0x0005ce42 ldrb.w r3, [fp, 0x2c]                                 |         r3 = *(arg_2ch);
    0x0005ce46 lsls r4, r3, 0x1c                                     |         r4 = r3 << 0x1c;
                                                                     |         if (r4 < r3) {
    0x0005ce48 bmi.w 0x5d24c                                         |             goto label_55;
                                                                     |         }
    0x0005ce4c lsls r0, r3, 0x1d                                     |         r0 = r3 << 0x1d;
                                                                     |         if (r0 < r3) {
    0x0005ce4e bmi 0x5ce9c                                           |             goto label_56;
                                                                     |         }
    0x0005ce50 ldr.w r1, [pc, 0x514]                                 |         r1 = *(0x0005d368);
    0x0005ce54 ldr.w r2, [fp]                                        |         r2 = *(fp);
    0x0005ce58 ldr r0, [sp, 0x20]                                    |         r0 = *(arg_20h);
    0x0005ce5a add r1, pc                                            |         r1 += pc;
    0x0005ce5c bl 0x1ca34                                            |         fcn_0001ca34 (r0);
    0x0005ce60 b 0x5ca66                                             |         goto label_2;
                                                                     |     }
                                                                     | label_35:
    0x0005ce62 ldr.w r1, [fp]                                        |     r1 = *(fp);
    0x0005ce66 ldr.w r3, [fp, 0x44]                                  |     r3 = *(arg_44h);
    0x0005ce6a add.w r0, r3, 8                                       |     r0 = r3 + 8;
    0x0005ce6e cmp r1, 0                                             |     
                                                                     |     if (r1 == 0) {
    0x0005ce70 beq.w 0x5d28a                                         |         goto label_57;
                                                                     |     }
    0x0005ce74 ldrb r2, [r1]                                         |     r2 = *(r1);
                                                                     |     if (r2 == 0) {
    0x0005ce76 cbz r2, 0x5ce88                                       |         goto label_20;
                                                                     |     }
    0x0005ce78 mov r3, r1                                            |     r3 = r1;
                                                                     |     do {
    0x0005ce7a ldrb r2, [r3, 1]!                                     |         r2 = *((r3 += 1));
    0x0005ce7e cmp r2, 0                                             |         
    0x0005ce80 bne 0x5ce7a                                           |         
                                                                     |     } while (r2 != 0);
    0x0005ce82 subs r3, r3, r1                                       |     r3 -= r1;
    0x0005ce84 bic r2, r3, 0xc0000000                                |     r2 = BIT_MASK (r3, 0xc0000000);
                                                                     | label_20:
    0x0005ce88 mov r3, fp                                            |     r3 = fp;
    0x0005ce8a bl 0x128cc                                            |     r0 = fcn_000128cc (r0, r1, r2, r3, r4, r5);
    0x0005ce8e cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0005ce90 beq 0x5cf50                                           |         goto label_58;
                                                                     |     }
    0x0005ce92 ldr r2, [sp, 0x1c]                                    |     r2 = var_1ch;
    0x0005ce94 movs r3, 1                                            |     r3 = 1;
    0x0005ce96 strb.w r3, [r2, 0x40]                                 |     *((r2 + 0x40)) = r3;
    0x0005ce9a b 0x5ce22                                             |     goto label_3;
                                                                     | label_56:
    0x0005ce9c ldr r2, [sp, 0x20]                                    |     r2 = *(arg_20h);
    0x0005ce9e orr r3, r3, 0x20                                      |     r3 |= 0x20;
    0x0005cea2 strb.w r3, [fp, 0x2c]                                 |     *(arg_2ch) = r3;
    0x0005cea6 ldr.w r3, [r2, 0x1a0]                                 |     r3 = *((r2 + 0x1a0));
    0x0005ceaa ldr r2, [r2, 8]                                       |     r2 = *((r2 + 8));
    0x0005ceac cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0005ceae beq 0x5ced4                                           |         
    0x0005ceb0 ldr r1, [r2]                                          |         r1 = *(r2);
    0x0005ceb2 it lt                                                 |         
                                                                     |         if (r3 >= 0) {
    0x0005ceb4 ldrlt r3, [r2, 0x20]                                  |             r3 = *((r2 + 0x20));
                                                                     |         }
    0x0005ceb6 ldrb.w r1, [r1, 0x40]                                 |         r1 = *((r1 + 0x40));
    0x0005ceba it lt                                                 |         
                                                                     |         if (r3 >= 0) {
    0x0005cebc addlt r3, r3, -1                                      |             r3 += -1;
                                                                     |         }
    0x0005cec0 cmp r1, 0                                             |         
                                                                     |         if (r1 != 0) {
    0x0005cec2 bne.w 0x5d2ae                                         |             goto label_59;
                                                                     |         }
    0x0005cec6 ldr r1, [r2, 4]                                       |         r1 = *((r2 + 4));
    0x0005cec8 add.w r3, r3, r3, lsl 2                               |         r3 += (r3 << 2);
    0x0005cecc add.w r3, r1, r3, lsl 2                               |         r3 = r1 + (r3 << 2);
                                                                     | label_22:
    0x0005ced0 movs r1, 0x76                                         |         r1 = 0x76;
    0x0005ced2 strb r1, [r3]                                         |         *(r3) = r1;
                                                                     |     }
    0x0005ced4 ldr r3, [sp, 0x20]                                    |     r3 = *(arg_20h);
    0x0005ced6 ldr.w r3, [r3, 0x1a4]                                 |     r3 = *((r3 + 0x1a4));
    0x0005ceda cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0005cedc beq 0x5cf02                                           |         
    0x0005cede ldr r1, [r2]                                          |         r1 = *(r2);
    0x0005cee0 it lt                                                 |         
                                                                     |         if (r3 >= 0) {
    0x0005cee2 ldrlt r3, [r2, 0x20]                                  |             r3 = *((r2 + 0x20));
                                                                     |         }
    0x0005cee4 ldrb.w r1, [r1, 0x40]                                 |         r1 = *((r1 + 0x40));
    0x0005cee8 it lt                                                 |         
                                                                     |         if (r3 >= 0) {
    0x0005ceea addlt r3, r3, -1                                      |             r3 += -1;
                                                                     |         }
    0x0005ceee cmp r1, 0                                             |         
                                                                     |         if (r1 != 0) {
    0x0005cef0 bne.w 0x5d2be                                         |             goto label_60;
                                                                     |         }
    0x0005cef4 ldr r2, [r2, 4]                                       |         r2 = *((r2 + 4));
    0x0005cef6 add.w r3, r3, r3, lsl 2                               |         r3 += (r3 << 2);
    0x0005cefa add.w r3, r2, r3, lsl 2                               |         r3 = r2 + (r3 << 2);
                                                                     | label_24:
    0x0005cefe movs r2, 0x10                                         |         r2 = 0x10;
    0x0005cf00 strb r2, [r3]                                         |         *(r3) = r2;
                                                                     |     }
    0x0005cf02 ldrsh.w r3, [fp, 0x24]                                |     r3 = *(arg_24h);
    0x0005cf06 cmp r3, 0                                             |     
                                                                     |     if (r3 >= 0) {
    0x0005cf08 bge 0x5cfb4                                           |         goto label_61;
                                                                     |     }
    0x0005cf0a ldr.w r5, [fp, 8]                                     |     r5 = *(arg_110h);
    0x0005cf0e mov r6, r5                                            |     r6 = r5;
                                                                     |     if (r5 != 0) {
    0x0005cf10 cbnz r5, 0x5cf1c                                      |         goto label_62;
                                                                     |     }
    0x0005cf12 b 0x5d31e                                             |     goto label_63;
                                                                     |     do {
    0x0005cf14 ldr r6, [r6, 0x14]                                    |         r6 = *((r6 + 0x14));
    0x0005cf16 cmp r6, 0                                             |         
                                                                     |         if (r6 == 0) {
    0x0005cf18 beq.w 0x5d31e                                         |             goto label_63;
                                                                     |         }
                                                                     | label_62:
    0x0005cf1c ldrb.w r3, [r6, 0x37]                                 |         r3 = *((r6 + 0x37));
    0x0005cf20 and r2, r3, 3                                         |         r2 = r3 & 3;
    0x0005cf24 cmp r2, 2                                             |         
    0x0005cf26 bne 0x5cf14                                           |         
                                                                     |     } while (r2 != 2);
    0x0005cf28 orr r3, r3, 0x20                                      |     r3 |= 0x20;
    0x0005cf2c strb.w r3, [r6, 0x37]                                 |     *((r6 + 0x37)) = r3;
    0x0005cf30 ldrh r3, [r6, 0x32]                                   |     r3 = *((r6 + 0x32));
    0x0005cf32 str r3, [sp, 0x38]                                    |     var_38h = r3;
    0x0005cf34 str r3, [sp, 0x40]                                    |     var_40h = r3;
    0x0005cf36 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0005cf38 bne.w 0x5d03e                                         |         goto label_64;
                                                                     |     }
    0x0005cf3c ldrb.w r3, [r6, 0x37]                                 |     r3 = *((r6 + 0x37));
    0x0005cf40 orr r3, r3, 8                                         |     r3 |= 8;
    0x0005cf44 strb.w r3, [r6, 0x37]                                 |     *((r6 + 0x37)) = r3;
    0x0005cf48 ldr.w r3, [fp, 0x20]                                  |     r3 = *(arg_20h);
    0x0005cf4c str r3, [r6, 0x2c]                                    |     *((r6 + 0x2c)) = r3;
    0x0005cf4e b 0x5d076                                             |     goto label_65;
                                                                     | label_58:
    0x0005cf50 ldr r3, [sp, 0x20]                                    |     r3 = *(arg_20h);
    0x0005cf52 ldr r2, [sp, 0x1c]                                    |     r2 = var_1ch;
    0x0005cf54 str.w r0, [r3, 0x1e4]                                 |     __asm ("str.w r0, aav.0x000000ff");
    0x0005cf58 ldr r3, [r2, 0x18]                                    |     r3 = *((r2 + 0x18));
    0x0005cf5a orr r3, r3, 2                                         |     r3 |= 2;
    0x0005cf5e str r3, [r2, 0x18]                                    |     *((r2 + 0x18)) = r3;
    0x0005cf60 ldr.w r3, [fp, 0xc]                                   |     r3 = *(arg_114h);
    0x0005cf64 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0005cf66 bne.w 0x5ce22                                         |         goto label_3;
                                                                     |     }
    0x0005cf6a ldr r3, [sp, 0x30]                                    |     r3 = *(arg_30h);
    0x0005cf6c ldr r4, [r3]                                          |     r4 = *(r3);
    0x0005cf6e ldr r3, [sp, 0x20]                                    |     r3 = *(arg_20h);
    0x0005cf70 ldr.w r3, [r3, 0x1f0]                                 |     r3 = *((r3 + 0x1f0));
    0x0005cf74 cmp r4, 0                                             |     
                                                                     |     if (r4 == 0) {
    0x0005cf76 beq.w 0x5d304                                         |         goto label_66;
                                                                     |     }
                                                                     | label_27:
    0x0005cf7a subs r1, r4, r3                                       |     r1 = r4 - r3;
    0x0005cf7c ldrb r2, [r3]                                         |     r2 = *(r3);
    0x0005cf7e cmp r1, 0                                             |     
    0x0005cf80 it lt                                                 |     
                                                                     |     if (r1 >= 0) {
    0x0005cf82 movlt r4, -1                                          |         r4 = -1;
                                                                     |     }
    0x0005cf86 cmp r2, 0                                             |     
    0x0005cf88 it ne                                                 |     
                                                                     |     if (r2 != 0) {
    0x0005cf8a cmpne r3, r4                                          |         __asm ("cmpne r3, r4");
                                                                     |     }
    0x0005cf8c it lo                                                 |     
                                                                     |     if (r2 >= 0) {
    0x0005cf8e movlo r0, 0                                           |         r0 = 0;
                                                                     |     }
                                                                     |     if (r2 >= 0) {
    0x0005cf90 bhs.w 0x5d300                                         |         goto label_67;
                                                                     |     }
                                                                     |     do {
    0x0005cf94 cmp r2, 0xbf                                          |         
    0x0005cf96 ldrb r1, [r3, 1]                                      |         r1 = *((r3 + 1));
    0x0005cf98 add.w r3, r3, 1                                       |         r3++;
                                                                     |         if (r2 > 0xbf) {
    0x0005cf9c bhi.w 0x5d140                                         |             goto label_68;
                                                                     |         }
                                                                     | label_6:
    0x0005cfa0 mov r2, r1                                            |         r2 = r1;
                                                                     | label_7:
    0x0005cfa2 cmp r2, 0                                             |         
    0x0005cfa4 it ne                                                 |         
                                                                     |         if (r2 != 0) {
    0x0005cfa6 cmpne r4, r3                                          |             __asm ("cmpne r4, r3");
                                                                     |         }
    0x0005cfa8 add.w r1, r0, 1                                       |         r1 = r0 + 1;
                                                                     |         if (r2 < 0) {
    0x0005cfac bls.w 0x5d2c8                                         |             goto label_69;
                                                                     |         }
    0x0005cfb0 mov r0, r1                                            |         r0 = r1;
    0x0005cfb2 b 0x5cf94                                             |         
                                                                     |     } while (1);
                                                                     | label_61:
    0x0005cfb4 movs r2, 0                                            |     r2 = 0;
    0x0005cfb6 ldr r0, [sp, 0x1c]                                    |     r0 = var_1ch;
    0x0005cfb8 mov r1, r2                                            |     r1 = r2;
    0x0005cfba bl 0x19ba4                                            |     r0 = fcn_00019ba4 (r0, r1, r2);
    0x0005cfbe mov r4, r0                                            |     r4 = r0;
    0x0005cfc0 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0005cfc2 beq.w 0x5ca66                                         |         goto label_2;
                                                                     |     }
    0x0005cfc6 ldrsh.w r3, [fp, 0x24]                                |     r3 = *(arg_24h);
    0x0005cfca ldr r6, [sp, 0x20]                                    |     r6 = *(arg_20h);
    0x0005cfcc ldr.w r2, [fp, 4]                                     |     r2 = *(arg_4h);
    0x0005cfd0 ldr r5, [r0, 4]                                       |     r5 = *((r0 + 4));
    0x0005cfd2 add.w r3, r3, r3, lsl 1                               |     r3 += (r3 << 1);
    0x0005cfd6 ldr r0, [r6]                                          |     r0 = *(r6);
    0x0005cfd8 ldr.w r1, [r2, r3, lsl 3]                             |     offset_0 = r3 << 3;
                                                                     |     r1 = *((r2 + offset_0));
    0x0005cfdc bl 0xd418                                             |     fcn_0000d418 (r0, r1);
    0x0005cfe0 ldr r3, [r4, 4]                                       |     r3 = *((r4 + 4));
    0x0005cfe2 str r0, [r5, 4]                                       |     *((r5 + 4)) = r0;
    0x0005cfe4 mov r0, r6                                            |     r0 = r6;
    0x0005cfe6 ldrb.w r2, [r6, 0x1c0]                                |     r2 = *((r6 + 0x1c0));
    0x0005cfea strb r2, [r3, 0xc]                                    |     *((r3 + 0xc)) = r2;
    0x0005cfec movs r3, 0                                            |     r3 = 0;
    0x0005cfee strd r3, r3, [sp, 0x10]                               |     __asm ("strd r3, r3, [sp, 0x10]");
    0x0005cff2 mov r1, r3                                            |     r1 = r3;
    0x0005cff4 strd r3, r3, [sp, 8]                                  |     __asm ("strd r3, r3, [sp, 8]");
    0x0005cff8 ldrb.w r2, [fp, 0x2d]                                 |     r2 = *(arg_2dh);
    0x0005cffc strd r4, r2, [sp]                                     |     __asm ("strd r4, r2, [sp]");
    0x0005d000 mov r2, r3                                            |     r2 = r3;
    0x0005d002 bl 0x5c000                                            |     r0 = fcn_0005c000 (r0, r1, r2, r3, r4, r5, r6);
    0x0005d006 mov r6, r0                                            |     r6 = r0;
    0x0005d008 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0005d00a beq.w 0x5ca66                                         |         goto label_2;
                                                                     |     }
    0x0005d00e ldrb.w r3, [r0, 0x37]                                 |     r3 = *((r0 + 0x37));
    0x0005d012 movs r2, 2                                            |     r2 = 2;
    0x0005d014 bfi r3, r2, 0, 2                                      |     value_1 = BIT_MASK (0, 2);
                                                                     |     value_2 = r2 & value_1;
                                                                     |     value_1 = ~value_1;
                                                                     |     r3 &= value_1;
                                                                     |     r3 |= value_2;
    0x0005d018 strb.w r3, [r0, 0x37]                                 |     *((r0 + 0x37)) = r3;
    0x0005d01c movw r3, 0xffff                                       |     r3 = 0xffff;
    0x0005d020 strh.w r3, [fp, 0x24]                                 |     *(arg_24h) = r3;
    0x0005d024 ldrh r3, [r0, 0x32]                                   |     r3 = *((r0 + 0x32));
    0x0005d026 ldr.w r5, [fp, 8]                                     |     r5 = *(arg_110h);
    0x0005d02a mov r2, r3                                            |     r2 = r3;
    0x0005d02c str r3, [sp, 0x38]                                    |     var_38h = r3;
    0x0005d02e ldrb.w r3, [r0, 0x37]                                 |     r3 = *((r0 + 0x37));
    0x0005d032 str r2, [sp, 0x40]                                    |     var_40h = r2;
    0x0005d034 orr r3, r3, 0x20                                      |     r3 |= 0x20;
    0x0005d038 strb.w r3, [r0, 0x37]                                 |     *((r0 + 0x37)) = r3;
                                                                     |     if (r2 == 0) {
    0x0005d03c cbz r2, 0x5d05e                                       |         goto label_70;
                                                                     |     }
                                                                     | label_64:
    0x0005d03e ldr r2, [r6, 4]                                       |     r2 = *((r6 + 4));
    0x0005d040 movs r0, 1                                            |     r0 = 1;
    0x0005d042 ldr r3, [sp, 0x38]                                    |     r3 = var_38h;
    0x0005d044 ldr.w r4, [fp, 4]                                     |     r4 = *(arg_4h);
    0x0005d048 add.w r1, r2, r3, lsl 1                               |     r1 = r2 + (r3 << 1);
                                                                     |     do {
    0x0005d04c ldrsh r3, [r2], 2                                     |         r3 = *(r2);
                                                                     |         r2 += 2;
    0x0005d050 cmp r1, r2                                            |         
    0x0005d052 add.w r3, r3, r3, lsl 1                               |         r3 += (r3 << 1);
    0x0005d056 add.w r3, r4, r3, lsl 3                               |         r3 = r4 + (r3 << 3);
    0x0005d05a strb r0, [r3, 0x14]                                   |         *((r3 + 0x14)) = r0;
    0x0005d05c bne 0x5d04c                                           |         
                                                                     |     } while (r1 != r2);
                                                                     | label_70:
    0x0005d05e ldrb.w r3, [r6, 0x37]                                 |     r3 = *((r6 + 0x37));
    0x0005d062 orr r3, r3, 8                                         |     r3 |= 8;
    0x0005d066 strb.w r3, [r6, 0x37]                                 |     *((r6 + 0x37)) = r3;
    0x0005d06a ldr.w r3, [fp, 0x20]                                  |     r3 = *(arg_20h);
    0x0005d06e str r3, [r6, 0x2c]                                    |     *((r6 + 0x2c)) = r3;
    0x0005d070 cmp r5, 0                                             |     
                                                                     |     if (r5 == 0) {
    0x0005d072 beq.w 0x5d1bc                                         |         goto label_71;
                                                                     |     }
                                                                     | label_65:
    0x0005d076 ldr r3, [sp, 0x38]                                    |     r3 = var_38h;
    0x0005d078 mov r8, r6                                            |     r8 = r6;
    0x0005d07a str.w fp, [sp, 0x44]                                  |     __asm ("str.w fp, [arg_44h]");
    0x0005d07e mov r6, r5                                            |     r6 = r5;
    0x0005d080 lsls r2, r3, 1                                        |     r2 = r3 << 1;
    0x0005d082 lsls r3, r3, 2                                        |     r3 <<= 2;
    0x0005d084 mov fp, r3                                            |     
    0x0005d086 str r2, [sp, 0x3c]                                    |     var_3ch = r2;
                                                                     | label_11:
    0x0005d088 ldrb.w r3, [r6, 0x37]                                 |     r3 = *((r6 + 0x37));
    0x0005d08c and r3, r3, 3                                         |     r3 &= 3;
    0x0005d090 cmp r3, 2                                             |     
                                                                     |     if (r3 == 2) {
    0x0005d092 beq.w 0x5d1ae                                         |         goto label_72;
                                                                     |     }
    0x0005d096 ldr r3, [sp, 0x38]                                    |     r3 = var_38h;
    0x0005d098 ldrh r1, [r6, 0x32]                                   |     r1 = *((r6 + 0x32));
    0x0005d09a cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0005d09c beq.w 0x5d1ac                                         |         goto label_73;
                                                                     |     }
    0x0005d0a0 ldr.w r3, [r8, 4]                                     |     r3 = *((r8 + 4));
    0x0005d0a4 lsls r7, r1, 1                                        |     r7 = r1 << 1;
    0x0005d0a6 ldr r5, [r6, 4]                                       |     r5 = *((r6 + 4));
    0x0005d0a8 mov lr, r1                                            |     lr = r1;
    0x0005d0aa ldr r2, [sp, 0x3c]                                    |     r2 = var_3ch;
    0x0005d0ac mov.w sb, 0                                           |     sb = 0;
    0x0005d0b0 mov ip, r3                                            |     
    0x0005d0b2 str r3, [sp, 0x34]                                    |     var_34h = r3;
    0x0005d0b4 adds r4, r5, r7                                       |     r4 = r5 + r7;
    0x0005d0b6 add.w sl, r2, r3                                      |     sl = r2 + r3;
                                                                     | label_4:
    0x0005d0ba ldrsh r0, [ip], 2                                     |     r0 = *(ip);
                                                                     |     ip += 2;
    0x0005d0be mov r3, r5                                            |     r3 = r5;
    0x0005d0c0 b 0x5d0ca                                             |     
                                                                     |     while (r3 != r4) {
    0x0005d0c2 ldrsh r2, [r3], 2                                     |         r2 = *(r3);
                                                                     |         r3 += 2;
    0x0005d0c6 cmp r2, r0                                            |         
                                                                     |         if (r2 == r0) {
    0x0005d0c8 beq 0x5d0d2                                           |             goto label_74;
                                                                     |         }
    0x0005d0ca cmp r3, r4                                            |         
    0x0005d0cc bne 0x5d0c2                                           |         
                                                                     |     }
    0x0005d0ce add.w sb, sb, 1                                       |     sb++;
                                                                     | label_74:
    0x0005d0d2 cmp sl, ip                                            |     
                                                                     |     if (sl != ip) {
    0x0005d0d4 bne 0x5d0ba                                           |         goto label_4;
                                                                     |     }
    0x0005d0d6 cmp.w sb, 0                                           |     
                                                                     |     if (sb == 0) {
    0x0005d0da beq 0x5d1ac                                           |         goto label_73;
                                                                     |     }
    0x0005d0dc ldrh r3, [r6, 0x34]                                   |     r3 = *((r6 + 0x34));
    0x0005d0de add.w r2, r1, sb                                      |     r2 = r1 + sb;
    0x0005d0e2 cmp r2, r3                                            |     
                                                                     |     if (r2 > r3) {
    0x0005d0e4 ble 0x5d104                                           |         
    0x0005d0e6 ldr r0, [sp, 0x1c]                                    |         r0 = var_1ch;
    0x0005d0e8 mov r1, r6                                            |         r1 = r6;
    0x0005d0ea bl 0xd748                                             |         r0 = fcn_0000d748 (r0, r1, r2);
    0x0005d0ee cmp r0, 0                                             |         
                                                                     |         if (r0 != 0) {
    0x0005d0f0 bne.w 0x5d2da                                         |             goto label_75;
                                                                     |         }
    0x0005d0f4 ldrh.w lr, [r6, 0x32]                                 |         
    0x0005d0f8 ldr r5, [r6, 4]                                       |         r5 = *((r6 + 4));
    0x0005d0fa ldr.w r3, [r8, 4]                                     |         r3 = *((r8 + 4));
    0x0005d0fe lsl.w r7, lr, 1                                       |         r7 = lr << 1;
    0x0005d102 str r3, [sp, 0x34]                                    |         var_34h = r3;
                                                                     |     }
    0x0005d104 ldr r3, [sp, 0x34]                                    |     r3 = var_34h;
    0x0005d106 movs r2, 0                                            |     r2 = 0;
    0x0005d108 subs r1, r3, 2                                        |     r1 = r3 - 2;
                                                                     | label_5:
    0x0005d10a adds r4, r5, r7                                       |     r4 = r5 + r7;
    0x0005d10c mov r3, r5                                            |     r3 = r5;
    0x0005d10e ldrsh r7, [r1, 2]!                                    |     r7 = *((r1 += 2));
    0x0005d112 b 0x5d11c                                             |     
                                                                     |     while (r3 != r4) {
    0x0005d114 ldrsh r0, [r3], 2                                     |         r0 = *(r3);
                                                                     |         r3 += 2;
    0x0005d118 cmp r0, r7                                            |         
                                                                     |         if (r0 == r7) {
    0x0005d11a beq 0x5d134                                           |             goto label_76;
                                                                     |         }
    0x0005d11c cmp r3, r4                                            |         
    0x0005d11e bne 0x5d114                                           |         
                                                                     |     }
    0x0005d120 ldr.w r3, [r8, 0x20]                                  |     r3 = *((r8 + 0x20));
    0x0005d124 strh.w r7, [r5, lr, lsl 1]                            |     offset_3 = lr << 1;
                                                                     |     *((r5 + offset_3)) = r7;
    0x0005d128 ldr r0, [r3, r2]                                      |     r0 = *((r3 + r2));
    0x0005d12a ldr r3, [r6, 0x20]                                    |     r3 = *((r6 + 0x20));
    0x0005d12c str.w r0, [r3, lr, lsl 2]                             |     __asm ("str.w r0, [r3, lr, lsl 2]");
    0x0005d130 add.w lr, lr, 1                                       |     lr++;
                                                                     | label_76:
    0x0005d134 adds r2, 4                                            |     r2 += 4;
    0x0005d136 cmp fp, r2                                            |     
                                                                     |     if (fp == r2) {
    0x0005d138 beq 0x5d1ae                                           |         goto label_72;
                                                                     |     }
    0x0005d13a ldrh r4, [r6, 0x32]                                   |     r4 = *((r6 + 0x32));
    0x0005d13c lsls r7, r4, 1                                        |     r7 = r4 << 1;
    0x0005d13e b 0x5d10a                                             |     goto label_5;
                                                                     | label_68:
    0x0005d140 and r2, r1, 0xc0                                      |     r2 = r1 & 0xc0;
    0x0005d144 cmp r2, 0x80                                          |     
                                                                     |     if (r2 != 0x80) {
    0x0005d146 bne.w 0x5cfa0                                         |         goto label_6;
                                                                     |     }
                                                                     |     do {
    0x0005d14a ldrb r2, [r3, 1]!                                     |         r2 = *((r3 += 1));
    0x0005d14e and r1, r2, 0xc0                                      |         r1 = r2 & 0xc0;
    0x0005d152 cmp r1, 0x80                                          |         
    0x0005d154 beq 0x5d14a                                           |         
                                                                     |     } while (r1 == 0x80);
    0x0005d156 b 0x5cfa2                                             |     goto label_7;
                                                                     | label_39:
    0x0005d158 ldr r1, [sp, 0x28]                                    |     r1 = var_28h_2;
    0x0005d15a ldr r0, [sp, 0x20]                                    |     r0 = *(arg_20h);
    0x0005d15c bl 0x2415c                                            |     r0 = fcn_0002415c (r0, r1);
    0x0005d160 mov r1, r0                                            |     r1 = r0;
    0x0005d162 cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0005d164 beq.w 0x5ce22                                         |         goto label_3;
                                                                     |     }
    0x0005d168 ldr r3, [sp, 0x1c]                                    |     r3 = var_1ch;
    0x0005d16a ldrsh.w r2, [r0, 0x26]                                |     r2 = *((r0 + 0x26));
    0x0005d16e ldr.w r3, [r3, 0x200]                                 |     r3 = *((r3 + 0x200));
    0x0005d172 strh.w r2, [fp, 0x26]                                 |     *(arg_26h) = r2;
    0x0005d176 ldr r2, [r0, 4]                                       |     r2 = *((r0 + 4));
    0x0005d178 str.w r2, [fp, 4]                                     |     __asm ("str.w r2, [arg_4h]");
    0x0005d17c strh r5, [r0, 0x26]                                   |     *((r0 + 0x26)) = r5;
    0x0005d17e str r5, [r0, 4]                                       |     *((r0 + 4)) = r5;
    0x0005d180 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0005d182 beq.w 0x5d30a                                         |         goto label_77;
                                                                     |     }
                                                                     | label_28:
    0x0005d186 ldr r0, [sp, 0x1c]                                    |     r0 = var_1ch;
    0x0005d188 bl 0x12af8                                            |     fcn_00012af8 (r0, r1);
    0x0005d18c b 0x5cbea                                             |     goto label_8;
                                                                     | label_40:
    0x0005d18e ldrb r3, [r7]                                         |     r3 = *(r7);
    0x0005d190 movs r6, 0                                            |     r6 = 0;
    0x0005d192 cmp r3, 0                                             |     
                                                                     |     if (r3 != 0) {
    0x0005d194 bne.w 0x5cc38                                         |         goto label_9;
                                                                     |     }
    0x0005d198 ldr r3, [pc, 0x1d0]                                   |     
    0x0005d19a movs r6, 2                                            |     r6 = 2;
    0x0005d19c add r3, pc                                            |     r3 = 0xba50c;
    0x0005d19e str r3, [sp, 0x38]                                    |     var_38h = r3;
    0x0005d1a0 ldr r3, [pc, 0x1cc]                                   |     
    0x0005d1a2 add r3, pc                                            |     r3 = 0xba516;
    0x0005d1a4 str r3, [sp, 0x28]                                    |     var_28h_2 = r3;
    0x0005d1a6 ldr r3, [pc, 0x1cc]                                   |     
    0x0005d1a8 add r3, pc                                            |     r3 = 0xba522;
    0x0005d1aa b 0x5cc6c                                             |     goto label_10;
                                                                     | label_73:
    0x0005d1ac strh r1, [r6, 0x34]                                   |     *((r6 + 0x34)) = r1;
                                                                     | label_72:
    0x0005d1ae ldr r6, [r6, 0x14]                                    |     r6 = *((r6 + 0x14));
    0x0005d1b0 cmp r6, 0                                             |     
                                                                     |     if (r6 != 0) {
    0x0005d1b2 bne.w 0x5d088                                         |         goto label_11;
                                                                     |     }
    0x0005d1b6 ldr.w fp, [sp, 0x44]                                  |     fp = *(arg_44h);
    0x0005d1ba mov r6, r8                                            |     r6 = r8;
                                                                     | label_71:
    0x0005d1bc ldrsh.w r2, [fp, 0x26]                                |     r2 = *(arg_26h);
    0x0005d1c0 ldr r3, [sp, 0x38]                                    |     r3 = var_38h;
    0x0005d1c2 cmp r2, r3                                            |     
                                                                     |     if (r2 <= r3) {
    0x0005d1c4 ble 0x5d2a0                                           |         goto label_78;
                                                                     |     }
    0x0005d1c6 ldrh r3, [r6, 0x34]                                   |     r3 = *((r6 + 0x34));
    0x0005d1c8 cmp r2, r3                                            |     
                                                                     |     if (r2 <= r3) {
    0x0005d1ca ble 0x5d1e4                                           |         goto label_79;
                                                                     |     }
    0x0005d1cc ldr r0, [sp, 0x1c]                                    |     r0 = var_1ch;
    0x0005d1ce mov r1, r6                                            |     r1 = r6;
    0x0005d1d0 bl 0xd748                                             |     r0 = fcn_0000d748 (r0, r1, r2);
    0x0005d1d4 cmp r0, 0                                             |     
                                                                     |     if (r0 != 0) {
    0x0005d1d6 bne.w 0x5ca66                                         |         goto label_2;
                                                                     |     }
    0x0005d1da ldrsh.w r2, [fp, 0x26]                                |     r2 = *(arg_26h);
    0x0005d1de cmp r2, 0                                             |     
                                                                     |     if (r2 <= 0) {
    0x0005d1e0 ble.w 0x5ca66                                         |         goto label_2;
                                                                     |     }
                                                                     | label_79:
    0x0005d1e4 ldr r5, [pc, 0x190]                                   |     
    0x0005d1e6 movs r0, 0                                            |     r0 = 0;
    0x0005d1e8 ldr r4, [r6, 4]                                       |     r4 = *((r6 + 4));
    0x0005d1ea ldr.w ip, [sp, 0x40]                                  |     ip = var_40h;
    0x0005d1ee add r5, pc                                            |     r5 = 0xba56a;
                                                                     | label_12:
    0x0005d1f0 add.w r7, r4, ip, lsl 1                               |     r7 = r4 + (ip << 1);
    0x0005d1f4 mov r3, r4                                            |     r3 = r4;
    0x0005d1f6 b 0x5d200                                             |     
                                                                     |     while (r3 != r7) {
    0x0005d1f8 ldrsh r1, [r3], 2                                     |         r1 = *(r3);
                                                                     |         r3 += 2;
    0x0005d1fc cmp r1, r0                                            |         
                                                                     |         if (r1 == r0) {
    0x0005d1fe beq 0x5d214                                           |             goto label_80;
                                                                     |         }
    0x0005d200 cmp r3, r7                                            |         
    0x0005d202 bne 0x5d1f8                                           |         
                                                                     |     }
    0x0005d204 strh r0, [r3]                                         |     *(r3) = r0;
    0x0005d206 ldr r3, [r6, 0x20]                                    |     r3 = *((r6 + 0x20));
    0x0005d208 ldrsh.w r2, [fp, 0x26]                                |     r2 = *(arg_26h);
    0x0005d20c str.w r5, [r3, ip, lsl 2]                             |     __asm ("str.w r5, [r3, ip, lsl 2]");
    0x0005d210 add.w ip, ip, 1                                       |     
                                                                     | label_80:
    0x0005d214 adds r0, 1                                            |     r0++;
    0x0005d216 cmp r0, r2                                            |     
                                                                     |     if (r0 < r2) {
    0x0005d218 blt 0x5d1f0                                           |         goto label_12;
                                                                     |     }
    0x0005d21a b 0x5ca66                                             |     goto label_2;
                                                                     | label_48:
    0x0005d21c mov r2, r1                                            |     r2 = r1;
    0x0005d21e mov r3, r1                                            |     r3 = r1;
    0x0005d220 b 0x5cd4a                                             |     goto label_13;
                                                                     | label_41:
    0x0005d222 movs r2, 7                                            |     r2 = 7;
    0x0005d224 b 0x5cc28                                             |     goto label_14;
                                                                     | label_36:
    0x0005d226 mov r0, r3                                            |     r0 = r3;
    0x0005d228 bl 0x192c8                                            |     r0 = fcn_000192c8 (r0);
    0x0005d22c mov sb, r0                                            |     sb = r0;
    0x0005d22e cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x0005d230 beq.w 0x5ce22                                         |         goto label_3;
                                                                     |     }
    0x0005d234 b 0x5cb58                                             |     goto label_15;
                                                                     | label_50:
    0x0005d236 ldrd sb, r4, [sp, 0x3c]                               |     __asm ("ldrd sb, r4, [var_3ch]");
                                                                     | label_46:
    0x0005d23a ldr r2, [sp, 0x24]                                    |     r2 = *(arg_24h);
    0x0005d23c adds r1, r6, r5                                       |     r1 = r6 + r5;
    0x0005d23e ldr r3, [sp, 0x38]                                    |     r3 = var_38h;
    0x0005d240 subs r0, r2, r5                                       |     r0 = r2 - r5;
    0x0005d242 ldr r2, [pc, 0x138]                                   |     
    0x0005d244 add r2, pc                                            |     r2 = 0xba5c6;
    0x0005d246 blx 0x6658                                            |     fcn_00006658 ();
    0x0005d24a b 0x5cd9c                                             |     goto label_16;
                                                                     | label_55:
    0x0005d24c ldr r2, [pc, 0x130]                                   |     
    0x0005d24e ldr r3, [pc, 0xe4]                                    |     r3 = *(0x5d336);
    0x0005d250 add r2, pc                                            |     r2 = 0xba5d4;
    0x0005d252 ldr r3, [r2, r3]                                      |     r3 = *(0xba5d4);
    0x0005d254 ldr r2, [r3]                                          |     r2 = *(0xba5d4);
    0x0005d256 ldr r3, [sp, 0xbc]                                    |     r3 = var_bch;
    0x0005d258 eors r2, r3                                           |     r2 ^= r3;
    0x0005d25a mov.w r3, 0                                           |     r3 = 0;
                                                                     |     if (r2 != r3) {
    0x0005d25e bne 0x5d31a                                           |         goto label_54;
                                                                     |     }
    0x0005d260 ldr r1, [pc, 0x120]                                   |     
    0x0005d262 ldr r0, [sp, 0x20]                                    |     r0 = *(arg_20h);
    0x0005d264 add r1, pc                                            |     r1 = 0xba5ec;
    0x0005d266 add sp, 0xc4                                          |     
    0x0005d268 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}            |     
    0x0005d26c b.w 0x1ca34                                           |     void (*0x1ca34)() ();
                                                                     | label_37:
    0x0005d270 ldr r3, [pc, 0x114]                                   |     
    0x0005d272 ldr r2, [pc, 0x118]                                   |     
    0x0005d274 add r3, pc                                            |     r3 = 0xba600;
    0x0005d276 add r2, pc                                            |     r2 = 0xba608;
    0x0005d278 str r3, [sp, 0x34]                                    |     var_34h = r3;
    0x0005d27a b 0x5cb7e                                             |     goto label_17;
                                                                     | label_49:
    0x0005d27c mov r3, r2                                            |     r3 = r2;
    0x0005d27e b 0x5cd4a                                             |     goto label_13;
                                                                     | label_33:
    0x0005d280 movs r0, 0                                            |     r0 = 0;
    0x0005d282 b 0x5cb16                                             |     goto label_18;
                                                                     | label_52:
    0x0005d284 ldr r3, [pc, 0x108]                                   |     
    0x0005d286 add r3, pc                                            |     r3 = 0xba61a;
    0x0005d288 b 0x5cdb0                                             |     goto label_19;
                                                                     | label_57:
    0x0005d28a mov r2, r1                                            |     r2 = r1;
    0x0005d28c b 0x5ce88                                             |     goto label_20;
                                                                     | label_43:
    0x0005d28e ldr r3, [pc, 0x104]                                   |     
    0x0005d290 add r3, pc                                            |     r3 = 0xba62a;
    0x0005d292 str r3, [sp, 0x38]                                    |     var_38h = r3;
    0x0005d294 ldr r3, [pc, 0x100]                                   |     
    0x0005d296 add r3, pc                                            |     r3 = 0xba632;
    0x0005d298 str r3, [sp, 0x28]                                    |     var_28h_2 = r3;
    0x0005d29a ldr r3, [pc, 0x100]                                   |     
    0x0005d29c add r3, pc                                            |     r3 = 0xba63e;
    0x0005d29e b 0x5cc6c                                             |     goto label_10;
                                                                     | label_78:
    0x0005d2a0 strh r2, [r6, 0x34]                                   |     *((r6 + 0x34)) = r2;
    0x0005d2a2 b.w 0x5ca66                                           |     goto label_2;
                                                                     | label_51:
    0x0005d2a6 ldr r3, [sp, 0x20]                                    |     r3 = *(arg_20h);
    0x0005d2a8 add.w r1, r3, 0x1f8                                   |     r1 = r3 + 0x1f8;
    0x0005d2ac b 0x5cd74                                             |     goto label_21;
                                                                     | label_59:
    0x0005d2ae ldr r3, [pc, 0xf0]                                    |     
    0x0005d2b0 add r3, pc                                            |     
    0x0005d2b2 add.w r3, r3, 0x324                                   |     r3 = 0xba97a;
    0x0005d2b6 b 0x5ced0                                             |     goto label_22;
                                                                     | label_31:
    0x0005d2b8 movs r4, 0                                            |     r4 = 0;
    0x0005d2ba b.w 0x5ca8e                                           |     goto label_23;
                                                                     | label_60:
    0x0005d2be ldr r3, [pc, 0xe4]                                    |     
    0x0005d2c0 add r3, pc                                            |     
    0x0005d2c2 add.w r3, r3, 0x324                                   |     r3 = 0xba98e;
    0x0005d2c6 b 0x5cefe                                             |     goto label_24;
                                                                     | label_69:
    0x0005d2c8 adds r0, 0xe                                          |     r0 += 0xe;
                                                                     |     do {
    0x0005d2ca str.w r0, [fp, 0x30]                                  |         __asm ("str.w r0, [arg_30h]");
    0x0005d2ce b 0x5ce22                                             |         goto label_3;
                                                                     | label_44:
    0x0005d2d0 ldr r2, [sp, 0x1c]                                    |         r2 = var_1ch;
    0x0005d2d2 movs r3, 1                                            |         r3 = 1;
    0x0005d2d4 strb.w r3, [r2, 0x40]                                 |         *((r2 + 0x40)) = r3;
    0x0005d2d8 b 0x5cd9c                                             |         goto label_16;
                                                                     | label_75:
    0x0005d2da ldr.w fp, [sp, 0x44]                                  |         fp = *(arg_44h);
    0x0005d2de b.w 0x5ca66                                           |         goto label_2;
                                                                     | label_53:
    0x0005d2e2 ldr r1, [pc, 0xc4]                                    |         
    0x0005d2e4 ldr r2, [r3, r5]                                      |         r2 = *((r3 + r5));
    0x0005d2e6 ldr r0, [sp, 0x20]                                    |         r0 = *(arg_20h);
    0x0005d2e8 add r1, pc                                            |         r1 = 0xba696;
    0x0005d2ea bl 0x4bf9c                                            |         fcn_0004bf9c (r0);
    0x0005d2ee b 0x5ce00                                             |         goto label_25;
                                                                     | label_42:
    0x0005d2f0 movs r2, 2                                            |         r2 = 2;
    0x0005d2f2 b 0x5cc4e                                             |         goto label_26;
                                                                     | label_30:
    0x0005d2f4 movw r4, 0xbdc0                                       |         
    0x0005d2f8 movt r4, 0xfff0                                       |         r4 = 0xfff0bdc0;
    0x0005d2fc b.w 0x5ca8e                                           |         goto label_23;
                                                                     | label_67:
    0x0005d300 movs r0, 0xd                                          |         r0 = 0xd;
    0x0005d302 b 0x5d2ca                                             |         
                                                                     |     } while (1);
                                                                     | label_66:
    0x0005d304 ldr r2, [sp, 0x2c]                                    |     r2 = *(arg_2ch);
    0x0005d306 ldr r4, [r2]                                          |     r4 = *(r2);
    0x0005d308 b 0x5cf7a                                             |     goto label_27;
                                                                     | label_77:
    0x0005d30a ldrh r3, [r0, 0x28]                                   |     r3 = *((r0 + 0x28));
    0x0005d30c subs r3, 1                                            |     r3--;
    0x0005d30e uxth r3, r3                                           |     r3 = (int16_t) r3;
    0x0005d310 strh r3, [r0, 0x28]                                   |     *((r0 + 0x28)) = r3;
    0x0005d312 cmp r3, 0                                             |     
                                                                     |     if (r3 == 0) {
    0x0005d314 beq.w 0x5d186                                         |         goto label_28;
                                                                     |     }
    0x0005d318 b 0x5cbea                                             |     goto label_8;
                                                                     | label_54:
    0x0005d31a blx 0x6498                                            |     fcn_00006498 ();
                                                                     | label_63:
    0x0005d31e movs r2, 0                                            |     r2 = 0;
    0x0005d320 ldrb.w r3, [r2, 0x37]                                 |     r3 = *((r2 + 0x37));
    0x0005d324 bfi r3, r2, 5, 1                                      |     value_4 = BIT_MASK (5, 1);
                                                                     |     value_5 = r2 & value_4;
                                                                     |     value_4 = ~value_4;
                                                                     |     r3 &= value_4;
                                                                     |     r3 |= value_5;
    0x0005d328 strb.w r3, [r2, 0x37]                                 |     *((r2 + 0x37)) = r3;
    0x0005d32c udf 0xff                                              |     __asm ("udf 0xff");
                                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x5d5ac */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.0005d5ac ()                                      | void fcn_0005d5ac (int16_t arg_40h, int16_t arg_44h, int16_t arg_48h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_48h;
                                                                 |     int16_t var_4ch;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x0005d5ac svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x0005d5b0 mov r7, r3                                        |     r7 = r3;
    0x0005d5b2 ldr r5, [pc, 0x358]                               |     
    0x0005d5b4 sub sp, 0x1c                                      |     
    0x0005d5b6 mov r4, r0                                        |     r4 = r0;
    0x0005d5b8 mov r8, r2                                        |     r8 = r2;
    0x0005d5ba ldr r3, [pc, 0x354]                               |     r3 = *(0x5d912);
    0x0005d5bc add r5, pc                                        |     r5 = 0xbaece;
    0x0005d5be ldr r6, [r0]                                      |     r6 = *(r0);
    0x0005d5c0 ldr r3, [r5, r3]                                  |     
    0x0005d5c2 ldr r3, [r3]                                      |     r3 = *(0xbaece);
    0x0005d5c4 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x0005d5c6 mov.w r3, 0                                       |     r3 = 0;
    0x0005d5ca add r3, sp, 0x10                                  |     r3 += var_10h;
    0x0005d5cc bl 0x1cbbc                                        |     r0 = fcn_0001cbbc (r0, r1, r2, r3);
    0x0005d5d0 subs r5, r0, 0                                    |     r5 = r0 - 0;
                                                                 |     if (r5 < r0) {
    0x0005d5d2 blt 0x5d696                                       |         goto label_2;
                                                                 |     }
                                                                 |     if (r7 != 0) {
    0x0005d5d4 cbz r7, 0x5d5e6                                   |         
    0x0005d5d6 ldr.w r3, [r8, 4]                                 |         r3 = *((r8 + 4));
    0x0005d5da cmp r3, 0                                         |         
    0x0005d5dc it ne                                             |         
                                                                 |         if (r3 != 0) {
    0x0005d5de cmpne r5, 1                                       |             __asm ("cmpne r5, 1");
                                                                 |         }
    0x0005d5e0 it eq                                             |         
                                                                 |         if (r3 != 0) {
    0x0005d5e2 moveq r5, 1                                       |             r5 = 1;
                                                                 |         }
                                                                 |         if (r3 != 0) {
    0x0005d5e4 bne 0x5d6b2                                       |             goto label_10;
                                                                 |         }
                                                                 |     }
    0x0005d5e6 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0005d5e8 add.w r3, r4, 0x1f0                               |     r3 = r4 + 0x1f0;
    0x0005d5ec ldm.w r2, {r0, r1}                                |     r0 = *(r2);
                                                                 |     r1 = *((r2 + 4));
    0x0005d5f0 stm.w r3, {r0, r1}                                |     *(r3) = r0;
                                                                 |     *((r3 + 4)) = r1;
    0x0005d5f4 mov r1, r2                                        |     r1 = r2;
    0x0005d5f6 mov r0, r6                                        |     r0 = r6;
    0x0005d5f8 bl 0xd5e4                                         |     r0 = fcn_0000d5e4 (r0, r1);
    0x0005d5fc mov r8, r0                                        |     r8 = r0;
    0x0005d5fe cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005d600 beq 0x5d696                                       |         goto label_2;
                                                                 |     }
    0x0005d602 mov r1, r0                                        |     r1 = r0;
    0x0005d604 mov r0, r4                                        |     r0 = r4;
    0x0005d606 bl 0x1cc34                                        |     r0 = fcn_0001cc34 (r0, r1);
    0x0005d60a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005d60c bne 0x5d68e                                       |         
    0x0005d60e ldrb.w r3, [r6, 0x88]                             |         r3 = *((r6 + 0x88));
    0x0005d612 lsl.w sl, r5, 4                                   |         sl = r5 << 4;
    0x0005d616 ldr r2, [r6, 0x10]                                |         r2 = *((r6 + 0x10));
    0x0005d618 cmp r3, 1                                         |         
    0x0005d61a ldr.w sb, [r2, sl]                                |         sb = *((r2 + sl));
                                                                 |         if (r3 == 1) {
    0x0005d61e beq 0x5d6be                                       |             goto label_11;
                                                                 |         }
    0x0005d620 cmp r7, 1                                         |         
                                                                 |         if (r7 == 1) {
    0x0005d622 beq.w 0x5d882                                     |             goto label_12;
                                                                 |         }
    0x0005d626 ldr r2, [pc, 0x2ec]                               |         
    0x0005d628 add r2, pc                                        |         r2 = 0xbaf42;
                                                                 | label_0:
    0x0005d62a movs r3, 0                                        |         r3 = 0;
    0x0005d62c movs r1, 0x12                                     |         r1 = 0x12;
    0x0005d62e mov r0, r4                                        |         r0 = r4;
    0x0005d630 str.w sb, [sp]                                    |         __asm ("str.w sb, [sp]");
    0x0005d634 bl 0x1cab0                                        |         r0 = fcn_0001cab0 (r0);
                                                                 |         if (r0 != 0) {
    0x0005d638 cbnz r0, 0x5d68e                                  |             goto label_4;
                                                                 |         }
    0x0005d63a ldr r3, [sp, 0x40]                                |         r3 = *(arg_40h);
    0x0005d63c cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0005d63e beq 0x5d6c6                                       |             goto label_13;
                                                                 |         }
    0x0005d640 cmp r7, 0                                         |         
    0x0005d642 ite ne                                            |         
                                                                 |         if (r7 == 0) {
    0x0005d644 movne r1, 6                                       |             r1 = 6;
                                                                 |         }
                                                                 |         if (r7 != 0) {
    0x0005d646 moveq r1, 8                                       |             r1 = 8;
                                                                 |         }
                                                                 | label_1:
    0x0005d648 ldr r3, [sp, 0x44]                                |         r3 = *(arg_44h);
    0x0005d64a cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0005d64c beq.w 0x5d86c                                     |             goto label_14;
                                                                 |         }
                                                                 | label_3:
    0x0005d650 ldrb.w r3, [r4, 0x1c3]                            |         r3 = *((r4 + 0x1c3));
    0x0005d654 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x0005d656 bne 0x5d6d0                                       |             goto label_7;
                                                                 |         }
    0x0005d658 ldr r3, [r6, 0x10]                                |         r3 = *((r6 + 0x10));
    0x0005d65a ldr r0, [r4]                                      |         r0 = *(r4);
    0x0005d65c ldr.w r7, [r3, sl]                                |         r7 = *((r3 + sl));
    0x0005d660 ldrb.w r3, [r0, 0x89]                             |         r3 = *((r0 + 0x89));
    0x0005d664 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0005d666 beq.w 0x5d892                                     |             goto label_15;
                                                                 |         }
                                                                 | label_5:
    0x0005d66a mov r2, r7                                        |         r2 = r7;
    0x0005d66c mov r1, r8                                        |         r1 = r8;
    0x0005d66e mov r0, r6                                        |         r0 = r6;
    0x0005d670 bl 0x1401c                                        |         r0 = fcn_0001401c (r0, r1, r2);
    0x0005d674 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x0005d676 beq.w 0x5d8ca                                     |             goto label_16;
                                                                 |         }
    0x0005d67a ldr r3, [sp, 0x48]                                |         r3 = *(arg_48h);
    0x0005d67c cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x0005d67e bne.w 0x5d888                                     |             goto label_17;
                                                                 |         }
    0x0005d682 ldr r1, [pc, 0x294]                               |         
    0x0005d684 mov r0, r4                                        |         r0 = r4;
    0x0005d686 ldr r2, [sp, 0x10]                                |         r2 = var_10h;
    0x0005d688 add r1, pc                                        |         r1 = 0xbafa6;
    0x0005d68a bl 0x1ca34                                        |         fcn_0001ca34 (r0);
                                                                 |     }
                                                                 | label_4:
    0x0005d68e mov r1, r8                                        |     r1 = r8;
    0x0005d690 mov r0, r6                                        |     r0 = r6;
    0x0005d692 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
                                                                 |     do {
                                                                 | label_2:
    0x0005d696 ldr r2, [pc, 0x284]                               |         
    0x0005d698 ldr r3, [pc, 0x274]                               |         r3 = *(0x5d910);
    0x0005d69a add r2, pc                                        |         r2 = 0xbafbc;
    0x0005d69c ldr r3, [r2, r3]                                  |         r3 = *(0xbafbc);
    0x0005d69e ldr r2, [r3]                                      |         r2 = *(0xbafbc);
    0x0005d6a0 ldr r3, [sp, 0x14]                                |         r3 = var_14h;
    0x0005d6a2 eors r2, r3                                       |         r2 ^= r3;
    0x0005d6a4 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0005d6a8 bne.w 0x5d906                                     |             goto label_18;
                                                                 |         }
    0x0005d6ac add sp, 0x1c                                      |         
    0x0005d6ae pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_10:
    0x0005d6b2 ldr r1, [pc, 0x26c]                               |         
    0x0005d6b4 mov r0, r4                                        |         r0 = r4;
    0x0005d6b6 add r1, pc                                        |         r1 = 0xbafdc;
    0x0005d6b8 bl 0x1ca34                                        |         fcn_0001ca34 (r0);
    0x0005d6bc b 0x5d696                                         |         
                                                                 |     } while (1);
                                                                 | label_11:
    0x0005d6be ldr r2, [pc, 0x264]                               |     
    0x0005d6c0 mov r7, r3                                        |     r7 = r3;
    0x0005d6c2 add r2, pc                                        |     r2 = 0xbafec;
    0x0005d6c4 b 0x5d62a                                         |     goto label_0;
                                                                 | label_13:
    0x0005d6c6 cmp r7, 0                                         |     
    0x0005d6c8 ite ne                                            |     
                                                                 |     if (r7 == 0) {
    0x0005d6ca movne r1, 4                                       |         r1 = 4;
                                                                 |     }
                                                                 |     if (r7 != 0) {
    0x0005d6cc moveq r1, 2                                       |         r1 = 2;
                                                                 |     }
    0x0005d6ce b 0x5d648                                         |     goto label_1;
                                                                 | label_7:
    0x0005d6d0 movs r1, 0x4c                                     |     r1 = 0x4c;
    0x0005d6d2 mov r0, r6                                        |     r0 = r6;
    0x0005d6d4 bl 0xdb58                                         |     r0 = fcn_0000db58 (r0, r1);
    0x0005d6d8 mov r7, r0                                        |     r7 = r0;
    0x0005d6da cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005d6dc beq.w 0x5d8b8                                     |         goto label_19;
                                                                 |     }
    0x0005d6e0 ldr r3, [r6, 0x10]                                |     r3 = *((r6 + 0x10));
    0x0005d6e2 str.w r8, [r0]                                    |     __asm ("str.w r8, [r0]");
    0x0005d6e6 add r3, sl                                        |     r3 += sl;
    0x0005d6e8 ldr.w sb, [r3, 0xc]                               |     sb = *((r3 + 0xc));
    0x0005d6ec movw r3, 0xffff                                   |     r3 = 0xffff;
    0x0005d6f0 strh r3, [r0, 0x24]                               |     *((r0 + 0x24)) = r3;
    0x0005d6f2 movs r3, 1                                        |     r3 = 1;
    0x0005d6f4 strh r3, [r0, 0x28]                               |     *((r0 + 0x28)) = r3;
    0x0005d6f6 movs r3, 0xc8                                     |     r3 = 0xc8;
    0x0005d6f8 str.w sb, [r0, 0x44]                              |     __asm ("str.w sb, [r0, 0x44]");
    0x0005d6fc strh r3, [r0, 0x1c]                               |     *((r0 + 0x1c)) = r3;
    0x0005d6fe ldrb r3, [r4, 0x12]                               |     r3 = *((r4 + 0x12));
    0x0005d700 str.w r0, [r4, 0x1e4]                             |     __asm ("str.w r0, aav.0x000000ff");
                                                                 |     if (r3 == 0) {
    0x0005d704 cbnz r3, 0x5d716                                  |         
    0x0005d706 ldr r1, [pc, 0x220]                               |         
    0x0005d708 mov r0, r8                                        |         r0 = r8;
    0x0005d70a add r1, pc                                        |         r1 = 0xbb038;
    0x0005d70c blx 0x67b8                                        |         r0 = fcn_000067b8 ();
                                                                 |         if (r0 != 0) {
    0x0005d710 cbnz r0, 0x5d716                                  |             goto label_20;
                                                                 |         }
    0x0005d712 str.w r7, [sb, 0x48]                              |         __asm ("str.w r7, [sb, 0x48]");
                                                                 |     }
                                                                 | label_20:
    0x0005d716 ldrb.w r3, [r6, 0x89]                             |     r3 = *((r6 + 0x89));
    0x0005d71a cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005d71c bne 0x5d696                                       |         goto label_2;
                                                                 |     }
    0x0005d71e ldr r7, [r4, 8]                                   |     r7 = *((r4 + 8));
    0x0005d720 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x0005d722 beq.w 0x5d8a8                                     |         goto label_21;
                                                                 |     }
                                                                 | label_6:
    0x0005d726 mov r2, r5                                        |     r2 = r5;
    0x0005d728 movs r1, 0                                        |     r1 = 0;
    0x0005d72a mov r0, r4                                        |     r0 = r4;
    0x0005d72c bl 0x43838                                        |     fcn_00043838 (r0, r1, r2);
    0x0005d730 ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0005d732 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0005d734 bne.w 0x5d8fc                                     |         goto label_22;
                                                                 |     }
                                                                 | label_9:
    0x0005d738 ldr r3, [r4, 0x48]                                |     r3 = *((r4 + 0x48));
    0x0005d73a movs r2, 2                                        |     r2 = 2;
    0x0005d73c str r2, [sp]                                      |     *(sp) = r2;
    0x0005d73e movs r1, 0x32                                     |     r1 = 0x32;
    0x0005d740 mov r2, r5                                        |     r2 = r5;
    0x0005d742 mov r0, r7                                        |     r0 = r7;
    0x0005d744 add.w r8, r3, 3                                   |     r8 = r3 + 3;
    0x0005d748 add.w fp, r3, 1                                   |     
    0x0005d74c add.w sb, r3, 2                                   |     sb = r3 + 2;
    0x0005d750 str.w r8, [r4, 0x48]                              |     __asm ("str.w r8, [r4, 0x48]");
    0x0005d754 mov r3, r8                                        |     r3 = r8;
    0x0005d756 strd fp, sb, [r4, 0x180]                          |     __asm ("strd fp, sb, aav.0x000000ff");
    0x0005d75a bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005d75e ldr r2, [r7, 0x60]                                |     r2 = *((r7 + 0x60));
    0x0005d760 movs r3, 1                                        |     r3 = 1;
    0x0005d762 lsls r3, r5                                       |     r3 <<= r5;
    0x0005d764 cmp r5, 1                                         |     
    0x0005d766 orr.w r2, r2, r3                                  |     r2 |= r3;
    0x0005d76a str r2, [r7, 0x60]                                |     *((r7 + 0x60)) = r2;
                                                                 |     if (r5 != 1) {
    0x0005d76c beq 0x5d780                                       |         
    0x0005d76e ldr r2, [r7]                                      |         r2 = *(r7);
    0x0005d770 ldr r2, [r2, 0x10]                                |         r2 = *((r2 + 0x10));
    0x0005d772 add r2, sl                                        |         r2 += sl;
    0x0005d774 ldr r2, [r2, 4]                                   |         r2 = *((r2 + 4));
    0x0005d776 ldrb r2, [r2, 9]                                  |         r2 = *((r2 + 9));
                                                                 |         if (r2 == 0) {
    0x0005d778 cbz r2, 0x5d780                                   |             goto label_23;
                                                                 |         }
    0x0005d77a ldr r2, [r7, 0x64]                                |         r2 = *((r7 + 0x64));
    0x0005d77c orrs r2, r3                                       |         r2 |= r3;
    0x0005d77e str r2, [r7, 0x64]                                |         *((r7 + 0x64)) = r2;
                                                                 |     }
                                                                 | label_23:
    0x0005d780 mov.w sl, 0                                       |     sl = 0;
    0x0005d784 mov r2, r8                                        |     r2 = r8;
    0x0005d786 mov r3, sl                                        |     r3 = sl;
    0x0005d788 movs r1, 0x2c                                     |     r1 = 0x2c;
    0x0005d78a mov r0, r7                                        |     r0 = r7;
    0x0005d78c str.w sl, [sp]                                    |     __asm ("str.w sl, [sp]");
    0x0005d790 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005d794 ldr r3, [r6, 0x18]                                |     r3 = *((r6 + 0x18));
    0x0005d796 movs r1, 0x19                                     |     r1 = 0x19;
    0x0005d798 str r0, [sp, 0xc]                                 |     var_ch = r0;
    0x0005d79a mov r0, r7                                        |     r0 = r7;
    0x0005d79c str.w sl, [sp]                                    |     __asm ("str.w sl, [sp]");
    0x0005d7a0 tst.w r3, 0x8000                                  |     
    0x0005d7a4 mov r3, r8                                        |     r3 = r8;
    0x0005d7a6 ite ne                                            |     
                                                                 |     if ((r3 & 0x8000) == 0) {
    0x0005d7a8 movne r2, 1                                       |         r2 = 1;
                                                                 |     }
                                                                 |     if ((r3 & 0x8000) != 0) {
    0x0005d7aa moveq r2, 4                                       |         r2 = 4;
                                                                 |     }
    0x0005d7ac bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005d7b0 movs r3, 2                                        |     r3 = 2;
    0x0005d7b2 mov r2, r5                                        |     r2 = r5;
    0x0005d7b4 movs r1, 0x33                                     |     r1 = 0x33;
    0x0005d7b6 mov r0, r7                                        |     r0 = r7;
    0x0005d7b8 str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x0005d7bc bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005d7c0 ldr r3, [r6, 0x10]                                |     r3 = *((r6 + 0x10));
    0x0005d7c2 movs r1, 0x19                                     |     r1 = 0x19;
    0x0005d7c4 mov r0, r7                                        |     r0 = r7;
    0x0005d7c6 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x0005d7c8 ldrb.w r2, [r3, 0x4d]                             |     r2 = *((r3 + 0x4d));
    0x0005d7cc mov r3, r8                                        |     r3 = r8;
    0x0005d7ce str.w sl, [sp]                                    |     __asm ("str.w sl, [sp]");
    0x0005d7d2 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005d7d6 movs r1, 0x33                                     |     r1 = 0x33;
    0x0005d7d8 movs r3, 5                                        |     r3 = 5;
    0x0005d7da mov r2, r5                                        |     r2 = r5;
    0x0005d7dc mov r0, r7                                        |     r0 = r7;
    0x0005d7de str.w r8, [sp]                                    |     __asm ("str.w r8, [sp]");
    0x0005d7e2 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005d7e6 ldr r3, [r7, 0x20]                                |     r3 = *((r7 + 0x20));
    0x0005d7e8 ldr r2, [sp, 0xc]                                 |     r2 = var_ch;
    0x0005d7ea cmp r2, r3                                        |     
    0x0005d7ec ittt lo                                           |     
                                                                 |     if (r2 >= r3) {
    0x0005d7ee ldrlo r1, [r7, 4]                                 |         r1 = *((r7 + 4));
                                                                 |     }
                                                                 |     if (r2 >= r3) {
    0x0005d7f0 addlo r2, r2, r2, lsl 2                           |         r2 += (r2 << 2);
                                                                 |     }
                                                                 |     if (r2 < r3) {
    0x0005d7f4 add.w r1, r1, r2, lsl 2                           |         r1 += (r2 << 2);
                                                                 |     }
    0x0005d7f8 ldr r2, [r7, 0x18]                                |     r2 = *((r7 + 0x18));
    0x0005d7fa it lo                                             |     
                                                                 |     if (r2 >= r3) {
    0x0005d7fc strlo r3, [r1, 8]                                 |         *((r1 + 8)) = r3;
                                                                 |     }
    0x0005d7fe subs r3, 1                                        |     r3--;
    0x0005d800 str r3, [r2, 0x58]                                |     *((r2 + 0x58)) = r3;
    0x0005d802 ldrd r3, r2, [sp, 0x40]                           |     __asm ("ldrd r3, r2, [arg_40h]");
    0x0005d806 orrs r3, r2                                       |     r3 |= r2;
                                                                 |     if (r3 == r2) {
    0x0005d808 beq 0x5d8e8                                       |         goto label_24;
                                                                 |     }
    0x0005d80a movs r2, 0                                        |     r2 = 0;
    0x0005d80c mov r3, sb                                        |     r3 = sb;
    0x0005d80e movs r1, 0x19                                     |     r1 = 0x19;
    0x0005d810 mov r0, r7                                        |     r0 = r7;
    0x0005d812 str r2, [sp]                                      |     *(sp) = r2;
    0x0005d814 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
                                                                 | label_8:
    0x0005d818 mov r0, r4                                        |     r0 = r4;
    0x0005d81a mov r1, r5                                        |     r1 = r5;
    0x0005d81c movs r4, 0                                        |     r4 = 0;
    0x0005d81e bl 0x19e70                                        |     fcn_00019e70 (r0, r1);
    0x0005d822 mov r3, fp                                        |     r3 = fp;
    0x0005d824 mov r2, r4                                        |     r2 = r4;
    0x0005d826 movs r1, 0x46                                     |     r1 = 0x46;
    0x0005d828 mov r0, r7                                        |     r0 = r7;
    0x0005d82a str r4, [sp]                                      |     *(sp) = r4;
    0x0005d82c bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005d830 mov r3, r8                                        |     r3 = r8;
    0x0005d832 mov r2, r4                                        |     r2 = r4;
    0x0005d834 movs r1, 0x1c                                     |     r1 = 0x1c;
    0x0005d836 mov r0, r7                                        |     r0 = r7;
    0x0005d838 str r4, [sp]                                      |     *(sp) = r4;
    0x0005d83a bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005d83e mov r3, r8                                        |     r3 = r8;
    0x0005d840 mov r2, r4                                        |     r2 = r4;
    0x0005d842 movs r1, 0x49                                     |     r1 = 0x49;
    0x0005d844 mov r0, r7                                        |     r0 = r7;
    0x0005d846 str.w fp, [sp]                                    |     __asm ("str.w fp, [sp]");
    0x0005d84a bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005d84e ldr r3, [r7, 4]                                   |     r3 = *((r7 + 4));
                                                                 |     if (r3 != 0) {
    0x0005d850 cbz r3, 0x5d862                                   |         
    0x0005d852 ldr r2, [r7, 0x20]                                |         r2 = *((r7 + 0x20));
    0x0005d854 movs r1, 8                                        |         r1 = 8;
    0x0005d856 add.w r2, r2, r2, lsl 2                           |         r2 += (r2 << 2);
    0x0005d85a add.w r3, r3, r2, lsl 2                           |         r3 += (r2 << 2);
    0x0005d85e strb r1, [r3, -0x11]                              |         *((r3 - 0x11)) = r1;
                                                                 |     }
    0x0005d862 movs r1, 0x3b                                     |     r1 = 0x3b;
    0x0005d864 mov r0, r7                                        |     r0 = r7;
    0x0005d866 bl 0x1973c                                        |     fcn_0001973c (r0, r1);
    0x0005d86a b 0x5d696                                         |     goto label_2;
                                                                 | label_14:
    0x0005d86c ldr r3, [sp, 0x44]                                |     r3 = *(arg_44h);
    0x0005d86e mov r2, r8                                        |     r2 = r8;
    0x0005d870 mov r0, r4                                        |     r0 = r4;
    0x0005d872 str.w sb, [sp]                                    |     __asm ("str.w sb, [sp]");
    0x0005d876 bl 0x1cab0                                        |     r0 = fcn_0001cab0 (r0);
    0x0005d87a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005d87c beq.w 0x5d650                                     |         goto label_3;
                                                                 |     }
    0x0005d880 b 0x5d68e                                         |     goto label_4;
                                                                 | label_12:
    0x0005d882 ldr r2, [pc, 0xa8]                                |     
    0x0005d884 add r2, pc                                        |     r2 = 0xbb1b6;
    0x0005d886 b 0x5d62a                                         |     goto label_0;
                                                                 | label_17:
    0x0005d888 mov r1, r5                                        |     r1 = r5;
    0x0005d88a mov r0, r4                                        |     r0 = r4;
    0x0005d88c bl 0x39214                                        |     fcn_00039214 (r0, r1);
    0x0005d890 b 0x5d68e                                         |     goto label_4;
                                                                 | label_15:
    0x0005d892 adds r1, r4, 4                                    |     r1 = r4 + 4;
    0x0005d894 bl 0x556b8                                        |     r0 = fcn_000556b8 (r0, r1, r2);
    0x0005d898 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005d89a beq.w 0x5d66a                                     |         goto label_5;
                                                                 |     }
    0x0005d89e ldr r3, [r4, 0x40]                                |     r3 = *((r4 + 0x40));
    0x0005d8a0 str r0, [r4, 0xc]                                 |     *((r4 + 0xc)) = r0;
    0x0005d8a2 adds r3, 1                                        |     r3++;
    0x0005d8a4 str r3, [r4, 0x40]                                |     *((r4 + 0x40)) = r3;
    0x0005d8a6 b 0x5d68e                                         |     goto label_4;
                                                                 | label_21:
    0x0005d8a8 mov r0, r4                                        |     r0 = r4;
    0x0005d8aa bl 0x192c8                                        |     r0 = fcn_000192c8 (r0);
    0x0005d8ae mov r7, r0                                        |     r7 = r0;
    0x0005d8b0 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005d8b2 beq.w 0x5d696                                     |         goto label_2;
                                                                 |     }
    0x0005d8b6 b 0x5d726                                         |     goto label_6;
                                                                 | label_19:
    0x0005d8b8 movs r2, 1                                        |     r2 = 1;
    0x0005d8ba movs r3, 7                                        |     r3 = 7;
    0x0005d8bc strb.w r2, [r6, 0x40]                             |     *((r6 + 0x40)) = r2;
    0x0005d8c0 str r3, [r4, 0xc]                                 |     *((r4 + 0xc)) = r3;
    0x0005d8c2 ldr r3, [r4, 0x40]                                |     r3 = *((r4 + 0x40));
    0x0005d8c4 add r3, r2                                        |     r3 += r2;
    0x0005d8c6 str r3, [r4, 0x40]                                |     *((r4 + 0x40)) = r3;
    0x0005d8c8 b 0x5d68e                                         |     goto label_4;
                                                                 | label_16:
    0x0005d8ca mov r2, r7                                        |     r2 = r7;
    0x0005d8cc mov r1, r8                                        |     r1 = r8;
    0x0005d8ce mov r0, r6                                        |     r0 = r6;
    0x0005d8d0 bl 0x13fac                                        |     r0 = fcn_00013fac (r0, r1, r2);
    0x0005d8d4 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005d8d6 beq.w 0x5d6d0                                     |         goto label_7;
                                                                 |     }
    0x0005d8da ldr r1, [pc, 0x54]                                |     
    0x0005d8dc mov r2, r8                                        |     r2 = r8;
    0x0005d8de mov r0, r4                                        |     r0 = r4;
    0x0005d8e0 add r1, pc                                        |     r1 = 0xbb216;
    0x0005d8e2 bl 0x1ca34                                        |     fcn_0001ca34 (r0);
    0x0005d8e6 b 0x5d68e                                         |     goto label_4;
                                                                 | label_24:
    0x0005d8e8 str r3, [sp]                                      |     *(sp) = r3;
    0x0005d8ea mov r2, r5                                        |     r2 = r5;
    0x0005d8ec mov r3, sb                                        |     r3 = sb;
    0x0005d8ee movs r1, 0x77                                     |     r1 = 0x77;
    0x0005d8f0 mov r0, r7                                        |     r0 = r7;
    0x0005d8f2 bl 0x18bf8                                        |     fcn_00018bf8 (r0, r1, r2, r3, r4);
    0x0005d8f6 str.w r0, [r4, 0x1a0]                             |     __asm ("str.w r0, aav.0x000000ff");
    0x0005d8fa b 0x5d818                                         |     goto label_8;
                                                                 | label_22:
    0x0005d8fc movs r1, 0x8e                                     |     r1 = 0x8e;
    0x0005d8fe mov r0, r7                                        |     r0 = r7;
    0x0005d900 bl 0x1973c                                        |     fcn_0001973c (r0, r1);
    0x0005d904 b 0x5d738                                         |     goto label_9;
                                                                 | label_18:
    0x0005d906 blx 0x6498                                        |     fcn_00006498 ();
    0x0005d90a nop                                               |     
    0x0005d90c adr r6, 0x270                                     |     r6 = 0x270;
    0x0005d90e movs r1, r0                                       |     r1 = r0;
    0x0005d910 lsls r0, r1, 0xe                                  |     r0 = r1 << 0xe;
    0x0005d912 movs r0, r0                                       |     
    0x0005d914 asrs r4, r5, 0xe                                  |     r4 = r5 >> 0xe;
    0x0005d916 movs r0, r0                                       |     
    0x0005d918 strh r4, [r4, r3]                                 |     *((r4 + r3)) = r4;
    0x0005d91a movs r0, r0                                       |     
    0x0005d91c adr r5, 0x2f8                                     |     r5 = 0x2f8;
    0x0005d91e movs r1, r0                                       |     r1 = r0;
    0x0005d920 strh r2, [r1, r2]                                 |     *((r1 + r2)) = r2;
    0x0005d922 movs r0, r0                                       |     
    0x0005d924 asrs r6, r7, 0xb                                  |     r6 = r7 >> 0xb;
    0x0005d926 movs r0, r0                                       |     
    0x0005d928 subs r0, 0x92                                     |     r0 -= 0x92;
    0x0005d92a movs r0, r0                                       |     
    0x0005d92c asrs r4, r7, 4                                    |     r4 = r7 >> 4;
    0x0005d92e movs r0, r0                                       |     
    0x0005d930 str r4, [r4, r2]                                  |     *((r4 + r2)) = r4;
    0x0005d932 movs r0, r0                                       |     
                                                                 | }
    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x5e650 */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) fcn.0005e650 ()                              | void fcn_0005e650 (int16_t arg_1ch, uint32_t arg1, int16_t arg2, int16_t arg3, uint32_t arg4) {
                                                         |     r0 = arg1;
                                                         |     r1 = arg2;
                                                         |     r2 = arg3;
                                                         |     r3 = arg4;
    0x0005e650 mvnsmi lr, 0xb4000                        |     __asm ("mvnsmi lr, aav.0x000000ff");
    0x0005e654 cmp r0, r2                                |     
    0x0005e656 mov r5, r1                                |     r5 = r1;
    0x0005e658 mov r4, r0                                |     r4 = r0;
    0x0005e65a sbcs.w r1, r5, r3                         |     __asm ("sbcs.w r1, r5, r3");
    0x0005e65e it lo                                     |     
                                                         |     if (r0 >= r2) {
    0x0005e660 movlo r0, 0                               |         r0 = 0;
                                                         |     }
    0x0005e662 ldr r7, [sp, 0x1c]                        |     r7 = *(arg_1ch);
    0x0005e664 it lo                                     |     
                                                         |     if (r0 >= r2) {
    0x0005e666 movlo r1, r0                              |         r1 = r0;
                                                         |     }
                                                         |     if (r0 <= r2) {
    0x0005e668 blo 0x5e730                               |         goto label_3;
                                                         |     }
    0x0005e66a clz r6, r3                                |     r6 &= r3;
    0x0005e66e cmp r3, 0                                 |     
                                                         |     if (r3 == 0) {
    0x0005e670 beq 0x5e742                               |         goto label_4;
                                                         |     }
    0x0005e672 clz r1, r5                                |     r1 &= r5;
    0x0005e676 cmp r5, 0                                 |     
                                                         |     if (r5 == 0) {
    0x0005e678 beq 0x5e73a                               |         goto label_2;
                                                         |     }
                                                         | label_1:
    0x0005e67a subs r6, r6, r1                           |     r6 -= r1;
    0x0005e67c sub.w ip, r6, 0x20                        |     
    0x0005e680 lsls r3, r6                               |     r3 <<= r6;
    0x0005e682 lsl.w r1, r2, ip                          |     r1 = r2 << ip;
    0x0005e686 rsb.w lr, r6, 0x20                        |     lr = 0x20 - r6;
    0x0005e68a orrs r3, r1                               |     r3 |= r1;
    0x0005e68c lsr.w r1, r2, lr                          |     r1 = r2 >> lr;
    0x0005e690 lsls r2, r6                               |     r2 <<= r6;
    0x0005e692 orrs r3, r1                               |     r3 |= r1;
    0x0005e694 cmp r4, r2                                |     
    0x0005e696 sbcs.w r1, r5, r3                         |     __asm ("sbcs.w r1, r5, r3");
    0x0005e69a itt lo                                    |     
                                                         |     if (r4 >= r2) {
    0x0005e69c movlo r0, 0                               |         r0 = 0;
                                                         |     }
                                                         |     if (r4 >= r2) {
    0x0005e69e movlo r1, r0                              |         r1 = r0;
                                                         |     }
                                                         |     if (r4 > r2) {
    0x0005e6a0 blo 0x5e6ba                               |         
    0x0005e6a2 movs r0, 1                                |         r0 = 1;
    0x0005e6a4 subs r4, r4, r2                           |         r4 -= r2;
    0x0005e6a6 lsl.w r1, r0, ip                          |         r1 = r0 << ip;
    0x0005e6aa lsr.w r8, r0, lr                          |         r8 = r0 >> lr;
    0x0005e6ae lsl.w r0, r0, r6                          |         r0 <<= r6;
    0x0005e6b2 sbc.w r5, r5, r3                          |         __asm ("sbc.w r5, r5, r3");
    0x0005e6b6 orr.w r1, r1, r8                          |         r1 |= r8;
                                                         |     }
                                                         |     if (r6 == 0) {
    0x0005e6ba cbz r6, 0x5e730                           |         goto label_3;
                                                         |     }
    0x0005e6bc lsrs r2, r2, 1                            |     r2 >>= 1;
    0x0005e6be mov r8, r6                                |     r8 = r6;
    0x0005e6c0 orr.w r2, r2, r3, lsl 31                  |     r2 |= (r3 << 31);
    0x0005e6c4 lsrs r3, r3, 1                            |     r3 >>= 1;
    0x0005e6c6 b 0x5e6de                                 |     
                                                         |     while (r4 >= r2) {
    0x0005e6c8 subs r4, r4, r2                           |         r4 -= r2;
    0x0005e6ca sbc.w r5, r5, r3                          |         __asm ("sbc.w r5, r5, r3");
    0x0005e6ce adds r4, r4, r4                           |         r4 += r4;
    0x0005e6d0 adcs r5, r5                               |         __asm ("adcs r5, r5");
    0x0005e6d2 adds r4, 1                                |         r4++;
    0x0005e6d4 adc r5, r5, 0                             |         __asm ("adc r5, r5, 0");
    0x0005e6d8 subs.w r8, r8, 1                          |         r8--;
                                                         |         if (r8 == r8) {
    0x0005e6dc beq 0x5e6f0                               |             goto label_5;
                                                         |         }
                                                         | label_0:
    0x0005e6de cmp r4, r2                                |         
    0x0005e6e0 sbcs.w sb, r5, r3                         |         __asm ("sbcs.w sb, r5, r3");
    0x0005e6e4 bhs 0x5e6c8                               |         
                                                         |     }
    0x0005e6e6 adds r4, r4, r4                           |     r4 += r4;
    0x0005e6e8 adcs r5, r5                               |     __asm ("adcs r5, r5");
    0x0005e6ea subs.w r8, r8, 1                          |     r8--;
                                                         |     if (r8 != r8) {
    0x0005e6ee bne 0x5e6de                               |         goto label_0;
                                                         |     }
                                                         | label_5:
    0x0005e6f0 adds r0, r0, r4                           |     r0 += r4;
    0x0005e6f2 lsl.w lr, r5, lr                          |     lr = r5 << lr;
    0x0005e6f6 lsr.w r4, r4, r6                          |     r4 >>= r6;
    0x0005e6fa lsr.w ip, r5, ip                          |     
    0x0005e6fe adc.w r1, r1, r5                          |     __asm ("adc.w r1, r1, r5");
    0x0005e702 orr.w r4, r4, lr                          |     r4 |= lr;
    0x0005e706 lsrs r5, r6                               |     r5 >>= r6;
    0x0005e708 orr.w r4, r4, ip                          |     r4 |= ip;
    0x0005e70c sub.w ip, r6, 0x20                        |     
    0x0005e710 lsl.w ip, r4, ip                          |     
    0x0005e714 lsl.w r2, r5, r6                          |     r2 = r5 << r6;
    0x0005e718 rsb.w r3, r6, 0x20                        |     r3 = 0x20 - r6;
    0x0005e71c orr.w r2, r2, ip                          |     r2 |= ip;
    0x0005e720 lsr.w r3, r4, r3                          |     r3 = r4 >> r3;
    0x0005e724 orrs r2, r3                               |     r2 |= r3;
    0x0005e726 lsl.w r3, r4, r6                          |     r3 = r4 << r6;
    0x0005e72a subs r0, r0, r3                           |     r0 -= r3;
    0x0005e72c sbc.w r1, r1, r2                          |     __asm ("sbc.w r1, r1, r2");
                                                         |     if (r7 != 0) {
                                                         | label_3:
    0x0005e730 cbz r7, 0x5e736                           |         
    0x0005e732 strd r4, r5, [r7]                         |         __asm ("strd r4, r5, [r7]");
                                                         |     }
    0x0005e736 pop.w {r4, r5, r6, r7, r8, sb, pc}        |     
                                                         | label_2:
    0x0005e73a clz r1, r4                                |     r1 &= r4;
    0x0005e73e adds r1, 0x20                             |     r1 += 0x20;
    0x0005e740 b 0x5e67a                                 |     goto label_1;
                                                         | label_4:
    0x0005e742 clz r6, r2                                |     r6 &= r2;
    0x0005e746 clz r1, r5                                |     r1 &= r5;
    0x0005e74a adds r6, 0x20                             |     r6 += 0x20;
    0x0005e74c cmp r5, 0                                 |     
                                                         |     if (r5 != 0) {
    0x0005e74e bne 0x5e67a                               |         goto label_1;
                                                         |     }
    0x0005e750 b 0x5e73a                                 |     goto label_2;
                                                         | }
    ; assembly                               | /* r2dec pseudo code output */
                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0xcc60 */
                                             | #include <stdint.h>
                                             |  
    ; (fcn) sym.sqlcipher_memset ()          | void sqlcipher_memset (int16_t arg1, int16_t arg2, uint32_t arg3) {
                                             |     r0 = arg1;
                                             |     r1 = arg2;
                                             |     r2 = arg3;
                                             |     if (r0 == 0) {
    0x0000cc60 cbz r0, 0xcc72                |         goto label_0;
                                             |     }
    0x0000cc62 cmp r2, 0                     |     
                                             |     if (r2 <= 0) {
    0x0000cc64 ble 0xcc72                    |         goto label_0;
                                             |     }
    0x0000cc66 mov r3, r0                    |     r3 = r0;
    0x0000cc68 add r2, r0                    |     r2 += r0;
                                             |     do {
    0x0000cc6a strb r1, [r3], 1              |         *(r3) = r1;
                                             |         r3++;
    0x0000cc6e cmp r3, r2                    |         
    0x0000cc70 bne 0xcc6a                    |         
                                             |     } while (r3 != r2);
                                             | label_0:
    0x0000cc72 bx lr                         |     return;
                                             | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x34274 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) sym.sqlite3_backup_step ()                           | void sqlite3_backup_step (int16_t arg1, int16_t arg2) {
                                                                 |     int16_t var_5h;
                                                                 |     int16_t var_5h_2;
                                                                 |     int32_t var_0h;
                                                                 |     int32_t var_0h_2;
                                                                 |     int16_t var_8h_2;
                                                                 |     int16_t var_ch_2;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h_3;
                                                                 |     int16_t var_1ch_2;
                                                                 |     int16_t var_20h_3;
                                                                 |     int16_t var_24h_3;
                                                                 |     int16_t var_28h_2;
                                                                 |     int32_t var_28h;
                                                                 |     int16_t var_34h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x00034274 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00034278 mov r7, r1                                        |     r7 = r1;
    0x0003427a ldr.w r1, [pc, 0x5b0]                             |     
    0x0003427e sub sp, 0x3c                                      |     
    0x00034280 mov r5, r0                                        |     r5 = r0;
    0x00034282 ldr.w r2, [pc, 0x5ac]                             |     r2 = *(0x34832);
    0x00034286 ldr r3, [r0, 0x14]                                |     r3 = *((r0 + 0x14));
    0x00034288 add r1, pc                                        |     r1 = 0x68aba;
    0x0003428a ldr r2, [r1, r2]                                  |     
    0x0003428c ldr r0, [r3, 0xc]                                 |     r0 = *((r3 + 0xc));
    0x0003428e ldr r2, [r2]                                      |     r2 = *(0x68aba);
    0x00034290 str r2, [sp, 0x34]                                |     var_34h = r2;
    0x00034292 mov.w r2, 0                                       |     r2 = 0;
    0x00034296 blx 0x6810                                        |     fcn_00006810 ();
    0x0003429a ldr r0, [r5, 0x18]                                |     r0 = *((r5 + 0x18));
    0x0003429c bl 0xd140                                         |     fcn_0000d140 (r0);
    0x000342a0 ldr r3, [r5]                                      |     r3 = *(r5);
    0x000342a2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000342a4 beq.w 0x344c4                                     |         goto label_25;
                                                                 |     }
    0x000342a8 ldr r0, [r3, 0xc]                                 |     r0 = *((r3 + 0xc));
    0x000342aa blx 0x6810                                        |     fcn_00006810 ();
    0x000342ae ldr.w fp, [r5, 0x1c]                              |     fp = *((r5 + 0x1c));
    0x000342b2 sub.w r2, fp, 5                                   |     r2 = fp - 5;
    0x000342b6 cmp.w fp, 0                                       |     
    0x000342ba it ne                                             |     
                                                                 |     if (fp != 0) {
    0x000342bc cmpne r2, 1                                       |         __asm ("cmpne r2, 1");
                                                                 |     }
                                                                 |     if (fp > 0) {
    0x000342be bhi.w 0x34482                                     |         goto label_26;
                                                                 |     }
    0x000342c2 ldr r2, [r5, 0x18]                                |     r2 = *((r5 + 0x18));
    0x000342c4 ldr r1, [r2, 4]                                   |     r1 = *((r2 + 4));
    0x000342c6 ldr r3, [r1]                                      |     r3 = *(r1);
    0x000342c8 str r3, [sp, 8]                                   |     var_8h_2 = r3;
    0x000342ca ldrd r3, r0, [r5]                                 |     __asm ("ldrd r3, r0, [r5]");
    0x000342ce ldr r4, [r0, 4]                                   |     r4 = *((r0 + 4));
    0x000342d0 ldr r6, [r4]                                      |     r6 = *(r4);
    0x000342d2 str r6, [sp, 0x10]                                |     var_10h = r6;
                                                                 |     if (r3 != 0) {
    0x000342d4 cbz r3, 0x342de                                   |         
    0x000342d6 ldrb r3, [r1, 0x14]                               |         r3 = *((r1 + 0x14));
    0x000342d8 cmp r3, 2                                         |         
                                                                 |         if (r3 == 2) {
    0x000342da beq.w 0x34704                                     |             goto label_27;
                                                                 |         }
                                                                 |     }
    0x000342de ldr r3, [r5, 0xc]                                 |     r3 = *((r5 + 0xc));
    0x000342e0 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000342e2 beq.w 0x344ee                                     |         goto label_28;
                                                                 |     }
                                                                 | label_1:
    0x000342e6 ldrb r1, [r2, 8]                                  |     r1 = *((r2 + 8));
    0x000342e8 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x000342ea beq.w 0x34740                                     |         goto label_29;
                                                                 |     }
    0x000342ee movs r3, 0                                        |     r3 = 0;
    0x000342f0 movs r1, 1                                        |     r1 = 1;
    0x000342f2 mov fp, r3                                        |     
    0x000342f4 str r3, [sp, 0xc]                                 |     var_ch_2 = r3;
                                                                 | label_17:
    0x000342f6 ldr r0, [r5, 4]                                   |     r0 = *((r5 + 4));
    0x000342f8 ldr r2, [r2, 4]                                   |     r2 = *((r2 + 4));
    0x000342fa ldr r0, [r0, 4]                                   |     r0 = *((r0 + 4));
    0x000342fc ldr r6, [r2, 0x20]                                |     r6 = *((r2 + 0x20));
    0x000342fe ldr r4, [r0]                                      |     r4 = *(r0);
    0x00034300 ldr r0, [r0, 0x20]                                |     r0 = *((r0 + 0x20));
    0x00034302 str r6, [sp, 0x14]                                |     var_14h = r6;
    0x00034304 ldrb r3, [r4, 5]                                  |     r3 = *((r4 + 5));
    0x00034306 str r0, [sp, 0x18]                                |     var_18h_3 = r0;
    0x00034308 cmp r3, 5                                         |     
    0x0003430a ite ne                                            |     
                                                                 |     if (r3 == 5) {
    0x0003430c movne r1, 0                                       |         r1 = 0;
                                                                 |     }
                                                                 |     if (r3 != 5) {
    0x0003430e andeq r1, r1, 1                                   |         r1 &= 1;
                                                                 |     }
    0x00034312 str r3, [sp, 0x1c]                                |     var_1ch_2 = r3;
                                                                 |     if (r1 != 0) {
    0x00034314 cbz r1, 0x34320                                   |         
    0x00034316 subs r3, r0, r6                                   |         r3 = r0 - r6;
    0x00034318 it ne                                             |         
                                                                 |         if (r3 == r0) {
    0x0003431a movne r3, 1                                       |             r3 = 1;
                                                                 |         }
    0x0003431c lsl.w fp, r3, 3                                   |         
                                                                 |     }
    0x00034320 ldr.w r8, [r2, 0x2c]                              |     r8 = *((r2 + 0x2c));
    0x00034324 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x00034326 beq.w 0x34524                                     |         goto label_30;
                                                                 |     }
                                                                 | label_2:
    0x0003432a ldr.w sb, [pc, 0x508]                             |     sb = *(0x00034834);
    0x0003432e add.w sl, sp, 0x28                                |     sl += var_28h_2;
    0x00034332 mov r3, sl                                        |     r3 = sl;
    0x00034334 ldr r4, [r5, 0x10]                                |     r4 = *((r5 + 0x10));
    0x00034336 mov sl, fp                                        |     sl = fp;
    0x00034338 movs r6, 0                                        |     r6 = 0;
    0x0003433a add sb, pc                                        |     sb += pc;
    0x0003433c mov fp, r3                                        |     
    0x0003433e b 0x3434e                                         |     goto label_31;
                                                                 | label_0:
    0x00034340 ldr r4, [r5, 0x10]                                |     r4 = *((r5 + 0x10));
                                                                 |     do {
    0x00034342 adds r6, 1                                        |         r6++;
    0x00034344 adds r4, 1                                        |         r4++;
    0x00034346 cmp r7, r6                                        |         
    0x00034348 str r4, [r5, 0x10]                                |         *((r5 + 0x10)) = r4;
                                                                 |         if (r7 == r6) {
    0x0003434a beq.w 0x34522                                     |             goto label_32;
                                                                 |         }
                                                                 | label_31:
    0x0003434e cmp r4, r8                                        |         
                                                                 |         if (r4 > r8) {
    0x00034350 bhi.w 0x34522                                     |             goto label_32;
                                                                 |         }
    0x00034354 cmp.w sl, 0                                       |         
                                                                 |         if (sl != 0) {
    0x00034358 bne 0x3439c                                       |             goto label_33;
                                                                 |         }
    0x0003435a ldr r2, [r5, 0x18]                                |         r2 = *((r5 + 0x18));
    0x0003435c ldr.w r0, [sb, 0x110]                             |         r0 = *((sb + 0x110));
    0x00034360 ldr r2, [r2, 4]                                   |         r2 = *((r2 + 4));
    0x00034362 ldr r1, [r2, 0x20]                                |         r1 = *((r2 + 0x20));
    0x00034364 bl 0x5dc60                                        |         r0 = fcn_0005dc60 (r0, r1, r2);
    0x00034368 adds r2, r0, 1                                    |         r2 = r0 + 1;
    0x0003436a cmp r2, r4                                        |         
    0x0003436c beq 0x34342                                       |         
                                                                 |     } while (r2 == r4);
    0x0003436e ldr r0, [sp, 8]                                   |     r0 = var_8h_2;
    0x00034370 movs r3, 2                                        |     r3 = 2;
    0x00034372 mov r2, fp                                        |     r2 = fp;
    0x00034374 mov r1, r4                                        |     r1 = r4;
    0x00034376 bl 0x2a698                                        |     r0 = fcn_0002a698 (r0, r1, r2, r3);
    0x0003437a mov sl, r0                                        |     sl = r0;
    0x0003437c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0003437e bne 0x34340                                       |         goto label_0;
                                                                 |     }
    0x00034380 ldr r2, [sp, 0x28]                                |     r2 = var_28h_2;
    0x00034382 mov r3, r0                                        |     r3 = r0;
    0x00034384 mov r1, r4                                        |     r1 = r4;
    0x00034386 mov r0, r5                                        |     r0 = r5;
    0x00034388 ldr r2, [r2, 4]                                   |     r2 = *((r2 + 4));
    0x0003438a bl 0x2c1fc                                        |     r0 = fcn_0002c1fc (r0, r1, r2, r3, r4);
    0x0003438e mov sl, r0                                        |     sl = r0;
    0x00034390 ldr r0, [sp, 0x28]                                |     r0 = var_28h_2;
    0x00034392 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00034394 beq 0x34340                                       |         goto label_0;
                                                                 |     }
    0x00034396 bl 0x2bd94                                        |     fcn_0002bd94 (r0);
    0x0003439a b 0x34340                                         |     goto label_0;
                                                                 | label_33:
    0x0003439c mov fp, sl                                        |     
                                                                 | label_3:
    0x0003439e cmp.w fp, 0x65                                    |     
                                                                 |     if (fp == 0x65) {
    0x000343a2 bne 0x3446a                                       |         
                                                                 | label_4:
    0x000343a4 ldr r4, [r5, 4]                                   |         r4 = *((r5 + 4));
    0x000343a6 mov r6, r8                                        |         r6 = r8;
    0x000343a8 cmp.w r8, 0                                       |         
                                                                 |         if (r8 == 0) {
    0x000343ac beq.w 0x3470c                                     |             goto label_34;
                                                                 |         }
                                                                 | label_16:
    0x000343b0 ldr r2, [r5, 8]                                   |         r2 = *((r5 + 8));
    0x000343b2 mov r0, r4                                        |         r0 = r4;
    0x000343b4 movs r1, 1                                        |         r1 = 1;
    0x000343b6 adds r2, 1                                        |         r2++;
    0x000343b8 bl 0x2c060                                        |         r0 = fcn_0002c060 (r0, r1, r2);
    0x000343bc mov fp, r0                                        |         
    0x000343be cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x000343c0 bne 0x3446a                                       |             goto label_6;
                                                                 |         }
    0x000343c2 ldr r0, [r5]                                      |         r0 = *(r5);
                                                                 |         if (r0 != 0) {
    0x000343c4 cbz r0, 0x343ca                                   |             
    0x000343c6 bl 0x13968                                        |             fcn_00013968 (r0);
                                                                 |         }
    0x000343ca ldr r3, [sp, 0x1c]                                |         r3 = var_1ch_2;
    0x000343cc cmp r3, 5                                         |         
                                                                 |         if (r3 == 5) {
    0x000343ce beq.w 0x347da                                     |             goto label_35;
                                                                 |         }
                                                                 | label_22:
    0x000343d2 ldrd r2, r3, [sp, 0x14]                           |         __asm ("ldrd r2, r3, [var_14h]");
    0x000343d6 cmp r3, r2                                        |         
                                                                 |         if (r3 <= r2) {
    0x000343d8 ble.w 0x34756                                     |             goto label_36;
                                                                 |         }
    0x000343dc ldr.w r8, [sp, 0x14]                              |         r8 = var_14h;
    0x000343e0 ldr r0, [sp, 0x18]                                |         r0 = var_18h_3;
    0x000343e2 ldr.w sb, [pc, 0x454]                             |         sb = *(0x00034838);
    0x000343e6 mov r1, r8                                        |         r1 = r8;
    0x000343e8 bl 0x5ded8                                        |         r0 = fcn_0005ded8 (r0, r1);
    0x000343ec mov r1, r0                                        |         r1 = r0;
    0x000343ee add r0, r6                                        |         r0 += r6;
    0x000343f0 subs r0, 1                                        |         r0--;
    0x000343f2 add sb, pc                                        |         sb += pc;
    0x000343f4 bl 0x5ded8                                        |         fcn_0005ded8 (r0, r1);
    0x000343f8 ldr r3, [r5, 4]                                   |         r3 = *((r5 + 4));
    0x000343fa mov r7, r0                                        |         r7 = r0;
    0x000343fc ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x000343fe ldr r1, [r3, 0x20]                                |         r1 = *((r3 + 0x20));
    0x00034400 invalid                                           |         
    0x00034404 add r3, pc                                        |         r3 += pc;
    0x00034406 ldr.w r0, [r3, 0x110]                             |         r0 = *((r3 + 0x110));
    0x0003440a bl 0x5dc60                                        |         r0 = fcn_0005dc60 (r0, r1, r2);
    0x0003440e adds r3, r0, 1                                    |         r3 = r0 + 1;
    0x00034410 mov r2, r8                                        |         r2 = r8;
    0x00034412 cmp r3, r7                                        |         
    0x00034414 ite ne                                            |         
                                                                 |         if (r3 == r7) {
    0x00034416 movne r4, r7                                      |             r4 = r7;
                                                                 |         }
                                                                 |         if (r3 != r7) {
    0x00034418 moveq r4, r0                                      |             r4 = r0;
                                                                 |         }
    0x0003441a smull r1, r3, r8, r6                              |         r1:r3 = r8 * r6;
    0x0003441e asrs r6, r2, 0x1f                                 |         r6 = r2 >> 0x1f;
    0x00034420 add.w r8, sp, 0x28                                |         r8 += var_28h_2;
    0x00034424 mov fp, r6                                        |         
    0x00034426 mov r6, sb                                        |         r6 = sb;
    0x00034428 mov sb, r8                                        |         sb = r8;
    0x0003442a str r3, [sp, 0x20]                                |         var_20h_3 = r3;
    0x0003442c ldr r3, [sp, 0x10]                                |         r3 = var_10h;
    0x0003442e str r1, [sp, 0x1c]                                |         var_1ch_2 = r1;
    0x00034430 ldr.w sl, [r3, 0x3c]                              |         sl = *((r3 + 0x3c));
    0x00034434 mov r8, r3                                        |         r8 = r3;
    0x00034436 ldr r7, [r3, 0x18]                                |         r7 = *((r3 + 0x18));
                                                                 | label_9:
    0x00034438 cmp r7, r4                                        |         
                                                                 |         if (r7 <= r4) {
    0x0003443a blo.w 0x34616                                     |             goto label_37;
                                                                 |         }
    0x0003443e ldr r3, [r5, 4]                                   |         r3 = *((r5 + 4));
    0x00034440 ldr.w r0, [r6, 0x110]                             |         r0 = *((r6 + 0x110));
    0x00034444 ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
    0x00034446 ldr r1, [r3, 0x20]                                |         r1 = *((r3 + 0x20));
    0x00034448 bl 0x5dc60                                        |         fcn_0005dc60 (r0, r1, r2);
    0x0003444c adds r0, 1                                        |         r0++;
                                                                 | label_10:
    0x0003444e cmp r0, r4                                        |         
                                                                 |         if (r0 == r4) {
    0x00034450 beq.w 0x3460e                                     |             goto label_38;
                                                                 |         }
    0x00034454 movs r3, 0                                        |         r3 = 0;
    0x00034456 mov r2, sb                                        |         r2 = sb;
    0x00034458 mov r1, r4                                        |         r1 = r4;
    0x0003445a mov r0, r8                                        |         r0 = r8;
    0x0003445c bl 0x2a698                                        |         r0 = fcn_0002a698 (r0, r1, r2, r3);
    0x00034460 mov r3, r0                                        |         r3 = r0;
    0x00034462 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x00034464 beq.w 0x345ee                                     |             goto label_39;
                                                                 |         }
    0x00034468 mov fp, r3                                        |         
                                                                 |     }
                                                                 | label_6:
    0x0003446a ldr r3, [sp, 0xc]                                 |     r3 = var_ch_2;
    0x0003446c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0003446e bne.w 0x345ca                                     |         goto label_40;
                                                                 |     }
                                                                 | label_7:
    0x00034472 movw r2, 0xc0a                                    |     r2 = 0xc0a;
    0x00034476 cmp fp, r2                                        |     
    0x00034478 it eq                                             |     
                                                                 |     if (fp != r2) {
    0x0003447a moveq fp, 7                                       |         
                                                                 |     }
                                                                 | label_5:
    0x0003447e str.w fp, [r5, 0x1c]                              |     __asm ("str.w fp, [r5, 0x1c]");
                                                                 | label_26:
    0x00034482 ldr r2, [r5]                                      |     r2 = *(r5);
                                                                 |     if (r2 == 0) {
    0x00034484 cbz r2, 0x3448c                                   |         goto label_41;
                                                                 |     }
    0x00034486 ldr r0, [r2, 0xc]                                 |     r0 = *((r2 + 0xc));
    0x00034488 blx 0x63dc                                        |     fcn_000063dc ();
                                                                 |     do {
                                                                 | label_41:
    0x0003448c ldr r4, [r5, 0x18]                                |         r4 = *((r5 + 0x18));
    0x0003448e ldrb r2, [r4, 9]                                  |         r2 = *((r4 + 9));
                                                                 |         if (r2 != 0) {
    0x00034490 cbz r2, 0x3449e                                   |             
    0x00034492 ldr r6, [r4, 0xc]                                 |             r6 = *((r4 + 0xc));
    0x00034494 subs r6, 1                                        |             r6--;
    0x00034496 str r6, [r4, 0xc]                                 |             *((r4 + 0xc)) = r6;
    0x00034498 cmp r6, 0                                         |             
                                                                 |             if (r6 == 0) {
    0x0003449a beq.w 0x345e2                                     |                 goto label_42;
                                                                 |             }
                                                                 |         }
                                                                 | label_8:
    0x0003449e ldr r2, [r5, 0x14]                                |         r2 = *((r5 + 0x14));
    0x000344a0 ldr r0, [r2, 0xc]                                 |         r0 = *((r2 + 0xc));
    0x000344a2 blx 0x63dc                                        |         fcn_000063dc ();
    0x000344a6 ldr r1, [pc, 0x398]                               |         
    0x000344a8 ldr r2, [pc, 0x384]                               |         r2 = *(0x34830);
    0x000344aa add r1, pc                                        |         r1 = 0x68cf0;
    0x000344ac ldr r2, [r1, r2]                                  |         r2 = *(0x68cf0);
    0x000344ae ldr r1, [r2]                                      |         r1 = *(0x68cf0);
    0x000344b0 ldr r2, [sp, 0x34]                                |         r2 = var_34h;
    0x000344b2 eors r1, r2                                       |         r1 ^= r2;
    0x000344b4 mov.w r2, 0                                       |         r2 = 0;
                                                                 |         if (r1 != r2) {
    0x000344b8 bne.w 0x34826                                     |             goto label_43;
                                                                 |         }
    0x000344bc mov r0, fp                                        |         r0 = fp;
    0x000344be add sp, 0x3c                                      |         
    0x000344c0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_25:
    0x000344c4 ldr.w fp, [r5, 0x1c]                              |         fp = *((r5 + 0x1c));
    0x000344c8 sub.w r2, fp, 5                                   |         r2 = fp - 5;
    0x000344cc cmp.w fp, 0                                       |         
    0x000344d0 it ne                                             |         
                                                                 |         if (fp != 0) {
    0x000344d2 cmpne r2, 1                                       |             __asm ("cmpne r2, 1");
                                                                 |         }
    0x000344d4 bhi 0x3448c                                       |         
                                                                 |     } while (fp > 0);
    0x000344d6 ldr r2, [r5, 0x18]                                |     r2 = *((r5 + 0x18));
    0x000344d8 ldr r0, [r5, 4]                                   |     r0 = *((r5 + 4));
    0x000344da ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x000344dc ldr r3, [r3]                                      |     r3 = *(r3);
    0x000344de str r3, [sp, 8]                                   |     var_8h_2 = r3;
    0x000344e0 ldr r3, [r0, 4]                                   |     r3 = *((r0 + 4));
    0x000344e2 ldr r3, [r3]                                      |     r3 = *(r3);
    0x000344e4 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x000344e6 ldr r3, [r5, 0xc]                                 |     r3 = *((r5 + 0xc));
    0x000344e8 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000344ea bne.w 0x342e6                                     |         goto label_1;
                                                                 |     }
                                                                 | label_28:
    0x000344ee movs r1, 2                                        |     r1 = 2;
    0x000344f0 bl 0x30bcc                                        |     r0 = fcn_00030bcc (r0, r1);
    0x000344f4 mov fp, r0                                        |     
    0x000344f6 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000344f8 beq.w 0x34792                                     |         goto label_44;
                                                                 |     }
    0x000344fc ldr r2, [r5, 4]                                   |     r2 = *((r5 + 4));
    0x000344fe ldr r4, [r2, 4]                                   |     r4 = *((r2 + 4));
    0x00034500 ldr r2, [r5, 0x18]                                |     r2 = *((r5 + 0x18));
    0x00034502 ldr r1, [r2, 4]                                   |     r1 = *((r2 + 4));
    0x00034504 ldr r2, [r4]                                      |     r2 = *(r4);
                                                                 | label_15:
    0x00034506 ldr r3, [r4, 0x20]                                |     r3 = *((r4 + 0x20));
    0x00034508 ldr.w r8, [r1, 0x2c]                              |     r8 = *((r1 + 0x2c));
    0x0003450c str r3, [sp, 0x18]                                |     var_18h_3 = r3;
    0x0003450e ldrb r3, [r2, 5]                                  |     r3 = *((r2 + 5));
    0x00034510 str r3, [sp, 0x1c]                                |     var_1ch_2 = r3;
    0x00034512 ldr r3, [r1, 0x20]                                |     r3 = *((r1 + 0x20));
    0x00034514 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00034516 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x00034518 beq.w 0x347ec                                     |         goto label_45;
                                                                 |     }
    0x0003451c movs r3, 0                                        |     r3 = 0;
    0x0003451e str r3, [sp, 0xc]                                 |     var_ch_2 = r3;
    0x00034520 b 0x3432a                                         |     goto label_2;
                                                                 | label_32:
    0x00034522 mov fp, sl                                        |     
                                                                 | label_30:
    0x00034524 cmp.w fp, 0                                       |     
                                                                 |     if (fp != 0) {
    0x00034528 bne.w 0x3439e                                     |         goto label_3;
                                                                 |     }
    0x0003452c ldr r1, [r5, 0x10]                                |     r1 = *((r5 + 0x10));
    0x0003452e str.w r8, [r5, 0x24]                              |     __asm ("str.w r8, [r5, 0x24]");
    0x00034532 rsb.w r2, r1, 1                                   |     r2 = 1 - r1;
    0x00034536 cmp r1, r8                                        |     
    0x00034538 add r2, r8                                        |     r2 += r8;
    0x0003453a str r2, [r5, 0x20]                                |     *((r5 + 0x20)) = r2;
                                                                 |     if (r1 > r8) {
    0x0003453c bhi.w 0x343a4                                     |         goto label_4;
                                                                 |     }
    0x00034540 ldr r2, [r5, 0x28]                                |     r2 = *((r5 + 0x28));
                                                                 |     if (r2 == 0) {
    0x00034542 cbnz r2, 0x34554                                  |         
    0x00034544 ldr r2, [r5, 0x18]                                |         r2 = *((r5 + 0x18));
    0x00034546 ldr r2, [r2, 4]                                   |         r2 = *((r2 + 4));
    0x00034548 ldr r2, [r2]                                      |         r2 = *(r2);
    0x0003454a ldr r1, [r2, 0x58]                                |         r1 = *((r2 + 0x58));
    0x0003454c str r1, [r5, 0x2c]                                |         *((r5 + 0x2c)) = r1;
    0x0003454e movs r1, 1                                        |         r1 = 1;
    0x00034550 str r5, [r2, 0x58]                                |         *((r2 + 0x58)) = r5;
    0x00034552 str r1, [r5, 0x28]                                |         *((r5 + 0x28)) = r1;
                                                                 |     }
    0x00034554 ldr r3, [sp, 0xc]                                 |     r3 = var_ch_2;
    0x00034556 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00034558 bne 0x345ca                                       |         goto label_40;
                                                                 |     }
    0x0003455a mov fp, r3                                        |     
    0x0003455c b 0x3447e                                         |     goto label_5;
                                                                 | label_12:
    0x0003455e ldr r5, [sp, 0x24]                                |     r5 = var_24h_3;
    0x00034560 mov fp, r3                                        |     
                                                                 | label_11:
    0x00034562 cmp.w fp, 0                                       |     
                                                                 |     if (fp != 0) {
    0x00034566 bne 0x3446a                                       |         goto label_6;
                                                                 |     }
                                                                 | label_24:
    0x00034568 ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x0003456c add r1, sp, 0x28                                  |     r1 += var_28h_2;
    0x0003456e mov r0, sl                                        |     r0 = sl;
    0x00034570 ldr r3, [r3, 0x18]                                |     r3 = *((r3 + 0x18));
    0x00034572 blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x00034574 mov fp, r0                                        |     
    0x00034576 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00034578 bne.w 0x3446a                                     |         goto label_6;
                                                                 |     }
    0x0003457c ldrd r2, r3, [sp, 0x28]                           |     __asm ("ldrd r2, r3, [var_28h_2]");
    0x00034580 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch_2;
    0x00034582 ldr r0, [sp, 0x20]                                |     r0 = var_20h_3;
    0x00034584 cmp r1, r2                                        |     
    0x00034586 sbcs.w r3, r0, r3                                 |     __asm ("sbcs.w r3, r0, r3");
    0x00034588 lsls r3, r0, 0xc                                  |     r3 = r0 << 0xc;
                                                                 |     if (r3 >= r0) {
    0x0003458a bge 0x345a2                                       |         goto label_46;
                                                                 |     }
    0x0003458c mov r2, r1                                        |     r2 = r1;
    0x0003458e ldr.w r1, [sl]                                    |     r1 = *(sl);
    0x00034592 mov r3, r0                                        |     r3 = r0;
    0x00034594 mov r0, sl                                        |     r0 = sl;
    0x00034596 ldr r1, [r1, 0x10]                                |     r1 = *((r1 + 0x10));
    0x00034598 blx r1                                            |     r0 = uint32_t (*r1)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0003459a mov fp, r0                                        |     
    0x0003459c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0003459e bne.w 0x3446a                                     |         goto label_6;
                                                                 |     }
                                                                 | label_46:
    0x000345a2 ldr r0, [sp, 0x10]                                |     r0 = var_10h;
    0x000345a4 movs r1, 0                                        |     r1 = 0;
    0x000345a6 bl 0xaad8                                         |     r0 = fcn_0000aad8 (r0, r1);
    0x000345aa mov fp, r0                                        |     
    0x000345ac cmp.w fp, 0                                       |     
                                                                 |     if (fp != 0) {
    0x000345b0 bne.w 0x3446a                                     |         goto label_6;
                                                                 |     }
                                                                 | label_18:
    0x000345b4 ldr r0, [r5, 4]                                   |     r0 = *((r5 + 4));
    0x000345b6 ldrb r3, [r0, 8]                                  |     r3 = *((r0 + 8));
    0x000345b8 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000345ba bne.w 0x347b6                                     |         goto label_47;
                                                                 |     }
                                                                 | label_20:
    0x000345be ldr r3, [sp, 0xc]                                 |     r3 = var_ch_2;
    0x000345c0 mov.w fp, 0x65                                    |     
    0x000345c4 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000345c6 beq.w 0x3447e                                     |         goto label_5;
                                                                 |     }
                                                                 | label_40:
    0x000345ca ldr r0, [r5, 0x18]                                |     r0 = *((r5 + 0x18));
    0x000345cc ldrb r2, [r0, 8]                                  |     r2 = *((r0 + 8));
    0x000345ce cmp r2, 2                                         |     
                                                                 |     if (r2 == 2) {
    0x000345d0 beq.w 0x347a4                                     |         goto label_48;
                                                                 |     }
    0x000345d4 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000345d6 beq.w 0x34472                                     |         goto label_7;
                                                                 |     }
                                                                 | label_19:
    0x000345da movs r1, 0                                        |     r1 = 0;
    0x000345dc bl 0x2cc9c                                        |     fcn_0002cc9c (r0, r1);
    0x000345e0 b 0x34472                                         |     goto label_7;
                                                                 | label_42:
    0x000345e2 ldr r2, [r4, 4]                                   |     r2 = *((r4 + 4));
    0x000345e4 ldr r0, [r2, 0x38]                                |     r0 = *((r2 + 0x38));
    0x000345e6 blx 0x63dc                                        |     fcn_000063dc ();
    0x000345ea strb r6, [r4, 0xa]                                |     *((r4 + 0xa)) = r6;
    0x000345ec b 0x3449e                                         |     goto label_8;
                                                                 | label_39:
    0x000345ee ldr r0, [sp, 0x28]                                |     r0 = var_28h_2;
    0x000345f0 bl 0x2bdf4                                        |     r0 = fcn_0002bdf4 (r0, r1, r2);
    0x000345f4 mov r3, r0                                        |     r3 = r0;
    0x000345f6 ldr r0, [sp, 0x28]                                |     r0 = var_28h_2;
                                                                 |     if (r0 != 0) {
    0x000345f8 cbz r0, 0x34602                                   |         
    0x000345fa str r3, [sp, 0x24]                                |         var_24h_3 = r3;
    0x000345fc bl 0x2bd94                                        |         fcn_0002bd94 (r0);
    0x00034600 ldr r3, [sp, 0x24]                                |         r3 = var_24h_3;
                                                                 |     }
    0x00034602 adds r4, 1                                        |     r4++;
    0x00034604 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00034606 beq.w 0x34438                                     |         goto label_9;
                                                                 |     }
    0x0003460a mov fp, r3                                        |     
    0x0003460c b 0x3446a                                         |     goto label_6;
                                                                 | label_38:
    0x0003460e adds r4, r0, 1                                    |     r4 = r0 + 1;
    0x00034610 cmp r7, r4                                        |     
                                                                 |     if (r7 >= r4) {
    0x00034612 bhs.w 0x3444e                                     |         goto label_10;
                                                                 |     }
                                                                 | label_37:
    0x00034616 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00034618 mov r6, fp                                        |     r6 = fp;
    0x0003461a ldr.w fp, [r3, 0x28]                              |     fp = *((r3 + 0x28));
    0x0003461e cmp.w fp, 0                                       |     
                                                                 |     if (fp != 0) {
    0x00034622 bne.w 0x3446a                                     |         goto label_6;
                                                                 |     }
    0x00034626 ldr r0, [sp, 0x10]                                |     r0 = var_10h;
    0x00034628 ldrb r2, [r0, 0x10]                               |     r2 = *((r0 + 0x10));
    0x0003462a cmp r2, 2                                         |     
                                                                 |     if (r2 < 2) {
    0x0003462c bls.w 0x347f0                                     |         goto label_49;
                                                                 |     }
    0x00034630 mov r1, fp                                        |     r1 = fp;
    0x00034632 movs r2, 1                                        |     r2 = 1;
    0x00034634 bl 0x2d244                                        |     fcn_0002d244 (r0, r1, r2, r3, r4, r5, r6);
    0x00034638 ldr r2, [pc, 0x208]                               |     
    0x0003463a mov fp, r0                                        |     
    0x0003463c ldr r1, [sp, 0x1c]                                |     r1 = var_1ch_2;
    0x0003463e ldr r0, [sp, 0x20]                                |     r0 = var_20h_3;
    0x00034640 add r2, pc                                        |     r2 = 0x68e88;
    0x00034642 ldr.w r4, [r2, 0x110]                             |     r4 = *(0x68f98);
    0x00034646 ldr r2, [sp, 0x18]                                |     r2 = var_18h_3;
    0x00034648 add r2, r4                                        |     r2 += r4;
    0x0003464a asrs r3, r2, 0x1f                                 |     r3 = r2 >> 0x1f;
    0x0003464c cmp r1, r2                                        |     
    0x0003464e mov sb, r2                                        |     sb = r2;
    0x00034650 str r3, [sp, 0x18]                                |     var_18h_3 = r3;
    0x00034652 sbcs.w r2, r0, r3                                 |     __asm ("sbcs.w r2, r0, r3");
    0x00034656 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00034658 itt lt                                            |     
                                                                 |     if (r1 >= r2) {
    0x0003465a movlt sb, r1                                      |         sb = r1;
                                                                 |     }
                                                                 |     if (r1 >= r2) {
    0x0003465c strlt r0, [sp, 0x18]                              |         var_18h_3 = r0;
                                                                 |     }
    0x0003465e add r4, r3                                        |     r4 += r3;
    0x00034660 ldr r3, [sp, 0x18]                                |     r3 = var_18h_3;
    0x00034662 asrs r7, r4, 0x1f                                 |     r7 = r4 >> 0x1f;
    0x00034664 cmp r4, sb                                        |     
    0x00034666 sbcs.w r2, r7, r3                                 |     __asm ("sbcs.w r2, r7, r3");
    0x0003466a ite lt                                            |     
                                                                 |     if (r4 >= sb) {
    0x0003466c movlt r2, 1                                       |         r2 = 1;
                                                                 |     }
                                                                 |     if (r4 < sb) {
    0x0003466e movge r2, 0                                       |         r2 = 0;
                                                                 |     }
    0x00034670 cmp.w fp, 0                                       |     
    0x00034674 ite ne                                            |     
                                                                 |     if (fp == 0) {
    0x00034676 movne r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (fp != 0) {
    0x00034678 andeq r2, r2, 1                                   |         r2 &= 1;
                                                                 |     }
    0x0003467c cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x0003467e beq.w 0x34562                                     |         goto label_11;
                                                                 |     }
                                                                 | label_23:
    0x00034682 add.w r8, sp, 0x28                                |     r8 += var_28h_2;
    0x00034686 mov fp, sb                                        |     
    0x00034688 str r5, [sp, 0x24]                                |     var_24h_3 = r5;
    0x0003468a mov sb, r8                                        |     sb = r8;
    0x0003468c ldr r5, [sp, 0x14]                                |     r5 = var_14h;
    0x0003468e ldr.w r8, [sp, 8]                                 |     r8 = var_8h_2;
    0x00034692 b 0x346d2                                         |     goto label_50;
                                                                 | label_13:
    0x00034694 ldr r3, [sp, 0x28]                                |     r3 = var_28h_2;
    0x00034696 mov r2, r5                                        |     r2 = r5;
    0x00034698 mov r0, sl                                        |     r0 = sl;
    0x0003469a ldr r1, [r3, 4]                                   |     r1 = *((r3 + 4));
    0x0003469c ldr.w r3, [sl]                                    |     r3 = *(sl);
    0x000346a0 strd r4, r7, [sp]                                 |     __asm ("strd r4, r7, [sp]");
    0x000346a4 ldr r3, [r3, 0xc]                                 |     r3 = *((r3 + 0xc));
    0x000346a6 blx r3                                            |     r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x000346a8 mov r3, r0                                        |     r3 = r0;
    0x000346aa ldr r0, [sp, 0x28]                                |     r0 = var_28h_2;
                                                                 |     if (r0 != 0) {
    0x000346ac cbnz r0, 0x346fa                                  |         goto label_51;
                                                                 |     }
                                                                 | label_14:
    0x000346ae ldr r2, [sp, 0x18]                                |     r2 = var_18h_3;
    0x000346b0 adds r4, r5, r4                                   |     r4 = r5 + r4;
    0x000346b2 adc.w r7, r6, r7                                  |     __asm ("adc.w r7, r6, r7");
    0x000346b6 cmp r4, fp                                        |     
    0x000346b8 sbcs.w r2, r7, r2                                 |     __asm ("sbcs.w r2, r7, r2");
    0x000346bc ite lt                                            |     
                                                                 |     if (r4 >= fp) {
    0x000346be movlt r2, 1                                       |         r2 = 1;
                                                                 |     }
                                                                 |     if (r4 < fp) {
    0x000346c0 movge r2, 0                                       |         r2 = 0;
                                                                 |     }
    0x000346c2 cmp r3, 0                                         |     
    0x000346c4 ite ne                                            |     
                                                                 |     if (r3 == 0) {
    0x000346c6 movne r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (r3 != 0) {
    0x000346c8 andeq r2, r2, 1                                   |         r2 &= 1;
                                                                 |     }
    0x000346cc cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000346ce beq.w 0x3455e                                     |         goto label_12;
                                                                 |     }
                                                                 | label_50:
    0x000346d2 movs r3, 0                                        |     r3 = 0;
    0x000346d4 mov r2, r5                                        |     r2 = r5;
    0x000346d6 str r3, [sp, 0x28]                                |     var_28h_2 = r3;
    0x000346d8 mov r0, r4                                        |     r0 = r4;
    0x000346da mov r3, r6                                        |     r3 = r6;
    0x000346dc mov r1, r7                                        |     r1 = r7;
    0x000346de bl 0x5e500                                        |     fcn_0005e500 (r0, r1, r2, r3);
    0x000346e2 movs r3, 0                                        |     r3 = 0;
    0x000346e4 adds r1, r0, 1                                    |     r1 = r0 + 1;
    0x000346e6 mov r2, sb                                        |     r2 = sb;
    0x000346e8 mov r0, r8                                        |     r0 = r8;
    0x000346ea bl 0x2a698                                        |     r0 = fcn_0002a698 (r0, r1, r2, r3);
    0x000346ee mov r3, r0                                        |     r3 = r0;
    0x000346f0 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000346f2 beq 0x34694                                       |         goto label_13;
                                                                 |     }
    0x000346f4 ldr r0, [sp, 0x28]                                |     r0 = var_28h_2;
    0x000346f6 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000346f8 beq 0x347d4                                       |         goto label_52;
                                                                 |     }
                                                                 | label_51:
    0x000346fa str r3, [sp, 8]                                   |     var_8h_2 = r3;
    0x000346fc bl 0x2bd94                                        |     fcn_0002bd94 (r0);
    0x00034700 ldr r3, [sp, 8]                                   |     r3 = var_8h_2;
    0x00034702 b 0x346ae                                         |     goto label_14;
                                                                 | label_27:
    0x00034704 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x00034706 mov.w fp, 5                                       |     
    0x0003470a b 0x34506                                         |     goto label_15;
                                                                 | label_34:
    0x0003470c mov r0, r4                                        |     r0 = r4;
    0x0003470e bl 0xd140                                         |     fcn_0000d140 (r0);
    0x00034712 ldr r0, [r4, 4]                                   |     r0 = *((r4 + 4));
    0x00034714 str.w r8, [r0, 0x2c]                              |     __asm ("str.w r8, [r0, 0x2c]");
    0x00034718 bl 0x2bfb4                                        |     fcn_0002bfb4 (r0, r1);
    0x0003471c ldrb r2, [r4, 9]                                  |     r2 = *((r4 + 9));
    0x0003471e mov fp, r0                                        |     
                                                                 |     if (r2 != 0) {
    0x00034720 cbz r2, 0x3472c                                   |         
    0x00034722 ldr r2, [r4, 0xc]                                 |         r2 = *((r4 + 0xc));
    0x00034724 subs r2, 1                                        |         r2--;
    0x00034726 str r2, [r4, 0xc]                                 |         *((r4 + 0xc)) = r2;
    0x00034728 cmp r2, 0                                         |         
                                                                 |         if (r2 == 0) {
    0x0003472a beq 0x347c6                                       |             goto label_53;
                                                                 |         }
                                                                 |     }
                                                                 | label_21:
    0x0003472c cmp.w fp, 0x65                                    |     
    0x00034730 it ne                                             |     
                                                                 |     if (fp == 0x65) {
    0x00034732 cmpne fp, 0                                       |         __asm ("cmpne fp, 0");
                                                                 |         goto label_54;
                                                                 |     }
                                                                 |     if (fp != 0x65) {
                                                                 | label_54:
    0x00034736 bne.w 0x3446a                                     |         goto label_6;
                                                                 |     }
    0x0003473a ldr r4, [r5, 4]                                   |     r4 = *((r5 + 4));
    0x0003473c movs r6, 1                                        |     r6 = 1;
    0x0003473e b 0x343b0                                         |     goto label_16;
                                                                 | label_29:
    0x00034740 mov r0, r2                                        |     r0 = r2;
    0x00034742 bl 0x30bcc                                        |     fcn_00030bcc (r0, r1);
    0x00034746 movs r3, 1                                        |     r3 = 1;
    0x00034748 clz r1, r0                                        |     r1 &= r0;
    0x0003474c ldr r2, [r5, 0x18]                                |     r2 = *((r5 + 0x18));
    0x0003474e lsrs r1, r1, 5                                    |     r1 >>= 5;
    0x00034750 mov fp, r0                                        |     
    0x00034752 str r3, [sp, 0xc]                                 |     var_ch_2 = r3;
    0x00034754 b 0x342f6                                         |     goto label_17;
                                                                 | label_36:
    0x00034756 ldrd r0, r1, [sp, 0x14]                           |     __asm ("ldrd r0, r1, [var_14h]");
    0x0003475a bl 0x5ded8                                        |     fcn_0005ded8 (r0, r1);
    0x0003475e ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00034760 mul r0, r6, r0                                    |     r0 = r6 * r0;
    0x00034764 ldr.w fp, [r3, 0x28]                              |     fp = *((r3 + 0x28));
    0x00034768 str r0, [r3, 0x18]                                |     *((r3 + 0x18)) = r0;
    0x0003476a cmp.w fp, 0                                       |     
                                                                 |     if (fp != 0) {
    0x0003476e bne.w 0x3446a                                     |         goto label_6;
                                                                 |     }
    0x00034772 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x00034774 ldrb r2, [r3, 0x10]                               |     r2 = *((r3 + 0x10));
    0x00034776 cmp r2, 2                                         |     
                                                                 |     if (r2 < 2) {
    0x00034778 bls.w 0x345b4                                     |         goto label_18;
                                                                 |     }
    0x0003477c mov r2, fp                                        |     r2 = fp;
    0x0003477e mov r1, fp                                        |     r1 = fp;
    0x00034780 ldr r0, [sp, 0x10]                                |     r0 = var_10h;
    0x00034782 bl 0x2d244                                        |     r0 = fcn_0002d244 (r0, r1, r2, r3, r4, r5, r6);
    0x00034786 mov fp, r0                                        |     
    0x00034788 cmp.w fp, 0                                       |     
                                                                 |     if (fp == 0) {
    0x0003478c beq.w 0x345b4                                     |         goto label_18;
                                                                 |     }
    0x00034790 b 0x3446a                                         |     goto label_6;
                                                                 | label_44:
    0x00034792 movs r1, 1                                        |     r1 = 1;
    0x00034794 add.w r2, r5, 8                                   |     r2 = r5 + 8;
    0x00034798 ldr r0, [r5, 4]                                   |     r0 = *((r5 + 4));
    0x0003479a str r1, [r5, 0xc]                                 |     *((r5 + 0xc)) = r1;
    0x0003479c bl 0x11954                                        |     fcn_00011954 (r0, r1, r2);
    0x000347a0 ldr r2, [r5, 0x18]                                |     r2 = *((r5 + 0x18));
    0x000347a2 b 0x342e6                                         |     goto label_1;
                                                                 | label_48:
    0x000347a4 movs r1, 0                                        |     r1 = 0;
    0x000347a6 bl 0x331e8                                        |     fcn_000331e8 (r0, r1);
    0x000347aa ldr r0, [r5, 0x18]                                |     r0 = *((r5 + 0x18));
    0x000347ac ldrb r2, [r0, 8]                                  |     r2 = *((r0 + 8));
    0x000347ae cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000347b0 beq.w 0x34472                                     |         goto label_7;
                                                                 |     }
    0x000347b4 b 0x345da                                         |     goto label_19;
                                                                 | label_47:
    0x000347b6 movs r1, 0                                        |     r1 = 0;
    0x000347b8 bl 0x2cc9c                                        |     r0 = fcn_0002cc9c (r0, r1);
    0x000347bc mov fp, r0                                        |     
    0x000347be cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000347c0 beq.w 0x345be                                     |         goto label_20;
                                                                 |     }
    0x000347c4 b 0x3446a                                         |     goto label_6;
                                                                 | label_53:
    0x000347c6 ldr r2, [r4, 4]                                   |     r2 = *((r4 + 4));
    0x000347c8 ldr r0, [r2, 0x38]                                |     r0 = *((r2 + 0x38));
    0x000347ca blx 0x63dc                                        |     fcn_000063dc ();
    0x000347ce strb.w r8, [r4, 0xa]                              |     *((r4 + 0xa)) = r8;
    0x000347d2 b 0x3472c                                         |     goto label_21;
                                                                 | label_52:
    0x000347d4 ldr r5, [sp, 0x24]                                |     r5 = var_24h_3;
    0x000347d6 mov fp, r3                                        |     
    0x000347d8 b 0x3446a                                         |     goto label_6;
                                                                 | label_35:
    0x000347da ldr r0, [r5, 4]                                   |     r0 = *((r5 + 4));
    0x000347dc movs r1, 2                                        |     r1 = 2;
    0x000347de bl 0x3124c                                        |     r0 = fcn_0003124c (r0, r1);
    0x000347e2 mov fp, r0                                        |     
    0x000347e4 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x000347e6 beq.w 0x343d2                                     |         goto label_22;
                                                                 |     }
    0x000347ea b 0x3446a                                         |     goto label_6;
                                                                 | label_45:
    0x000347ec str r7, [sp, 0xc]                                 |     var_ch_2 = r7;
    0x000347ee b 0x3439e                                         |     goto label_3;
                                                                 | label_49:
    0x000347f0 ldr r3, [pc, 0x54]                                |     
    0x000347f2 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch_2;
    0x000347f4 ldr r0, [sp, 0x20]                                |     r0 = var_20h_3;
    0x000347f6 add r3, pc                                        |     r3 = 0x69042;
    0x000347f8 ldr.w r4, [r3, 0x110]                             |     r4 = *(0x69152);
    0x000347fc ldr r3, [sp, 0x18]                                |     r3 = var_18h_3;
    0x000347fe add r3, r4                                        |     r3 += r4;
    0x00034800 asrs r2, r3, 0x1f                                 |     r2 = r3 >> 0x1f;
    0x00034802 cmp r1, r3                                        |     
    0x00034804 mov sb, r3                                        |     sb = r3;
    0x00034806 sbcs.w r3, r0, r2                                 |     __asm ("sbcs.w r3, r0, r2");
    0x0003480a ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0003480c str r2, [sp, 0x18]                                |     var_18h_3 = r2;
    0x0003480e itt lt                                            |     
                                                                 |     if (r1 >= r3) {
    0x00034810 movlt sb, r1                                      |         sb = r1;
                                                                 |     }
                                                                 |     if (r1 >= r3) {
    0x00034812 strlt r0, [sp, 0x18]                              |         var_18h_3 = r0;
                                                                 |     }
    0x00034814 add r4, r3                                        |     r4 += r3;
    0x00034816 ldr r3, [sp, 0x18]                                |     r3 = var_18h_3;
    0x00034818 asrs r7, r4, 0x1f                                 |     r7 = r4 >> 0x1f;
    0x0003481a cmp r4, sb                                        |     
    0x0003481c sbcs.w r3, r7, r3                                 |     __asm ("sbcs.w r3, r7, r3");
                                                                 |     if (r4 < sb) {
    0x00034820 blt.w 0x34682                                     |         goto label_23;
                                                                 |     }
    0x00034824 b 0x34568                                         |     goto label_24;
                                                                 | label_43:
    0x00034826 blx 0x6498                                        |     fcn_00006498 ();
    0x0003482a nop                                               |     
    0x0003482c subs r1, 0xd0                                     |     r1 -= 0xd0;
    0x0003482e movs r4, r0                                       |     r4 = r0;
    0x00034830 lsls r0, r1, 0xe                                  |     r0 = r1 << 0xe;
    0x00034832 movs r0, r0                                       |     
    0x00034834 subs r4, 0xca                                     |     r4 -= 0xca;
    0x00034836 movs r4, r0                                       |     r4 = r0;
    0x00034838 subs r4, 0x12                                     |     r4 -= 0x12;
    0x0003483a movs r4, r0                                       |     r4 = r0;
    0x0003483c subs r4, 0                                        |     
    0x0003483e movs r4, r0                                       |     r4 = r0;
    0x00034840 adds r7, 0xae                                     |     r7 += 0xae;
    0x00034842 movs r4, r0                                       |     r4 = r0;
    0x00034844 subs r1, 0xc4                                     |     r1 -= 0xc4;
    0x00034846 movs r4, r0                                       |     r4 = r0;
    0x00034848 subs r0, 0xe                                      |     r0 -= 0xe;
    0x0003484a movs r4, r0                                       |     r4 = r0;
                                                                 | }
    ; assembly                                       | /* r2dec pseudo code output */
                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x2843c */
                                                     | #include <stdint.h>
                                                     |  
    ; (fcn) sym.sqlite3_bind_double ()               | void sqlite3_bind_double (int16_t arg1, int16_t arg2) {
                                                     |     int16_t var_0h;
                                                     |     int32_t var_0h_2;
                                                     |     int32_t var_8h;
                                                     |     int32_t var_8h_2;
                                                     |     r0 = arg1;
                                                     |     r1 = arg2;
    0x0002843c mvnsmi lr, sp, lsr 18                 |     __asm ("mvnsmi lr, sp, lsr 18");
    0x00028440 mov r6, r0                            |     r6 = r0;
    0x00028442 vpush {d8}                            |     __asm ("vpush {d8}");
    0x00028446 sub sp, 0x10                          |     
    0x00028448 mov r4, r1                            |     r4 = r1;
    0x0002844a vmov.f64 d8, d0                       |     __asm ("vmov.f64 d8, d0");
    0x0002844e bl 0x281d0                            |     r0 = fcn_000281d0 (r0, r1);
    0x00028452 mov r5, r0                            |     r5 = r0;
                                                     |     if (r0 != 0) {
    0x00028454 cbz r0, 0x28462                       |         
    0x00028456 mov r0, r5                            |         r0 = r5;
    0x00028458 add sp, 0x10                          |         
    0x0002845a vpop {d8}                             |         __asm ("vpop {d8}");
    0x0002845e pop.w {r4, r5, r6, r7, r8, pc}        |         
                                                     |     }
    0x00028462 vstr d8, [sp]                         |     __asm ("vstr d8, [sp]");
    0x00028466 add.w r4, r4, r4, lsl 2               |     r4 += (r4 << 2);
    0x0002846a ldrd r2, r3, [sp]                     |     __asm ("ldrd r2, r3, [sp]");
    0x0002846e ldr.w r8, [r6, 0x3c]                  |     r8 = *((r6 + 0x3c));
    0x00028472 lsls r4, r4, 3                        |     r4 <<= 3;
    0x00028474 strd r2, r3, [sp, 8]                  |     __asm ("strd r2, r3, [var_8h]");
    0x00028478 subs r4, 0x28                         |     r4 -= 0x28;
    0x0002847a vldr d17, [sp]                        |     __asm ("vldr d17, [sp]");
    0x0002847e add.w r7, r8, r4                      |     r7 = r8 + r4;
    0x00028482 vldr d16, [sp, 8]                     |     __asm ("vldr d16, [sp, 8]");
    0x00028486 vcmp.f64 d17, d16                     |     __asm ("vcmp.f64 d17, d16");
    0x0002848a vmrs apsr_nzcv, fpscr                 |     __asm ("vmrs apsr_nzcv, fpscr");
                                                     |     if (r4 != 0x28) {
    0x0002848e bne 0x284ca                           |         goto label_1;
                                                     |     }
    0x00028490 ldrh r3, [r7, 0x1c]                   |     r3 = *((r7 + 0x1c));
    0x00028492 movw r2, 0x2460                       |     r2 = 0x2460;
    0x00028496 tst r2, r3                            |     
                                                     |     if ((r2 & r3) != 0) {
    0x00028498 bne 0x284d2                           |         goto label_2;
                                                     |     }
                                                     | label_0:
    0x0002849a ldr r1, [r7, 0x24]                    |     r1 = *((r7 + 0x24));
                                                     |     if (r1 != 0) {
    0x0002849c cbz r1, 0x284aa                       |         
    0x0002849e ldr.w r0, [r8, r4]                    |         r0 = *((r8 + r4));
    0x000284a2 bl 0xe12c                             |         fcn_0000e12c (r0, r1);
    0x000284a6 movs r3, 0                            |         r3 = 0;
    0x000284a8 str r3, [r7, 0x24]                    |         *((r7 + 0x24)) = r3;
                                                     |     }
    0x000284aa movs r2, 0                            |     r2 = 0;
    0x000284ac movs r3, 8                            |     r3 = 8;
    0x000284ae str r2, [r7, 4]                       |     *((r7 + 4)) = r2;
    0x000284b0 vstr d8, [r7, 8]                      |     __asm ("vstr d8, [r7, 8]");
    0x000284b4 strh r3, [r7, 0x1c]                   |     *((r7 + 0x1c)) = r3;
                                                     |     do {
    0x000284b6 ldr r3, [r6]                          |         r3 = *(r6);
    0x000284b8 ldr r0, [r3, 0xc]                     |         r0 = *((r3 + 0xc));
    0x000284ba blx 0x63dc                            |         fcn_000063dc ();
    0x000284be mov r0, r5                            |         r0 = r5;
    0x000284c0 add sp, 0x10                          |         
    0x000284c2 vpop {d8}                             |         __asm ("vpop {d8}");
    0x000284c6 pop.w {r4, r5, r6, r7, r8, pc}        |         
                                                     | label_1:
    0x000284ca mov r0, r7                            |         r0 = r7;
    0x000284cc bl 0xfdb8                             |         fcn_0000fdb8 (r0);
    0x000284d0 b 0x284b6                             |         
                                                     |     } while (1);
                                                     | label_2:
    0x000284d2 mov r0, r7                            |     r0 = r7;
    0x000284d4 bl 0xfe84                             |     fcn_0000fe84 (r0);
    0x000284d8 b 0x2849a                             |     goto label_0;
                                                     | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x284dc */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) sym.sqlite3_bind_int64 ()                        | void sqlite3_bind_int64 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
                                                             |     r2 = arg3;
                                                             |     r3 = arg4;
    0x000284dc push.w {r4, r5, r6, r7, r8, sb, sl, lr}       |     
    0x000284e0 mov r5, r0                                    |     r5 = r0;
    0x000284e2 mov r7, r2                                    |     r7 = r2;
    0x000284e4 mov r6, r3                                    |     r6 = r3;
    0x000284e6 mov r4, r1                                    |     r4 = r1;
    0x000284e8 bl 0x281d0                                    |     r0 = fcn_000281d0 (r0, r1);
    0x000284ec mov r8, r0                                    |     r8 = r0;
                                                             |     if (r0 != 0) {
    0x000284ee cbz r0, 0x284f6                               |         
    0x000284f0 mov r0, r8                                    |         r0 = r8;
    0x000284f2 pop.w {r4, r5, r6, r7, r8, sb, sl, pc}        |         
                                                             |     }
    0x000284f6 add.w r4, r4, r4, lsl 2                       |     r4 += (r4 << 2);
    0x000284fa ldr.w sl, [r5, 0x3c]                          |     sl = *((r5 + 0x3c));
    0x000284fe movw r2, 0x2460                               |     r2 = 0x2460;
    0x00028502 lsls r4, r4, 3                                |     r4 <<= 3;
    0x00028504 subs r4, 0x28                                 |     r4 -= 0x28;
    0x00028506 add.w sb, sl, r4                              |     sb = sl + r4;
    0x0002850a ldrh.w r3, [sb, 0x1c]                         |     r3 = *((sb + 0x1c));
    0x0002850e tst r2, r3                                    |     
    0x00028510 bne 0x28548                                   |     
                                                             |     while (1) {
    0x00028512 ldr.w r1, [sb, 0x24]                          |         r1 = *((sb + 0x24));
                                                             |         if (r1 != 0) {
    0x00028516 cbz r1, 0x28526                               |             
    0x00028518 ldr.w r0, [sl, r4]                            |             r0 = *((sl + r4));
    0x0002851c bl 0xe12c                                     |             fcn_0000e12c (r0, r1);
    0x00028520 movs r3, 0                                    |             r3 = 0;
    0x00028522 str.w r3, [sb, 0x24]                          |             __asm ("str.w r3, [sb, 0x24]");
                                                             |         }
    0x00028526 ldr r3, [r5]                                  |         r3 = *(r5);
    0x00028528 movs r2, 4                                    |         r2 = 4;
    0x0002852a str.w r7, [sb, 0x10]                          |         __asm ("str.w r7, [sb, 0x10]");
    0x0002852e str.w r6, [sb, 0x14]                          |         __asm ("str.w r6, [sb, 0x14]");
    0x00028532 ldr r0, [r3, 0xc]                             |         r0 = *((r3 + 0xc));
    0x00028534 movs r3, 0                                    |         r3 = 0;
    0x00028536 strh.w r2, [sb, 0x1c]                         |         *((sb + 0x1c)) = r2;
    0x0002853a str.w r3, [sb, 4]                             |         __asm ("str.w r3, [sb, 4]");
    0x0002853e blx 0x63dc                                    |         fcn_000063dc ();
    0x00028542 mov r0, r8                                    |         r0 = r8;
    0x00028544 pop.w {r4, r5, r6, r7, r8, sb, sl, pc}        |         
    0x00028548 mov r0, sb                                    |         r0 = sb;
    0x0002854a bl 0xfe84                                     |         fcn_0000fe84 (r0);
    0x0002854e b 0x28512                                     |         
                                                             |     }
                                                             | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x14e40 */
                                                                     | #include <stdint.h>
                                                                     |  
    ; (fcn) sym.sqlite3_clear_bindings ()                            | void sqlite3_clear_bindings (int16_t arg_3ch, int16_t arg_44h, int16_t arg_58h, int16_t arg_59h, int16_t arg_bch, int16_t arg1) {
                                                                     |     r0 = arg1;
    0x00014e40 push.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00014e44 mov fp, r0                                            |     
    0x00014e46 ldr r3, [r0]                                          |     r3 = *(r0);
    0x00014e48 ldr.w sl, [r3, 0xc]                                   |     sl = *((r3 + 0xc));
    0x00014e4c mov r0, sl                                            |     r0 = sl;
    0x00014e4e blx 0x6810                                            |     fcn_00006810 ();
    0x00014e52 ldrsh.w r3, [fp, 0x44]                                |     r3 = *(arg_44h);
    0x00014e56 cmp r3, 0                                             |     
                                                                     |     if (r3 <= 0) {
    0x00014e58 ble 0x14ea6                                           |         goto label_1;
                                                                     |     }
    0x00014e5a movs r6, 0                                            |     r6 = 0;
    0x00014e5c ldr.w r3, [fp, 0x3c]                                  |     r3 = *(arg_3ch);
    0x00014e60 movw sb, 0x2460                                       |     sb = 0x2460;
    0x00014e64 mov r7, r6                                            |     r7 = r6;
    0x00014e66 mov.w r8, 1                                           |     r8 = 1;
    0x00014e6a b 0x14e8c                                             |     
                                                                     |     while ((sb & r3) == 0) {
                                                                     | label_0:
    0x00014e6c ldr r1, [r5, 0x24]                                    |         r1 = *((r5 + 0x24));
                                                                     |         if (r1 != 0) {
    0x00014e6e cbz r1, 0x14e78                                       |             
    0x00014e70 ldr r0, [r5]                                          |             r0 = *(r5);
    0x00014e72 bl 0xe12c                                             |             fcn_0000e12c (r0, r1);
    0x00014e76 str r7, [r5, 0x24]                                    |             *((r5 + 0x24)) = r7;
                                                                     |         }
    0x00014e78 ldrsh.w r2, [fp, 0x44]                                |         r2 = *(arg_44h);
    0x00014e7c ldr.w r3, [fp, 0x3c]                                  |         r3 = *(arg_3ch);
    0x00014e80 str r7, [r5, 4]                                       |         *((r5 + 4)) = r7;
    0x00014e82 cmp r2, r6                                            |         
    0x00014e84 add r4, r3                                            |         r4 += r3;
    0x00014e86 strh.w r8, [r4, 0x1c]                                 |         *((r4 + 0x1c)) = r8;
                                                                     |         if (r2 <= r6) {
    0x00014e8a ble 0x14ea6                                           |             goto label_1;
                                                                     |         }
    0x00014e8c add.w r4, r6, r6, lsl 2                               |         r4 = r6 + (r6 << 2);
    0x00014e90 adds r6, 1                                            |         r6++;
    0x00014e92 lsls r4, r4, 3                                        |         r4 <<= 3;
    0x00014e94 adds r5, r3, r4                                       |         r5 = r3 + r4;
    0x00014e96 ldrh r3, [r5, 0x1c]                                   |         r3 = *((r5 + 0x1c));
    0x00014e98 tst.w sb, r3                                          |         
    0x00014e9c beq 0x14e6c                                           |         
                                                                     |     }
    0x00014e9e mov r0, r5                                            |     r0 = r5;
    0x00014ea0 bl 0xfe84                                             |     fcn_0000fe84 (r0);
    0x00014ea4 b 0x14e6c                                             |     goto label_0;
                                                                     | label_1:
    0x00014ea6 ldrb.w r3, [fp, 0x59]                                 |     r3 = *(arg_59h);
    0x00014eaa lsls r3, r3, 0x1d                                     |     r3 <<= 0x1d;
                                                                     |     if (r3 < r3) {
    0x00014eac bpl 0x14ec0                                           |         
    0x00014eae ldr.w r3, [fp, 0xbc]                                  |         r3 = *(arg_bch);
                                                                     |         if (r3 == 0) {
    0x00014eb2 cbz r3, 0x14ec0                                       |             goto label_2;
                                                                     |         }
    0x00014eb4 ldrb.w r3, [fp, 0x58]                                 |         r3 = *(arg_58h);
    0x00014eb8 orr r3, r3, 0x20                                      |         r3 |= 0x20;
    0x00014ebc strb.w r3, [fp, 0x58]                                 |         *(arg_58h) = r3;
                                                                     |     }
                                                                     | label_2:
    0x00014ec0 mov r0, sl                                            |     r0 = sl;
    0x00014ec2 blx 0x63dc                                            |     fcn_000063dc ();
    0x00014ec6 movs r0, 0                                            |     r0 = 0;
    0x00014ec8 pop.w {r3, 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-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x4cd38 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) sym.sqlite3_exec ()                                  | void sqlite3_exec (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_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x0004cd38 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x0004cd3c mov r6, r2                                        |     r6 = r2;
    0x0004cd3e sub sp, 0x3c                                      |     
    0x0004cd40 ldr r2, [pc, 0x390]                               |     
    0x0004cd42 mov sb, r0                                        |     sb = r0;
    0x0004cd44 mov r4, r1                                        |     r4 = r1;
    0x0004cd46 str r3, [sp, 8]                                   |     var_8h = r3;
    0x0004cd48 ldr r3, [pc, 0x38c]                               |     r3 = *(0x4d0d8);
    0x0004cd4a add r2, pc                                        |     r2 = 0x99e22;
    0x0004cd4c ldr r3, [r2, r3]                                  |     
    0x0004cd4e ldr r3, [r3]                                      |     r3 = *(0x99e22);
    0x0004cd50 str r3, [sp, 0x34]                                |     var_34h = r3;
    0x0004cd52 mov.w r3, 0                                       |     r3 = 0;
    0x0004cd56 movs r3, 0                                        |     r3 = 0;
    0x0004cd58 str r3, [sp, 0x30]                                |     var_30h = r3;
    0x0004cd5a ldr r3, [sp, 0x60]                                |     r3 = *(arg_60h);
    0x0004cd5c str r3, [sp, 0x18]                                |     var_18h = r3;
    0x0004cd5e bl 0x27854                                        |     r0 = fcn_00027854 (r0);
    0x0004cd62 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004cd64 beq.w 0x4d07e                                     |         goto label_17;
                                                                 |     }
    0x0004cd68 cmp r4, 0                                         |     
                                                                 |     if (r4 == 0) {
    0x0004cd6a beq.w 0x4d078                                     |         goto label_18;
                                                                 |     }
                                                                 | label_12:
    0x0004cd6e ldr.w r0, [sb, 0xc]                               |     r0 = *((sb + 0xc));
    0x0004cd72 blx 0x6810                                        |     fcn_00006810 ();
    0x0004cd76 movs r2, 0                                        |     r2 = 0;
    0x0004cd78 mov r0, sb                                        |     r0 = sb;
    0x0004cd7a mov r1, r2                                        |     r1 = r2;
    0x0004cd7c bl 0x1c64c                                        |     fcn_0001c64c (r0, r1);
    0x0004cd80 movw r3, 0xda3                                    |     
    0x0004cd84 movt r3, 0xbdf2                                   |     r3 = 0xbdf20da3;
    0x0004cd88 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x0004cd8a movw r3, 0x2973                                   |     
    0x0004cd8e movt r3, 0x519c                                   |     r3 = 0x519c2973;
    0x0004cd92 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x0004cd94 ldr r3, [pc, 0x344]                               |     
    0x0004cd96 add r3, pc                                        |     r3 = 0x99e76;
    0x0004cd98 str r3, [sp, 0x24]                                |     var_24h = r3;
                                                                 | label_1:
    0x0004cd9a ldrb r3, [r4]                                     |     r3 = *(r4);
    0x0004cd9c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004cd9e beq.w 0x4d0ac                                     |         goto label_19;
                                                                 |     }
    0x0004cda2 add.w r8, sp, 0x30                                |     r8 += var_30h;
    0x0004cda6 add r7, sp, 0x2c                                  |     r7 += var_2ch;
    0x0004cda8 movs r5, 0                                        |     r5 = 0;
    0x0004cdaa mov r1, r4                                        |     r1 = r4;
                                                                 |     do {
    0x0004cdac mov r3, r8                                        |         r3 = r8;
    0x0004cdae mov.w r2, -1                                      |         r2 = -1;
    0x0004cdb2 mov r0, sb                                        |         r0 = sb;
    0x0004cdb4 str r7, [sp]                                      |         *(sp) = r7;
    0x0004cdb6 str r5, [sp, 0x30]                                |         var_30h = r5;
    0x0004cdb8 blx 0x6724                                        |         r0 = fcn_00006724 ();
    0x0004cdbc cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x0004cdbe bne 0x4ce2e                                       |             goto label_20;
                                                                 |         }
    0x0004cdc0 ldr r2, [sp, 0x30]                                |         r2 = var_30h;
    0x0004cdc2 cmp r2, 0                                         |         
                                                                 |         if (r2 != 0) {
    0x0004cdc4 bne 0x4ce82                                       |             goto label_21;
                                                                 |         }
    0x0004cdc6 ldr r1, [sp, 0x2c]                                |         r1 = var_2ch;
    0x0004cdc8 ldrb r3, [r1]                                     |         r3 = *(r1);
    0x0004cdca cmp r3, 0                                         |         
    0x0004cdcc bne 0x4cdac                                       |         
                                                                 |     } while (r3 != 0);
    0x0004cdce mov r1, r0                                        |     r1 = r0;
    0x0004cdd0 str r0, [sp, 0xc]                                 |     var_ch = r0;
    0x0004cdd2 mov r0, sb                                        |     r0 = sb;
    0x0004cdd4 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x0004cdd8 ldrb.w r3, [sb, 0x40]                             |     r3 = *((sb + 0x40));
    0x0004cddc cbz r3, 0x4ce00                                   |     
                                                                 |     while (r4 != 0) {
    0x0004cdde movs r2, 0                                        |         r2 = 0;
    0x0004cde0 movs r1, 7                                        |         r1 = 7;
    0x0004cde2 mov r0, sb                                        |         r0 = sb;
    0x0004cde4 bl 0x1c64c                                        |         fcn_0001c64c (r0, r1);
    0x0004cde8 movs r3, 0                                        |         r3 = 0;
    0x0004cdea movs r2, 7                                        |         r2 = 7;
    0x0004cdec str r2, [sp, 0xc]                                 |         var_ch = r2;
    0x0004cdee strb.w r3, [sb, 0x40]                             |         *((sb + 0x40)) = r3;
                                                                 | label_0:
    0x0004cdf2 ldr r2, [sp, 0xc]                                 |         r2 = var_ch;
    0x0004cdf4 ldr.w r3, [sb, 0x38]                              |         r3 = *((sb + 0x38));
    0x0004cdf8 ands r3, r2                                       |         r3 &= r2;
    0x0004cdfa str r3, [sp, 0xc]                                 |         var_ch = r3;
                                                                 |         if (r3 != r2) {
    0x0004cdfc bne.w 0x4d01e                                     |             goto label_22;
                                                                 |         }
                                                                 | label_10:
    0x0004ce00 ldr r2, [sp, 0x18]                                |         r2 = var_18h;
                                                                 |         if (r2 != 0) {
    0x0004ce02 cbz r2, 0x4ce08                                   |             
    0x0004ce04 movs r3, 0                                        |             r3 = 0;
    0x0004ce06 str r3, [r2]                                      |             *(r2) = r3;
                                                                 |         }
                                                                 | label_11:
    0x0004ce08 ldr.w r0, [sb, 0xc]                               |         r0 = *((sb + 0xc));
    0x0004ce0c blx 0x63dc                                        |         fcn_000063dc ();
                                                                 | label_13:
    0x0004ce10 ldr r2, [pc, 0x2cc]                               |         
    0x0004ce12 ldr r3, [pc, 0x2c4]                               |         r3 = *(0x4d0da);
    0x0004ce14 add r2, pc                                        |         r2 = 0x99ef8;
    0x0004ce16 ldr r3, [r2, r3]                                  |         r3 = *(0x99ef8);
    0x0004ce18 ldr r2, [r3]                                      |         r2 = *(0x99ef8);
    0x0004ce1a ldr r3, [sp, 0x34]                                |         r3 = var_34h;
    0x0004ce1c eors r2, r3                                       |         r2 ^= r3;
    0x0004ce1e mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0004ce22 bne.w 0x4d0c6                                     |             goto label_23;
                                                                 |         }
    0x0004ce26 ldr r0, [sp, 0xc]                                 |         r0 = var_ch;
    0x0004ce28 add sp, 0x3c                                      |         
    0x0004ce2a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_20:
    0x0004ce2e mov r3, r0                                        |         r3 = r0;
    0x0004ce30 str r0, [sp, 0xc]                                 |         var_ch = r0;
                                                                 | label_2:
    0x0004ce32 movw r4, 0xc0a                                    |         r4 = 0xc0a;
    0x0004ce36 mov.w r8, 0                                       |         r8 = 0;
    0x0004ce3a subs r4, r3, r4                                   |         r4 = r3 - r4;
    0x0004ce3c clz r4, r4                                        |         r4 &= r4;
    0x0004ce40 lsrs r4, r4, 5                                    |         r4 >>= 5;
                                                                 | label_6:
    0x0004ce42 ldr r5, [sp, 0x30]                                |         r5 = var_30h;
                                                                 |         if (r5 != 0) {
    0x0004ce44 cbz r5, 0x4ce68                                   |             
    0x0004ce46 ldr r2, [r5, 0x28]                                |             r2 = *((r5 + 0x28));
    0x0004ce48 movw r1, 0xda3                                    |             
    0x0004ce4c movw r3, 0x2973                                   |             
    0x0004ce50 movt r1, 0xbdf2                                   |             r1 = 0xbdf20da3;
    0x0004ce54 movt r3, 0x519c                                   |             r3 = 0x519c2973;
    0x0004ce58 cmp r2, r3                                        |             
    0x0004ce5a it ne                                             |             
                                                                 |             if (r2 != r3) {
    0x0004ce5c cmpne r2, r1                                      |                 __asm ("cmpne r2, r1");
                                                                 |             }
                                                                 |             if (r2 == r3) {
    0x0004ce5e beq.w 0x4d0a4                                     |                 goto label_24;
                                                                 |             }
                                                                 | label_15:
    0x0004ce62 mov r0, r5                                        |             r0 = r5;
    0x0004ce64 bl 0x103f4                                        |             fcn_000103f4 (r0);
                                                                 |         }
    0x0004ce68 mov r1, r8                                        |         r1 = r8;
    0x0004ce6a mov r0, sb                                        |         r0 = sb;
    0x0004ce6c bl 0xe12c                                         |         fcn_0000e12c (r0, r1);
    0x0004ce70 ldrb.w r3, [sb, 0x40]                             |         r3 = *((sb + 0x40));
    0x0004ce74 cmp r3, 0                                         |         
    0x0004ce76 it ne                                             |         
                                                                 |         if (r3 == 0) {
    0x0004ce78 orrne r4, r4, 1                                   |             r4 |= 1;
                                                                 |         }
    0x0004ce7c cmp r4, 0                                         |         
    0x0004ce7e bne 0x4cdde                                       |         
                                                                 |     }
    0x0004ce80 b 0x4cdf2                                         |     goto label_0;
                                                                 | label_21:
    0x0004ce82 mov r8, r0                                        |     r8 = r0;
    0x0004ce84 str r0, [sp, 0xc]                                 |     var_ch = r0;
    0x0004ce86 mov r0, r2                                        |     r0 = r2;
    0x0004ce88 mov r4, r8                                        |     r4 = r8;
    0x0004ce8a blx 0x64bc                                        |     r0 = HMAC_Init_ex ();
    0x0004ce8e lsls r3, r0, 3                                    |     r3 = r0 << 3;
    0x0004ce90 mov r7, r8                                        |     r7 = r8;
    0x0004ce92 mov sl, r0                                        |     sl = r0;
    0x0004ce94 adds r3, 1                                        |     r3++;
    0x0004ce96 str r3, [sp, 0x10]                                |     var_10h = r3;
    0x0004ce98 lsls r3, r0, 2                                    |     r3 = r0 << 2;
    0x0004ce9a str r3, [sp, 0x14]                                |     var_14h = r3;
                                                                 | label_3:
    0x0004ce9c ldr r0, [sp, 0x30]                                |     r0 = var_30h;
    0x0004ce9e blx 0x6338                                        |     r0 = fcn_00006338 ();
    0x0004cea2 mov fp, r0                                        |     
    0x0004cea4 cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x0004cea6 beq 0x4cf0e                                       |         goto label_25;
                                                                 |     }
    0x0004cea8 cmp r0, 0x64                                      |     
                                                                 |     if (r0 == 0x64) {
    0x0004ceaa beq 0x4cf14                                       |         goto label_26;
                                                                 |     }
    0x0004ceac eor r4, r4, 1                                     |     r4 ^= 1;
    0x0004ceb0 cmp r0, 0x65                                      |     
    0x0004ceb2 ite ne                                            |     
                                                                 |     if (r0 == 0x65) {
    0x0004ceb4 movne r4, 0                                       |         r4 = 0;
                                                                 |     }
                                                                 |     if (r0 != 0x65) {
    0x0004ceb6 andeq r4, r4, 1                                   |         r4 &= 1;
                                                                 |     }
    0x0004ceba cmp r4, 0                                         |     
                                                                 |     if (r4 != 0) {
    0x0004cebc bne 0x4cf58                                       |         goto label_27;
                                                                 |     }
                                                                 | label_4:
    0x0004cebe ldr r4, [sp, 0x30]                                |     r4 = var_30h;
    0x0004cec0 ldrd r2, r1, [sp, 0x1c]                           |     __asm ("ldrd r2, r1, [var_1ch]");
    0x0004cec4 ldr r3, [r4, 0x28]                                |     r3 = *((r4 + 0x28));
    0x0004cec6 cmp r3, r1                                        |     
    0x0004cec8 it ne                                             |     
                                                                 |     if (r3 != r1) {
    0x0004ceca cmpne r3, r2                                      |         __asm ("cmpne r3, r2");
                                                                 |     }
                                                                 |     if (r3 == r1) {
    0x0004cecc beq.w 0x4d014                                     |         goto label_28;
                                                                 |     }
                                                                 | label_9:
    0x0004ced0 mov r0, r4                                        |     r0 = r4;
    0x0004ced2 bl 0x103f4                                        |     fcn_000103f4 (r0);
    0x0004ced6 ldr r4, [sp, 0x2c]                                |     r4 = var_2ch;
    0x0004ced8 movs r3, 0                                        |     r3 = 0;
    0x0004ceda ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x0004cedc str r3, [sp, 0x30]                                |     var_30h = r3;
    0x0004cede ldrb r3, [r4]                                     |     r3 = *(r4);
    0x0004cee0 add r3, r2                                        |     r3 += r2;
    0x0004cee2 ldrb.w r3, [r3, 0x40]                             |     r3 = *((r3 + 0x40));
    0x0004cee6 lsls r2, r3, 0x1f                                 |     r2 = r3 << 0x1f;
                                                                 |     if (r2 >= r3) {
    0x0004cee8 bpl 0x4cefc                                       |         goto label_29;
                                                                 |     }
    0x0004ceea ldr r2, [pc, 0x1f8]                               |     
    0x0004ceec add r2, pc                                        |     r2 = 0x99fd6;
                                                                 |     do {
    0x0004ceee ldrb r3, [r4, 1]!                                 |         r3 = *((r4 += 1));
    0x0004cef2 add r3, r2                                        |         r3 += r2;
    0x0004cef4 ldrb.w r3, [r3, 0x40]                             |         r3 = *((r3 + 0x40));
    0x0004cef8 lsls r3, r3, 0x1f                                 |         r3 <<= 0x1f;
    0x0004cefa bmi 0x4ceee                                       |         
                                                                 |     } while (r3 < r3);
                                                                 | label_29:
    0x0004cefc mov r1, r8                                        |     r1 = r8;
    0x0004cefe mov r0, sb                                        |     r0 = sb;
    0x0004cf00 bl 0xe12c                                         |     fcn_0000e12c (r0, r1);
    0x0004cf04 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x0004cf06 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004cf08 beq.w 0x4cd9a                                     |         goto label_1;
                                                                 |     }
    0x0004cf0c b 0x4ce32                                         |     goto label_2;
                                                                 | label_25:
    0x0004cf0e cmp r0, 0x64                                      |     
                                                                 |     if (r0 == 0x64) {
    0x0004cf10 beq 0x4ce9c                                       |         goto label_3;
                                                                 |     }
    0x0004cf12 b 0x4cebe                                         |     goto label_4;
                                                                 |     if (r4 == 0) {
                                                                 | label_26:
    0x0004cf14 cbz r4, 0x4cf60                                   |         goto label_30;
                                                                 |     }
    0x0004cf16 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0004cf18 cmp.w sl, 0                                       |     
    0x0004cf1c add.w r7, r8, r3                                  |     r7 = r8 + r3;
                                                                 |     if (sl <= 0) {
    0x0004cf20 ble 0x4cfee                                       |         goto label_31;
                                                                 |     }
                                                                 | label_16:
    0x0004cf22 movs r4, 0                                        |     r4 = 0;
    0x0004cf24 b 0x4cf2c                                         |     
                                                                 |     while (r0 != 0) {
                                                                 | label_5:
    0x0004cf26 adds r4, 1                                        |         r4++;
    0x0004cf28 cmp sl, r4                                        |         
                                                                 |         if (sl <= r4) {
    0x0004cf2a ble 0x4cfee                                       |             goto label_31;
                                                                 |         }
    0x0004cf2c ldr r0, [sp, 0x30]                                |         r0 = var_30h;
    0x0004cf2e mov r1, r4                                        |         r1 = r4;
    0x0004cf30 blx 0x5d9c                                        |         r0 = fcn_00005d9c ();
    0x0004cf34 mov r5, r0                                        |         r5 = r0;
    0x0004cf36 str.w r0, [r7, r4, lsl 2]                         |         __asm ("str.w r0, [r7, r4, lsl 2]");
    0x0004cf3a cmp r0, 0                                         |         
    0x0004cf3c bne 0x4cf26                                       |         
                                                                 |     }
    0x0004cf3e ldr r0, [sp, 0x30]                                |     r0 = var_30h;
    0x0004cf40 mov r1, r4                                        |     r1 = r4;
    0x0004cf42 blx 0x6194                                        |     r0 = fcn_00006194 ();
    0x0004cf46 cmp r0, 5                                         |     
                                                                 |     if (r0 == 5) {
    0x0004cf48 beq 0x4cf26                                       |         goto label_5;
                                                                 |     }
    0x0004cf4a movs r3, 1                                        |     r3 = 1;
    0x0004cf4c mov r4, r5                                        |     r4 = r5;
    0x0004cf4e strb.w r3, [sb, 0x40]                             |     *((sb + 0x40)) = r3;
    0x0004cf52 movs r3, 0x64                                     |     r3 = 0x64;
    0x0004cf54 str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x0004cf56 b 0x4ce42                                         |     goto label_6;
                                                                 | label_27:
    0x0004cf58 ldr.w r3, [sb, 0x18]                              |     r3 = *((sb + 0x18));
    0x0004cf5c lsls r1, r3, 0x17                                 |     r1 = r3 << 0x17;
                                                                 |     if (r1 >= r3) {
    0x0004cf5e bpl 0x4cebe                                       |         goto label_4;
                                                                 |     }
                                                                 | label_30:
    0x0004cf60 ldr r1, [sp, 0x10]                                |     r1 = var_10h;
    0x0004cf62 mov r0, sb                                        |     r0 = sb;
    0x0004cf64 bl 0xd3a0                                         |     r0 = fcn_0000d3a0 (r0, r1);
    0x0004cf68 mov r8, r0                                        |     r8 = r0;
    0x0004cf6a cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004cf6c beq 0x4d000                                       |         goto label_32;
                                                                 |     }
    0x0004cf6e ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x0004cf70 movs r1, 0                                        |     r1 = 0;
    0x0004cf72 blx 0x5fcc                                        |     fcn_00005fcc ();
    0x0004cf76 cmp.w sl, 0                                       |     
                                                                 |     if (sl <= 0) {
    0x0004cf7a ble 0x4cfe2                                       |         goto label_33;
                                                                 |     }
    0x0004cf7c sub.w r5, r8, 4                                   |     r5 = r8 - 4;
    0x0004cf80 movs r4, 0                                        |     r4 = 0;
                                                                 |     do {
    0x0004cf82 mov r1, r4                                        |         r1 = r4;
    0x0004cf84 ldr r0, [sp, 0x30]                                |         r0 = var_30h;
    0x0004cf86 adds r4, 1                                        |         r4++;
    0x0004cf88 blx 0x65d0                                        |         fcn_000065d0 ();
    0x0004cf8c cmp sl, r4                                        |         
    0x0004cf8e str r0, [r5, 4]!                                  |         *((r5 += 4)) = r0;
    0x0004cf92 bne 0x4cf82                                       |         
                                                                 |     } while (sl != r4);
    0x0004cf94 cmp.w fp, 0x64                                    |     
                                                                 |     if (fp == 0x64) {
    0x0004cf98 beq.w 0x4d0ca                                     |         goto label_34;
                                                                 |     }
                                                                 | label_7:
    0x0004cf9c ldr r0, [sp, 8]                                   |     r0 = var_8h;
    0x0004cf9e mov r3, r8                                        |     r3 = r8;
    0x0004cfa0 mov r2, r7                                        |     r2 = r7;
    0x0004cfa2 mov r1, sl                                        |     r1 = sl;
    0x0004cfa4 blx r6                                            |     r0 = uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0004cfa6 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004cfa8 beq 0x4cebe                                       |         goto label_4;
                                                                 |     }
                                                                 | label_8:
    0x0004cfaa ldr r4, [sp, 0x30]                                |     r4 = var_30h;
    0x0004cfac movw r1, 0xda3                                    |     
    0x0004cfb0 movw r3, 0x2973                                   |     
    0x0004cfb4 movt r1, 0xbdf2                                   |     r1 = 0xbdf20da3;
    0x0004cfb8 movt r3, 0x519c                                   |     r3 = 0x519c2973;
    0x0004cfbc ldr r2, [r4, 0x28]                                |     r2 = *((r4 + 0x28));
    0x0004cfbe cmp r2, r3                                        |     
    0x0004cfc0 it ne                                             |     
                                                                 |     if (r2 != r3) {
    0x0004cfc2 cmpne r2, r1                                      |         __asm ("cmpne r2, r1");
                                                                 |     }
                                                                 |     if (r2 == r3) {
    0x0004cfc4 beq 0x4d09c                                       |         goto label_35;
                                                                 |     }
                                                                 | label_14:
    0x0004cfc6 movs r5, 0                                        |     r5 = 0;
    0x0004cfc8 mov r0, r4                                        |     r0 = r4;
    0x0004cfca bl 0x103f4                                        |     fcn_000103f4 (r0);
    0x0004cfce mov r2, r5                                        |     r2 = r5;
    0x0004cfd0 movs r1, 4                                        |     r1 = 4;
    0x0004cfd2 mov r0, sb                                        |     r0 = sb;
    0x0004cfd4 str r5, [sp, 0x30]                                |     var_30h = r5;
    0x0004cfd6 bl 0x1c64c                                        |     fcn_0001c64c (r0, r1);
    0x0004cfda movs r3, 4                                        |     r3 = 4;
    0x0004cfdc mov r4, r5                                        |     r4 = r5;
    0x0004cfde str r3, [sp, 0xc]                                 |     var_ch = r3;
    0x0004cfe0 b 0x4ce42                                         |     goto label_6;
                                                                 | label_33:
    0x0004cfe2 cmp.w fp, 0x64                                    |     
                                                                 |     if (fp != 0x64) {
    0x0004cfe6 bne 0x4cf9c                                       |         goto label_7;
                                                                 |     }
    0x0004cfe8 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0004cfea add.w r7, r8, r3                                  |     r7 = r8 + r3;
                                                                 | label_31:
    0x0004cfee ldr r0, [sp, 8]                                   |     r0 = var_8h;
    0x0004cff0 mov r3, r8                                        |     r3 = r8;
    0x0004cff2 mov r2, r7                                        |     r2 = r7;
    0x0004cff4 mov r1, sl                                        |     r1 = sl;
    0x0004cff6 blx r6                                            |     r0 = uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0004cff8 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0004cffa bne 0x4cfaa                                       |         goto label_8;
                                                                 |     }
    0x0004cffc movs r4, 1                                        |     r4 = 1;
    0x0004cffe b 0x4ce9c                                         |     goto label_3;
                                                                 | label_32:
    0x0004d000 movw r4, 0xc0a                                    |     r4 = 0xc0a;
    0x0004d004 str.w fp, [sp, 0xc]                               |     __asm ("str.w fp, [var_ch]");
    0x0004d008 sub.w r4, fp, r4                                  |     r4 = fp - r4;
    0x0004d00c clz r4, r4                                        |     r4 &= r4;
    0x0004d010 lsrs r4, r4, 5                                    |     r4 >>= 5;
    0x0004d012 b 0x4ce42                                         |     goto label_6;
                                                                 | label_28:
    0x0004d014 mov r0, r4                                        |     r0 = r4;
    0x0004d016 bl 0x33f1c                                        |     fcn_00033f1c (r0);
    0x0004d01a str r0, [sp, 0xc]                                 |     var_ch = r0;
    0x0004d01c b 0x4ced0                                         |     goto label_9;
                                                                 | label_22:
    0x0004d01e mov r0, sb                                        |     r0 = sb;
    0x0004d020 blx 0x61ac                                        |     fcn_000061ac ();
    0x0004d024 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x0004d026 cmp r0, r3                                        |     
                                                                 |     if (r0 != r3) {
    0x0004d028 bne.w 0x4ce00                                     |         goto label_10;
                                                                 |     }
    0x0004d02c ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x0004d02e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004d030 beq.w 0x4ce08                                     |         goto label_11;
                                                                 |     }
    0x0004d034 mov r0, sb                                        |     r0 = sb;
    0x0004d036 blx 0x6544                                        |     r0 = fcn_00006544 ();
    0x0004d03a mov r1, r0                                        |     r1 = r0;
    0x0004d03c cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004d03e beq 0x4d0c2                                       |         goto label_36;
                                                                 |     }
    0x0004d040 ldrb r3, [r0]                                     |     r3 = *(r0);
    0x0004d042 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004d044 beq 0x4d0c2                                       |         goto label_36;
                                                                 |     }
    0x0004d046 mov r3, r0                                        |     r3 = r0;
                                                                 |     do {
    0x0004d048 ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x0004d04c cmp r2, 0                                         |         
    0x0004d04e bne 0x4d048                                       |         
                                                                 |     } while (r2 != 0);
    0x0004d050 subs r4, r3, r1                                   |     r4 = r3 - r1;
    0x0004d052 bic r4, r4, 0xc0000000                            |     r4 = BIT_MASK (r4, 0xc0000000);
    0x0004d056 adds r4, 1                                        |     r4++;
                                                                 |     do {
    0x0004d058 mov r0, r4                                        |         r0 = r4;
    0x0004d05a bl 0xd300                                         |         fcn_0000d300 (r0, r1, r2, r3, r4);
    0x0004d05e ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x0004d060 mov r5, r0                                        |         r5 = r0;
    0x0004d062 str r0, [r3]                                      |         *(r3) = r0;
                                                                 |         if (r0 != 0) {
    0x0004d064 cbz r0, 0x4d0b4                                   |             
    0x0004d066 mov r0, sb                                        |             r0 = sb;
    0x0004d068 blx 0x6544                                        |             fcn_00006544 ();
    0x0004d06c mov r2, r4                                        |             r2 = r4;
    0x0004d06e mov r1, r0                                        |             r1 = r0;
    0x0004d070 mov r0, r5                                        |             r0 = r5;
    0x0004d072 blx 0x6214                                        |             fcn_00006214 ();
    0x0004d076 b 0x4ce08                                         |             goto label_11;
                                                                 | label_18:
    0x0004d078 ldr r4, [pc, 0x6c]                                |             
    0x0004d07a add r4, pc                                        |             r4 = 0x9a166;
    0x0004d07c b 0x4cd6e                                         |             goto label_12;
                                                                 | label_17:
    0x0004d07e blx 0x5fe8                                        |             fcn_00005fe8 ();
    0x0004d082 ldr r1, [pc, 0x68]                                |             
    0x0004d084 movw r2, 0x85d2                                   |             
    0x0004d088 add.w r3, r0, 0x14                                |             r3 = r0 + 0x14;
    0x0004d08c movt r2, 1                                        |             r2 = 0x185d2;
    0x0004d090 movs r0, 0x15                                     |             r0 = 0x15;
    0x0004d092 add r1, pc                                        |             r1 = 0x9a184;
    0x0004d094 str r0, [sp, 0xc]                                 |             var_ch = r0;
    0x0004d096 blx 0x6820                                        |             fcn_00006820 ();
    0x0004d09a b 0x4ce10                                         |             goto label_13;
                                                                 | label_35:
    0x0004d09c mov r0, r4                                        |             r0 = r4;
    0x0004d09e bl 0x33f1c                                        |             fcn_00033f1c (r0);
    0x0004d0a2 b 0x4cfc6                                         |             goto label_14;
                                                                 | label_24:
    0x0004d0a4 mov r0, r5                                        |             r0 = r5;
    0x0004d0a6 bl 0x33f1c                                        |             fcn_00033f1c (r0);
    0x0004d0aa b 0x4ce62                                         |             goto label_15;
                                                                 | label_19:
    0x0004d0ac mov r4, r3                                        |             r4 = r3;
    0x0004d0ae mov r8, r3                                        |             r8 = r3;
    0x0004d0b0 str r3, [sp, 0xc]                                 |             var_ch = r3;
    0x0004d0b2 b 0x4ce42                                         |             goto label_6;
                                                                 |         }
    0x0004d0b4 mov r2, r0                                        |         r2 = r0;
    0x0004d0b6 movs r1, 7                                        |         r1 = 7;
    0x0004d0b8 mov r0, sb                                        |         r0 = sb;
    0x0004d0ba str r1, [sp, 0xc]                                 |         var_ch = r1;
    0x0004d0bc bl 0x1c64c                                        |         fcn_0001c64c (r0, r1);
    0x0004d0c0 b 0x4ce08                                         |         goto label_11;
                                                                 | label_36:
    0x0004d0c2 movs r4, 1                                        |         r4 = 1;
    0x0004d0c4 b 0x4d058                                         |         
                                                                 |     } while (1);
                                                                 | label_23:
    0x0004d0c6 blx 0x6498                                        |     fcn_00006498 ();
                                                                 | label_34:
    0x0004d0ca ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0004d0cc add.w r7, r8, r3                                  |     r7 = r8 + r3;
    0x0004d0d0 b 0x4cf22                                         |     goto label_16;
                                                                 | }


r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x15f64).
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-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x1639c */
                                                             | #include <stdint.h>
                                                             |  
                                                             | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                             |  
    ; (fcn) sym.sqlite3_randomness ()                        | void sqlite3_randomness (int16_t arg1, int16_t arg2) {
                                                             |     int16_t var_0h;
                                                             |     int32_t var_0h_2;
                                                             |     int16_t var_ch;
                                                             |     int16_t var_3h;
                                                             |     int16_t var_4h;
                                                             |     int16_t var_104h;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
    0x0001639c ldr r3, [pc, 0x15c]                           |     
    0x0001639e push.w {r4, r5, r6, r7, r8, sb, sl, lr}       |     
    0x000163a2 mov sb, r1                                    |     sb = r1;
    0x000163a4 ldr r1, [pc, 0x158]                           |     
    0x000163a6 sub sp, 0x108                                 |     
    0x000163a8 add r3, pc                                    |     r3 = 0x2c8a8;
    0x000163aa mov r5, r0                                    |     r5 = r0;
    0x000163ac ldr r2, [pc, 0x154]                           |     r2 = *(0x16504);
    0x000163ae add r1, pc                                    |     r1 = 0x2c8b2;
    0x000163b0 ldr r6, [r3, 4]                               |     r6 = *(0x2c8ac);
    0x000163b2 ldr r2, [r1, r2]                              |     
    0x000163b4 ldr r2, [r2]                                  |     r2 = *(0x2c8b2);
    0x000163b6 str r2, [sp, 0x104]                           |     var_104h = r2;
    0x000163b8 mov.w r2, 0                                   |     r2 = 0;
                                                             |     if (r6 != 0) {
    0x000163bc cbz r6, 0x163c6                               |         
    0x000163be ldr r3, [r3, 0x4c]                            |         r3 = *((r3 + 0x4c));
    0x000163c0 movs r0, 5                                    |         r0 = 5;
    0x000163c2 blx r3                                        |         r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x000163c4 mov r6, r0                                    |         r6 = r0;
                                                             |     }
    0x000163c6 mov r0, r6                                    |     r0 = r6;
    0x000163c8 blx 0x6810                                    |     fcn_00006810 ();
    0x000163cc cmp r5, 0                                     |     
                                                             |     if (r5 <= 0) {
    0x000163ce ble.w 0x164d8                                 |         goto label_2;
                                                             |     }
    0x000163d2 ldr.w r8, [pc, 0x134]                         |     r8 = *(0x00016508);
    0x000163d6 add r8, pc                                    |     r8 += pc;
    0x000163d8 ldrb.w r7, [r8, 0x214]                        |     r7 = *((r8 + 0x214));
    0x000163dc cmp r7, 0                                     |     
                                                             |     if (r7 == 0) {
    0x000163de beq 0x16468                                   |         goto label_3;
                                                             |     }
    0x000163e0 ldrb.w r2, [r8, 0x216]                        |     r2 = *((r8 + 0x216));
                                                             | label_0:
    0x000163e4 ldr.w ip, [pc, 0x124]                         |     
    0x000163e8 mov r0, sb                                    |     r0 = sb;
    0x000163ea add sb, r5                                    |     sb += r5;
    0x000163ec add ip, pc                                    |     ip = 0x2c8fc;
    0x000163ee ldrb.w sl, [ip, 0x215]                        |     sl = *((ip + 0x215));
    0x000163f2 add.w sl, sl, 1                               |     sl++;
    0x000163f6 uxtb.w sl, sl                                 |     sl = (int8_t) sl;
    0x000163fa sub.w r8, sl, r0                              |     r8 = sl - r0;
                                                             |     do {
    0x000163fe add.w r3, r0, r8                              |         r3 = r0 + r8;
    0x00016402 uxtb r3, r3                                   |         r3 = (int8_t) r3;
    0x00016404 add r3, ip                                    |         r3 += ip;
    0x00016406 ldrb.w r7, [r3, 0x217]                        |         r7 = *((r3 + 0x217));
    0x0001640a add r2, r7                                    |         r2 += r7;
    0x0001640c uxtb r2, r2                                   |         r2 = (int8_t) r2;
    0x0001640e add.w lr, ip, r2                              |         lr = ip + r2;
    0x00016412 ldrb.w r4, [lr, 0x217]                        |         r4 = *((lr + 0x217));
    0x00016416 strb.w r4, [r3, 0x217]                        |         *((r3 + 0x217)) = r4;
    0x0001641a strb.w r7, [lr, 0x217]                        |         *((lr + 0x217)) = r7;
    0x0001641e ldrb.w r1, [r3, 0x217]                        |         r1 = *((r3 + 0x217));
    0x00016422 add r1, r7                                    |         r1 += r7;
    0x00016424 uxtb r1, r1                                   |         r1 = (int8_t) r1;
    0x00016426 add r1, ip                                    |         r1 += ip;
    0x00016428 ldrb.w r1, [r1, 0x217]                        |         r1 = *((r1 + 0x217));
    0x0001642c strb r1, [r0], 1                              |         *(r0) = r1;
                                                             |         r0++;
    0x00016430 cmp r0, sb                                    |         
    0x00016432 bne 0x163fe                                   |         
                                                             |     } while (r0 != sb);
    0x00016434 strb.w r2, [ip, 0x216]                        |     *((ip + 0x216)) = r2;
    0x00016438 subs r5, 1                                    |     r5--;
    0x0001643a ldr r2, [pc, 0xd4]                            |     
    0x0001643c add sl, r5                                    |     sl += r5;
    0x0001643e strb.w r4, [r3, 0x217]                        |     *((r3 + 0x217)) = r4;
    0x00016442 ldr r3, [pc, 0xc0]                            |     r3 = *(0x16506);
    0x00016444 add r2, pc                                    |     r2 = 0x2c95a;
    0x00016446 strb.w r7, [lr, 0x217]                        |     *((lr + 0x217)) = r7;
    0x0001644a strb.w sl, [ip, 0x215]                        |     *((ip + 0x215)) = sl;
    0x0001644e ldr r3, [r2, r3]                              |     r3 = *(0x2c95a);
    0x00016450 ldr r2, [r3]                                  |     r2 = *(0x2c95a);
    0x00016452 ldr r3, [sp, 0x104]                           |     r3 = var_104h;
    0x00016454 eors r2, r3                                   |     r2 ^= r3;
    0x00016456 mov.w r3, 0                                   |     r3 = 0;
                                                             |     if (r2 != r3) {
    0x0001645a bne 0x164f6                                   |         goto label_4;
                                                             |     }
                                                             | label_1:
    0x0001645c mov r0, r6                                    |     r0 = r6;
    0x0001645e add sp, 0x108                                 |     
    0x00016460 pop.w {r4, r5, r6, r7, r8, sb, sl, lr}        |     
    0x00016464 b.w 0x63d8                                    |     void (*0x63d8)() ();
                                                             | label_3:
    0x00016468 mov r0, r7                                    |     r0 = r7;
    0x0001646a strb.w r7, [r8, 0x216]                        |     *((r8 + 0x216)) = r7;
    0x0001646e strb.w r7, [r8, 0x215]                        |     *((r8 + 0x215)) = r7;
    0x00016472 blx 0x6310                                    |     fcn_00006310 ();
    0x00016476 add r2, sp, 4                                 |     r2 += var_4h;
    0x00016478 ldr r3, [r0, 0x38]                            |     r3 = *((r0 + 0x38));
    0x0001647a mov.w r1, 0x100                               |     r1 = 0x100;
    0x0001647e blx r3                                        |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
    0x00016480 addw ip, r8, 0x216                            |     __asm ("addw ip, r8, aav.0x000000ff");
    0x00016484 mov r3, r7                                    |     r3 = r7;
    0x00016486 mov r2, ip                                    |     r2 = ip;
                                                             |     do {
    0x00016488 strb r3, [r2, 1]!                             |         *((r2 += 1)) = r3;
    0x0001648c adds r3, 1                                    |         r3++;
    0x0001648e cmp.w r3, 0x100                               |         
    0x00016492 bne 0x16488                                   |         
                                                             |     } while (r3 != 0x100);
    0x00016494 ldr.w lr, [pc, 0x7c]                          |     
    0x00016498 add.w r7, sp, 3                               |     r7 += var_3h;
    0x0001649c add lr, pc                                    |     lr = 0x2c9b4;
    0x0001649e ldrb.w r2, [lr, 0x216]                        |     r2 = *((lr + 0x216));
    0x000164a2 addw r8, lr, 0x316                            |     __asm ("addw r8, lr, aav.0x000000ff");
                                                             |     do {
    0x000164a6 ldrb r1, [ip, 1]!                             |         r1 = *((ip += 1));
    0x000164aa ldrb r3, [r7, 1]!                             |         r3 = var_4h;
    0x000164ae cmp r8, ip                                    |         
    0x000164b0 add r3, r1                                    |         r3 += r1;
    0x000164b2 add r3, r2                                    |         r3 += r2;
    0x000164b4 uxtb r2, r3                                   |         r2 = (int8_t) r3;
    0x000164b6 add.w r3, lr, r2                              |         r3 = lr + r2;
    0x000164ba ldrb.w r0, [r3, 0x217]                        |         r0 = *((r3 + 0x217));
    0x000164be strb.w r1, [r3, 0x217]                        |         *((r3 + 0x217)) = r1;
    0x000164c2 strb.w r0, [ip]                               |         *(ip) = r0;
    0x000164c6 bne 0x164a6                                   |         
                                                             |     } while (r8 != ip);
    0x000164c8 strb.w r1, [r3, 0x217]                        |     *((r3 + 0x217)) = r1;
    0x000164cc movs r3, 1                                    |     r3 = 1;
    0x000164ce strb.w r0, [lr, 0x316]                        |     *((lr + 0x316)) = r0;
    0x000164d2 strb.w r3, [lr, 0x214]                        |     *((lr + 0x214)) = r3;
    0x000164d6 b 0x163e4                                     |     goto label_0;
                                                             | label_2:
    0x000164d8 ldr r3, [pc, 0x3c]                            |     
    0x000164da movs r2, 0                                    |     r2 = 0;
    0x000164dc add r3, pc                                    |     r3 = 0x2c9f8;
    0x000164de strb.w r2, [r3, 0x214]                        |     *((r3 + 0x214)) = r2;
    0x000164e2 ldr r2, [pc, 0x38]                            |     
    0x000164e4 ldr r3, [pc, 0x1c]                            |     r3 = *(0x16504);
    0x000164e6 add r2, pc                                    |     r2 = 0x2ca08;
    0x000164e8 ldr r3, [r2, r3]                              |     r3 = *(0x2ca08);
    0x000164ea ldr r2, [r3]                                  |     r2 = *(0x2ca08);
    0x000164ec ldr r3, [sp, 0x104]                           |     r3 = var_104h;
    0x000164ee eors r2, r3                                   |     r2 ^= r3;
    0x000164f0 mov.w r3, 0                                   |     r3 = 0;
                                                             |     if (r2 == r3) {
    0x000164f4 beq 0x1645c                                   |         goto label_1;
                                                             |     }
                                                             | label_4:
    0x000164f6 blx 0x6498                                    |     fcn_00006498 ();
    0x000164fa nop                                           |     
    0x000164fc adds r4, r3, 1                                |     r4 = r3 + 1;
    0x000164fe movs r6, r0                                   |     r6 = r0;
    0x00016500 adds r2, r5, r2                               |     r2 = r5 + r2;
    0x00016502 movs r6, r0                                   |     r6 = r0;
    0x00016504 lsls r0, r1, 0xe                              |     r0 = r1 << 0xe;
    0x00016506 movs r0, r0                                   |     
    0x00016508 cmp r1, 0xde                                  |     
    0x0001650a movs r6, r0                                   |     r6 = r0;
    0x0001650c cmp r1, 0xc8                                  |     
    0x0001650e movs r6, r0                                   |     r6 = r0;
    0x00016510 adds r4, r2, r0                               |     r4 = r2 + r0;
    0x00016512 movs r6, r0                                   |     r6 = r0;
    0x00016514 cmp r1, 0x18                                  |     
    0x00016516 movs r6, r0                                   |     r6 = r0;
    0x00016518 cmp r0, 0xd8                                  |     
    0x0001651a movs r6, r0                                   |     r6 = r0;
    0x0001651c asrs r2, r6, 0x1d                             |     r2 = r6 >> 0x1d;
    0x0001651e movs r6, r0                                   |     r6 = r0;
    0x00016520 ldr r2, [pc, 0x54]                            |     
    0x00016522 ldr r3, [pc, 0x58]                            |     r3 = *(0x1657e);
    0x00016524 push {r4, lr}                                 |     
    0x00016526 sub sp, 0x10                                  |     
    0x00016528 add r2, pc                                    |     r2 = 0x2caa4;
    0x0001652a mov r4, r0                                    |     r4 = r0;
    0x0001652c mov r1, sp                                    |     r1 = sp;
    0x0001652e movs r0, 8                                    |     r0 = 8;
    0x00016530 ldr r3, [r2, r3]                              |     
    0x00016532 ldr r3, [r3]                                  |     r3 = *(0x2caa4);
    0x00016534 str r3, [sp, 0xc]                             |     var_ch = r3;
    0x00016536 mov.w r3, 0                                   |     r3 = 0;
    0x0001653a blx 0x67ac                                    |     fcn_000067ac ();
    0x0001653e ldrd r2, r3, [sp]                             |     __asm ("ldrd r2, r3, [sp]");
    0x00016542 cmp r3, 0                                     |     
                                                             |     if (r3 < 0) {
    0x00016544 bge 0x16554                                   |         
    0x00016546 rsbs r2, r2, 0                                |         r2 -= ;
    0x00016548 bic r3, r3, 0x80000000                        |         r3 = BIT_MASK (r3, 0x80000000);
    0x0001654c sbc.w r3, r3, r3, lsl 1                       |         __asm ("sbc.w r3, r3, r3, lsl 1");
    0x00016550 strd r2, r3, [sp]                             |         __asm ("strd r2, r3, [sp]");
                                                             |     }
    0x00016554 mov r0, r4                                    |     r0 = r4;
    0x00016556 blx 0x62ac                                    |     fcn_000062ac ();
    0x0001655a ldr r2, [pc, 0x24]                            |     
    0x0001655c ldr r3, [pc, 0x1c]                            |     r3 = *(0x1657c);
    0x0001655e add r2, pc                                    |     r2 = 0x2cae4;
    0x00016560 ldr r3, [r2, r3]                              |     r3 = *(0x2cae4);
    0x00016562 ldr r2, [r3]                                  |     r2 = *(0x2cae4);
    0x00016564 ldr r3, [sp, 0xc]                             |     r3 = var_ch;
    0x00016566 eors r2, r3                                   |     r2 ^= r3;
    0x00016568 mov.w r3, 0                                   |     r3 = 0;
                                                             |     if (r2 == r3) {
    0x0001656c bne 0x16572                                   |         
    0x0001656e add sp, 0x10                                  |         
    0x00016570 pop {r4, pc}                                  |         
                                                             |     }
    0x00016572 blx 0x6498                                    |     fcn_00006498 ();
    0x00016576 nop                                           |     
    0x00016578 asrs r0, r6, 0x1c                             |     r0 = r6 >> 0x1c;
    0x0001657a movs r6, r0                                   |     r6 = r0;
    0x0001657c lsls r0, r1, 0xe                              |     r0 = r1 << 0xe;
    0x0001657e movs r0, r0                                   |     
    0x00016580 asrs r2, r7, 0x1b                             |     r2 = r7 >> 0x1b;
    0x00016582 movs r6, r0                                   |     r6 = r0;
                                                             | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x54168 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) sym.sqlite3_step ()                                  | void sqlite3_step (int16_t arg_6h, int16_t arg_10h, uint32_t arg1) {
                                                                 |     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_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_124h;
                                                                 |     r0 = arg1;
    0x00054168 bhs 0x18924ec                                     |     
    0x0005416c ldr.w r3, [pc, 0xa60]                             |     
    0x00054170 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00054174 sub sp, 0x12c                                     |     
    0x00054176 add r2, pc                                        |     r2 += pc;
    0x00054178 ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x0005417a ldr r3, [r3]                                      |     r3 = *(0x54bd0);
    0x0005417c str r3, [sp, 0x124]                               |     var_124h = r3;
    0x0005417e mov.w r3, 0                                       |     r3 = 0;
    0x00054182 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00054184 beq.w 0x547f2                                     |         goto label_34;
                                                                 |     }
    0x00054188 ldr.w sb, [r0]                                    |     sb = *(r0);
    0x0005418c mov sl, r0                                        |     sl = r0;
    0x0005418e cmp.w sb, 0                                       |     
                                                                 |     if (sb == 0) {
    0x00054192 beq.w 0x5481a                                     |         goto label_35;
                                                                 |     }
    0x00054196 ldr.w r0, [sb, 0xc]                               |     r0 = *((sb + 0xc));
    0x0005419a movw r4, 0xda3                                    |     
    0x0005419e blx 0x6810                                        |     fcn_00006810 ();
    0x000541a2 ldr.w r3, [pc, 0xa30]                             |     
    0x000541a6 movw r2, 0x2973                                   |     
    0x000541aa movt r2, 0x519c                                   |     r2 = 0x519c2973;
    0x000541ae movt r4, 0xbdf2                                   |     r4 = 0xbdf20da3;
    0x000541b2 str r2, [sp, 0x18]                                |     var_18h = r2;
    0x000541b4 mov.w r8, 0x33                                    |     r8 = 0x33;
    0x000541b8 add r3, pc                                        |     
    0x000541ba movs r2, 0                                        |     r2 = 0;
    0x000541bc str r3, [sp, 0x28]                                |     var_28h = r3;
    0x000541be mov r6, sl                                        |     r6 = sl;
    0x000541c0 ldr.w r3, [pc, 0xa14]                             |     r3 = *(0x00054bd8);
    0x000541c4 mov fp, r4                                        |     
    0x000541c6 add r3, pc                                        |     r3 = 0xfcf5c;
    0x000541c8 str r3, [sp, 0x2c]                                |     var_2ch = r3;
                                                                 |     do {
    0x000541ca ldr r1, [r6, 0x28]                                |         r1 = *((r6 + 0x28));
    0x000541cc ldrb.w r3, [r6, 0x59]                             |         r3 = *((r6 + 0x59));
    0x000541d0 cmp r1, fp                                        |         
    0x000541d2 bfi r3, r2, 3, 1                                  |         value_0 = BIT_MASK (3, 1);
                                                                 |         value_1 = r2 & value_0;
                                                                 |         value_0 = ~value_0;
                                                                 |         r3 &= value_0;
                                                                 |         r3 |= value_1;
    0x000541d6 strb.w r3, [r6, 0x59]                             |         *((r6 + 0x59)) = r3;
                                                                 |         if (r1 != fp) {
    0x000541da beq 0x541e2                                       |             
    0x000541dc mov r0, r6                                        |             r0 = r6;
    0x000541de blx 0x5e48                                        |             fcn_00005e48 ();
                                                                 |         }
    0x000541e2 ldr r5, [r6]                                      |         r5 = *(r6);
    0x000541e4 ldrb.w r3, [r5, 0x40]                             |         r3 = *((r5 + 0x40));
    0x000541e8 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x000541ea bne.w 0x5455a                                     |             goto label_36;
                                                                 |         }
    0x000541ee ldr r3, [r6, 0x4c]                                |         r3 = *((r6 + 0x4c));
    0x000541f0 ldrb.w r2, [r6, 0x58]                             |         r2 = *((r6 + 0x58));
    0x000541f4 cmp r3, 0                                         |         
                                                                 |         if (r3 <= 0) {
    0x000541f6 ble.w 0x54508                                     |             goto label_37;
                                                                 |         }
                                                                 | label_3:
    0x000541fa lsls r3, r2, 0x1e                                 |         r3 = r2 << 0x1e;
                                                                 |         if (r3 != r2) {
    0x000541fc bne.w 0x543a2                                     |             goto label_38;
                                                                 |         }
    0x00054200 ldr.w r3, [r5, 0x98]                              |         r3 = *((r5 + 0x98));
    0x00054204 mov r0, r6                                        |         r0 = r6;
    0x00054206 adds r3, 1                                        |         r3++;
    0x00054208 str.w r3, [r5, 0x98]                              |         __asm ("str.w r3, [r5, 0x98]");
    0x0005420c bl 0x4d1a8                                        |         fcn_0004d1a8 (r0, r1, r2, r3, r4, r5, r6);
    0x00054210 ldr.w r3, [r5, 0x98]                              |         r3 = *((r5 + 0x98));
    0x00054214 cmp r0, 0x64                                      |         
    0x00054216 mov r4, r0                                        |         r4 = r0;
    0x00054218 add.w r3, r3, -1                                  |         r3 += -1;
    0x0005421c str.w r3, [r5, 0x98]                              |         __asm ("str.w r3, [r5, 0x98]");
                                                                 |         if (r0 != 0x64) {
    0x00054220 bne.w 0x54632                                     |             goto label_39;
                                                                 |         }
                                                                 | label_0:
    0x00054224 ldr r2, [r6, 0x50]                                |         r2 = *((r6 + 0x50));
                                                                 | label_14:
    0x00054226 ldr r7, [r6]                                      |         r7 = *(r6);
    0x00054228 str r4, [r5, 0x34]                                |         *((r5 + 0x34)) = r4;
    0x0005422a cmp r7, 0                                         |         
                                                                 |         if (r7 == 0) {
    0x0005422c beq.w 0x54504                                     |             goto label_40;
                                                                 |         }
                                                                 | label_1:
    0x00054230 movw r3, 0xc0a                                    |         r3 = 0xc0a;
    0x00054234 ldrb.w r1, [r7, 0x40]                             |         r1 = *((r7 + 0x40));
    0x00054238 subs r3, r2, r3                                   |         r3 = r2 - r3;
    0x0005423a clz r3, r3                                        |         r3 &= r3;
    0x0005423e lsrs r3, r3, 5                                    |         r3 >>= 5;
    0x00054240 cmp r1, 0                                         |         
    0x00054242 it ne                                             |         
                                                                 |         if (r1 == 0) {
    0x00054244 orrne r3, r3, 1                                   |             r3 |= 1;
                                                                 |         }
                                                                 |         if (r3 != 0) {
    0x00054248 cbz r3, 0x5425c                                   |             
    0x0005424a movs r2, 0                                        |             r2 = 0;
    0x0005424c movs r1, 7                                        |             r1 = 7;
    0x0005424e mov r0, r7                                        |             r0 = r7;
    0x00054250 bl 0x1c64c                                        |             fcn_0001c64c (r0, r1);
    0x00054254 movs r2, 7                                        |             r2 = 7;
    0x00054256 movs r3, 0                                        |             r3 = 0;
    0x00054258 strb.w r3, [r7, 0x40]                             |             *((r7 + 0x40)) = r3;
                                                                 |         }
    0x0005425c ldr r3, [r7, 0x38]                                |         r3 = *((r7 + 0x38));
                                                                 | label_2:
    0x0005425e ands r3, r2                                       |         r3 &= r2;
    0x00054260 cmp r3, 7                                         |         
    0x00054262 it eq                                             |         
                                                                 |         if (r3 != 7) {
    0x00054264 streq r3, [r6, 0x50]                              |             *((r6 + 0x50)) = r3;
                                                                 |         }
                                                                 | label_12:
    0x00054266 ldrb.w r3, [r6, 0x59]                             |         r3 = *((r6 + 0x59));
    0x0005426a lsls r1, r3, 0x1d                                 |         r1 = r3 << 0x1d;
                                                                 |         if (r1 < r3) {
    0x0005426c bpl 0x54278                                       |             
    0x0005426e sub.w r3, r4, 0x64                                |             r3 = r4 - 0x64;
    0x00054272 cmp r3, 1                                         |             
                                                                 |             if (r3 > 1) {
    0x00054274 bhi.w 0x54628                                     |                 goto label_41;
                                                                 |             }
                                                                 |         }
                                                                 | label_6:
    0x00054278 ldr r3, [r5, 0x38]                                |         r3 = *((r5 + 0x38));
    0x0005427a ands r4, r3                                       |         r4 &= r3;
    0x0005427c cmp r4, 0x11                                      |         
                                                                 |         if (r4 != 0x11) {
    0x0005427e bne.w 0x54bbe                                     |             goto label_42;
                                                                 |         }
    0x00054282 subs.w r8, r8, 1                                  |         r8--;
                                                                 |         if (r8 == r8) {
    0x00054286 beq.w 0x54826                                     |             goto label_43;
                                                                 |         }
    0x0005428a mov r0, r6                                        |         r0 = r6;
    0x0005428c blx 0x5ea4                                        |         fcn_00005ea4 ();
    0x00054290 ldr r5, [r6]                                      |         r5 = *(r6);
    0x00054292 movs r3, 0                                        |         r3 = 0;
    0x00054294 add r2, sp, 0x48                                  |         r2 += var_48h;
    0x00054296 mov r1, r0                                        |         r1 = r0;
    0x00054298 str r2, [sp, 4]                                   |         var_4h = r2;
    0x0005429a mov.w r2, -1                                      |         r2 = -1;
    0x0005429e mov r0, r5                                        |         r0 = r5;
    0x000542a0 str r3, [sp, 8]                                   |         var_8h = r3;
    0x000542a2 str r6, [sp]                                      |         *(sp) = r6;
    0x000542a4 bl 0x4cb04                                        |         r0 = fcn_0004cb04 (r0, r1, r2, r3, r4, r5, r6);
    0x000542a8 mov r4, r0                                        |         r4 = r0;
    0x000542aa cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x000542ac beq 0x54324                                       |             
    0x000542ae cmp r0, 7                                         |             
    0x000542b0 mov sl, r6                                        |             sl = r6;
    0x000542b2 itt eq                                            |             
                                                                 |             if (r0 != 7) {
    0x000542b4 moveq r3, 1                                       |                 r3 = 1;
                                                                 |             }
                                                                 |             if (r0 != 7) {
    0x000542b6 strbeq r3, [r5, 0x40]                             |                 *((r5 + 0x40)) = r3;
                                                                 |             }
    0x000542ba ldr.w r0, [sb, 0xe0]                              |             r0 = *((sb + 0xe0));
    0x000542be blx 0x5f0c                                        |             fcn_00005f0c ();
    0x000542c2 ldr r1, [r6, 0x2c]                                |             r1 = *((r6 + 0x2c));
    0x000542c4 mov r5, r0                                        |             r5 = r0;
    0x000542c6 mov r0, sb                                        |             r0 = sb;
    0x000542c8 bl 0xe12c                                         |             fcn_0000e12c (r0, r1);
    0x000542cc ldrb.w r3, [sb, 0x40]                             |             r3 = *((sb + 0x40));
    0x000542d0 cmp r3, 0                                         |             
                                                                 |             if (r3 == 0) {
    0x000542d2 beq.w 0x5482a                                     |                 goto label_44;
                                                                 |             }
    0x000542d6 movs r2, 0                                        |             r2 = 0;
    0x000542d8 movs r3, 7                                        |             r3 = 7;
    0x000542da str.w r2, [sl, 0x2c]                              |             __asm ("str.w r2, [sl, 0x2c]");
    0x000542de str.w r3, [sl, 0x50]                              |             __asm ("str.w r3, [sl, 0x50]");
                                                                 | label_4:
    0x000542e2 movs r1, 7                                        |             r1 = 7;
    0x000542e4 movs r2, 0                                        |             r2 = 0;
    0x000542e6 mov r0, sb                                        |             r0 = sb;
    0x000542e8 mov r4, r1                                        |             r4 = r1;
    0x000542ea bl 0x1c64c                                        |             fcn_0001c64c (r0, r1);
    0x000542ee movs r3, 0                                        |             r3 = 0;
    0x000542f0 strb.w r3, [sb, 0x40]                             |             *((sb + 0x40)) = r3;
                                                                 | label_5:
    0x000542f4 ldr.w r3, [sb, 0x38]                              |             r3 = *((sb + 0x38));
    0x000542f8 ldr.w r0, [sb, 0xc]                               |             r0 = *((sb + 0xc));
    0x000542fc ands r4, r3                                       |             r4 &= r3;
    0x000542fe blx 0x63dc                                        |             fcn_000063dc ();
                                                                 | label_20:
    0x00054302 ldr.w r2, [pc, 0x8d8]                             |             r2 = *(0x00054bdc);
    0x00054306 ldr.w r3, [pc, 0x8c8]                             |             r3 = *(0x54bd2);
    0x0005430a add r2, pc                                        |             r2 += pc;
    0x0005430c ldr r3, [r2, r3]                                  |             r3 = *((r2 + r3));
    0x0005430e ldr r2, [r3]                                      |             r2 = *(0x54bd2);
    0x00054310 ldr r3, [sp, 0x124]                               |             r3 = var_124h;
    0x00054312 eors r2, r3                                       |             r2 ^= r3;
    0x00054314 mov.w r3, 0                                       |             r3 = 0;
                                                                 |             if (r2 != r3) {
    0x00054318 bne.w 0x54bba                                     |                 goto label_45;
                                                                 |             }
    0x0005431c mov r0, r4                                        |             r0 = r4;
    0x0005431e add sp, 0x12c                                     |             
    0x00054320 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |             
                                                                 |         }
    0x00054324 ldr r5, [sp, 0x48]                                |         r5 = var_48h;
    0x00054326 add r7, sp, 0x50                                  |         r7 += var_50h;
    0x00054328 movs r2, 0xd0                                     |         r2 = 0xd0;
    0x0005432a mov r0, r7                                        |         r0 = r7;
    0x0005432c mov r1, r5                                        |         r1 = r5;
    0x0005432e blx 0x6214                                        |         fcn_00006214 ();
    0x00054332 movs r2, 0xd0                                     |         r2 = 0xd0;
    0x00054334 mov r1, r6                                        |         r1 = r6;
    0x00054336 mov r0, r5                                        |         r0 = r5;
    0x00054338 blx 0x6214                                        |         fcn_00006214 ();
    0x0005433c movs r2, 0xd0                                     |         r2 = 0xd0;
    0x0005433e mov r1, r7                                        |         r1 = r7;
    0x00054340 mov r0, r6                                        |         r0 = r6;
    0x00054342 blx 0x6214                                        |         fcn_00006214 ();
    0x00054346 ldr r3, [r5, 0x34]                                |         r3 = *((r5 + 0x34));
    0x00054348 mov r1, r6                                        |         r1 = r6;
    0x0005434a ldr r2, [r6, 0x34]                                |         r2 = *((r6 + 0x34));
    0x0005434c mov r0, r5                                        |         r0 = r5;
    0x0005434e str r2, [r5, 0x34]                                |         *((r5 + 0x34)) = r2;
    0x00054350 ldr r2, [r5, 0x30]                                |         r2 = *((r5 + 0x30));
    0x00054352 str r3, [r6, 0x34]                                |         *((r6 + 0x34)) = r3;
    0x00054354 ldr r3, [r6, 0x30]                                |         r3 = *((r6 + 0x30));
    0x00054356 str r3, [r5, 0x30]                                |         *((r5 + 0x30)) = r3;
    0x00054358 ldr.w r3, [r5, 0xa8]                              |         r3 = *((r5 + 0xa8));
    0x0005435c str r2, [r6, 0x30]                                |         *((r6 + 0x30)) = r2;
    0x0005435e ldr.w r2, [r6, 0xa8]                              |         r2 = *((r6 + 0xa8));
    0x00054362 str.w r2, [r5, 0xa8]                              |         __asm ("str.w r2, [r5, 0xa8]");
    0x00054366 str.w r3, [r6, 0xa8]                              |         __asm ("str.w r3, [r6, 0xa8]");
    0x0005436a ldrb.w r3, [r5, 0x59]                             |         r3 = *((r5 + 0x59));
    0x0005436e ldrb.w r2, [r6, 0x59]                             |         r2 = *((r6 + 0x59));
    0x00054372 ubfx r3, r3, 2, 1                                 |         r3 = (r3 >> 2) & ((1 << 1) - 1);
    0x00054376 bfi r2, r3, 2, 1                                  |         value_2 = BIT_MASK (2, 1);
                                                                 |         value_3 = r3 & value_2;
                                                                 |         value_2 = ~value_2;
                                                                 |         r2 &= value_2;
                                                                 |         r2 |= value_3;
    0x0005437a strb.w r2, [r6, 0x59]                             |         *((r6 + 0x59)) = r2;
    0x0005437e bl 0x10e88                                        |         fcn_00010e88 (r0, r1, r2, r3);
    0x00054382 ldr r3, [r5, 0x28]                                |         r3 = *((r5 + 0x28));
    0x00054384 ldr r2, [sp, 0x18]                                |         r2 = var_18h;
    0x00054386 str r4, [r5, 0x50]                                |         *((r5 + 0x50)) = r4;
    0x00054388 cmp r3, r2                                        |         
    0x0005438a it ne                                             |         
                                                                 |         if (r3 != r2) {
    0x0005438c cmpne r3, fp                                      |             __asm ("cmpne r3, fp");
                                                                 |         }
                                                                 |         if (r3 == r2) {
    0x0005438e beq.w 0x5464e                                     |             goto label_46;
                                                                 |         }
                                                                 | label_10:
    0x00054392 mov r0, r5                                        |         r0 = r5;
    0x00054394 bl 0x103f4                                        |         fcn_000103f4 (r0);
    0x00054398 mov r0, r6                                        |         r0 = r6;
    0x0005439a blx 0x5e48                                        |         fcn_00005e48 ();
    0x0005439e movs r2, 1                                        |         r2 = 1;
    0x000543a0 b 0x541ca                                         |         
                                                                 |     } while (1);
                                                                 | label_38:
    0x000543a2 ldr r7, [r6, 8]                                   |     r7 = *((r6 + 8));
    0x000543a4 movs r1, 8                                        |     r1 = 8;
    0x000543a6 ldr r3, [r6]                                      |     r3 = *(r6);
    0x000543a8 add.w r4, r7, 0x28                                |     r4 = r7 + 0x28;
    0x000543ac mov r0, r4                                        |     r0 = r4;
    0x000543ae str r3, [sp, 0x14]                                |     var_14h = r3;
    0x000543b0 bl 0xfff8                                         |     fcn_0000fff8 (r0, r1);
    0x000543b4 ldr r2, [r6, 0x50]                                |     r2 = *((r6 + 0x50));
    0x000543b6 movs r3, 0                                        |     r3 = 0;
    0x000543b8 str r3, [r6, 0x14]                                |     *((r6 + 0x14)) = r3;
    0x000543ba cmp r2, 7                                         |     
                                                                 |     if (r2 == 7) {
    0x000543bc beq.w 0x546ac                                     |         goto label_47;
                                                                 |     }
    0x000543c0 ldrb.w lr, [r6, 0x58]                             |     
    0x000543c4 ldr.w sl, [r6, 0x20]                              |     sl = *((r6 + 0x20));
    0x000543c8 and lr, lr, 3                                     |     lr &= 3;
    0x000543cc cmp.w lr, 1                                       |     
                                                                 |     if (lr == 1) {
    0x000543d0 beq.w 0x54670                                     |         goto label_48;
                                                                 |     }
    0x000543d4 mov ip, sl                                        |     
    0x000543d6 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x000543d8 strd r3, r3, [sp, 0x1c]                           |     __asm ("strd r3, r3, [var_1ch]");
                                                                 | label_13:
    0x000543dc ldr r3, [r6, 0x4c]                                |     r3 = *((r6 + 0x4c));
    0x000543de add.w r2, r3, r3, lsl 2                           |     r2 = r3 + (r3 << 2);
    0x000543e2 lsls r2, r2, 2                                    |     r2 <<= 2;
    0x000543e4 b 0x543fa                                         |     
                                                                 |     while (r0 < ip) {
    0x000543e6 cmp.w lr, 2                                       |         
                                                                 |         if (lr != 2) {
    0x000543ea bne.w 0x54576                                     |             goto label_49;
                                                                 |         }
    0x000543ee ldr r1, [r6, 4]                                   |         r1 = *((r6 + 4));
    0x000543f0 ldrb r1, [r1, r2]                                 |         r1 = *((r1 + r2));
    0x000543f2 adds r2, 0x14                                     |         r2 += 0x14;
    0x000543f4 cmp r1, 0x9e                                      |         
                                                                 |         if (r1 == 0x9e) {
    0x000543f6 beq.w 0x54576                                     |             goto label_49;
                                                                 |         }
    0x000543fa mov r0, r3                                        |         r0 = r3;
    0x000543fc adds r3, 1                                        |         r3++;
    0x000543fe cmp r0, ip                                        |         
    0x00054400 blt 0x543e6                                       |         
                                                                 |     }
    0x00054402 str r3, [r6, 0x4c]                                |     *((r6 + 0x4c)) = r3;
    0x00054404 movs r2, 0                                        |     r2 = 0;
    0x00054406 ldr.w r3, [r5, 0xac]                              |     r3 = *((r5 + 0xac));
    0x0005440a str r2, [r6, 0x50]                                |     *((r6 + 0x50)) = r2;
    0x0005440c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005440e beq.w 0x54656                                     |         goto label_50;
                                                                 |     }
    0x00054412 ldrb.w r3, [r5, 0x89]                             |     r3 = *((r5 + 0x89));
    0x00054416 movs r4, 0x65                                     |     r4 = 0x65;
                                                                 |     if (r3 != 0) {
    0x00054418 cbnz r3, 0x54482                                  |         goto label_9;
                                                                 |     }
                                                                 | label_8:
    0x0005441a ldr.w r3, [r6, 0xa8]                              |     r3 = *((r6 + 0xa8));
                                                                 |     if (r3 != 0) {
    0x0005441e cbz r3, 0x5447c                                   |         
    0x00054420 add r1, sp, 0x48                                  |         r1 += var_48h;
    0x00054422 ldr r0, [r5]                                      |         r0 = *(r5);
    0x00054424 bl 0x9b48                                         |         fcn_00009b48 (r0, r1, r2);
    0x00054428 ldr.w r3, [r6, 0x80]                              |         r3 = *((r6 + 0x80));
    0x0005442c ldr r7, [sp, 0x48]                                |         r7 = var_48h;
    0x0005442e ldr r2, [sp, 0x4c]                                |         r2 = var_4ch;
    0x00054430 subs r7, r7, r3                                   |         r7 -= r3;
    0x00054432 ldr.w r3, [r6, 0x84]                              |         r3 = *((r6 + 0x84));
    0x00054436 lsl.w r1, r7, 5                                   |         r1 = r7 << 5;
    0x0005443a sbc.w ip, r2, r3                                  |         __asm ("sbc.w ip, r2, r3");
    0x0005443e subs r1, r1, r7                                   |         r1 -= r7;
    0x00054440 lsl.w r0, ip, 5                                   |         r0 = ip << 5;
    0x00054444 orr.w r0, r0, r7, lsr 27                          |         r0 |= (r7 >> 27);
    0x00054448 sbc.w r0, r0, ip                                  |         __asm ("sbc.w r0, r0, ip");
    0x0005444c lsls r0, r0, 9                                    |         r0 <<= 9;
    0x0005444e orr.w r0, r0, r1, lsr 23                          |         r0 |= (r1 >> 23);
    0x00054452 lsls r1, r1, 9                                    |         r1 <<= 9;
    0x00054454 adds r1, r1, r7                                   |         r1 += r7;
    0x00054456 adc.w r0, ip, r0                                  |         __asm ("adc.w r0, ip, r0");
    0x0005445a lsls r2, r1, 6                                    |         r2 = r1 << 6;
    0x0005445c lsls r3, r0, 6                                    |         r3 = r0 << 6;
    0x0005445e subs r2, r2, r1                                   |         r2 -= r1;
    0x00054460 orr.w r3, r3, r1, lsr 26                          |         r3 |= (r1 >> 26);
    0x00054464 ldr.w r1, [r6, 0xa8]                              |         r1 = *((r6 + 0xa8));
    0x00054468 sbc.w r3, r3, r0                                  |         __asm ("sbc.w r3, r3, r0");
    0x0005446c adds r2, r2, r7                                   |         r2 += r7;
    0x0005446e ldr.w r0, [r5, 0xb0]                              |         r0 = *((r5 + 0xb0));
    0x00054472 adc.w r3, ip, r3                                  |         __asm ("adc.w r3, ip, r3");
    0x00054476 ldr.w r7, [r5, 0xac]                              |         r7 = *((r5 + 0xac));
    0x0005447a blx r7                                            |         uint32_t (*r7)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
                                                                 |     }
                                                                 | label_7:
    0x0005447c cmp r4, 0x65                                      |     
                                                                 |     if (r4 != 0x65) {
    0x0005447e bne.w 0x54224                                     |         goto label_0;
                                                                 |     }
                                                                 | label_9:
    0x00054482 ldr.w ip, [r5, 0x14]                              |     ip = *((r5 + 0x14));
    0x00054486 cmp.w ip, 0                                       |     
    0x0005448a ittt le                                           |     
                                                                 |     if (ip > 0) {
    0x0005448c movle r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (ip > 0) {
    0x0005448e movle r4, 0x65                                    |         r4 = 0x65;
                                                                 |     }
                                                                 |     if (ip > 0) {
    0x00054490 strle r3, [r6, 0x50]                              |         *((r6 + 0x50)) = r3;
                                                                 |     }
                                                                 |     if (ip <= 0) {
    0x00054492 ble.w 0x54662                                     |         goto label_51;
                                                                 |     }
                                                                 | label_11:
    0x00054496 movs r2, 0                                        |     r2 = 0;
    0x00054498 str r6, [sp, 0x14]                                |     var_14h = r6;
    0x0005449a mov r4, r2                                        |     r4 = r2;
    0x0005449c mov sl, r2                                        |     sl = r2;
                                                                 |     do {
    0x0005449e ldr r0, [r5, 0x10]                                |         r0 = *((r5 + 0x10));
    0x000544a0 lsls r1, r4, 4                                    |         r1 = r4 << 4;
    0x000544a2 adds r3, r0, r1                                   |         r3 = r0 + r1;
    0x000544a4 ldr r3, [r3, 4]                                   |         r3 = *((r3 + 4));
                                                                 |         if (r3 != 0) {
    0x000544a6 cbz r3, 0x544e8                                   |             
    0x000544a8 ldr r3, [r3, 4]                                   |             r3 = *((r3 + 4));
    0x000544aa ldr r3, [r3]                                      |             r3 = *(r3);
    0x000544ac ldr.w r6, [r3, 0xe0]                              |             r6 = *((r3 + 0xe0));
                                                                 |             if (r6 == 0) {
    0x000544b0 cbz r6, 0x544e8                                   |                 goto label_52;
                                                                 |             }
    0x000544b2 ldr.w r7, [r5, 0xcc]                              |             r7 = *((r5 + 0xcc));
    0x000544b6 ldr r3, [r6, 0xc]                                 |             r3 = *((r6 + 0xc));
    0x000544b8 str.w sl, [r6, 0xc]                               |             __asm ("str.w sl, [r6, 0xc]");
                                                                 |             if (r7 == 0) {
    0x000544bc cbz r7, 0x544e8                                   |                 goto label_52;
                                                                 |             }
    0x000544be cmp r3, 0                                         |             
    0x000544c0 ite le                                            |             
                                                                 |             if (r3 > 0) {
    0x000544c2 movle lr, 0                                       |                 lr = 0;
                                                                 |             }
                                                                 |             if (r3 > 0) {
    0x000544c6 mov.w lr, 1                                       |                 lr = 1;
                                                                 |             }
    0x000544ca cmp r2, 0                                         |             
    0x000544cc it ne                                             |             
                                                                 |             if (r2 == 0) {
    0x000544ce movne lr, 0                                       |                 lr = 0;
                                                                 |             }
    0x000544d2 cmp.w lr, 0                                       |             
                                                                 |             if (lr == 0) {
    0x000544d6 beq 0x544e8                                       |                 goto label_52;
                                                                 |             }
    0x000544d8 ldr r2, [r0, r1]                                  |             r2 = *((r0 + r1));
    0x000544da mov r1, r5                                        |             r1 = r5;
    0x000544dc ldr.w r0, [r5, 0xd0]                              |             r0 = *((r5 + 0xd0));
    0x000544e0 blx r7                                            |             uint32_t (*r7)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
    0x000544e2 ldr.w ip, [r5, 0x14]                              |             ip = *((r5 + 0x14));
    0x000544e6 mov r2, r0                                        |             r2 = r0;
                                                                 |         }
                                                                 | label_52:
    0x000544e8 adds r4, 1                                        |         r4++;
    0x000544ea cmp r4, ip                                        |         
    0x000544ec blt 0x5449e                                       |         
                                                                 |     } while (r4 < ip);
    0x000544ee ldr r6, [sp, 0x14]                                |     r6 = var_14h;
    0x000544f0 str r2, [r6, 0x50]                                |     *((r6 + 0x50)) = r2;
    0x000544f2 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000544f4 beq.w 0x54660                                     |         goto label_53;
                                                                 |     }
    0x000544f8 ldr r7, [r6]                                      |     r7 = *(r6);
    0x000544fa movs r4, 1                                        |     r4 = 1;
    0x000544fc str r4, [r5, 0x34]                                |     *((r5 + 0x34)) = r4;
    0x000544fe cmp r7, 0                                         |     
                                                                 |     if (r7 != 0) {
    0x00054500 bne.w 0x54230                                     |         goto label_1;
                                                                 |     }
                                                                 | label_40:
    0x00054504 movs r3, 0xff                                     |     r3 = 0xff;
    0x00054506 b 0x5425e                                         |     goto label_2;
                                                                 | label_37:
    0x00054508 lsls r1, r2, 0x1a                                 |     r1 = r2 << 0x1a;
                                                                 |     if (r1 < r2) {
    0x0005450a bmi.w 0x54618                                     |         goto label_54;
                                                                 |     }
    0x0005450e cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00054510 beq.w 0x541fa                                     |         goto label_3;
                                                                 |     }
    0x00054514 ldr.w r3, [r5, 0x8c]                              |     r3 = *((r5 + 0x8c));
                                                                 |     if (r3 == 0) {
    0x00054518 cbnz r3, 0x5451e                                  |         
    0x0005451a str.w r3, [r5, 0xe8]                              |         __asm ("str.w r3, [r5, 0xe8]");
                                                                 |     }
    0x0005451e ldr.w r1, [r5, 0xac]                              |     r1 = *((r5 + 0xac));
                                                                 |     if (r1 != 0) {
    0x00054522 cbz r1, 0x5452e                                   |         
    0x00054524 ldrb.w r1, [r5, 0x89]                             |         r1 = *((r5 + 0x89));
    0x00054528 cmp r1, 0                                         |         
                                                                 |         if (r1 == 0) {
    0x0005452a beq.w 0x547ba                                     |             goto label_55;
                                                                 |         }
                                                                 |     }
                                                                 | label_17:
    0x0005452e adds r3, 1                                        |     r3++;
    0x00054530 str.w r3, [r5, 0x8c]                              |     __asm ("str.w r3, [r5, 0x8c]");
    0x00054534 ldrb.w r3, [r6, 0x59]                             |     r3 = *((r6 + 0x59));
    0x00054538 lsls r7, r3, 0x1f                                 |     r7 = r3 << 0x1f;
    0x0005453a ittt pl                                           |     
                                                                 |     if (r7 < r3) {
    0x0005453c ldrpl r1, [r5, 0x94]                              |         r1 = *((r5 + 0x94));
                                                                 |     }
                                                                 |     if (r7 < r3) {
    0x00054540 addpl r1, 1                                       |         r1++;
                                                                 |     }
                                                                 |     if (r7 >= r3) {
    0x00054542 str.w r1, [r5, 0x94]                              |         __asm ("str.w r1, [r5, 0x94]");
                                                                 |     }
    0x00054546 lsls r4, r3, 0x1e                                 |     r4 = r3 << 0x1e;
    0x00054548 ittt mi                                           |     
                                                                 |     if (r4 >= r3) {
    0x0005454a ldrmi r3, [r5, 0x90]                              |         r3 = *((r5 + 0x90));
                                                                 |     }
                                                                 |     if (r4 >= r3) {
    0x0005454e addmi r3, 1                                       |         r3++;
                                                                 |     }
                                                                 |     if (r4 < r3) {
    0x00054550 str.w r3, [r5, 0x90]                              |         __asm ("str.w r3, [r5, 0x90]");
                                                                 |     }
    0x00054554 movs r3, 0                                        |     r3 = 0;
    0x00054556 str r3, [r6, 0x4c]                                |     *((r6 + 0x4c)) = r3;
    0x00054558 b 0x541fa                                         |     goto label_3;
                                                                 | label_36:
    0x0005455a movs r2, 7                                        |     r2 = 7;
    0x0005455c movs r3, 0                                        |     r3 = 0;
    0x0005455e mov r4, r2                                        |     r4 = r2;
    0x00054560 str r2, [r6, 0x50]                                |     *((r6 + 0x50)) = r2;
                                                                 | label_19:
    0x00054562 ldrb.w r2, [sb, 0x40]                             |     r2 = *((sb + 0x40));
    0x00054566 cmp r2, 0                                         |     
    0x00054568 it ne                                             |     
                                                                 |     if (r2 == 0) {
    0x0005456a orrne r3, r3, 1                                   |         r3 |= 1;
                                                                 |     }
    0x0005456e cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00054570 bne.w 0x542e2                                     |         goto label_4;
                                                                 |     }
    0x00054574 b 0x542f4                                         |     goto label_5;
                                                                 | label_49:
    0x00054576 str r3, [r6, 0x4c]                                |     *((r6 + 0x4c)) = r3;
    0x00054578 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005457a ldr.w r2, [r3, 0xe8]                              |     r2 = *((r3 + 0xe8));
    0x0005457e cmp r2, 0                                         |     
                                                                 |     if (r2 != 0) {
    0x00054580 bne.w 0x547ce                                     |         goto label_56;
                                                                 |     }
    0x00054584 cmp sl, r0                                        |     
                                                                 |     if (sl <= r0) {
    0x00054586 ble.w 0x546ca                                     |         goto label_57;
                                                                 |     }
    0x0005458a ldr r3, [r6, 4]                                   |     r3 = *((r6 + 4));
    0x0005458c add.w r1, r0, r0, lsl 2                           |     r1 = r0 + (r0 << 2);
    0x00054590 cmp.w lr, 1                                       |     
    0x00054594 add.w r3, r3, r1, lsl 2                           |     r3 += (r1 << 2);
    0x00054598 str r3, [sp, 0x14]                                |     var_14h = r3;
                                                                 |     if (lr == 1) {
    0x0005459a beq.w 0x546fc                                     |         goto label_58;
                                                                 |     }
                                                                 | label_15:
    0x0005459e ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x000545a0 movs r1, 0x20                                     |     r1 = 0x20;
    0x000545a2 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x000545a4 mov r7, r2                                        |     r7 = r2;
    0x000545a6 str r3, [r4, 0x10]                                |     *((r4 + 0x10)) = r3;
    0x000545a8 asrs r3, r3, 0x1f                                 |     r3 >>= 0x1f;
    0x000545aa str r3, [r4, 0x14]                                |     *((r4 + 0x14)) = r3;
    0x000545ac ldr r3, [r2, 8]                                   |     r3 = *((r2 + 8));
    0x000545ae str r3, [r4, 0x38]                                |     *((r4 + 0x38)) = r3;
    0x000545b0 asrs r3, r3, 0x1f                                 |     r3 >>= 0x1f;
    0x000545b2 str r3, [r4, 0x3c]                                |     *((r4 + 0x3c)) = r3;
    0x000545b4 ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x000545b6 movs r2, 0                                        |     r2 = 0;
    0x000545b8 str r3, [r4, 0x60]                                |     *((r4 + 0x60)) = r3;
    0x000545ba asrs r3, r3, 0x1f                                 |     r3 >>= 0x1f;
    0x000545bc str r3, [r4, 0x64]                                |     *((r4 + 0x64)) = r3;
    0x000545be movs r3, 4                                        |     r3 = 4;
    0x000545c0 strh r3, [r4, 0x1c]                               |     *((r4 + 0x1c)) = r3;
    0x000545c2 strh.w r3, [r4, 0x44]                             |     *((r4 + 0x44)) = r3;
    0x000545c6 strh.w r3, [r4, 0x6c]                             |     *((r4 + 0x6c)) = r3;
    0x000545ca add.w r3, r4, 0x78                                |     r3 = r4 + 0x78;
    0x000545ce mov r0, r3                                        |     r0 = r3;
    0x000545d0 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x000545d2 bl 0x172d4                                        |     fcn_000172d4 (r0, r1, r2);
    0x000545d6 str r0, [sp, 0x1c]                                |     var_1ch = r0;
    0x000545d8 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000545da bne 0x546b4                                       |         goto label_18;
                                                                 |     }
    0x000545dc movw r3, 0x202                                    |     r3 = 0x202;
    0x000545e0 ldr.w sl, [r4, 0x7c]                              |     sl = *((r4 + 0x7c));
    0x000545e4 strh.w r3, [r4, 0x94]                             |     *((r4 + 0x94)) = r3;
    0x000545e8 ldrsb.w r3, [r7, 1]                               |     r3 = *((r7 + 1));
    0x000545ec adds r3, 0x13                                     |     r3 += 0x13;
    0x000545ee cmp r3, 0xf                                       |     
                                                                 |     if (r3 > 0xf) {
    0x000545f0 bhi.w 0x54848                                     |         goto label_59;
                                                                 |     }
                                                                 |     /* switch table (17 cases) at 0x545f8 */
    0x000545f4 tbh [pc, r3, lsl 1]                               |     __asm ("tbh [pc, r3, lsl 1]");
                                                                 | label_54:
    0x00054618 ldrb.w r3, [r6, 0x59]                             |     r3 = *((r6 + 0x59));
    0x0005461c movs r2, 0x11                                     |     r2 = 17;
    0x0005461e str r2, [r6, 0x50]                                |     *((r6 + 0x50)) = r2;
    0x00054620 ands r3, r3, 4                                    |     r3 &= 4;
                                                                 |     if (r3 == r3) {
    0x00054624 beq.w 0x547ea                                     |         goto label_60;
                                                                 |     }
                                                                 | label_41:
    0x00054628 mov r0, r6                                        |     r0 = r6;
    0x0005462a bl 0x1c6f4                                        |     r0 = fcn_0001c6f4 (r0);
    0x0005462e mov r4, r0                                        |     r4 = r0;
    0x00054630 b 0x54278                                         |     goto label_6;
                                                                 | label_39:
    0x00054632 ldr.w r3, [r5, 0xac]                              |     r3 = *((r5 + 0xac));
    0x00054636 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00054638 beq.w 0x5447c                                     |         goto label_7;
                                                                 |     }
    0x0005463c ldrb.w r3, [r5, 0x89]                             |     r3 = *((r5 + 0x89));
    0x00054640 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00054642 beq.w 0x5441a                                     |         goto label_8;
                                                                 |     }
    0x00054646 cmp r4, 0x65                                      |     
                                                                 |     if (r4 != 0x65) {
    0x00054648 bne.w 0x54224                                     |         goto label_0;
                                                                 |     }
    0x0005464c b 0x54482                                         |     goto label_9;
                                                                 | label_46:
    0x0005464e mov r0, r5                                        |     r0 = r5;
    0x00054650 bl 0x33f1c                                        |     fcn_00033f1c (r0);
    0x00054654 b 0x54392                                         |     goto label_10;
                                                                 | label_50:
    0x00054656 ldr.w ip, [r5, 0x14]                              |     ip = *((r5 + 0x14));
    0x0005465a cmp ip, r2                                        |     
                                                                 |     if (ip > r2) {
    0x0005465c bgt.w 0x54496                                     |         goto label_11;
                                                                 |     }
                                                                 | label_53:
    0x00054660 movs r4, 0x65                                     |     r4 = 0x65;
                                                                 | label_51:
    0x00054662 ldr r7, [r6]                                      |     r7 = *(r6);
    0x00054664 movs r2, 0                                        |     r2 = 0;
    0x00054666 str r4, [r5, 0x34]                                |     *((r5 + 0x34)) = r4;
    0x00054668 cmp r7, 0                                         |     
                                                                 |     if (r7 != 0) {
    0x0005466a bne.w 0x54230                                     |         goto label_1;
                                                                 |     }
    0x0005466e b 0x54266                                         |     goto label_12;
                                                                 | label_48:
    0x00054670 ldr r2, [r6, 8]                                   |     r2 = *((r6 + 8));
    0x00054672 ldrh.w r3, [r2, 0x184]                            |     r3 = *((r2 + 0x184));
    0x00054676 add.w r1, r2, 0x168                               |     r1 = r2 + 0x168;
    0x0005467a str r1, [sp, 0x24]                                |     var_24h = r1;
    0x0005467c ands r3, r3, 0x10                                 |     r3 &= 0x10;
                                                                 |     if (r3 == r3) {
    0x00054680 beq.w 0x547b2                                     |         goto label_61;
                                                                 |     }
    0x00054684 ldr.w r3, [r2, 0x180]                             |     r3 = *((r2 + 0x180));
    0x00054688 ldr.w r2, [r2, 0x16c]                             |     r2 = *((r2 + 0x16c));
    0x0005468c lsrs r1, r3, 2                                    |     r1 = r3 >> 2;
    0x0005468e str r2, [sp, 0x1c]                                |     var_1ch = r2;
    0x00054690 str r1, [sp, 0x20]                                |     var_20h = r1;
                                                                 |     if (r1 == r3) {
    0x00054692 beq.w 0x54b2c                                     |         goto label_62;
                                                                 |     }
    0x00054696 add.w r1, r2, r1, lsl 2                           |     r1 = r2 + (r1 << 2);
    0x0005469a mov r3, r2                                        |     r3 = r2;
    0x0005469c mov ip, sl                                        |     
                                                                 |     do {
    0x0005469e ldr r2, [r3], 4                                   |         r2 = *(r3);
                                                                 |         r3 += 4;
    0x000546a2 ldr r2, [r2, 4]                                   |         r2 = *((r2 + 4));
    0x000546a4 cmp r1, r3                                        |         
    0x000546a6 add ip, r2                                        |         
    0x000546a8 bne 0x5469e                                       |         
                                                                 |     } while (r1 != r3);
    0x000546aa b 0x543dc                                         |     goto label_13;
                                                                 | label_47:
    0x000546ac ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x000546ae movs r3, 1                                        |     r3 = 1;
    0x000546b0 strb.w r3, [r2, 0x40]                             |     *((r2 + 0x40)) = r3;
                                                                 | label_18:
    0x000546b4 ldr.w r3, [r5, 0xac]                              |     r3 = *((r5 + 0xac));
                                                                 |     if (r3 != 0) {
    0x000546b8 cbz r3, 0x546c4                                   |         
    0x000546ba ldrb.w r3, [r5, 0x89]                             |         r3 = *((r5 + 0x89));
                                                                 |         if (r3 != 0) {
    0x000546be cbnz r3, 0x546c4                                  |             goto label_63;
                                                                 |         }
    0x000546c0 movs r4, 1                                        |         r4 = 1;
    0x000546c2 b 0x5441a                                         |         goto label_8;
                                                                 |     }
                                                                 | label_63:
    0x000546c4 ldr r2, [r6, 0x50]                                |     r2 = *((r6 + 0x50));
    0x000546c6 movs r4, 1                                        |     r4 = 1;
    0x000546c8 b 0x54226                                         |     goto label_14;
                                                                 | label_57:
    0x000546ca ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x000546cc sub.w r0, r0, sl                                  |     r0 -= sl;
    0x000546d0 ldr r1, [r3]                                      |     r1 = *(r3);
    0x000546d2 ldr r3, [r1, 4]                                   |     r3 = *((r1 + 4));
    0x000546d4 cmp r0, r3                                        |     
                                                                 |     if (r0 < r3) {
    0x000546d6 blt 0x546e8                                       |         goto label_64;
                                                                 |     }
    0x000546d8 ldr.w ip, [sp, 0x1c]                              |     ip = var_1ch;
                                                                 |     do {
    0x000546dc ldr r1, [ip, 4]!                                  |         r1 = *((ip += 4));
    0x000546e0 subs r0, r0, r3                                   |         r0 -= r3;
    0x000546e2 ldr r3, [r1, 4]                                   |         r3 = *((r1 + 4));
    0x000546e4 cmp r3, r0                                        |         
    0x000546e6 ble 0x546dc                                       |         
                                                                 |     } while (r3 <= r0);
                                                                 | label_64:
    0x000546e8 ldr r3, [r1]                                      |     r3 = *(r1);
    0x000546ea add.w r1, r0, r0, lsl 2                           |     r1 = r0 + (r0 << 2);
    0x000546ee cmp.w lr, 1                                       |     
    0x000546f2 add.w r3, r3, r1, lsl 2                           |     r3 += (r1 << 2);
    0x000546f6 str r3, [sp, 0x14]                                |     var_14h = r3;
                                                                 |     if (lr != 1) {
    0x000546f8 bne.w 0x5459e                                     |         goto label_15;
                                                                 |     }
                                                                 | label_58:
    0x000546fc ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x000546fe movs r3, 4                                        |     r3 = 4;
    0x00054700 str r0, [r7, 0x38]                                |     *((r7 + 0x38)) = r0;
    0x00054702 asrs r0, r0, 0x1f                                 |     r0 >>= 0x1f;
    0x00054704 strh.w r3, [r7, 0x44]                             |     *((r7 + 0x44)) = r3;
    0x00054708 movw r3, 0xa02                                    |     r3 = 0xa02;
    0x0005470c str r0, [r7, 0x3c]                                |     *((r7 + 0x3c)) = r0;
    0x0005470e strh.w r3, [r7, 0x6c]                             |     *((r7 + 0x6c)) = r3;
    0x00054712 ldr.w r3, [pc, 0x4cc]                             |     
    0x00054716 ldrb r1, [r1]                                     |     r1 = *(r1);
    0x00054718 add r3, pc                                        |     r3 = 0xa92fe;
    0x0005471a add.w r3, r3, r1, lsl 2                           |     r3 += (r1 << 2);
    0x0005471e ldr.w r0, [r3, 0x6c8]                             |     r0 = *((r3 + 0x6c8));
    0x00054722 str r0, [r7, 0x54]                                |     *((r7 + 0x54)) = r0;
                                                                 |     if (r0 == 0) {
    0x00054724 cbz r0, 0x5473e                                   |         goto label_29;
                                                                 |     }
    0x00054726 ldrb r3, [r0]                                     |     r3 = *(r0);
    0x00054728 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005472a beq.w 0x54b28                                     |         goto label_65;
                                                                 |     }
    0x0005472e mov r3, r0                                        |     r3 = r0;
                                                                 |     do {
    0x00054730 ldrb r1, [r3, 1]!                                 |         r1 = *((r3 += 1));
    0x00054734 cmp r1, 0                                         |         
    0x00054736 bne 0x54730                                       |         
                                                                 |     } while (r1 != 0);
    0x00054738 subs r3, r3, r0                                   |     r3 -= r0;
    0x0005473a bic r0, r3, 0xc0000000                            |     r0 = BIT_MASK (r3, 0xc0000000);
                                                                 | label_29:
    0x0005473e movs r3, 1                                        |     r3 = 1;
    0x00054740 str r0, [r7, 0x68]                                |     *((r7 + 0x68)) = r0;
    0x00054742 strb.w r3, [r7, 0x6e]                             |     *((r7 + 0x6e)) = r3;
    0x00054746 add.w r4, r7, 0x78                                |     r4 = r7 + 0x78;
    0x0005474a ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005474c ldrsb.w r3, [r3, 1]                               |     r3 = *((r3 + 1));
    0x00054750 adds r3, 0x12                                     |     r3 += 0x12;
                                                                 |     if (r3 != 0x12) {
    0x00054752 bne.w 0x5459e                                     |         goto label_15;
                                                                 |     }
    0x00054756 ldr r7, [sp, 0x20]                                |     r7 = var_20h;
                                                                 |     if (r7 == 0) {
    0x00054758 cbz r7, 0x54772                                   |         goto label_66;
                                                                 |     }
    0x0005475a ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x0005475c ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x0005475e ldr r0, [r1, 0x10]                                |     r0 = *((r1 + 0x10));
    0x00054760 subs r3, 4                                        |     r3 -= 4;
                                                                 | label_16:
    0x00054762 ldr r1, [r3, 4]!                                  |     r1 = *((r3 += 4));
    0x00054766 cmp r1, r0                                        |     
                                                                 |     if (r1 == r0) {
    0x00054768 beq.w 0x5459e                                     |         goto label_15;
                                                                 |     }
    0x0005476c adds r2, 1                                        |     r2++;
    0x0005476e cmp r7, r2                                        |     
                                                                 |     if (r7 != r2) {
    0x00054770 bne 0x54762                                       |         goto label_16;
                                                                 |     }
                                                                 | label_66:
    0x00054772 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x00054774 ldr.w sl, [sp, 0x24]                              |     sl = var_24h;
    0x00054778 adds r7, r3, 1                                    |     r7 = r3 + 1;
    0x0005477a subs r2, r3, 0                                    |     r2 = r3 - 0;
    0x0005477c lsl.w r7, r7, 2                                   |     r7 <<= 2;
    0x00054780 it ne                                             |     
                                                                 |     if (r2 == r3) {
    0x00054782 movne r2, 1                                       |         r2 = 1;
                                                                 |     }
    0x00054784 mov r0, sl                                        |     r0 = sl;
    0x00054786 mov r1, r7                                        |     r1 = r7;
    0x00054788 bl 0x172d4                                        |     r0 = fcn_000172d4 (r0, r1, r2);
    0x0005478c cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0005478e bne.w 0x5459e                                     |         goto label_15;
                                                                 |     }
    0x00054792 ldr.w r3, [sl, 4]                                 |     r3 = *((sl + 4));
    0x00054796 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x00054798 adds r1, r3, r7                                   |     r1 = r3 + r7;
    0x0005479a ldrh.w r3, [sl, 0x1c]                             |     r3 = *((sl + 0x1c));
    0x0005479e ldr r2, [r2, 0x10]                                |     r2 = *((r2 + 0x10));
    0x000547a0 orr r3, r3, 0x10                                  |     r3 |= 0x10;
    0x000547a4 str r2, [r1, -0x4]                                |     *((r1 - 0x4)) = r2;
    0x000547a8 strh.w r3, [sl, 0x1c]                             |     *((sl + 0x1c)) = r3;
    0x000547ac str.w r7, [sl, 0x18]                              |     __asm ("str.w r7, [sl, 0x18]");
    0x000547b0 b 0x5459e                                         |     goto label_15;
                                                                 | label_61:
    0x000547b2 mov ip, sl                                        |     
    0x000547b4 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x000547b6 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x000547b8 b 0x543dc                                         |     goto label_13;
                                                                 | label_55:
    0x000547ba ldr r0, [r5]                                      |     r0 = *(r5);
    0x000547bc add.w r1, r6, 0x80                                |     r1 = r6 + 0x80;
    0x000547c0 bl 0x9b48                                         |     fcn_00009b48 (r0, r1, r2);
    0x000547c4 ldr.w r3, [r5, 0x8c]                              |     r3 = *((r5 + 0x8c));
    0x000547c8 ldrb.w r2, [r6, 0x58]                             |     r2 = *((r6 + 0x58));
    0x000547cc b 0x5452e                                         |     goto label_17;
                                                                 | label_56:
    0x000547ce movs r3, 9                                        |     r3 = 9;
    0x000547d0 ldr.w r2, [pc, 0x410]                             |     
    0x000547d4 str r3, [r6, 0x50]                                |     *((r6 + 0x50)) = r3;
    0x000547d6 add.w r0, r6, 0x2c                                |     r0 = r6 + 0x2c;
    0x000547da ldr.w r3, [pc, 0x40c]                             |     r3 = *(0x00054be8);
    0x000547de ldr r1, [sp, 0x14]                                |     r1 = var_14h;
    0x000547e0 add r2, pc                                        |     r2 = 0xa93c8;
    0x000547e2 add r3, pc                                        |     r3 += pc;
    0x000547e4 bl 0x1c9d0                                        |     fcn_0001c9d0 (r0, r1);
    0x000547e8 b 0x546b4                                         |     goto label_18;
                                                                 | label_60:
    0x000547ea ldr r4, [r5, 0x38]                                |     r4 = *((r5 + 0x38));
    0x000547ec and r4, r4, 1                                     |     r4 &= 1;
    0x000547f0 b 0x54562                                         |     goto label_19;
                                                                 | label_34:
    0x000547f2 ldr r1, [pc, 0x3f8]                               |     
    0x000547f4 movs r0, 0x15                                     |     r0 = 0x15;
    0x000547f6 add r1, pc                                        |     r1 = 0xa93e8;
    0x000547f8 blx 0x6820                                        |     fcn_00006820 ();
                                                                 |     do {
    0x000547fc blx 0x5fe8                                        |         fcn_00005fe8 ();
    0x00054800 ldr r1, [pc, 0x3ec]                               |         
    0x00054802 movw r2, 0x1037                                   |         
    0x00054806 add.w r3, r0, 0x14                                |         r3 = r0 + 0x14;
    0x0005480a movt r2, 1                                        |         r2 = 0x11037;
    0x0005480e movs r0, 0x15                                     |         r0 = 0x15;
    0x00054810 add r1, pc                                        |         r1 = 0xa9404;
    0x00054812 mov r4, r0                                        |         r4 = r0;
    0x00054814 blx 0x6820                                        |         fcn_00006820 ();
    0x00054818 b 0x54302                                         |         goto label_20;
                                                                 | label_35:
    0x0005481a ldr r1, [pc, 0x3d8]                               |         
    0x0005481c movs r0, 0x15                                     |         r0 = 0x15;
    0x0005481e add r1, pc                                        |         r1 = 0xa9418;
    0x00054820 blx 0x6820                                        |         fcn_00006820 ();
    0x00054824 b 0x547fc                                         |         
                                                                 |     } while (1);
                                                                 | label_43:
    0x00054826 mov r3, r8                                        |     r3 = r8;
    0x00054828 b 0x54562                                         |     goto label_19;
                                                                 | label_44:
    0x0005482a mov r1, r5                                        |     r1 = r5;
    0x0005482c mov r0, sb                                        |     r0 = sb;
    0x0005482e bl 0xd418                                         |     fcn_0000d418 (r0, r1);
    0x00054832 movw r3, 0xc0a                                    |     r3 = 0xc0a;
    0x00054834 orrs r2, r1                                       |     r2 |= r1;
    0x00054836 str.w r0, [sl, 0x2c]                              |     __asm ("str.w r0, [sl, 0x2c]");
    0x0005483a subs r3, r4, r3                                   |     r3 = r4 - r3;
    0x0005483c str.w r4, [sl, 0x50]                              |     __asm ("str.w r4, [sl, 0x50]");
    0x00054840 clz r3, r3                                        |     r3 &= r3;
    0x00054844 lsrs r3, r3, 5                                    |     r3 >>= 5;
    0x00054846 b 0x54562                                         |     goto label_19;
                                                                 | label_59:
    0x00054848 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005484a ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x0005484c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005484e beq.w 0x54b62                                     |         goto label_67;
                                                                 |     }
    0x00054852 cmp sl, r3                                        |     
                                                                 |     if (sl != r3) {
    0x00054854 bne.w 0x54b5e                                     |         goto label_68;
                                                                 |     }
                                                                 | label_26:
    0x00054858 ldrb.w r3, [sl]                                   |     r3 = *(sl);
                                                                 |     if (r3 == 0) {
    0x0005485c cbz r3, 0x54872                                   |         goto label_25;
                                                                 |     }
                                                                 | label_31:
    0x0005485e mov r2, sl                                        |     r2 = sl;
                                                                 |     do {
    0x00054860 ldrb r3, [sl, 1]!                                 |         r3 = *((sl += 1));
    0x00054864 cmp r3, 0                                         |         
    0x00054866 bne 0x54860                                       |         
                                                                 |     } while (r3 != 0);
    0x00054868 sub.w r2, sl, r2                                  |     r2 = sl - r2;
    0x0005486c bic r3, r2, 0xc0000000                            |     r3 = BIT_MASK (r2, 0xc0000000);
    0x00054870 str r3, [sp, 0x1c]                                |     var_1ch = r3;
                                                                 | label_25:
    0x00054872 ldr r3, [sp, 0x1c]                                |     r3 = var_1ch;
    0x00054874 str.w r3, [r4, 0x90]                              |     __asm ("str.w r3, [r4, 0x90]");
    0x00054878 movs r3, 1                                        |     r3 = 1;
    0x0005487a strb.w r3, [r4, 0x96]                             |     *((r4 + 0x96)) = r3;
    0x0005487e ldrb.w r3, [r6, 0x58]                             |     r3 = *((r6 + 0x58));
    0x00054882 and r7, r3, 3                                     |     r7 = r3 & 3;
    0x00054886 cmp r7, 1                                         |     
                                                                 |     if (r7 == 1) {
    0x00054888 beq 0x548f0                                       |         goto label_69;
                                                                 |     }
                                                                 | label_21:
    0x0005488a and r3, r3, 3                                     |     r3 &= 3;
    0x0005488e ldr r7, [r6]                                      |     r7 = *(r6);
    0x00054890 rsb.w r3, r3, 3                                   |     r3 = 3 - r3;
    0x00054894 movs r4, 0x64                                     |     r4 = 0x64;
    0x00054896 lsls r3, r3, 2                                    |     r3 <<= 2;
    0x00054898 movs r2, 0                                        |     r2 = 0;
    0x0005489a strh.w r3, [r6, 0x54]                             |     *((r6 + 0x54)) = r3;
    0x0005489e ldr r3, [r6, 8]                                   |     r3 = *((r6 + 8));
    0x000548a0 adds r3, 0x28                                     |     r3 += 0x28;
    0x000548a2 str r3, [r6, 0x14]                                |     *((r6 + 0x14)) = r3;
    0x000548a4 movs r3, 0                                        |     r3 = 0;
    0x000548a6 str r3, [r6, 0x50]                                |     *((r6 + 0x50)) = r3;
    0x000548a8 str r4, [r5, 0x34]                                |     *((r5 + 0x34)) = r4;
    0x000548aa cmp r7, 0                                         |     
                                                                 |     if (r7 != 0) {
    0x000548ac bne.w 0x54230                                     |         goto label_1;
                                                                 |     }
    0x000548b0 b 0x54266                                         |     goto label_12;
    0x000548b2 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x000548b4 mov r1, sl                                        |     r1 = sl;
    0x000548b6 ldr r2, [pc, 0x340]                               |     
    0x000548b8 movs r0, 0x20                                     |     r0 = 0x20;
    0x000548ba ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x000548bc add r2, pc                                        |     r2 = 0xa94ba;
    0x000548be vldr d16, [r3]                                    |     __asm ("vldr d16, [r3]");
    0x000548c2 vstr d16, [sp]                                    |     __asm ("vstr d16, [sp]");
    0x000548c6 blx 0x6658                                        |     fcn_00006658 ();
    0x000548ca ldr r3, [r4, 0x7c]                                |     r3 = *((r4 + 0x7c));
                                                                 | label_22:
    0x000548cc cmp sl, r3                                        |     
                                                                 |     if (sl == r3) {
    0x000548ce beq.w 0x54b12                                     |         goto label_70;
                                                                 |     }
                                                                 | label_24:
    0x000548d2 movs r3, 0                                        |     r3 = 0;
    0x000548d4 ldr r0, [sp, 0x20]                                |     r0 = var_20h;
    0x000548d6 str r3, [sp]                                      |     *(sp) = r3;
    0x000548d8 mov r1, sl                                        |     r1 = sl;
    0x000548da movs r3, 1                                        |     r3 = 1;
    0x000548dc mov.w r2, -1                                      |     r2 = -1;
    0x000548e0 bl 0x17978                                        |     fcn_00017978 (r0, r1, r2, r3, r4);
    0x000548e4 ldrb.w r3, [r6, 0x58]                             |     r3 = *((r6 + 0x58));
    0x000548e8 and r7, r3, 3                                     |     r7 = r3 & 3;
    0x000548ec cmp r7, 1                                         |     
                                                                 |     if (r7 != 1) {
    0x000548ee bne 0x5488a                                       |         goto label_21;
                                                                 |     }
                                                                 | label_69:
    0x000548f0 movs r2, 0                                        |     r2 = 0;
    0x000548f2 movs r1, 4                                        |     r1 = 4;
    0x000548f4 add.w r0, r4, 0xa0                                |     r0 = r4 + 0xa0;
    0x000548f8 bl 0x172d4                                        |     r0 = fcn_000172d4 (r0, r1, r2);
    0x000548fc cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x000548fe bne.w 0x546b4                                     |         goto label_18;
                                                                 |     }
    0x00054902 movw r3, 0x202                                    |     r3 = 0x202;
    0x00054906 ldr r2, [pc, 0x2f4]                               |     
    0x00054908 strh.w r3, [r4, 0xbc]                             |     *((r4 + 0xbc)) = r3;
    0x0005490c movs r3, 2                                        |     r3 = 2;
    0x0005490e str.w r3, [r4, 0xb8]                              |     __asm ("str.w r3, [r4, 0xb8]");
    0x00054912 movs r0, 3                                        |     r0 = 3;
    0x00054914 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00054916 add r2, pc                                        |     r2 = 0xa9518;
    0x00054918 ldr.w r1, [r4, 0xa4]                              |     r1 = *((r4 + 0xa4));
    0x0005491c ldrb r3, [r3, 3]                                  |     r3 = *((r3 + 3));
    0x0005491e blx 0x6658                                        |     fcn_00006658 ();
    0x00054922 strb.w r7, [r4, 0xbe]                             |     *((r4 + 0xbe)) = r7;
    0x00054926 strh.w r7, [r4, 0xe4]                             |     *((r4 + 0xe4)) = r7;
    0x0005492a ldrb.w r3, [r6, 0x58]                             |     r3 = *((r6 + 0x58));
    0x0005492e b 0x5488a                                         |     goto label_21;
    0x00054930 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00054932 mov r1, sl                                        |     r1 = sl;
    0x00054934 ldr r2, [pc, 0x2c8]                               |     
    0x00054936 movs r0, 0x20                                     |     r0 = 0x20;
    0x00054938 ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x0005493a add r2, pc                                        |     r2 = 0xa953e;
    0x0005493c vldr d16, [r3]                                    |     __asm ("vldr d16, [r3]");
    0x00054940 vstr d16, [sp]                                    |     __asm ("vstr d16, [sp]");
    0x00054944 blx 0x6658                                        |     fcn_00006658 ();
    0x00054948 ldr r3, [r4, 0x7c]                                |     r3 = *((r4 + 0x7c));
    0x0005494a b 0x548cc                                         |     goto label_22;
    0x0005494c ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005494e mov r1, sl                                        |     r1 = sl;
    0x00054950 ldr r2, [pc, 0x2b0]                               |     
    0x00054952 movs r0, 0x20                                     |     r0 = 0x20;
    0x00054954 ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x00054956 add r2, pc                                        |     r2 = 0xa955e;
    0x00054958 ldr r3, [r3, 8]                                   |     r3 = *((r3 + 8));
    0x0005495a ldr r7, [r3]                                      |     r7 = *(r3);
    0x0005495c str r7, [sp]                                      |     *(sp) = r7;
    0x0005495e blx 0x6658                                        |     fcn_00006658 ();
    0x00054962 ldr r3, [r4, 0x7c]                                |     r3 = *((r4 + 0x7c));
    0x00054964 b 0x548cc                                         |     goto label_22;
    0x00054966 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00054968 ldr r2, [r3, 0x10]                                |     r2 = *((r3 + 0x10));
    0x0005496a ldrh r3, [r2, 0x1c]                               |     r3 = *((r2 + 0x1c));
    0x0005496c lsls r0, r3, 0x1e                                 |     r0 = r3 << 0x1e;
                                                                 |     if (r0 >= r3) {
    0x0005496e bpl.w 0x54b48                                     |         goto label_71;
                                                                 |     }
    0x00054972 mov r3, sl                                        |     r3 = sl;
    0x00054974 ldr.w sl, [r2, 4]                                 |     sl = *((r2 + 4));
    0x00054978 b 0x548cc                                         |     goto label_22;
    0x0005497a ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x0005497c mov r1, sl                                        |     r1 = sl;
    0x0005497e ldr r2, [pc, 0x288]                               |     
    0x00054980 movs r0, 0x20                                     |     r0 = 0x20;
    0x00054982 ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x00054984 add r2, pc                                        |     r2 = 0xa9592;
    0x00054986 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00054988 ldrh r3, [r3, 6]                                  |     r3 = *((r3 + 6));
    0x0005498a blx 0x6658                                        |     fcn_00006658 ();
    0x0005498e cmp.w sl, 0                                       |     
                                                                 |     if (sl == 0) {
    0x00054992 beq.w 0x54b82                                     |         goto label_72;
                                                                 |     }
    0x00054996 ldrb.w r3, [sl]                                   |     r3 = *(sl);
    0x0005499a cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005499c beq.w 0x54b8a                                     |         goto label_73;
                                                                 |     }
    0x000549a0 ldr r7, [sp, 0x20]                                |     r7 = var_20h;
    0x000549a2 mov r3, sl                                        |     r3 = sl;
                                                                 |     do {
    0x000549a4 ldrb r2, [r3, 1]!                                 |         r2 = *((r3 += 1));
    0x000549a8 cmp r2, 0                                         |         
    0x000549aa bne 0x549a4                                       |         
                                                                 |     } while (r2 != 0);
    0x000549ac sub.w r3, r3, sl                                  |     r3 -= sl;
    0x000549b0 str r7, [sp, 0x20]                                |     var_20h = r7;
    0x000549b2 bic r3, r3, 0xc0000000                            |     r3 = BIT_MASK (r3, 0xc0000000);
    0x000549b6 mov r0, r3                                        |     r0 = r3;
    0x000549b8 add.w ip, sl, r3                                  |     
    0x000549bc adds r1, r3, 1                                    |     r1 = r3 + 1;
                                                                 | label_33:
    0x000549be ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x000549c0 ldrh r3, [r2, 6]                                  |     r3 = *((r2 + 6));
    0x000549c2 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000549c4 beq 0x54a86                                       |         goto label_30;
                                                                 |     }
    0x000549c6 ldr r3, [pc, 0x244]                               |     
    0x000549c8 movs r1, 0                                        |     r1 = 0;
    0x000549ca strd sb, r5, [sp, 0x30]                           |     __asm ("strd sb, r5, [sp, 0x30]");
    0x000549ce str.w r8, [sp, 0x3c]                              |     __asm ("str.w r8, [var_3ch]");
    0x000549d2 mov r8, r1                                        |     r8 = r1;
    0x000549d4 add r3, pc                                        |     r3 = 0xa95e6;
    0x000549d6 str r6, [sp, 0x40]                                |     var_40h = r6;
    0x000549d8 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x000549da mov r3, r2                                        |     r3 = r2;
    0x000549dc adds r2, 0x10                                     |     r2 += 0x10;
    0x000549de str.w fp, [sp, 0x44]                              |     __asm ("str.w fp, [var_44h]");
    0x000549e2 mov sb, r2                                        |     sb = r2;
    0x000549e4 mov r6, r0                                        |     r6 = r0;
    0x000549e6 mov fp, r3                                        |     
    0x000549e8 str r4, [sp, 0x38]                                |     var_38h = r4;
                                                                 | label_23:
    0x000549ea ldr r2, [sb, 4]!                                  |     r2 = *((sb += 4));
    0x000549ee adds r7, r6, 1                                    |     r7 = r6 + 1;
    0x000549f0 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000549f2 beq.w 0x54b1c                                     |         goto label_74;
                                                                 |     }
    0x000549f6 ldr r5, [r2]                                      |     r5 = *(r2);
    0x000549f8 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x000549fa beq.w 0x54b22                                     |         goto label_75;
                                                                 |     }
    0x000549fe ldrb r4, [r5]                                     |     r4 = *(r5);
    0x00054a00 mov r2, r6                                        |     r2 = r6;
                                                                 |     if (r4 == 0) {
    0x00054a02 cbz r4, 0x54a34                                   |         goto label_28;
                                                                 |     }
    0x00054a04 ldrb r1, [r5, 1]                                  |     r1 = *((r5 + 1));
                                                                 | label_27:
    0x00054a06 adds r2, r5, 1                                    |     r2 = r5 + 1;
                                                                 |     if (r1 == 0) {
    0x00054a08 cbz r1, 0x54a12                                   |         goto label_76;
                                                                 |     }
                                                                 |     do {
    0x00054a0a ldrb r1, [r2, 1]!                                 |         r1 = *((r2 += 1));
    0x00054a0e cmp r1, 0                                         |         
    0x00054a10 bne 0x54a0a                                       |         
                                                                 |     } while (r1 != 0);
                                                                 | label_76:
    0x00054a12 subs r2, r2, r5                                   |     r2 -= r5;
    0x00054a14 bic r4, r2, 0xc0000000                            |     r4 = BIT_MASK (r2, 0xc0000000);
    0x00054a18 cmp r4, 6                                         |     
    0x00054a1a it ne                                             |     
                                                                 |     if (r4 == 6) {
    0x00054a1c addne r2, r4, r6                                  |         r2 = r4 + r6;
                                                                 |     }
                                                                 |     if (r4 == 6) {
    0x00054a1e bne 0x54a34                                       |         
    0x00054a20 mov r2, r4                                        |         r2 = r4;
    0x00054a22 ldr r1, [sp, 0x28]                                |         r1 = var_28h;
    0x00054a24 mov r0, r5                                        |         r0 = r5;
    0x00054a26 blx 0x5e6c                                        |         fcn_00005e6c ();
    0x00054a2a adds r2, r6, 6                                    |         r2 = r6 + 6;
                                                                 |         if (r0 != 0) {
    0x00054a2c cbnz r0, 0x54a34                                  |             goto label_28;
                                                                 |         }
    0x00054a2e ldr r5, [sp, 0x2c]                                |         r5 = var_2ch;
    0x00054a30 mov r2, r7                                        |         r2 = r7;
    0x00054a32 movs r4, 1                                        |         r4 = 1;
                                                                 |     }
                                                                 | label_28:
    0x00054a34 cmp r2, 0x1a                                      |     
    0x00054a36 add.w ip, sl, r6                                  |     
    0x00054a3a mov r1, r7                                        |     r1 = r7;
                                                                 |     if (r2 > 0x1a) {
    0x00054a3c bgt 0x54b30                                       |         goto label_77;
                                                                 |     }
    0x00054a3e movs r2, 0x2c                                     |     r2 = 0x2c;
    0x00054a40 strb.w r2, [sl, r6]                               |     *((sl + r6)) = r2;
    0x00054a44 ldr.w r2, [fp, 0x10]                              |     r2 = *(arg_10h);
    0x00054a48 ldrb.w r2, [r2, r8]                               |     r2 = *((r2 + r8));
                                                                 |     if (r2 != 0) {
    0x00054a4c cbz r2, 0x54a56                                   |         
    0x00054a4e adds r7, r6, 2                                    |         r7 = r6 + 2;
    0x00054a50 movs r2, 0x2d                                     |         r2 = 0x2d;
    0x00054a52 strb.w r2, [sl, r1]                               |         *((sl + r1)) = r2;
                                                                 |     }
    0x00054a56 adds r2, r4, 1                                    |     r2 = r4 + 1;
    0x00054a58 mov r1, r5                                        |     r1 = r5;
    0x00054a5a add.w r0, sl, r7                                  |     r0 = sl + r7;
    0x00054a5e add.w r8, r8, 1                                   |     r8++;
    0x00054a62 blx 0x6214                                        |     fcn_00006214 ();
    0x00054a66 ldrh.w r2, [fp, 6]                                |     r2 = *(arg_6h);
    0x00054a6a adds r6, r4, r7                                   |     r6 = r4 + r7;
    0x00054a6c cmp r8, r2                                        |     
                                                                 |     if (r8 < r2) {
    0x00054a6e blt 0x549ea                                       |         goto label_23;
                                                                 |     }
    0x00054a70 mov r3, r6                                        |     r3 = r6;
    0x00054a72 ldrd sb, r5, [sp, 0x30]                           |     __asm ("ldrd sb, r5, [var_30h]");
    0x00054a74 str r5, [sp, 0x30]                                |     *((sp + 0x30)) = r5;
    0x00054a76 ldr r4, [sp, 0x38]                                |     r4 = var_38h;
    0x00054a78 add.w ip, sl, r3                                  |     
    0x00054a7c ldrd r8, r6, [sp, 0x3c]                           |     __asm ("ldrd r8, r6, [var_3ch]");
    0x00054a80 adds r1, r3, 1                                    |     r1 = r3 + 1;
    0x00054a82 ldr.w fp, [sp, 0x44]                              |     fp = var_44h;
                                                                 | label_30:
    0x00054a86 movs r3, 0x29                                     |     r3 = 0x29;
    0x00054a88 strb.w r3, [ip]                                   |     *(ip) = r3;
    0x00054a8c movs r3, 0                                        |     r3 = 0;
    0x00054a8e strb.w r3, [sl, r1]                               |     *((sl + r1)) = r3;
    0x00054a92 ldr r3, [r4, 0x7c]                                |     r3 = *((r4 + 0x7c));
    0x00054a94 b 0x548cc                                         |     goto label_22;
    0x00054a96 movs r3, 0                                        |     r3 = 0;
    0x00054a98 strb.w r3, [sl]                                   |     *(sl) = r3;
    0x00054a9c ldr r3, [r4, 0x7c]                                |     r3 = *((r4 + 0x7c));
                                                                 | label_32:
    0x00054a9e cmp sl, r3                                        |     
                                                                 |     if (sl != r3) {
    0x00054aa0 bne.w 0x548d2                                     |         goto label_24;
                                                                 |     }
    0x00054aa4 b 0x54872                                         |     goto label_25;
    0x00054aa6 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00054aa8 mov r1, sl                                        |     r1 = sl;
    0x00054aaa ldr r2, [pc, 0x164]                               |     
    0x00054aac movs r0, 0x20                                     |     r0 = 0x20;
    0x00054aae ldr.w ip, [r3, 0x10]                              |     ip = *((r3 + 0x10));
    0x00054ab2 add r2, pc                                        |     r2 = 0xa96c8;
    0x00054ab4 ldr.w r3, [ip, 0x18]                              |     r3 = *((ip + 0x18));
    0x00054ab8 ldrsh.w ip, [ip]                                  |     ip = *(ip);
    0x00054abc str.w ip, [sp]                                    |     __asm ("str.w ip, [sp]");
    0x00054ac0 blx 0x6658                                        |     fcn_00006658 ();
    0x00054ac4 ldr r3, [r4, 0x7c]                                |     r3 = *((r4 + 0x7c));
    0x00054ac6 b 0x548cc                                         |     goto label_22;
    0x00054ac8 ldr r2, [pc, 0x148]                               |     
    0x00054aca mov r1, sl                                        |     r1 = sl;
    0x00054acc movs r0, 0x20                                     |     r0 = 0x20;
    0x00054ace add r2, pc                                        |     r2 = 0xa96e6;
    0x00054ad0 blx 0x6658                                        |     fcn_00006658 ();
    0x00054ad4 ldr r3, [r4, 0x7c]                                |     r3 = *((r4 + 0x7c));
    0x00054ad6 b 0x548cc                                         |     goto label_22;
    0x00054ad8 ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00054ada mov r1, sl                                        |     r1 = sl;
    0x00054adc ldr r2, [pc, 0x138]                               |     
    0x00054ade movs r0, 0x20                                     |     r0 = 0x20;
    0x00054ae0 ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x00054ae2 add r2, pc                                        |     r2 = 0xa96fe;
    0x00054ae4 ldr r3, [r3]                                      |     r3 = *(r3);
    0x00054ae6 blx 0x6658                                        |     fcn_00006658 ();
    0x00054aea ldr r3, [r4, 0x7c]                                |     r3 = *((r4 + 0x7c));
    0x00054aec b 0x548cc                                         |     goto label_22;
    0x00054aee ldr r2, [pc, 0x12c]                               |     
    0x00054af0 mov r1, sl                                        |     r1 = sl;
    0x00054af2 movs r0, 0x20                                     |     r0 = 0x20;
    0x00054af4 add r2, pc                                        |     r2 = 0xa9716;
    0x00054af6 blx 0x6658                                        |     fcn_00006658 ();
    0x00054afa ldr r3, [r4, 0x7c]                                |     r3 = *((r4 + 0x7c));
    0x00054afc b 0x548cc                                         |     goto label_22;
    0x00054afe ldr r3, [sp, 0x14]                                |     r3 = var_14h;
    0x00054b00 mov r1, sl                                        |     r1 = sl;
    0x00054b02 ldr r2, [pc, 0x11c]                               |     
    0x00054b04 movs r0, 0x20                                     |     r0 = 0x20;
    0x00054b06 ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x00054b08 add r2, pc                                        |     r2 = 0xa972e;
    0x00054b0a blx 0x6658                                        |     fcn_00006658 ();
    0x00054b0e ldr r3, [r4, 0x7c]                                |     r3 = *((r4 + 0x7c));
    0x00054b10 b 0x548cc                                         |     goto label_22;
                                                                 | label_70:
    0x00054b12 cmp.w sl, 0                                       |     
                                                                 |     if (sl != 0) {
    0x00054b16 bne.w 0x54858                                     |         goto label_26;
                                                                 |     }
    0x00054b1a b 0x54872                                         |     goto label_25;
                                                                 | label_74:
    0x00054b1c ldr r5, [sp, 0x24]                                |     r5 = var_24h;
    0x00054b1e movs r1, 0x69                                     |     r1 = 0x69;
    0x00054b20 b 0x54a06                                         |     goto label_27;
                                                                 | label_75:
    0x00054b22 mov r2, r6                                        |     r2 = r6;
    0x00054b24 mov r4, r5                                        |     r4 = r5;
    0x00054b26 b 0x54a34                                         |     goto label_28;
                                                                 | label_65:
    0x00054b28 mov r0, r3                                        |     r0 = r3;
    0x00054b2a b 0x5473e                                         |     goto label_29;
                                                                 | label_62:
    0x00054b2c mov ip, sl                                        |     
    0x00054b2e b 0x543dc                                         |     goto label_13;
                                                                 | label_77:
    0x00054b30 ldr r3, [pc, 0xf0]                                |     
    0x00054b32 ldrd sb, r5, [sp, 0x30]                           |     __asm ("ldrd sb, r5, [var_30h]");
    0x00054b36 ldrd r4, r8, [sp, 0x38]                           |     __asm ("ldrd r4, r8, [var_38h]");
    0x00054b3a add r3, pc                                        |     r3 = 0xa9762;
    0x00054b3c ldrd r6, fp, [sp, 0x40]                           |     __asm ("ldrd r6, fp, [var_40h]");
    0x00054b40 ldr r0, [r3]                                      |     r0 = *(0xa9762);
    0x00054b42 str.w r0, [ip]                                    |     __asm ("str.w r0, [ip]");
    0x00054b46 b 0x54a86                                         |     goto label_30;
                                                                 | label_71:
    0x00054b48 lsls r1, r3, 0x1d                                 |     r1 = r3 << 0x1d;
                                                                 |     if (r1 < r3) {
    0x00054b4a bmi 0x54b6a                                       |         goto label_78;
                                                                 |     }
    0x00054b4c lsls r7, r3, 0x1c                                 |     r7 = r3 << 0x1c;
                                                                 |     if (r7 < r3) {
    0x00054b4e bmi 0x54b92                                       |         goto label_79;
                                                                 |     }
    0x00054b50 lsls r0, r3, 0x1f                                 |     r0 = r3 << 0x1f;
                                                                 |     if (r0 < r3) {
    0x00054b52 bmi 0x54baa                                       |         goto label_80;
                                                                 |     }
    0x00054b54 ldr r3, [pc, 0xd0]                                |     
    0x00054b56 add r3, pc                                        |     r3 = 0xa9782;
    0x00054b58 cmp sl, r3                                        |     
                                                                 |     if (sl == r3) {
    0x00054b5a beq.w 0x5485e                                     |         goto label_31;
                                                                 |     }
                                                                 | label_68:
    0x00054b5e mov sl, r3                                        |     sl = r3;
    0x00054b60 b 0x548d2                                         |     goto label_24;
                                                                 | label_67:
    0x00054b62 strb.w r3, [sl]                                   |     *(sl) = r3;
    0x00054b66 ldr r3, [r4, 0x7c]                                |     r3 = *((r4 + 0x7c));
    0x00054b68 b 0x54a9e                                         |     goto label_32;
                                                                 | label_78:
    0x00054b6a ldrd r2, r3, [r2, 0x10]                           |     __asm ("ldrd r2, r3, [r2, 0x10]");
    0x00054b6e mov r1, sl                                        |     r1 = sl;
    0x00054b70 movs r0, 0x20                                     |     r0 = 0x20;
    0x00054b72 strd r2, r3, [sp]                                 |     __asm ("strd r2, r3, [sp]");
    0x00054b76 ldr r2, [pc, 0xb4]                                |     
    0x00054b78 add r2, pc                                        |     r2 = 0xa97aa;
    0x00054b7a blx 0x6658                                        |     fcn_00006658 ();
    0x00054b7e ldr r3, [r4, 0x7c]                                |     r3 = *((r4 + 0x7c));
    0x00054b80 b 0x548cc                                         |     goto label_22;
                                                                 | label_72:
    0x00054b82 mov ip, sl                                        |     
    0x00054b84 mov r0, sl                                        |     r0 = sl;
    0x00054b86 movs r1, 1                                        |     r1 = 1;
    0x00054b88 b 0x549be                                         |     goto label_33;
                                                                 | label_73:
    0x00054b8a mov r0, r3                                        |     r0 = r3;
    0x00054b8c mov ip, sl                                        |     
    0x00054b8e movs r1, 1                                        |     r1 = 1;
    0x00054b90 b 0x549be                                         |     goto label_33;
                                                                 | label_79:
    0x00054b92 ldrd r2, r3, [r2, 8]                              |     __asm ("ldrd r2, r3, [r2, 8]");
    0x00054b96 mov r1, sl                                        |     r1 = sl;
    0x00054b98 movs r0, 0x20                                     |     r0 = 0x20;
    0x00054b9a strd r2, r3, [sp]                                 |     __asm ("strd r2, r3, [sp]");
    0x00054b9e ldr r2, [pc, 0x90]                                |     
    0x00054ba0 add r2, pc                                        |     r2 = 0xa97d6;
    0x00054ba2 blx 0x6658                                        |     fcn_00006658 ();
    0x00054ba6 ldr r3, [r4, 0x7c]                                |     r3 = *((r4 + 0x7c));
    0x00054ba8 b 0x548cc                                         |     goto label_22;
                                                                 | label_80:
    0x00054baa ldr r2, [pc, 0x88]                                |     
    0x00054bac mov r1, sl                                        |     r1 = sl;
    0x00054bae movs r0, 0x20                                     |     r0 = 0x20;
    0x00054bb0 add r2, pc                                        |     r2 = 0xa97ea;
    0x00054bb2 blx 0x6658                                        |     fcn_00006658 ();
    0x00054bb6 ldr r3, [r4, 0x7c]                                |     r3 = *((r4 + 0x7c));
    0x00054bb8 b 0x548cc                                         |     goto label_22;
                                                                 | label_45:
    0x00054bba blx 0x6498                                        |     fcn_00006498 ();
                                                                 | label_42:
    0x00054bbe movw r3, 0xc0a                                    |     r3 = 0xc0a;
    0x00054bc2 subs r2, r4, r3                                   |     r2 = r4 - r3;
    0x00054bc4 rsbs r3, r2, 0                                    |     r3 = r2 - ;
    0x00054bc6 adcs r3, r2                                       |     __asm ("adcs r3, r2");
    0x00054bc8 b 0x54562                                         |     goto label_19;
                                                                 | }
    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libsqlcipher.so.0.8.6 @ 0x156b8 */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) sym.sqlite3_stmt_status ()           | void sqlite3_stmt_status (int16_t arg1, int16_t arg2) {
                                                 |     r0 = arg1;
                                                 |     r1 = arg2;
    0x000156b8 add.w r1, r0, r1, lsl 2           |     r1 = r0 + (r1 << 2);
    0x000156bc ldr r0, [r1, 0x6c]                |     r0 = *((r1 + 0x6c));
                                                 |     if (r2 != 0) {
    0x000156be cbz r2, 0x156c4                   |         
    0x000156c0 movs r3, 0                        |         r3 = 0;
    0x000156c2 str r3, [r1, 0x6c]                |         *((r1 + 0x6c)) = r3;
                                                 |     }
    0x000156c4 bx lr                             |     return;
                                                 | }

[*] Function mmap used 1 times libsqlcipher.so.0.8.6